FallFestival2014.pwn 46 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424
  1. #include <a_samp>
  2. #undef MAX_PLAYERS
  3. #define MAX_PLAYERS (700)
  4. #include <sscanf2>
  5. #include <streamer>
  6. #include <zcmd>
  7. //new musicarea;
  8. new festivalarea;
  9. new mazearea;
  10. new piratearea;
  11. new startcount = 3;
  12. enum posenum
  13. {
  14. Float:posx,
  15. Float:posy,
  16. Float:posz,
  17. Float:rot
  18. }
  19. //Maze
  20. new
  21. Text3D:mazetext,
  22. mazecount = 0;
  23. //Pirate
  24. new Text3D:piratetext;
  25. new pirateship[2],
  26. Float:PirateShipOrigin[2][4] =
  27. {
  28. {1384.0331, -142.1840, 57.1300, 40.0},
  29. {1390.5167, -136.2200, 42.7034, -50.0}
  30. },
  31. piratestep[8],
  32. Float:piratejoin[4] = {1376.6722,-128.7566,26.4127,214.9392},
  33. Float:pirateexit[4] = {1374.6167,-129.0237,26.4127,36.3936};
  34. new pirateshipspawn[51][posenum] = {
  35. {1368.3156,-157.4080,41.0},
  36. {1367.7076,-156.7162,41.0},
  37. {1367.0004,-156.1516,41.0},
  38. {1366.5372,-155.3416,41.0},
  39. {1365.8599,-154.7898,41.0},
  40. {1366.0726,-153.8185,38.8073},
  41. {1366.2477,-154.5297,41.0},
  42. {1367.1639,-154.9416,38.8022},
  43. {1367.8494,-155.9007,38.8022},
  44. {1368.4381,-156.6313,38.8022},
  45. {1369.5812,-156.3377,38.8022},
  46. {1368.9663,-155.7623,38.8022},
  47. {1368.2111,-155.2064,38.8022},
  48. {1367.6128,-154.4204,38.8022},
  49. {1367.3668,-153.4461,38.8073},
  50. {1367.3884,-152.7107,38.8073},
  51. {1367.9076,-153.5258,38.8073},
  52. {1368.6387,-154.1646,38.8073},
  53. {1368.9137,-154.4801,38.8022},
  54. {1369.2083,-155.1617,38.8022},
  55. {1369.8506,-155.7930,38.8022},
  56. {1370.7736,-155.3378,38.8022},
  57. {1370.1151,-154.5368,38.8022},
  58. {1369.4979,-153.6514,38.8073},
  59. {1368.9086,-152.8132,38.8073},
  60. {1368.1691,-152.1746,38.8073},
  61. {1368.9674,-151.5208,38.8073},
  62. {1369.5686,-152.4011,38.8073},
  63. {1370.4342,-153.3024,38.8073},
  64. {1370.8665,-154.1247,38.8073},
  65. {1371.5293,-154.6986,38.8022},
  66. {1372.0619,-154.2571,38.8022},
  67. {1371.7343,-153.4149,38.8073},
  68. {1371.2455,-152.7113,38.8073},
  69. {1370.9978,-151.9384,38.8022},
  70. {1370.1422,-151.6086,38.8073},
  71. {1369.8403,-150.7298,38.8073},
  72. {1377.4641,-149.3647,38.8073},
  73. {1377.2501,-148.4664,38.8073},
  74. {1376.4216,-147.5100,38.8073},
  75. {1375.4967,-147.0543,38.8073},
  76. {1375.6320,-145.8949,37.7709},
  77. {1376.4155,-146.4493,37.7709},
  78. {1376.9457,-147.3245,37.7709},
  79. {1377.2776,-148.1663,38.8073},
  80. {1378.1124,-148.4439,37.7709},
  81. {1378.6742,-148.0090,37.7709},
  82. {1378.3854,-147.0647,37.7709},
  83. {1377.7249,-146.2822,37.7709},
  84. {1377.0049,-145.7251,37.7709},
  85. {1376.3148,-145.1906,37.7709}
  86. };
  87. //Pirate
  88. new Float:gFerrisOrigin[4] = {1449.5245, -35.6684, 40.5702, 220.0};
  89. new gFerrisWheel, gFerrisBase;
  90. new gFerrisCages[10];
  91. new Float:gCurrentTargetYAngle = 0.0;
  92. new gWheelTransAlternate = 0;
  93. enum krace
  94. {
  95. count,//Racer Count
  96. status,// 0 = Waiting for more players | 1 = Starting | 2 = Active/In Progress
  97. starting,//Countdown for race to start
  98. left,//Time left till race ends
  99. place//Used to determine place within race.
  100. }
  101. new oTower[5],
  102. oTowerobjs[8],
  103. Text3D:oTowerText,
  104. oTowerInfo[2][krace];
  105. new dTower[2],
  106. Text3D:dTowerText,
  107. Float:dTowerJoin[4] = {1420.0839, -79.6418, 26.4147, 40.2862},
  108. Float:dTowerExit[4] = {1421.8177, -78.2212, 26.4147, 212.9111},
  109. Float:dTowerOrigin[2][4] =
  110. {
  111. {1413.34216, -76.74107, 27.49859, 40.0},
  112. {1419.97156, -71.32480, 27.49860, 40.0}
  113. },
  114. dTowerInfo[2][krace];
  115. //Kart
  116. new Text3D:karttext;
  117. new kartraceinfo[krace];
  118. new Float:gKartOrigin[3] = {1550.7883, 17.4276, 24.1364};
  119. new kartspawns[34][posenum] = {
  120. {1564.00964355,17.07140732,23.49634361,190.00000000},
  121. {1561.82348633,16.54862213,23.49634361,190.00000000},
  122. {1559.88293457,15.93473053,23.49634361,189.99755859},
  123. {1557.90283203,15.30996132,23.49634361,189.99755859},
  124. {1555.62036133,14.53450584,23.49634361,189.99755859},
  125. {1564.2979,19.8998,23.4477,192.3600},
  126. {1562.3704,19.3897,23.4478,192.7268},
  127. {1560.6278,19.0925,23.4476,195.8536},
  128. {1558.5475,18.3385,23.4480,192.6586},
  129. {1556.8177,18.3449,23.4465,193.2574},
  130. {1554.8568,17.8215,23.4380,193.6009},
  131. {1553.8881,21.1286,23.4269,193.5916},
  132. {1555.5220,21.0739,23.4345,190.0444},
  133. {1556.8367,22.0668,23.4380,188.4365},
  134. {1558.2001,23.5059,23.4429,190.4256},
  135. {1559.6775,24.1726,23.4476,184.8009},
  136. {1561.3840,24.0859,23.4478,187.2630},
  137. {1562.7532,25.0298,23.4478,180.4760},
  138. {1562.5829,27.7668,23.4478,191.7696},
  139. {1560.8351,26.3097,23.4477,199.6867},
  140. {1558.8903,26.1727,23.4481,192.8379},
  141. {1557.2906,27.3436,23.4350,198.5173},
  142. {1557.4248,27.2700,23.4438,202.0928},
  143. {1555.8507,25.5446,23.4348,187.7344},
  144. {1553.8242,25.1185,23.4291,188.0691},
  145. {1551.3418,24.6591,23.4239,195.6346},
  146. {1550.6317,27.2813,23.4237,194.9919},
  147. {1552.1284,28.1989,23.4274,192.2468},
  148. {1554.1768,28.7966,23.4343,192.7393},
  149. {1555.8494,28.9580,23.4385,188.9234},
  150. {1557.7314,29.7238,23.4478,194.9809},
  151. {1559.2167,30.2656,23.4477,195.7509},
  152. {1561.0835,30.4947,23.4479,203.4948},
  153. {1563.6442,31.1704,23.4479,175.8033}
  154. };
  155. new kartcheckpoints[22][posenum] = {
  156. {1561.1425,-0.6959,22.2056},
  157. {1560.0236,-63.4405,20.2049},
  158. {1541.8403,-161.8614,15.2990},
  159. {1448.9148,-211.3230,8.8160},
  160. {1367.7023,-211.0382,6.6549},
  161. {1302.9319,-181.8514,23.0594},
  162. {1261.6588,-151.0969,37.4276},
  163. {1219.6796,-106.5497,39.0666},
  164. {1164.2017,-70.1262,29.1771},
  165. {1067.8438,-63.6197,20.4266},
  166. {968.9000,-86.8389,19.0257},
  167. {889.7670,-88.6949,23.1655},
  168. {829.8240,-106.7988,24.3264},
  169. {771.7855,-137.4116,20.1231},
  170. {722.7872,-174.7025,20.1587},
  171. {649.4225,-196.4490,10.9428},
  172. {586.3651,-200.5624,12.3490},
  173. {529.7865,-209.4404,15.3095},
  174. {486.7947,-250.3996,10.1345},
  175. {435.4356,-297.3609,5.9730},
  176. {379.3389,-319.6147,12.8056},
  177. {314.3939,-365.6910,8.8709}
  178. };
  179. //Kart
  180. //Bumper
  181. new bumpercars;
  182. new Float:gBumperOrigin[3] = {1493.4615,-33.9362,27.5266},
  183. Float:gBumperExit[4] = {1495.0763,-32.5579,27.5244,305.1577};
  184. new bumperspawns[10][posenum] = {
  185. {1509.0797,-64.9944,26.9080,329.6529},
  186. {1516.2323,-55.0962,26.9271,345.0430},
  187. {1520.049682, -41.101760, 27.553333,13.7316},
  188. {1508.8268,-29.9964,26.9196,123.8321},
  189. {1503.8162,-37.9906,26.9408,171.2591},
  190. {1497.4014,-48.4876,26.9138,76.2519},
  191. {1492.9607,-40.7950,26.9149,269.7835},
  192. {1505.6836,-32.8667,26.9330,275.1056},
  193. {1515.4636,-35.6011,26.9223,196.8903},
  194. {1514.7443,-48.7944,26.9353,136.1681}
  195. };
  196. //Bumper
  197. new balloon[2],
  198. BalloonInfo[2][krace],
  199. Float:BalloonOrigin[2][4] =
  200. {
  201. {1488.7391, 2.3967, 25.3880, 310.5066},
  202. {1504.3217, -17.2454, 25.2946, 40.3796}
  203. },
  204. Float:bCoor[2][3][3] =
  205. {
  206. {
  207. {1488.8054,3.1436,26.5342},
  208. {1489.4617,2.3942,26.5342},
  209. {1488.2523,2.0228,26.5342}
  210. },
  211. {
  212. {1504.1639,-16.4742,26.4408},
  213. {1505.0876,-17.3473,26.4408},
  214. {1503.9115,-17.5536,26.4408}
  215. }
  216. },
  217. Float:move_balloon[][3] =
  218. {
  219. {1554.0,8.0,100.0},
  220. {1574.0,-40.0,115.0},
  221. {1569.0,-94.0,115.0},
  222. {1558.0,-134.0,115.0},
  223. {1501.0,-195.0,115.0},
  224. {1457.0,-208.0,115.0},
  225. {1402.0,-208.0,115.0},
  226. {1360.0,-169.0,115.0},
  227. {1340.0,-129.0,115.0},
  228. {1342.0,-84.0,115.0},
  229. {1356.0,-52.0,115.0},
  230. {1397.0,-18.0,100.0},
  231. {1431.0,9.0,75.0},
  232. {1463.0,14.0,60.0}
  233. },
  234. bActive;
  235. new Float:festival_vertices[] =
  236. {
  237. 1589.0,118.0,
  238. 1596.0,-6.0,
  239. 1577.0,-52.0,
  240. 1573.0,-127.0,
  241. 1529.0,-180.0,
  242. 1514.0,-202.0,
  243. 1460.0,-220.0,
  244. 1384.0,-222.0,
  245. 1299.0,-94.0,
  246. 1421.0,20.0,
  247. 1504.0,85.0,
  248. 1551.0,108.0,
  249. 1589.0,118.0
  250. };
  251. public OnFilterScriptInit()
  252. {
  253. //musicarea = CreateDynamicSphere(592.84, -2085, 0, 330.0);
  254. festivalarea = CreateDynamicPolygon(festival_vertices, .worldid = 0);
  255. mazearea = CreateDynamicRectangle(1567, 1260, 1311, 1508, .worldid = 333);
  256. piratearea = CreateDynamicRectangle(1323.112670, -183.252929, 1448.739501, -90.425178);
  257. SetTimer("KartUpdateGlobal", 1000, true);
  258. CreateDynamic3DTextLabel("{FFFF00}Type {FF0000}/bumpercars {FFFF00}to join in!", 0xFFFFFFF, gBumperOrigin[0], gBumperOrigin[1], gBumperOrigin[2], 10.0);
  259. CreateDynamic3DTextLabel("{FFFF00}Type {FF0000}/balloon {FFFF00}to join in!\nCost: 5 credits", 0xFFFFFFF, 1488.9030, -15.1005, 26.3947, 10.0);
  260. karttext = CreateDynamic3DTextLabel("{FFFF00}Type {FF0000}/joinkart {FFFF00}to join in!", 0xFFFFFFF, gKartOrigin[0], gKartOrigin[1], gKartOrigin[2], 15.0);
  261. dTowerText = CreateDynamic3DTextLabel("{FFFF00}Type {FF0000}/jointower {FFFF00}to join in!", 0xFFFFFFF, dTowerJoin[0], dTowerJoin[1], dTowerJoin[2], 15.0);
  262. oTowerText = CreateDynamic3DTextLabel("{FFFF00}Type {FF0000}/otower {FFFF00}to join in!", 0xFFFFFFF, 1525.3893,-83.8848,23.2147, 15.0);
  263. piratetext = CreateDynamic3DTextLabel("", 0xFFFFFFF, piratejoin[0], piratejoin[1], piratejoin[2], 15.0);
  264. mazetext = CreateDynamic3DTextLabel("", 0xFFFFFFF, 1380.188598, -75.701736, 31.074687, 15.0);
  265. new Float:gFerrisCageOffsets[10][3] = {
  266. {0.0699, 0.0600, -11.7500},
  267. {-6.9100, -0.0899, -9.5000},
  268. {11.1600, 0.0000, -3.6300},
  269. {-11.1600, -0.0399, 3.6499},
  270. {-6.9100, -0.0899, 9.4799},
  271. {0.0699, 0.0600, 11.7500},
  272. {6.9599, 0.0100, -9.5000},
  273. {-11.1600, -0.0399, -3.6300},
  274. {11.1600, 0.0000, 3.6499},
  275. {7.0399, -0.0200, 9.3600}
  276. };
  277. gFerrisWheel = CreateObject(18877, gFerrisOrigin[0], gFerrisOrigin[1], gFerrisOrigin[2], 0.0, 0.0, gFerrisOrigin[3], 300.0);
  278. gFerrisBase = CreateObject(18878, gFerrisOrigin[0], gFerrisOrigin[1], gFerrisOrigin[2], 0.0, 0.0, gFerrisOrigin[3], 300.0);
  279. for(new x;x<10;x++)
  280. {
  281. gFerrisCages[x] = CreateObject(19316, gFerrisOrigin[0], gFerrisOrigin[1], gFerrisOrigin[2], 0.0, 0.0, gFerrisOrigin[3], 300.0);
  282. AttachObjectToObject(gFerrisCages[x], gFerrisWheel, gFerrisCageOffsets[x][0], gFerrisCageOffsets[x][1], gFerrisCageOffsets[x][2], 0.0, 0.0, gFerrisOrigin[3], 0);
  283. }
  284. SetTimer("RotateWheel",3*1000,0);
  285. dTower[0] = CreateObject(19075, dTowerOrigin[0][0], dTowerOrigin[0][1], dTowerOrigin[0][2], 0.00000, 0.00000, dTowerOrigin[0][3]);
  286. dTower[1] = CreateObject(19075, dTowerOrigin[1][0], dTowerOrigin[1][1], dTowerOrigin[1][2], 0.00000, 0.00000, dTowerOrigin[1][3]);
  287. pirateship[0] = CreateObject(3502, PirateShipOrigin[0][0], PirateShipOrigin[0][1], PirateShipOrigin[0][2], 0.00, 0.00, PirateShipOrigin[0][3]);
  288. pirateship[1] = CreateObject(8493, PirateShipOrigin[1][0], PirateShipOrigin[1][1], PirateShipOrigin[1][2], 0.00, 0.00, PirateShipOrigin[1][3]);
  289. AttachObjectToObject(pirateship[1], pirateship[0], 9.33, 0.0, -8.07, 0.0, 0.0, 270.0);
  290. new Float:oTowerCoor[8][4] =
  291. {
  292. {1532.60547, -74.62054, 25.76330, 70.00000},
  293. {1536.41064, -74.45510, 25.76330, 115.00000},
  294. {1539.18335, -71.73110, 25.76330, 154.00000},
  295. {1539.45105, -67.91582, 25.76330, 18.00000},
  296. {1537.02881, -64.92320, 25.76330, 60.00000},
  297. {1533.22607, -64.31990, 25.76330, 102.00000},
  298. {1529.99792, -66.41510, 25.76330, 144.00000},
  299. {1529.00085, -70.13410, 25.76330, 6.00000}
  300. };
  301. oTower[0] = CreateObject(19278, 1534.34131, -69.60560, -20.48360, 0.0, 0.0, 0.0, 300.0);
  302. oTower[1] = CreateObject(19278, 1534.34131, -69.60560, -26.92160, 0.0, 0.0, 0.0, 300.0);
  303. AttachObjectToObject(oTower[1], oTower[0], 1534.34131-1534.34131, -69.60560-(-69.60560), -26.92160-(-20.48360), 0.0, 0.0, 0.0, 0);
  304. oTower[2] = CreateObject(19278, 1534.34131, -69.60560, -23.61560, 0.0, 0.0, 0.0, 300.0);
  305. AttachObjectToObject(oTower[2], oTower[0], 1534.34131-1534.34131, -69.60560-(-69.60560), -23.61560-(-20.48360), 0.0, 0.0, 0.0, 0);
  306. oTower[3] = CreateObject(970, 1530.04, -72.88, 26.50, 0.00, 0.00, -53.00);
  307. AttachObjectToObject(oTower[3], oTower[0], 1530.04-1534.34131, -72.88-(-69.60560), 26.50-(-20.48360), 0.0, 0.0, -53.0, 0);
  308. oTower[4] = CreateObject(970, 1530.04, -72.88, 23.19, 0.00, 0.00, -53.00);
  309. AttachObjectToObject(oTower[4], oTower[0], 1530.04-1534.34131, -72.88-(-69.60560), 23.19-(-20.48360), 0.0, 0.0, -53.0, 0);
  310. for(new x;x<8;x++)
  311. {
  312. oTowerobjs[x] = CreateObject(19325, oTowerCoor[x][0], oTowerCoor[x][1], oTowerCoor[x][2], 90.0, 0.0, oTowerCoor[x][3], 300.0);
  313. AttachObjectToObject(oTowerobjs[x], oTower[0], oTowerCoor[x][0]-1534.34131, oTowerCoor[x][1]-(-69.60560), oTowerCoor[x][2]-(-20.48360), 90.0, oTowerCoor[x][3], 0.0, 0);
  314. }
  315. balloon[0] = CreateObject(19335, BalloonOrigin[0][0], BalloonOrigin[0][1], BalloonOrigin[0][2], 0.0, 0.0, BalloonOrigin[0][3]);
  316. balloon[1] = CreateObject(19336, BalloonOrigin[1][0], BalloonOrigin[1][1], BalloonOrigin[1][2], 0.0, 0.0, BalloonOrigin[0][3]);
  317. CreateDynamicPickup(1239, 23, 1468.1566,-76.7717,23.2247);
  318. CreateDynamic3DTextLabel("Corn Dogs\n/corndog", 0xFFFF00AA, 1468.1566,-76.7717,23.2247+0.6, 10.0);
  319. CreateDynamicPickup(1239, 23, 1477.4579,-70.6260,23.2188);
  320. CreateDynamic3DTextLabel("Pizza\n/pizza", 0xFFFF00AA, 1477.4579,-70.6260,23.2188+0.6, 10.0);
  321. CreateDynamicPickup(1239, 23, 1465.0697,-86.3609,23.2247);
  322. CreateDynamic3DTextLabel("Fried Dough\n/frieddough", 0xFFFF00AA, 1465.0697,-86.3609,23.2247+0.6, 10.0);
  323. //Maze Exit Point
  324. CreateDynamicPickup(1318, 23, 1473.045898+0.1, 1429.182617+0.1, 11.050000, .worldid = 333);
  325. CreateDynamic3DTextLabel("Maze Exit Point\n{FF0000}/exitmaze", 0xFFFF00AA, 1473.045898+0.06, 1429.182617+0.06, 11.050000+0.8, 10.0, .worldid = 333);
  326. }
  327. public OnFilterScriptExit()
  328. {
  329. for(new i; i < MAX_PLAYERS; i++)
  330. {
  331. if(!IsPlayerConnected(i)) continue;
  332. if(GetPVarType(i, "pBumperCar"))
  333. {
  334. LeaveBumper(i);
  335. }
  336. if(GetPVarType(i, "pKartCar"))
  337. {
  338. LeaveKart(i);
  339. }
  340. if(GetPVarType(i, "pTower"))
  341. {
  342. LeaveTower(i);
  343. }
  344. if(GetPVarType(i, "oTower"))
  345. {
  346. LeaveOTower(i);
  347. }
  348. if(GetPVarType(i, "pPirate"))
  349. {
  350. LeavePirateShip(i);
  351. }
  352. if(GetPVarType(i, "pBalloon"))
  353. {
  354. LeaveBalloon(i);
  355. }
  356. }
  357. DestroyObject(gFerrisWheel);
  358. DestroyObject(gFerrisBase);
  359. for(new x;x<10;x++)
  360. {
  361. DestroyObject(gFerrisCages[x]);
  362. }
  363. DestroyObject(dTower[0]);
  364. DestroyObject(dTower[1]);
  365. DestroyObject(pirateship[0]);
  366. DestroyObject(pirateship[1]);
  367. DestroyObject(oTower[0]);
  368. DestroyObject(oTower[1]);
  369. DestroyObject(oTower[2]);
  370. DestroyObject(oTower[3]);
  371. DestroyObject(oTower[4]);
  372. for(new x;x<8;x++)
  373. {
  374. DestroyObject(oTowerobjs[x]);
  375. }
  376. DestroyObject(balloon[0]);
  377. DestroyObject(balloon[1]);
  378. }
  379. public OnPlayerDisconnect(playerid, reason)
  380. {
  381. if(GetPVarType(playerid, "pBumperCar"))
  382. {
  383. LeaveBumper(playerid);
  384. }
  385. if(GetPVarType(playerid, "pKartCar"))
  386. {
  387. LeaveKart(playerid);
  388. }
  389. if(GetPVarType(playerid, "pTower"))
  390. {
  391. LeaveTower(playerid);
  392. }
  393. if(GetPVarType(playerid, "oTower"))
  394. {
  395. LeaveOTower(playerid);
  396. }
  397. if(GetPVarType(playerid, "pPirate"))
  398. {
  399. LeavePirateShip(playerid);
  400. }
  401. if(GetPVarType(playerid, "pBalloon"))
  402. {
  403. LeaveBalloon(playerid);
  404. }
  405. return 1;
  406. }
  407. public OnPlayerEnterDynamicArea(playerid, areaid)
  408. {
  409. /*if(areaid == musicarea)
  410. {
  411. StopAudioStreamForPlayer(playerid);
  412. PlayAudioStreamForPlayer(playerid, "http://shoutcast.ng-gaming.net:8000/listen.pls?sid=1", 1431, -74, 0, 400, 1);
  413. }*/
  414. if(areaid == festivalarea || areaid == mazearea)
  415. {
  416. ResetPlayerWeapons(playerid);
  417. if(IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
  418. {
  419. SetVehicleToRespawn(GetPlayerVehicleID(playerid));
  420. }
  421. }
  422. return 1;
  423. }
  424. public OnPlayerLeaveDynamicArea(playerid, areaid)
  425. {
  426. /*if(areaid == musicarea)
  427. {
  428. StopAudioStreamForPlayer(playerid);
  429. }*/
  430. if(areaid == festivalarea || areaid == mazearea) CallRemoteFunction("SetPlayerWeapons", "i", playerid);
  431. if(areaid == piratearea && GetPVarType(playerid, "pPirate")) LeavePirateShip(playerid);
  432. return 1;
  433. }
  434. public OnPlayerEnterCheckpoint(playerid)
  435. {
  436. if(GetPVarType(playerid, "pKartCar"))
  437. {
  438. new checkpoint = GetPVarInt(playerid, "pKartCheckpoint"), string[128];
  439. if(!IsPlayerInRangeOfPoint(playerid, 10.0, kartcheckpoints[checkpoint][posx], kartcheckpoints[checkpoint][posy], kartcheckpoints[checkpoint][posz])) return 1;
  440. if(checkpoint == (sizeof(kartcheckpoints)-1))
  441. {
  442. SetPlayerCheckpoint(playerid, kartcheckpoints[0][posx], kartcheckpoints[0][posy], kartcheckpoints[0][posz], 5.0);
  443. SetPVarInt(playerid, "pKartCheckpoint", 0);
  444. SetPVarInt(playerid, "pKartLap", 4);
  445. if(GetPVarInt(playerid, "pKartLap") == 3) GameTextForPlayer(playerid, "~r~Final Lap!", 1100, 3);
  446. if(GetPVarInt(playerid, "pKartLap") == 4)
  447. {
  448. kartraceinfo[place]++;
  449. if(kartraceinfo[place] > 3)
  450. {
  451. format(string, sizeof(string), "You came in %dth place, better luck next time!", kartraceinfo[place]);
  452. SendClientMessage(playerid, -1, string);
  453. }
  454. if(kartraceinfo[place] < 4)
  455. {
  456. for(new x; x < MAX_PLAYERS; x++)
  457. {
  458. if(IsPlayerConnected(x) && (GetPVarInt(x, "pKartCar") || IsPlayerInRangeOfPoint(x, 15.0, gKartOrigin[0], gKartOrigin[1], gKartOrigin[2])))
  459. {
  460. format(string, sizeof(string), "** [KARTRACE] %s has come in", GetPlayerNameEx(playerid), kartraceinfo[place]);
  461. if(kartraceinfo[place] == 1) strcat(string, " 1st place!");
  462. if(kartraceinfo[place] == 2) strcat(string, " 2nd place!");
  463. if(kartraceinfo[place] == 3) strcat(string, " 3rd place!");
  464. SendClientMessage(x, -1, string);
  465. }
  466. }
  467. }
  468. //SetPVarInt(playerid, "kartCooldown", gettime()+60);
  469. LeaveKart(playerid);
  470. }
  471. }
  472. else
  473. {
  474. PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0);
  475. checkpoint++;
  476. SetPVarInt(playerid, "pKartCheckpoint", checkpoint);
  477. DisablePlayerCheckpoint(playerid);
  478. SetPlayerCheckpoint(playerid, kartcheckpoints[checkpoint][posx], kartcheckpoints[checkpoint][posy], kartcheckpoints[checkpoint][posz], 5.0);
  479. }
  480. }
  481. return 1;
  482. }
  483. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) if(IsPlayerInDynamicArea(playerid, festivalarea) || IsPlayerInDynamicArea(playerid, mazearea)) ResetPlayerWeapons(playerid);
  484. public OnPlayerStateChange(playerid, newstate, oldstate)
  485. {
  486. if(newstate == PLAYER_STATE_DRIVER)
  487. {
  488. if(GetPVarType(playerid, "pBumperCar") || GetPVarType(playerid, "pKartCar"))
  489. {
  490. SetPVarInt(playerid, "TeleportWarnings", -1);
  491. }
  492. }
  493. if(newstate == PLAYER_STATE_ONFOOT)
  494. {
  495. if(GetPVarType(playerid, "pBumperCar"))
  496. {
  497. LeaveBumper(playerid);
  498. }
  499. if(GetPVarType(playerid, "pKartCar"))
  500. {
  501. LeaveKart(playerid);
  502. }
  503. }
  504. return 1;
  505. }
  506. CMD:balloon(playerid, params[])
  507. {
  508. if(GetPVarType(playerid, "pBalloon")) return LeaveBalloon(playerid);
  509. if(!IsPlayerInRangeOfPoint(playerid, 10.0, 1488.9030,-15.1005,26.394)) return SendClientMessage(playerid, -1, "You are not near the Balloon Ride area!");
  510. if(CallRemoteFunction("cmd_@@balloon@@", "is", playerid, params) == 0) return 1;
  511. if(BalloonInfo[0][status] != 2 && BalloonInfo[0][count] <= 5)
  512. {
  513. SetPVarInt(playerid, "pBalloon", 0);
  514. SetPlayerPos(playerid, bCoor[0][BalloonInfo[0][count]][0], bCoor[0][BalloonInfo[0][count]][1], bCoor[0][BalloonInfo[0][count]][2]);
  515. BalloonInfo[0][count]++;
  516. }
  517. else if(BalloonInfo[1][status] != 2 && BalloonInfo[1][count] <= 5)
  518. {
  519. SetPVarInt(playerid, "pBalloon", 1);
  520. SetPlayerPos(playerid, bCoor[1][BalloonInfo[1][count]][0], bCoor[1][BalloonInfo[1][count]][1], bCoor[1][BalloonInfo[0][count]][2]);
  521. BalloonInfo[1][count]++;
  522. }
  523. else return SendClientMessage(playerid, -1, "Balloon Rides are currently full, please try again later!");
  524. new Float:HP;
  525. GetPlayerHealth(playerid, HP);
  526. SetPVarFloat(playerid, "pOldHealth", HP);
  527. SetPlayerHealth(playerid, 1000.0);
  528. new bRide = GetPVarInt(playerid, "pBalloon");
  529. if(BalloonInfo[bRide][status] == 0)
  530. {
  531. if(!bActive) BalloonInfo[bRide][status] = 1, BalloonInfo[bRide][starting] = 30, bActive = 1, SetTimerEx("StartBalloon", 1000, false, "d", bRide);
  532. else BalloonInfo[bRide][status] = 3, SendClientMessage(playerid, -1, "There is currently a active balloon, this ride will begin once the other is done.");
  533. }
  534. SendClientMessage(playerid, -1, "Please stay inside the balloon or you and your ticket will be removed.");
  535. return 1;
  536. }
  537. LeaveBalloon(playerid)
  538. {
  539. if(GetPVarType(playerid, "pBalloon"))
  540. {
  541. new bRide = GetPVarInt(playerid, "pBalloon");
  542. DeletePVar(playerid, "pBalloon");
  543. if(BalloonInfo[bRide][count] > 0) BalloonInfo[bRide][count]--;
  544. SetPlayerPos(playerid, 1490.7323+random(2),-17.8974,26.3888);
  545. SetPlayerHealth(playerid, GetPVarFloat(playerid, "pOldHealth"));
  546. DeletePVar(playerid, "pOldHealth");
  547. SendClientMessage(playerid, 0xFFFFFFFF, "Thanks for riding!");
  548. }
  549. return 1;
  550. }
  551. forward StartBalloon(bRide);
  552. public StartBalloon(bRide)
  553. {
  554. if(--BalloonInfo[bRide][starting] == 0)
  555. {
  556. BalloonInfo[bRide][status] = 2;
  557. BalloonInfo[bRide][place] = 0;
  558. MoveObject(balloon[bRide], move_balloon[BalloonInfo[bRide][place]][0], move_balloon[BalloonInfo[bRide][place]][1], move_balloon[BalloonInfo[bRide][place]][2], 5);
  559. for(new x; x < MAX_PLAYERS; x++)
  560. {
  561. if(IsPlayerConnected(x) && GetPVarType(x, "pBalloon") && GetPVarInt(x, "pBalloon") == bRide)
  562. {
  563. CallRemoteFunction("RemoveTicket", "d", x);
  564. }
  565. }
  566. }
  567. else
  568. {
  569. new string[69];
  570. format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~r~Balloon Ride~n~starting in %d seconds", BalloonInfo[bRide][starting]);
  571. for(new x; x < MAX_PLAYERS; x++)
  572. {
  573. if(IsPlayerConnected(x) && GetPVarType(x, "pBalloon") && GetPVarInt(x, "pBalloon") == bRide)
  574. {
  575. if(BalloonInfo[bRide][starting] <= 3)
  576. {
  577. PlayerPlaySound(x, 1056, 0.0, 0.0, 0.0);
  578. }
  579. GameTextForPlayer(x, string, 1100, 3);
  580. }
  581. }
  582. if(BalloonInfo[bRide][count]) SetTimerEx("StartBalloon", 1000, false, "d", bRide);
  583. else
  584. {
  585. BalloonInfo[bRide][place] = 0, BalloonInfo[bRide][status] = 0, bActive = 0;
  586. if(BalloonInfo[0][status] == 3) BalloonInfo[0][status] = 1, BalloonInfo[0][starting] = 30, bActive = 1, SetTimerEx("StartBalloon", 1000, false, "d", 0);
  587. if(BalloonInfo[1][status] == 3) BalloonInfo[1][status] = 1, BalloonInfo[1][starting] = 30, bActive = 1, SetTimerEx("StartBalloon", 1000, false, "d", 1);
  588. }
  589. }
  590. }
  591. //Towers
  592. new Float:otowercoor[5][2] =
  593. {
  594. {1531.2751,-72.3726},
  595. {1536.2238,-72.3415},
  596. {1536.7957,-67.4150},
  597. {1532.5234,-66.6518},
  598. {1530.5852,-69.1646}
  599. };
  600. CMD:otower(playerid, params[])
  601. {
  602. if(GetPVarType(playerid, "oTower")) return LeaveOTower(playerid);
  603. if(!IsPlayerInRangeOfPoint(playerid, 10.0, 1525.3893,-83.8848,23.2147)) return SendClientMessage(playerid, 0xFFFFFFFF, "You are not near the Observation Tower area!");
  604. if(oTowerInfo[0][status] != 2 && oTowerInfo[0][count] <= 5)
  605. {
  606. SetPVarInt(playerid, "oTower", 0);
  607. SetPlayerPos(playerid, otowercoor[oTowerInfo[0][count]][0], otowercoor[oTowerInfo[0][count]][1], 23.6487);
  608. oTowerInfo[0][count]++;
  609. }
  610. else if(oTowerInfo[0][status] != 2 && oTowerInfo[1][count] <= 5)
  611. {
  612. SetPVarInt(playerid, "oTower", 1);
  613. SetPlayerPos(playerid, otowercoor[oTowerInfo[0][count]][0], otowercoor[oTowerInfo[0][count]][1], 26.9547);
  614. oTowerInfo[1][count]++;
  615. }
  616. else return SendClientMessage(playerid, -1, "The Observation Tower is either full or in progress, please try again later!");
  617. if(oTowerInfo[0][status] == 0) oTowerInfo[0][status] = 1, oTowerInfo[0][starting] = 30, SetTimer("StartOTower", 1000, false);
  618. UpdateTowerLabels();
  619. return 1;
  620. }
  621. LeaveMaze(playerid)
  622. {
  623. if(GetPVarInt(playerid, "pMaze"))
  624. {
  625. DeletePVar(playerid, "pMaze");
  626. mazecount--;
  627. }
  628. SetPlayerPos(playerid, 1389.463012, -81.734130, 31.068840);
  629. SetPlayerFacingAngle(playerid, 311.76);
  630. SetPlayerVirtualWorld(playerid, 0);
  631. SetPlayerInterior(playerid, 0);
  632. CallRemoteFunction("Player_StreamPrep", "ifffi", playerid, 1389.463012, -81.734130, 31.068840, 2000);
  633. if(GetPVarInt(playerid, "pOldHealth"))
  634. {
  635. SetPlayerHealth(playerid, GetPVarFloat(playerid, "pOldHealth"));
  636. DeletePVar(playerid, "pOldHealth");
  637. }
  638. }
  639. CMD:exitmaze(playerid, params[])
  640. {
  641. if(GetPVarInt(playerid, "pMaze"))
  642. {
  643. return cmd_joinmaze(playerid, params);
  644. }
  645. else if(IsPlayerInRangeOfPoint(playerid, 10, 1473.045898, 1429.182617, 11.050000) || IsPlayerInRangeOfPoint(playerid, 10, 1546.592828, 1261.259155, 11.069601))
  646. {
  647. LeaveMaze(playerid);
  648. return 1;
  649. }
  650. else
  651. {
  652. SendClientMessage(playerid, 0xFFFFFFFF, "You are not inside of the Maze!");
  653. }
  654. return 1;
  655. }
  656. CMD:joinmaze(playerid, params[])
  657. {
  658. if(!GetPVarType(playerid, "pMaze"))
  659. {
  660. if(IsPlayerInRangeOfPoint(playerid, 10.0, 1380.188598, -75.701736, 31.074687))
  661. {
  662. SetPVarInt(playerid, "pMaze", 1);
  663. new Float:HP; GetPlayerHealth(playerid, HP);
  664. SetPVarFloat(playerid, "pOldHealth", HP);
  665. SetPlayerVirtualWorld(playerid, 333);
  666. SetPlayerInterior(playerid, 1);
  667. SetPlayerPos(playerid, 1546.592828, 1261.259155, 11.069601);
  668. SetPlayerHealth(playerid, 1000.0);
  669. SetPlayerFacingAngle(playerid, 0.39);
  670. CallRemoteFunction("Player_StreamPrep", "ifffi", playerid, 1546.592828, 1261.259155, 11.069601, 2000);
  671. SendClientMessage(playerid, 0xFFFFFFFF, "If you get lost type /exitmaze to leave, There may be a mystical giftbox hidden at the end of the maze.");
  672. mazecount++;
  673. }
  674. else
  675. {
  676. SendClientMessage(playerid, 0xFFFFFFFF, "You are not at the Maze entrance");
  677. }
  678. }
  679. else
  680. {
  681. LeaveMaze(playerid);
  682. }
  683. return 1;
  684. }
  685. stock UpdateMazeLabel()
  686. {
  687. new string[256];
  688. format(string, sizeof(string), "{FFFF00}Type {FF0000}/joinmaze {FFFF00}to join in!\nParticipants: {FF0000}%d", mazecount);
  689. UpdateDynamic3DTextLabelText(mazetext, 0xFFFFFFFF, string);
  690. }
  691. forward StartOTower();
  692. public StartOTower()
  693. {
  694. if(--oTowerInfo[0][starting] == 0)
  695. {
  696. oTowerInfo[0][status] = 2;
  697. MoveObject(oTower[0], 1534.34131, -69.60560, 78.8610, 2);
  698. oTowerInfo[0][place] = 0;
  699. }
  700. else
  701. {
  702. new string[75];
  703. format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~r~Observation Tower~n~starting in %d seconds", oTowerInfo[0][starting]);
  704. for(new x; x < MAX_PLAYERS; x++)
  705. {
  706. if(IsPlayerConnected(x) && GetPVarType(x, "oTower"))
  707. {
  708. if(oTowerInfo[0][starting] <= 3)
  709. {
  710. PlayerPlaySound(x, 1056, 0.0, 0.0, 0.0);
  711. }
  712. GameTextForPlayer(x, string, 1100, 3);
  713. }
  714. }
  715. if(oTowerInfo[0][count] || oTowerInfo[1][count]) SetTimer("StartOTower", 1000, false);
  716. else oTowerInfo[0][place] = 0, oTowerInfo[0][status] = 0;
  717. }
  718. }
  719. forward MoveOTower();
  720. public MoveOTower()
  721. {
  722. if(oTowerInfo[0][place] == 1)
  723. {
  724. if(--oTowerInfo[0][starting] == 0)
  725. {
  726. MoveObject(oTower[0], 1534.34131, -69.60560, -20.48360, 2);
  727. oTowerInfo[0][place] = 0;
  728. oTowerInfo[0][status] = 0;
  729. }
  730. else SetTimer("MoveOTower", 1*1000, false);
  731. return 1;
  732. }
  733. return 1;
  734. }
  735. LeaveOTower(playerid)
  736. {
  737. if(GetPVarType(playerid, "oTower"))
  738. {
  739. new tower = GetPVarInt(playerid, "oTower");
  740. DeletePVar(playerid, "oTower");
  741. if(oTowerInfo[tower][count] > 0) oTowerInfo[tower][count]--;
  742. SetPlayerPos(playerid, 1520.7633+random(2),-74.5014,23.2147);
  743. UpdateTowerLabels();
  744. SendClientMessage(playerid, 0xFFFFFFFF, "Thanks for riding!");
  745. }
  746. return 1;
  747. }
  748. CMD:jointower(playerid, params[])
  749. {
  750. if(GetPVarType(playerid, "pTower")) return LeaveTower(playerid);
  751. if(!IsPlayerInRangeOfPoint(playerid, 10.0, dTowerJoin[0], dTowerJoin[1], dTowerJoin[2])) return SendClientMessage(playerid, 0xFFFFFFFF, "You are not near the Drop Tower area!");
  752. if(dTowerInfo[0][status] != 2 && dTowerInfo[0][count] <= 5)
  753. {
  754. SetPVarInt(playerid, "pTower", 0);
  755. SetPlayerPos(playerid, 1413.2607+Random(1, 4),-76.6478,27.0455);
  756. dTowerInfo[0][count]++;
  757. if(dTowerInfo[0][status] == 0) dTowerInfo[0][status] = 1, dTowerInfo[0][starting] = 30, SetTimerEx("StartTower", 1000, false, "i", 0);
  758. }
  759. else if(dTowerInfo[1][status] != 2 && dTowerInfo[1][count] <= 5)
  760. {
  761. SetPVarInt(playerid, "pTower", 1);
  762. SetPlayerPos(playerid, 1419.8135+Random(1, 4),-71.2771,27.0455);
  763. dTowerInfo[1][count]++;
  764. if(dTowerInfo[1][status] == 0) dTowerInfo[1][status] = 1, dTowerInfo[1][starting] = 30, SetTimerEx("StartTower", 1000, false, "i", 1);
  765. }
  766. else return SendClientMessage(playerid, -1, "The Drop Towers are full, please try again later!");
  767. new Float:HP;
  768. GetPlayerHealth(playerid, HP);
  769. SetPVarFloat(playerid, "pOldHealth", HP);
  770. SetPlayerHealth(playerid, 1000.0);
  771. UpdateTowerLabels();
  772. return 1;
  773. }
  774. forward StartTower(tower);
  775. public StartTower(tower)
  776. {
  777. if(--dTowerInfo[tower][starting] == 0)
  778. {
  779. dTowerInfo[tower][status] = 2;
  780. MoveObject(dTower[tower], dTowerOrigin[tower][0], dTowerOrigin[tower][1], 126.9711, 3);
  781. dTowerInfo[tower][place] = 0;
  782. }
  783. else
  784. {
  785. new string[66];
  786. format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~r~Drop Tower~n~starting in %d seconds", dTowerInfo[tower][starting]);
  787. for(new x; x < MAX_PLAYERS; x++)
  788. {
  789. if(IsPlayerConnected(x) && GetPVarType(x, "pTower") && GetPVarInt(x, "pTower") == tower)
  790. {
  791. if(dTowerInfo[tower][starting] <= 3)
  792. {
  793. PlayerPlaySound(x, 1056, 0.0, 0.0, 0.0);
  794. }
  795. GameTextForPlayer(x, string, 1100, 3);
  796. }
  797. }
  798. if(dTowerInfo[tower][count]) SetTimerEx("StartTower", 1000, false, "i", tower);
  799. else dTowerInfo[tower][place] = 0, dTowerInfo[tower][status] = 0;
  800. }
  801. }
  802. forward MoveTower(tower);
  803. public MoveTower(tower)
  804. {
  805. if(dTowerInfo[tower][place] == 0)
  806. {
  807. if(--dTowerInfo[tower][starting] == 0)
  808. {
  809. MoveObject(dTower[tower], dTowerOrigin[tower][0], dTowerOrigin[tower][1], 35.8, 30);
  810. dTowerInfo[tower][place] = 1;
  811. for(new x; x < MAX_PLAYERS; x++)
  812. {
  813. if(IsPlayerConnected(x) && GetPVarType(x, "pTower") && GetPVarInt(x, "pTower") == tower) GameTextForPlayer(x, "~n~~n~~n~~n~~n~~n~~n~~n~~n~~g~GO!", 2000, 3);
  814. }
  815. }
  816. else SetTimerEx("MoveTower", 1*1000, false, "i", tower);
  817. return 1;
  818. }
  819. if(dTowerInfo[tower][place] == 1)
  820. {
  821. MoveObject(dTower[tower], dTowerOrigin[tower][0], dTowerOrigin[tower][1], dTowerOrigin[tower][2], 5);
  822. dTowerInfo[tower][place] = 0;
  823. dTowerInfo[tower][status] = 0;
  824. return 1;
  825. }
  826. return 1;
  827. }
  828. LeaveTower(playerid)
  829. {
  830. if(GetPVarType(playerid, "pTower"))
  831. {
  832. new tower = GetPVarInt(playerid, "pTower");
  833. DeletePVar(playerid, "pTower");
  834. if(dTowerInfo[tower][count] > 0) dTowerInfo[tower][count]--;
  835. SetPlayerPos(playerid, dTowerExit[0]+random(5), dTowerExit[1], dTowerExit[2]);
  836. SetPlayerFacingAngle(playerid, dTowerExit[3]);
  837. UpdateTowerLabels();
  838. SetPlayerHealth(playerid, GetPVarFloat(playerid, "pOldHealth"));
  839. DeletePVar(playerid, "pOldHealth");
  840. SendClientMessage(playerid, 0xFFFFFFFF, "Thanks for riding!");
  841. }
  842. return 1;
  843. }
  844. forward RemovePlayersFromRide(ride, slot);
  845. public RemovePlayersFromRide(ride, slot)
  846. {
  847. for(new x; x < MAX_PLAYERS; x++)
  848. {
  849. if(IsPlayerConnected(x))
  850. {
  851. if(ride == 0 && GetPVarType(x, "pTower") && GetPVarInt(x, "pTower") == slot) LeaveTower(x);
  852. if(ride == 1 && GetPVarType(x, "oTower")) LeaveOTower(x);
  853. if(ride == 2 && GetPVarType(x, "pBalloon") && GetPVarInt(x, "pBalloon") == slot) LeaveBalloon(x);
  854. }
  855. }
  856. return 1;
  857. }
  858. stock UpdateTowerLabels()
  859. {
  860. new string[256];
  861. format(string, sizeof(string), "{FFFF00}Type {FF0000}/jointower {FFFF00}to join in!\n\
  862. Participants\n\
  863. Tower 1: %d\nTower 2: %d", dTowerInfo[0][count], dTowerInfo[1][count]);
  864. UpdateDynamic3DTextLabelText(dTowerText, 0xFFFFFFFF, string);
  865. format(string, sizeof(string), "{FFFF00}Type {FF0000}/otower {FFFF00}to join in!\n\
  866. Participants\n\
  867. Upper Deck: %d\nLower Deck: %d", oTowerInfo[0][count], oTowerInfo[1][count]);
  868. UpdateDynamic3DTextLabelText(oTowerText, 0xFFFFFFFF, string);
  869. }
  870. //Towers
  871. //Bumper
  872. CMD:bumpercars(playerid, params[])
  873. {
  874. if(GetPVarType(playerid, "pBumperCar")) return LeaveBumper(playerid);
  875. if(!IsPlayerInRangeOfPoint(playerid, 10.0, gBumperOrigin[0], gBumperOrigin[1], gBumperOrigin[2])) return SendClientMessage(playerid, 0xFFFFFFFF, "You are not near the bumper cars area!");
  876. if(bumpercars > 15) return SendClientMessage(playerid, 0xFFFFFFFF, "The arena is full, please wait your turn!");
  877. new rand=random(sizeof(bumperspawns));
  878. SetPVarInt(playerid, "pBumperCar", CreateVehicle(539, bumperspawns[rand][posx], bumperspawns[rand][posy], bumperspawns[rand][posz], bumperspawns[rand][rot], random(10), random(10), 15));
  879. new veh = GetPVarInt(playerid, "pBumperCar");
  880. new engine,lights,alarm,doors,bonnet,boot,objective;
  881. GetVehicleParamsEx(veh,engine,lights,alarm,doors,bonnet,boot,objective);
  882. SetVehicleParamsEx(veh,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
  883. PutPlayerInVehicle(playerid, veh, 0);
  884. SetPVarInt(playerid, "pBumperTimer", SetTimerEx("BumperCars", 1000, false, "i", playerid));
  885. bumpercars++;
  886. SetTimerEx("KartUpdate", 1000, false, "i", playerid);
  887. SendClientMessage(playerid, 0xFFFFFFFF, "Type /bumpercars again to stop playing!");
  888. return 1;
  889. }
  890. forward BumperCars(playerid);
  891. public BumperCars(playerid)
  892. {
  893. new Float:hp;
  894. GetVehicleHealth(GetPVarInt(playerid, "pBumperCar"), hp);
  895. if(hp < 500)
  896. {
  897. new veh = GetPVarInt(playerid, "pBumperCar");
  898. if(GetVehicleModel(veh)) DestroyVehicle(veh);
  899. DeletePVar(playerid, "pBumperCar");
  900. DeletePVar(playerid, "pBumperTimer");
  901. SetPlayerPos(playerid, gBumperExit[0], gBumperExit[1], gBumperExit[2]);
  902. SetPlayerFacingAngle(playerid, gBumperExit[3]);
  903. SendClientMessage(playerid, 0xFFFFFFFF, "Too damaged to continue, thanks for playing!");
  904. if(bumpercars > 0) bumpercars--;
  905. }
  906. else
  907. {
  908. SetPVarInt(playerid, "pBumperTimer", SetTimerEx("BumperCars", 1000, false, "i", playerid));
  909. }
  910. }
  911. LeaveBumper(playerid)
  912. {
  913. if(GetPVarType(playerid, "pBumperCar"))
  914. {
  915. new veh = GetPVarInt(playerid, "pBumperCar");
  916. if(GetVehicleModel(veh)) DestroyVehicle(veh);
  917. DeletePVar(playerid, "pBumperCar");
  918. KillTimer(GetPVarInt(playerid, "pBumperTimer"));
  919. DeletePVar(playerid, "pBumperTimer");
  920. if(bumpercars > 0) bumpercars--;
  921. //CallRemoteFunction("Player_StreamPrep", "ifffi", playerid, gBumperOrigin[0], gBumperOrigin[1], gBumperOrigin[2], 2000);
  922. SetPlayerPos(playerid, gBumperExit[0], gBumperExit[1], gBumperExit[2]);
  923. SetPlayerFacingAngle(playerid, gBumperExit[3]);
  924. SendClientMessage(playerid, 0xFFFFFFFF, "Thanks for playing!");
  925. ResetPlayerWeapons(playerid);
  926. }
  927. return 1;
  928. }
  929. //Bumper
  930. //Kart
  931. CMD:startcount(playerid, params[])
  932. {
  933. if(!(GetPVarInt(playerid, "aLvl") >= 1337 || IsPlayerAdmin(playerid))) return 1;
  934. new countt, string[22];
  935. if(sscanf(params, "d", countt)) return SendClientMessage(playerid, -1, "USAGE: /startcount [count]");
  936. startcount = countt;
  937. format(string, sizeof(string), "Kart Count set to: %d", startcount);
  938. SendClientMessage(playerid, -1, string);
  939. return 1;
  940. }
  941. CMD:joinkart(playerid, params[])
  942. {
  943. if(GetPVarType(playerid, "pKartCar")) return LeaveKart(playerid);
  944. if(!IsPlayerInRangeOfPoint(playerid, 10.0, gKartOrigin[0], gKartOrigin[1], gKartOrigin[2])) return SendClientMessage(playerid, 0xFFFFFFFF, "You are not near the Kart entrance!");
  945. if(kartraceinfo[status] == 2) return SendClientMessage(playerid, 0xFFFFFFFF, "The race has already started");
  946. if(kartraceinfo[count] == 20) return SendClientMessage(playerid, 0xFFFFFFFF, "The race is full, try again next time!");
  947. if(gettime() < GetPVarInt(playerid, "kartCooldown"))
  948. {
  949. new str[53];
  950. format(str, sizeof(str), "Please wait %d seconds before joining another race!", GetPVarInt(playerid, "kartCooldown")-gettime());
  951. return SendClientMessage(playerid, -1, str);
  952. }
  953. new engine,lights,alarm,doors,bonnet,boot,objective;
  954. SetPVarInt(playerid, "pKartCar", CreateVehicle(571, kartspawns[kartraceinfo[count]][posx], kartspawns[kartraceinfo[count]][posy], kartspawns[kartraceinfo[count]][posz], kartspawns[kartraceinfo[count]][rot], random(10), random(10), 15));
  955. new veh = GetPVarInt(playerid, "pKartCar");
  956. GetVehicleParamsEx(veh,engine,lights,alarm,doors,bonnet,boot,objective);
  957. SetVehicleParamsEx(veh,VEHICLE_PARAMS_ON,lights,alarm,VEHICLE_PARAMS_ON,bonnet,boot,objective);
  958. //LinkVehicleToInterior(veh, 7);
  959. SetVehicleVirtualWorld(veh, 7);
  960. SetPVarInt(playerid, "pSkin", GetPlayerSkin(playerid));
  961. SetPlayerSkin(playerid, 22);
  962. SetPlayerVirtualWorld(playerid, 7);
  963. //SetPlayerInterior(playerid, 7);
  964. PutPlayerInVehicle(playerid, veh, 0);
  965. TogglePlayerControllable(playerid, 0);
  966. SetTimerEx("KartUpdate", 1000, false, "i", playerid);
  967. kartraceinfo[count]++;
  968. UpdateKartLabel();
  969. SendClientMessage(playerid, 0xFFFFFFFF, "Type /joinkart again to leave the race");
  970. return 1;
  971. }
  972. LeaveKart(playerid)
  973. {
  974. if(GetPVarType(playerid, "pKartCar"))
  975. {
  976. new veh = GetPVarInt(playerid, "pKartCar");
  977. if(GetVehicleModel(veh)) DestroyVehicle(veh);
  978. DeletePVar(playerid, "pKartCar");
  979. DeletePVar(playerid, "pKartCheckpoint");
  980. DeletePVar(playerid, "pKartLap");
  981. //CallRemoteFunction("Player_StreamPrep", "ifffi", playerid, gKartOrigin[0], gKartOrigin[1], gKartOrigin[2]+3, 2500);
  982. SetPlayerPos(playerid, gKartOrigin[0], gKartOrigin[1], gKartOrigin[2]);
  983. if(kartraceinfo[count] > 0) kartraceinfo[count]--;
  984. UpdateKartLabel();
  985. TogglePlayerControllable(playerid, 1);
  986. DisablePlayerCheckpoint(playerid);
  987. SetPlayerInterior(playerid, 0);
  988. SetPlayerVirtualWorld(playerid, 0);
  989. SetPlayerSkin(playerid, GetPVarInt(playerid, "pSkin"));
  990. DeletePVar(playerid, "pSkin");
  991. SendClientMessage(playerid, 0xFFFFFFFF, "Thanks for playing!");
  992. ResetPlayerWeapons(playerid);
  993. }
  994. return 1;
  995. }
  996. stock UpdateKartLabel()
  997. {
  998. new string[256];
  999. if(kartraceinfo[status] == 2) format(string, sizeof(string), "{FFFF00}Race in progress!\nRacers: {FF0000}%d\nTime left: %d seconds", kartraceinfo[count], kartraceinfo[left]-gettime());
  1000. else format(string, sizeof(string), "{FFFF00}Type {FF0000}/joinkart {FFFF00}to join in!\nRacers: {FF0000}%d", kartraceinfo[count]);
  1001. UpdateDynamic3DTextLabelText(karttext, 0xFFFFFFFF, string);
  1002. }
  1003. forward KartUpdate(playerid);
  1004. public KartUpdate(playerid)
  1005. {
  1006. if(GetPVarType(playerid, "pKartCar"))
  1007. {
  1008. if(kartraceinfo[status] == 0)
  1009. {
  1010. GameTextForPlayer(playerid, "~n~~n~~n~~n~~n~~n~~n~~n~~n~~r~Waiting for more racers..", 1100, 3);
  1011. }
  1012. else if(kartraceinfo[status] == 1)
  1013. {
  1014. new string[64];
  1015. format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~~r~Race starting in %d seconds", kartraceinfo[starting]);
  1016. if(kartraceinfo[starting] <= 3)
  1017. {
  1018. PlayerPlaySound(playerid, 1056, 0.0, 0.0, 0.0);
  1019. }
  1020. GameTextForPlayer(playerid, string, 1100, 3);
  1021. }
  1022. else if(kartraceinfo[status] == 2)
  1023. {
  1024. new engine,lights,alarm,doors,bonnet,boot,objective;
  1025. new veh=GetPVarInt(playerid, "pKartCar");
  1026. GetVehicleParamsEx(veh,engine,lights,alarm,doors,bonnet,boot,objective);
  1027. if(engine != VEHICLE_PARAMS_ON) SetVehicleParamsEx(veh,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
  1028. }
  1029. SetTimerEx("KartUpdate", 1000, false, "i", playerid);
  1030. }
  1031. if(GetPVarType(playerid, "pBumperCar"))
  1032. {
  1033. new engine,lights,alarm,doors,bonnet,boot,objective;
  1034. new veh=GetPVarInt(playerid, "pKartCar");
  1035. GetVehicleParamsEx(veh,engine,lights,alarm,doors,bonnet,boot,objective);
  1036. if(engine != VEHICLE_PARAMS_ON) SetVehicleParamsEx(veh,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
  1037. SetTimerEx("KartUpdate", 1000, false, "i", playerid);
  1038. }
  1039. }
  1040. forward KartUpdateGlobal();
  1041. public KartUpdateGlobal()
  1042. {
  1043. UpdateMazeLabel();
  1044. UpdatePirateLabel();
  1045. if(piratestep[5] == 0 && piratestep[6] > 0 && (piratestep[7]-gettime()) <= 0)
  1046. {
  1047. piratestep[5] = 1;
  1048. SetTimer("MovePirateShip", 1000, false);
  1049. }
  1050. if(kartraceinfo[status] == 1)
  1051. {
  1052. if(--kartraceinfo[starting] <= 0)
  1053. {
  1054. kartraceinfo[status] = 2;
  1055. kartraceinfo[left] = gettime()+240;
  1056. for(new x; x < MAX_PLAYERS; x++)
  1057. {
  1058. if(IsPlayerConnected(x) && GetPVarType(x, "pKartCar"))
  1059. {
  1060. new engine,lights,alarm,doors,bonnet,boot,objective;
  1061. new veh=GetPVarInt(x, "pKartCar");
  1062. GetVehicleParamsEx(veh,engine,lights,alarm,doors,bonnet,boot,objective);
  1063. SetVehicleParamsEx(veh,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
  1064. GameTextForPlayer(x, "~n~~n~~n~~n~~n~~n~~n~~n~~n~~g~GO!", 2000, 3);
  1065. PlayerPlaySound(x, 1057, 0.0, 0.0, 0.0);
  1066. SetPlayerCheckpoint(x, kartcheckpoints[0][posx], kartcheckpoints[0][posy], kartcheckpoints[0][posz], 5.0);
  1067. SetPVarInt(x, "pKartCheckpoint", 0);
  1068. TogglePlayerControllable(x, 1);
  1069. }
  1070. }
  1071. }
  1072. return 1;
  1073. }
  1074. else if(kartraceinfo[status] == 2)
  1075. {
  1076. if(kartraceinfo[left]-gettime() <= 0 || kartraceinfo[count] == 0)
  1077. {
  1078. for(new i; i < sizeof(kartraceinfo); i++)
  1079. {
  1080. kartraceinfo[krace:i] = 0;
  1081. }
  1082. UpdateKartLabel();
  1083. for(new x; x < MAX_PLAYERS; x++)
  1084. {
  1085. if(IsPlayerConnected(x) && GetPVarType(x, "pKartCar"))
  1086. {
  1087. LeaveKart(x);
  1088. }
  1089. }
  1090. }
  1091. else
  1092. {
  1093. UpdateKartLabel();
  1094. }
  1095. }
  1096. if(kartraceinfo[count] >= startcount && kartraceinfo[status] == 0)
  1097. {
  1098. kartraceinfo[status] = 1;
  1099. kartraceinfo[starting] = 15;
  1100. return 1;
  1101. }
  1102. if(kartraceinfo[count] < 1 && kartraceinfo[status] == 1)
  1103. {
  1104. kartraceinfo[status] = 0;
  1105. return 1;
  1106. }
  1107. for(new i; i < MAX_PLAYERS; i++)
  1108. {
  1109. if(IsPlayerConnected(i) && GetPVarType(i, "pBumperCar"))
  1110. {
  1111. new engine,lights,alarm,doors,bonnet,boot,objective;
  1112. new veh=GetPVarInt(i, "pBumperCar");
  1113. GetVehicleParamsEx(veh,engine,lights,alarm,doors,bonnet,boot,objective);
  1114. SetVehicleParamsEx(veh,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
  1115. }
  1116. }
  1117. return 1;
  1118. }
  1119. //Kart
  1120. //Pirate
  1121. CMD:pirateshipreset(playerid, params[])
  1122. {
  1123. if(IsPlayerAdmin(playerid) || GetPVarInt(playerid, "aLvl") > 1337)
  1124. {
  1125. if(IsObjectMoving(pirateship[0])) StopObject(pirateship[0]);
  1126. MoveObject(pirateship[0], PirateShipOrigin[0][0], PirateShipOrigin[0][1], PirateShipOrigin[0][2], 0.1, 0.0, 0.0, 40.0);
  1127. piratestep[3] = 2;
  1128. }
  1129. return 1;
  1130. }
  1131. CMD:pirateship(playerid, params[])
  1132. {
  1133. if(!GetPVarType(playerid, "pPirate"))
  1134. {
  1135. if(IsPlayerInRangeOfPoint(playerid, 10.0, piratejoin[0], piratejoin[1], piratejoin[2]))
  1136. {
  1137. if(piratestep[5] == 0)
  1138. {
  1139. if(piratestep[6] < 51)
  1140. {
  1141. if(piratestep[6] == 0)
  1142. {
  1143. piratestep[7] = gettime()+30;
  1144. }
  1145. SetPVarInt(playerid, "pPirate", 1);
  1146. new Float:HP; GetPlayerHealth(playerid, HP);
  1147. SetPVarFloat(playerid, "pOldHealth", HP);
  1148. SetPlayerPos(playerid, pirateshipspawn[piratestep[6]][posx], pirateshipspawn[piratestep[6]][posy], pirateshipspawn[piratestep[6]][posz]);
  1149. SetPlayerHealth(playerid, 1000.0);
  1150. SetPlayerFacingAngle(playerid, pirateshipspawn[piratestep[6]][rot]);
  1151. piratestep[6]++;
  1152. SendClientMessage(playerid, 0xFFFFFFFF, "Type /pirateship again to leave the ship, if you don't move you won't fall");
  1153. }
  1154. else
  1155. {
  1156. SendClientMessage(playerid, 0xFFFFFFFF, "The race is full, try again next time!");
  1157. }
  1158. }
  1159. else
  1160. {
  1161. SendClientMessage(playerid, 0xFFFFFFFF, "The ride has already started");
  1162. }
  1163. }
  1164. else
  1165. {
  1166. SendClientMessage(playerid, 0xFFFFFFFF, "You are not at the ride entrance");
  1167. }
  1168. }
  1169. else
  1170. {
  1171. LeavePirateShip(playerid);
  1172. }
  1173. return 1;
  1174. }
  1175. LeavePirateShip(playerid)
  1176. {
  1177. DeletePVar(playerid, "pPirate");
  1178. if(piratestep[6] > 0) piratestep[6]--;
  1179. SetPlayerPos(playerid, pirateexit[0], pirateexit[1], pirateexit[2]);
  1180. SetPlayerHealth(playerid, GetPVarFloat(playerid, "pOldHealth"));
  1181. DeletePVar(playerid, "pOldHealth");
  1182. }
  1183. stock UpdatePirateLabel()
  1184. {
  1185. new string[256];
  1186. if(piratestep[6] == 0 && piratestep[5] == 0) format(string, sizeof(string), "{FFFF00}Type {FF0000}/pirateship {FFFF00}to join in!\nWaiting for at least 1 participant");
  1187. else
  1188. {
  1189. if(piratestep[5] == 1) format(string, sizeof(string), "{FFFF00}Ride in progress!\nParticipants: {FF0000}%d", piratestep[6]);
  1190. else format(string, sizeof(string), "{FFFF00}Type {FF0000}/pirateship {FFFF00}to join in!\nParticipants: {FF0000}%d\nRide Starts: %d", piratestep[6], piratestep[7]-gettime());
  1191. }
  1192. UpdateDynamic3DTextLabelText(piratetext, 0xFFFFFFFF, string);
  1193. }
  1194. forward MovePirateShip();
  1195. public MovePirateShip()
  1196. {
  1197. if(IsObjectMoving(pirateship[0])) StopObject(pirateship[0]);
  1198. new Float:X, Float:Y, Float:Z, Float:RX, Float:RY, Float:RZ;
  1199. GetObjectPos(pirateship[0], X, Y, Z); GetObjectRot(pirateship[0], RX, RY, RZ);
  1200. if(piratestep[2] == 0)
  1201. {
  1202. MoveObject(pirateship[0], X, Y, Z+0.1, 0.1-(piratestep[0]*0.01), 0.0, 0.0-(10.0*piratestep[0]), 40.0);
  1203. piratestep[2] = 1;
  1204. }
  1205. else
  1206. {
  1207. MoveObject(pirateship[0], X, Y, Z-0.1, 0.1-(piratestep[0]*0.01), 0.0, 0.0+(10.0*piratestep[0]), 40.0);
  1208. piratestep[2] = 0;
  1209. }
  1210. if(piratestep[0] >= 6) piratestep[3] = 1;
  1211. if(piratestep[4] == 3)
  1212. {
  1213. if(piratestep[3] == 0) piratestep[0]++;
  1214. else
  1215. {
  1216. if(piratestep[6] > 0) piratestep[0]--;
  1217. }
  1218. piratestep[4] = 0;
  1219. }
  1220. else piratestep[4]++;
  1221. if(piratestep[0] < 0 && piratestep[3] == 1)
  1222. {
  1223. MoveObject(pirateship[0], PirateShipOrigin[0][0], PirateShipOrigin[0][1], PirateShipOrigin[0][2], 0.1, 0.0, 0.0, 40.0);
  1224. piratestep[3] = 2;
  1225. }
  1226. }
  1227. //Pirate
  1228. public OnObjectMoved(objectid)
  1229. {
  1230. if(objectid == gFerrisWheel)
  1231. {
  1232. SetTimer("RotateWheel",3*1000,0);
  1233. }
  1234. if(objectid == balloon[0] || objectid == balloon[1])
  1235. {
  1236. new bRide;
  1237. if(objectid == balloon[1]) bRide = 1;
  1238. if(BalloonInfo[bRide][status] == 0)
  1239. {
  1240. SetTimerEx("RemovePlayersFromRide", 1000, 0, "dd", 2, bRide);
  1241. return 1;
  1242. }
  1243. if(BalloonInfo[bRide][place] == sizeof(move_balloon))
  1244. {
  1245. MoveObject(balloon[bRide], BalloonOrigin[bRide][0], BalloonOrigin[bRide][1], BalloonOrigin[bRide][2], 5);
  1246. BalloonInfo[bRide][status] = 0;
  1247. bActive = 0;
  1248. if(BalloonInfo[0][status] == 3) BalloonInfo[0][status] = 1, BalloonInfo[0][starting] = 30, bActive = 1, SetTimerEx("StartBalloon", 1000, false, "d", 0);
  1249. if(BalloonInfo[1][status] == 3) BalloonInfo[1][status] = 1, BalloonInfo[1][starting] = 30, bActive = 1, SetTimerEx("StartBalloon", 1000, false, "d", 1);
  1250. }
  1251. else MoveObject(balloon[bRide], move_balloon[BalloonInfo[bRide][place]][0], move_balloon[BalloonInfo[bRide][place]][1], move_balloon[BalloonInfo[bRide][place]][2], 7);
  1252. for(new i; i < MAX_PLAYERS; i++)
  1253. {
  1254. if(IsPlayerConnected(i) && GetPVarType(i, "pBalloon") && GetPVarInt(i, "pBalloon") == bRide)
  1255. {
  1256. if(!BalloonInfo[bRide][place])
  1257. {
  1258. if(!IsPlayerInRangeOfPoint(i, 10, move_balloon[BalloonInfo[bRide][place]][0], move_balloon[BalloonInfo[bRide][place]][1], move_balloon[BalloonInfo[bRide][place]][2])) LeaveBalloon(i);
  1259. }
  1260. else
  1261. {
  1262. if(!IsPlayerInRangeOfPoint(i, 10, move_balloon[BalloonInfo[bRide][place]-1][0], move_balloon[BalloonInfo[bRide][place]-1][1], move_balloon[BalloonInfo[bRide][place]-1][2])) LeaveBalloon(i);
  1263. }
  1264. }
  1265. }
  1266. BalloonInfo[bRide][place]++;
  1267. }
  1268. if(objectid == oTower[0])
  1269. {
  1270. if(oTowerInfo[0][status] == 0)
  1271. {
  1272. SetTimerEx("RemovePlayersFromRide", 1000, 0, "dd", 1, 0);
  1273. return 1;
  1274. }
  1275. if(oTowerInfo[0][place] == 0) oTowerInfo[0][place] = 1, oTowerInfo[0][starting] = 10, SetTimer("MoveOTower", 1*1000, false);
  1276. }
  1277. if(objectid == dTower[0] || objectid == dTower[1])
  1278. {
  1279. new bRide;
  1280. if(objectid == dTower[1]) bRide = 1;
  1281. if(dTowerInfo[bRide][status] == 0)
  1282. {
  1283. SetTimerEx("RemovePlayersFromRide", 1000, 0, "dd", 0, bRide);
  1284. return 1;
  1285. }
  1286. if(dTowerInfo[bRide][place] == 0) dTowerInfo[bRide][starting] = 3, SetTimerEx("MoveTower", 3*1000, false, "i", bRide);
  1287. if(dTowerInfo[bRide][place] == 1) MoveTower(bRide);
  1288. }
  1289. if(objectid == pirateship[0])
  1290. {
  1291. if(IsObjectMoving(pirateship[0])) StopObject(pirateship[0]);
  1292. if(piratestep[3] == 2)
  1293. {
  1294. piratestep[6] = 0; piratestep[5] = 0; piratestep[4] = 0; piratestep[3] = 0; piratestep[2] = 0; piratestep[1] = 0;
  1295. for(new i;i<MAX_PLAYERS;i++)
  1296. {
  1297. if(IsPlayerConnected(i) && GetPVarType(i, "pPirate"))
  1298. {
  1299. DeletePVar(i, "pPirate");
  1300. SetPlayerPos(i, pirateexit[0],pirateexit[1],pirateexit[2]);
  1301. SetPlayerFacingAngle(i, pirateexit[3]);
  1302. SetPlayerHealth(i, GetPVarFloat(i, "pOldHealth"));
  1303. DeletePVar(i, "pOldHealth");
  1304. }
  1305. }
  1306. }
  1307. else
  1308. {
  1309. new Float:X, Float:Y, Float:Z, Float:RX, Float:RY, Float:RZ;
  1310. GetObjectPos(pirateship[0], X, Y, Z); GetObjectRot(pirateship[0], RX, RY, RZ);
  1311. if(piratestep[1] == 0)
  1312. {
  1313. if(RY < 0.0) MoveObject(pirateship[0], X, Y, Z+0.1, 0.1, 0.0, RY-3.0, 40.0);
  1314. else MoveObject(pirateship[0], X, Y, Z-0.1, 0.1, 0.0, RY+3.0, 40.0);
  1315. piratestep[1] = 1;
  1316. }
  1317. else
  1318. {
  1319. if(RY < 0.0) MoveObject(pirateship[0], X, Y, Z+0.1, 0.01, 0.0, 0.0, 40.0);
  1320. else MoveObject(pirateship[0], X, Y, Z-0.1, 0.01, 0.0, 0.0, 40.0);
  1321. piratestep[1] = 0;
  1322. SetTimer("MovePirateShip", 1000, false);
  1323. }
  1324. }
  1325. }
  1326. return 1;
  1327. }
  1328. forward RotateWheel();
  1329. public RotateWheel()
  1330. {
  1331. UpdateWheelTarget();
  1332. new Float:fModifyWheelZPos = 0.0;
  1333. if(gWheelTransAlternate) fModifyWheelZPos = 0.05;
  1334. MoveObject(gFerrisWheel, gFerrisOrigin[0], gFerrisOrigin[1], gFerrisOrigin[2]+fModifyWheelZPos, 0.01, 0.0, gCurrentTargetYAngle, gFerrisOrigin[3]);
  1335. }
  1336. stock UpdateWheelTarget()
  1337. {
  1338. gCurrentTargetYAngle += 36.0;
  1339. if(gCurrentTargetYAngle >= 360.0) gCurrentTargetYAngle = 0.0;
  1340. if(gWheelTransAlternate) gWheelTransAlternate = 0; else gWheelTransAlternate = 1;
  1341. }
  1342. stock GetPlayerNameEx(playerid) {
  1343. new
  1344. sz_playerName[MAX_PLAYER_NAME],
  1345. i_pos;
  1346. GetPlayerName(playerid, sz_playerName, MAX_PLAYER_NAME);
  1347. while ((i_pos = strfind(sz_playerName, "_", false, i_pos)) != -1) sz_playerName[i_pos] = ' ';
  1348. return sz_playerName;
  1349. }
  1350. stock Random(min, max)
  1351. {
  1352. new a = random(max - min) + min;
  1353. return a;
  1354. }