Advertisement
Guest User

Everystuff by kaisersouse

a guest
May 9th, 2012
2,846
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 157.35 KB | None | 0 0
  1. #include <a_samp>
  2. #include <Cleverbot>
  3. #include <a_vehicles>
  4. #include <core>
  5. #include <float>
  6. #include <foreach>
  7. //#include xadmin/XtremeAdmin.inc
  8. #define RACES
  9. #define MENUS
  10. #define DM
  11.  
  12. #if defined MENUS
  13. new Menu:CarM, Menu:Car2M, Menu:Car3M,Menu:Car4M;
  14. #endif //menus
  15.  
  16.  
  17. #define VEHI_DIS 5.0
  18. #define MIN_VEHI_ID 400
  19. #define MAX_VEHI_ID 611
  20. // "bad" vehicles
  21. #define vHUNTER 425
  22. #define vRHINO 432
  23. #define vHYDRA 520
  24. #define vSEASPARROW 447
  25. #define vRCPLANE 464 // rcbaron
  26. #define vGOBLIN 501
  27. #define vBLOODRING 504
  28. #define COLOR_GREY 0xAFAFAFAA
  29. #define COLOR_PURPLE 0x9933CCAA
  30. #define COLOR_GREEN 0x33AA33AA
  31. #define COLOR_RED 0xAA3333AA
  32. #define COLOR_SYSTEM COLOR_GREY
  33. #define COLOR_CONFIRM COLOR_GREEN
  34. #define COLOR_ERROR 0xAA3333AA
  35. #define COLOR_YELLOW 0xFFFF00AA
  36. #define COLOR_PINK 0xFF66FFAA
  37. #define COLOR_BLUE 0x0000BBAA
  38. #define COLOR_LIGHTBLUE 0x33CCFFAA
  39. #define COLOR_DARKRED 0x660000AA
  40. #define COLOR_ORANGE 0xFF9900AA
  41. #define COLOR_MAGENTA 0xFF00FFFF
  42. #define COLOR_BRIGHTGREEN 0x7CFC00FF
  43. #define COLOR_DARKBLUE 0x000080AFF
  44. #define COLOR_VIOLETRED 0xDB7093FF
  45. #define COLOR_BROWN 0x8B4513FF
  46. #define COLOR_GREENYELLOW 0xADFF2FFF
  47. #define COLOR_THISTLE 0xD8BFD8FF
  48. #define COLOR_TURQUISE 0x48D1CCFF
  49. #define COLOR_MAROON 0x800000FF
  50. #define COLOR_STEELBLUE 0xB0C4DEFF
  51. #define COLOR_WHITE 0xFFFFFFAA
  52. #define COLOR_LIGHTGREEN 0x00FF7FFF
  53. #define COLOR_VIOLET 0xEE82EEFF
  54. #define COLOR_SILVER 0xC0C0C0FF
  55. #define messagecolor 0xAA3333AA
  56. #define TEAM_FAMILY 0
  57. #define TEAM_BALLAS 1
  58. #define TEAM_VATTOS 2
  59. #define TEAM_GOLFER 3
  60. #define TEAM_POLICE 4
  61. #define TEAM_PILOT 5
  62.  
  63.  
  64. #define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
  65. #define GetStringArg(%1,%2) for(new x = 0; getarg(%1,x) != '\0'; x++) %2[x] = getarg(%1,x)
  66.  
  67.  
  68.  
  69. //console chars fix
  70. #define FixConsole(%1) for(new rSt;rSt<strlen(%1);rSt++) if(%1[rSt]>191 && %1[rSt]<240) %1[rSt]-=64; else if(%1[rSt]>239 && %1[rSt]<256) %1[rSt]-=16; else if (%1[rSt] == 168) %1[rSt]+=72; else if (%1[rSt] == 184) %1[rSt]+=57
  71. new Text:Help; // website URL and basic command textdraw
  72. new startMusic[5] = {
  73. 1187,1062,1068,1076,1097
  74. };
  75.  
  76. static gTeam[MAX_PLAYERS]; // Tracks the team assignment for each player
  77.  
  78. #if defined RACES
  79. forward strtok(const string[],&index);
  80. new Float:playerx,Float:playery,Float:playerz;
  81.  
  82. new pskin[MAX_PLAYERS]; //player skin
  83. new string64[64]; //commonly used 64 string
  84. new string256[256]; // commonly used 256 string
  85. new string128[128]; // commonly used 128 string
  86. #endif
  87.  
  88. new playercar[MAX_PLAYERS] = -1; // assigned to current player-spawned vehicle
  89.  
  90. new pname[MAX_PLAYERS][MAX_PLAYER_NAME]; //playername
  91.  
  92. // car id stuff
  93.  
  94.  
  95. //anti weapon cheat
  96. new f_weapons[] = {38};
  97. new f_killer[MAX_PLAYERS];
  98. new f_victim[MAX_PLAYERS];
  99. new f_kills[MAX_PLAYERS][MAX_PLAYERS];
  100.  
  101. new vehName[212][24] =
  102. {
  103. "Landstalker", "Bravura", "Buffalo", "Linerunner", "Perrenial", "Sentinel", "Dumper", "Firetruck", "Trashmaster",
  104. "Stretch", "Manana", "Infernus", "Voodoo", "Pony", "Mule", "Cheetah", "Ambulance", "Leviathan", "Moonbeam",
  105. "Esperanto", "Taxi", "Washington", "Bobcat", "Whoopee", "BF Injection", "Hunter", "Premier", "Enforcer",
  106. "Securicar", "Banshee", "Predator", "Bus", "Rhino", "Barracks", "Hotknife", "Trailer", "Previon", "Coach",
  107. "Cabbie", "Stallion", "Rumpo", "RC Bandit", "Romero", "Packer", "Monster", "Admiral", "Squalo", "Seasparrow",
  108. "Pizzaboy", "Tram", "Trailer", "Turismo", "Speeder", "Reefer", "Tropic", "Flatbed", "Yankee", "Caddy", "Solair",
  109. "Berkley's RC Van", "Skimmer", "PCJ-600", "Faggio", "Freeway", "RC Baron", "RC Raider", "Glendale", "Oceanic",
  110. "Sanchez", "Sparrow", "Patriot", "Quad", "Coastguard", "Dinghy", "Hermes", "Sabre", "Rustler", "ZR-350", "Walton",
  111. "Regina", "Comet", "BMX", "Burrito", "Camper", "Marquis", "Baggage", "Dozer", "Maverick", "News Chopper", "Rancher",
  112. "FBI Rancher", "Virgo", "Greenwood", "Jetmax", "Hotring", "Sandking", "Blista Compact", "Police Maverick",
  113. "Boxvillde", "Benson", "Mesa", "RC Goblin", "Hotring Racer A", "Hotring Racer B", "Bloodring Banger", "Rancher",
  114. "Super GT", "Elegant", "Journey", "Bike", "Mountain Bike", "Beagle", "Cropduster", "Stunt", "Tanker", "Roadtrain",
  115. "Nebula", "Majestic", "Buccaneer", "Shamal", "Hydra", "FCR-900", "NRG-500", "HPV1000", "Cement Truck", "Tow Truck",
  116. "Fortune", "Cadrona", "FBI Truck", "Willard", "Forklift", "Tractor", "Combine", "Feltzer", "Remington", "Slamvan",
  117. "Blade", "Freight", "Streak", "Vortex", "Vincent", "Bullet", "Clover", "Sadler", "Firetruck", "Hustler", "Intruder",
  118. "Primo", "Cargobob", "Tampa", "Sunrise", "Merit", "Utility", "Nevada", "Yosemite", "Windsor", "Monster", "Monster",
  119. "Uranus", "Jester", "Sultan", "Stratium", "Elegy", "Raindance", "RC Tiger", "Flash", "Tahoma", "Savanna", "Bandito",
  120. "Freight Flat", "Streak Carriage", "Kart", "Mower", "Dune", "Sweeper", "Broadway", "Tornado", "AT-400", "DFT-30",
  121. "Huntley", "Stafford", "BF-400", "News Van", "Tug", "Trailer", "Emperor", "Wayfarer", "Euros", "Hotdog", "Club",
  122. "Freight Box", "Trailer", "Andromada", "Dodo", "RC Cam", "Launch", "Police Car", "Police Car", "Police Car",
  123. "Police Ranger", "Picador", "S.W.A.T", "Alpha", "Phoenix", "Glendale", "Sadler", "Luggage", "Luggage", "Stairs",
  124. "Boxville", "Tiller", "Utility Trailer"
  125. };
  126.  
  127. new Float:gRandomStuntSpawn[3][4] = {
  128. {1953.9196,-2239.2888,13.5469,96.6900}, //lsairport
  129. {-2363.1636,-1649.4421,487.4435, 252.50}, //chiliad
  130. {410.8556,2533.2900,19.1484,90.0}
  131.  
  132. };
  133.  
  134. new RaceParticipant[MAX_PLAYERS];
  135. new pvehicleid[MAX_PLAYERS] = -1; // player vehicles id
  136. new pmodelid[MAX_PLAYERS]; // players vehicles model id
  137. //new Float:pspeed[MAX_PLAYERS]; //player speed
  138. new pstate[MAX_PLAYERS]; // current player state (DRIVER, PASSENGER, ON_FOOT)
  139. new bool:badcar[MAX_PLAYERS]; // car has guns
  140. new bool:cantrace[MAX_PLAYERS]; //is player banned from races
  141. new bool:aircraft[MAX_PLAYERS]; //is player in aircraft
  142. new bool:cancount[MAX_PLAYERS]; //can player use /count command
  143. #if defined RACES//yrace
  144. #define MAX_RACECHECKPOINTS 64 // Change if you want more room for checkpoints than this
  145. #define MAX_BUILDERS 4 // Change if you want more builderslots than this
  146. #define RACEFILE_VERSION 2 // !!! DO NOT CHANGE !!!
  147. #define RACE_MENU // Enable race build/load menus
  148. #define MAX_RACERS 10 //total amt of racers allowed in a race
  149. new rotationtimer;
  150. new race1st[MAX_PLAYERS]; // total races placed 1st
  151. new race2nd[MAX_PLAYERS]; // total races placed 2nd
  152. new race3rd[MAX_PLAYERS]; //total races placed 3rd
  153. new MajorityDelay = 60; // Default delay to wait for other racers once half are ready (can be changed ingame via Admin menu)
  154. new RRotation = 1; // Is automatic Race Rotation enabled by defaul? (can be changed ingame via Admin menu) (-1 = disabled, 0+ = enabled)
  155. new BuildAdmin = 1; //Require admin privileges for building races? 1) yes, 0) no. (Can be changed ingame in Admin menu)
  156. new RaceAdmin = 1; //Require admin privileges for starting races? 1) yes, 0) no. (Can be changed ingame in Admin menu)
  157. new PrizeMode=0; //Mode for winnings: 0 - Fixed, 1 - Dynamic, 2 - Entry fee, 3 - EF+F, 4 EF+D [Admin menu ingame]
  158. new Prize=10000; //Fixed prize sum (15,000$ for winner, 12,5000$ for 2nd and 10,000$ for 3rd) [Admin menu ingame]
  159. new DynaMP=1; //Dynamic prize multiplier. (Default: 1$/m) [Admin menu ingame]
  160. new JoinFee=100; //Amount of $ it costs to /join a race [Admin menu ingame]
  161.  
  162. #if defined RACE_MENU
  163. forward RefreshMenuHeader(playerid,Menu:menu,text[]);
  164. new Menu:MAdmin, Menu:MPMode, Menu:MPrize, Menu:MDyna, Menu:MBuild, Menu:MLaps;
  165. new Menu:MRace, Menu:MRacemode, Menu:MFee, Menu:MCPsize, Menu:MDelay;
  166. #endif //race_menu
  167.  
  168. forward RaceRotation();
  169. // forward GetRaceTick(playerid); // Gets amount of ticks the player was racing
  170. // forward GetLapTick(playerid); // Gets amount of ticks the player spend on the lap
  171. forward ReadyRefresh(); // Check the /ready status of players and start the race when ready
  172. forward RaceSound(playerid,sound); // Plays <sound> for <playerid>
  173. forward BActiveCP(playerid,sele); // Gives the player selected checkpoint
  174. forward endrace(); // Ends the race, whether it ended normally or by /endrace. Cleans the variables.
  175. forward countdown(); // Handles the countdown
  176. forward mscountdown(); //Majority Start countdown handler
  177. forward strtok(const string[],&index);
  178. forward SetNextCheckpoint(playerid); // Gives the next checkpoint for the player during race
  179. forward ChangeLap(playerid); // Change player's lap, print out time and stuff.
  180. forward SetRaceCheckpoint(playerid,target,next); // Race-mode checkpoint setter
  181. forward SetBRaceCheckpoint(playerid,target,next); // Builder-mode checkpoint setter
  182. forward GetBuilderSlot(playerid); // Get next free builderslot, return 0 if none available
  183. forward b(playerid); // Quick and dirty fix for the BuilderSlots
  184. forward Float:Distance(Float:dx1,Float:dy1,Float:dz1,Float:dx2,Float:dy2,Float:dz2);
  185. forward clearrace(playerid);
  186. forward startrace();
  187. forward LoadRace(tmp[]);
  188. forward CreateRaceMenus();
  189. new RacePreLoaded;
  190. new rcount[MAX_PLAYERS];
  191. new rtimer[MAX_PLAYERS]; //30 sec countdown timer
  192. new raceclear; // orphan race timer
  193. new CBuilder[MAX_PLAYER_NAME], CFile[128], CRaceName[64]; //Creator of the race and the filename, for score changing purposes.
  194. new Ranking; //Finishing order for prizes
  195. new Countdown;
  196. new cd; //Countdown time
  197. new MajStart=0; //Status of the Majority Start timer
  198. new MajStartTimer; //Majority Start timer
  199. new mscd; //Majority Start time
  200. new RaceActive; //Is a race active?
  201. new RaceStart; //Has race started?
  202. new Float:RaceCheckpoints[MAX_RACECHECKPOINTS][3]; //Current race CP array
  203. new LCurrentCheckpoint; //Current race array pointer
  204. new CurrentCheckpoint[MAX_PLAYERS]; //Current race array pointer array :V
  205. new CurrentLap[MAX_PLAYERS]; //Current lap array
  206. new Participants; //Amount of participants
  207. new ORacelaps, ORacemode; //Saves the laps/mode from file in case they aren't changed
  208. new Racelaps, Racemode; //If mode/laps has been changed, the new scores won't be saved.
  209. new TopRacers[6][MAX_PLAYER_NAME]; // Stores 5 top scores, 6th isn't
  210. new TopRacerTimes[6]; // saved to file, used to simplify
  211. new TopLappers[6][MAX_PLAYER_NAME];// for() loops on CheckBestLap and
  212. new TopLapTimes[6]; // CheckBestRace.
  213. new Float:CPsize; // Checkpoint size for the race
  214. new Airrace; // Is the race airrace?
  215. new Float:RLenght; // race lenght
  216. // Building-related variables
  217. new BCurrentCheckpoints[MAX_BUILDERS]; //Buildrace array pointers
  218. new BSelectedCheckpoint[MAX_BUILDERS]; //Selected checkpoint during building
  219. new RaceBuilders[MAX_PLAYERS]; //Who is building a race?
  220. new BuilderSlots[MAX_BUILDERS]; //Stores the racebuilder pids
  221. new Float:BRaceCheckpoints[MAX_BUILDERS][MAX_RACECHECKPOINTS][3]; //Buildrace CP array
  222. new Bracemode[MAX_BUILDERS];
  223. new Blaps[MAX_BUILDERS];
  224. new Float:BCPsize[MAX_BUILDERS];
  225. new BAirrace[MAX_BUILDERS];
  226. new Float:startX, Float:startY, Float:startZ;
  227. new Float:startMod[11][1] = {
  228. {-5.0},
  229. {-4.0},
  230. {-3.0},
  231. {-2.0},
  232. {-1.0},
  233. {0.1},
  234. {1.0},
  235. {2.0},
  236. {3.0},
  237. {4.0},
  238. {5.0}
  239. };
  240. #endif //races
  241.  
  242. #if defined MENUS
  243. new Menu:MainM, Menu:StuntM, Menu:JumpM, Menu:VoptionsM, Menu:TrainM, Menu:CasinoM, Menu:Weather, Menu:WheelsM, Menu:Wheels2M/*,Menu:PointsM*/; //menus (duh)
  244. #if defined DM
  245. new Menu:DMM;
  246.  
  247. new Float:gRandomSniperDM[15][4] = {
  248. {245.2457,1454.9375,43.0946,156.4561},
  249. {202.1618,1451.9221,43.0946,217.0136},
  250. {201.1905,1406.3535,44.6503,295.9510},
  251. {224.9771,1414.5057,29.0093,351.7065},
  252. {167.3860,1426.0980,26.2369,269.0667},
  253. {199.8745,1404.2958,60.1355,321.7490},
  254. {246.7483,1435.1178,23.3703,177.4521},
  255. {171.9032,1482.9506,10.5859,73.7679},
  256. {173.0153,1380.6504,10.5859,265.4044},
  257. {219.9097,1351.5270,10.5859,16.3882},
  258. {222.6999,1374.4329,25.2934,177.6937},
  259. {186.8685,1457.9178,55.5781,198.6689},
  260. {131.7630,1393.0347,26.1517,228.9346},
  261. {205.3834,1445.8939,10.5859,146.1317},
  262. {220.0217,1469.6975,23.7344,145.0651}
  263. };
  264.  
  265. new Float:gRandomMilitaryDM[6][4] = {
  266. {388.4619,1890.8684,17.6406,57.7399},
  267. {278.9101,1785.4762,17.6406,319.9189},
  268. {386.3756,2077.8464,17.6406,139.1470},
  269. {263.7085,2012.7166,17.6406,102.3822},
  270. {146.7413,1875.8613,17.8359,275.5711},
  271. {210.9024,1811.1292,21.8672,343.9804}
  272. };
  273.  
  274. new Float:gRandomSawnOffDM[5][4] = {
  275. {-2442.4468,616.0774,30.3419,2.7500},
  276. {-2421.6475,645.6965,34.4742,325.4420},
  277. {-2422.2415,684.0378,35.1570,22.5946},
  278. {-2469.9136,676.9008,34.2858,104.7514},
  279. {-2498.4185,614.9011,26.0944,302.8008}
  280. };
  281.  
  282. new Float:gRandomSwordDM[6][4] = {
  283. {206.3081,-10.9856,1001.2109,304.7189},
  284. {201.2184,-4.1364,1001.2109,257.4703},
  285. {217.5962,-4.6303,1001.2109,266.2020},
  286. {216.7124,-12.6580,1001.2109,82.0439},
  287. {204.9362,-4.6324,1005.2109,209.8432},
  288. {209.3385,-12.5224,1005.2109,342.0085}
  289. };
  290.  
  291. new Float:gRandomDeagleDM[9][4] = {
  292. {-2641.5913,1420.1016,906.4609,135.7372},
  293. {-2669.4290,1428.5836,906.4609,186.5395},
  294. {-2674.1355,1400.0565,906.2734,308.7824},
  295. {-2631.3723,1397.0632,906.4609,107.9548},
  296. {-2665.5598,1398.7416,912.4063,102.3983},
  297. {-2658.3435,1391.3290,918.3516,36.9110},
  298. {-2688.5566,1431.4250,906.4609,244.2966},
  299. {-2661.0054,1422.7255,912.4063,186.3503},
  300. {-2673.6501,1423.0334,912.4063,192.7005}
  301. };
  302.  
  303. new Float:gRandomMinigunDM[9][4] = {
  304. {1413.5502,2157.2302,19.4286,81.1123},
  305. {1393.5474,2104.7124,11.0156,11.4890},
  306. {1378.8374,2213.7690,18.9766,130.2852},
  307. {1368.6378,2194.8867,9.7578,205.4233},
  308. {1393.9669,2164.9509,9.7578,37.9788},
  309. {1306.9668,2108.4163,11.0156,316.7018},
  310. {1301.7860,2202.5928,14.0993,179.3023},
  311. {1419.1334,2116.5552,29.6907,51.3800},
  312. {1399.8579,2100.9795,15.0625,12.7770}
  313. };
  314.  
  315. new Float:gRandomRocketDM[4][4] = {
  316. {501.8544,-21.3491,1000.6797,61.9754},
  317. {487.7188,-2.7461,1002.3828,178.2440},
  318. {479.7839,-14.1828,1000.6802,275.9006},
  319. {486.8539,-24.4962,1003.5737,8.0423}
  320. };
  321.  
  322. //shipdm spawns
  323. new Float:gRandomShipSpawns[10][3] = {
  324. {-2308.4480,1546.0233,18.7734}, //ship1
  325. {-2466.1052,1545.4475,23.6641}, //ship2
  326. {-2347.9333,1547.7725,26.0469}, //ship3
  327. {-2375.8469,1541.6355,23.1406}, //ship4
  328. {-2404.3672,1556.3593,26.0469}, //ship5
  329. {-2426.9480,1536.9685,26.0469}, //ship6
  330. {-2437.9360,1556.4310,17.3281}, //ship7
  331. {-2436.9475,1546.6334,8.3984}, //ship8
  332. {-2410.7808,1552.0458,2.1172}, //ship9
  333. {-2389.4875,1554.7893,5.5102} //ship10
  334. };
  335.  
  336. //housedm spawns
  337. new Float:gRandomHouseDMSpawns[7][3] = {
  338. {2346.8564,-1174.5005,1031.9766}, //housedm 1
  339. {2335.3486,-1173.5505,1031.9688}, //housedm 2
  340. {2325.0847,-1183.8208,1027.9766}, //housedm 3
  341. {2322.5291,-1175.0282,1027.9766}, //housedm 4
  342. {2335.7617,-1174.0778,1027.9766}, //housedm 5
  343. {2338.3323,-1187.0630,1027.9766}, //housedm 6
  344. {2346.0247,-1186.4976,1027.9766} //housedm 7
  345. };
  346.  
  347. #endif //dm
  348.  
  349.  
  350. //new Menu:CarM, Menu:Car2M, Menu:Car3M,Menu:Car4M;
  351. new Menu:CarTeleM;
  352.  
  353.  
  354. new Menu:FightM;
  355. #endif //menus
  356.  
  357.  
  358.  
  359.  
  360. //------------------------------------------------------------------------------
  361. main()
  362. {
  363. print("\n----------------------------------");
  364. print(" Everystuff .03 \n");
  365. print(" kaisersouse (2012)\n");
  366. print("----------------------------------\n");
  367. }
  368. //------------------------------------------------------------------------------
  369.  
  370. public OnGameModeInit()
  371. {
  372. SetGameModeText("Everystuff Freeroam|Stunt|DM");
  373. SetTeamCount(6);
  374. ShowNameTags(1);
  375. ShowPlayerMarkers(1);
  376. SetWorldTime(13);
  377. SetWeather(11);
  378. UsePlayerPedAnims();
  379. for(new i = 0; i < 299; i++) {
  380. if(IsSkinValid(i)) {
  381. // Class_Add(i,1860.4724,-2261.4534,13.5469,0,0,0,0,0,0);
  382. AddPlayerClass(i,1860.4724,-2261.4534,13.5469,0,0,0,0,0,0,0);
  383. }
  384. }
  385. Help = TextDrawCreate(2.000000, 432.000000, "~w~/help /cmd /tele /login /car /dm /anims /chiliad /airport /boneyard /ls /lv /sf /nos /fix /jetpack /flip");
  386. TextDrawSetOutline(Help, 1);
  387. TextDrawFont(Help, 3);
  388. TextDrawSetProportional(Help, 2);
  389. TextDrawLetterSize(Help, 0.25, 0.75);
  390.  
  391. #if defined MENUS
  392. MainM = CreateMenu("Main Menu",1,200,150,200);
  393. AddMenuItem(MainM, 0, "Stunt Maps /stunt");
  394. AddMenuItem(MainM, 0, "Deathmatch /dm");
  395. AddMenuItem(MainM, 0, "Freeroam /fr");
  396. AddMenuItem(MainM, 0, "Airports /airport");
  397. AddMenuItem(MainM, 0, "Trains+Trams /train");
  398. AddMenuItem(MainM, 0, "Basejumps /basejump");
  399. AddMenuItem(MainM, 0, "Random Stunts /random");
  400. AddMenuItem(MainM, 0, "Player Car Menu /car");
  401. AddMenuItem(MainM, 0, "Vechicle Options /voptions");
  402. AddMenuItem(MainM, 0, "All Commands /cmd");
  403. AddMenuItem(MainM, 0, "All Teleports /tele");
  404.  
  405. VoptionsM = CreateMenu("Car Options",1,50,120,200);
  406. AddMenuItem(VoptionsM, 0, "Auto Heal");
  407. AddMenuItem(VoptionsM, 0, "Auto Flip");
  408. AddMenuItem(VoptionsM, 0, "Auto Lock");
  409. AddMenuItem(VoptionsM, 0, "Auto Paint");
  410. AddMenuItem(VoptionsM, 0, "Auto Wheels");
  411. AddMenuItem(VoptionsM, 0, "Auto NOS");
  412.  
  413. StuntM = CreateMenu("Stunt Menu",1,200,150,200);
  414. AddMenuItem(StuntM, 0, "Mount Chiliad /chiliad");
  415. AddMenuItem(StuntM, 0, "LS Airport /lsairport");
  416. AddMenuItem(StuntM, 0, "Plane Boneyard /boneyard");
  417. AddMenuItem(StuntM, 0, "Rooftop Highway /roof");
  418. AddMenuItem(StuntM, 0, "LV Airport /lvairport");
  419. AddMenuItem(StuntM, 0, "LS Massive Ramp /mj");
  420. AddMenuItem(StuntM, 0, "Roller Coaster /roller");
  421. AddMenuItem(StuntM, 0, "Loop Ramp /loopramp");
  422. AddMenuItem(StuntM, 0, "Abandonded Town /town");
  423.  
  424. #if defined DM
  425. DMM = CreateMenu("Deathmatch",1,200,150,200);
  426. AddMenuItem(DMM, 0, "Home Invasion");
  427. AddMenuItem(DMM, 0, "Container Ship");
  428. AddMenuItem(DMM, 0, "Military / War");
  429. AddMenuItem(DMM, 0, "Gas Station");
  430. AddMenuItem(DMM, 0, "SawnOff DM");
  431. AddMenuItem(DMM, 0, "Sniper DM");
  432. AddMenuItem(DMM, 0, "RPG Arena");
  433. AddMenuItem(DMM, 0, "Minigun DM");
  434. AddMenuItem(DMM, 0, "Katana Fight");
  435. AddMenuItem(DMM, 0, "Desert Eagle");
  436.  
  437. #endif //dm
  438. CarM = CreateMenu("Vehicles 1",1,200,150,200);
  439. if(IsValidMenu(CarM)) {
  440. AddMenuItem(CarM, 0, "Sultan");
  441. AddMenuItem(CarM, 0, "Infernus");
  442. AddMenuItem(CarM, 0, "Bullet");
  443. AddMenuItem(CarM, 0, "Super GT");
  444. AddMenuItem(CarM, 0, "Flash");
  445. AddMenuItem(CarM, 0, "Bandito");
  446. AddMenuItem(CarM, 0, "Club VW");
  447. AddMenuItem(CarM, 0, "Elegy");
  448. AddMenuItem(CarM, 0, "Blista Compact");
  449. AddMenuItem(CarM, 0, "NRG Bike");
  450. AddMenuItem(CarM, 0, "MORE CARS");
  451.  
  452. }
  453. Car2M = CreateMenu("Vehicles 2",1,200,150,200);
  454. if(IsValidMenu(Car2M)) {
  455. AddMenuItem(Car2M, 0, "Bloodring");
  456. AddMenuItem(Car2M, 0, "Slam Truck");
  457. AddMenuItem(Car2M, 0, "Monster");
  458. AddMenuItem(Car2M, 0, "Sanchez");
  459. AddMenuItem(Car2M, 0, "Impala SS");
  460. AddMenuItem(Car2M, 0, "Quad ATV");
  461. AddMenuItem(Car2M, 0, "BF Injection");
  462. AddMenuItem(Car2M, 0, "Go-Kart");
  463. AddMenuItem(Car2M, 0, "Dump Truck");
  464. AddMenuItem(Car2M, 0, "City Bus");
  465. AddMenuItem(Car2M, 0, "MORE CARS");
  466. }
  467. Car3M = CreateMenu("Vehicles 3",1,200,150,200);
  468. if(IsValidMenu(Car3M)) {
  469. AddMenuItem(Car3M, 0, "Car Carrier");
  470. AddMenuItem(Car3M, 0, "BMX Stunt");
  471. AddMenuItem(Car3M, 0, "Hot Dog Van");
  472. AddMenuItem(Car3M, 0, "Camper Van");
  473. AddMenuItem(Car3M, 0, "Freeway Bike");
  474. AddMenuItem(Car3M, 0, "Vortex Hover");
  475. AddMenuItem(Car3M, 0, "Trailer Truck");
  476. AddMenuItem(Car3M, 0, "Police Car");
  477. AddMenuItem(Car3M, 0, "Police Bike");
  478. AddMenuItem(Car3M, 0, "Do-Do Plane");
  479. AddMenuItem(Car3M, 0, "MORE CARS");
  480. }
  481. Car4M = CreateMenu("Vehicles 4",1,200,150,200);
  482. if(IsValidMenu(Car4M)) {
  483. AddMenuItem(Car4M, 0, "Golf Cart");
  484. AddMenuItem(Car4M, 0, "Sea-Plane"); //441
  485. AddMenuItem(Car4M, 0, "Taxi Cab"); // 420
  486. AddMenuItem(Car4M, 0, "Sabre"); // 475
  487. AddMenuItem(Car4M, 0, "Limousine"); //409
  488. AddMenuItem(Car4M, 0, "Squallo Boat"); //446
  489. AddMenuItem(Car4M, 0, "Train (Tram)"); //449
  490. AddMenuItem(Car4M, 0, "Train (Streak)"); // 537
  491. AddMenuItem(Car4M, 0, "Fire Truck"); //407
  492. AddMenuItem(Car4M, 0, "Dakar Rally"); // 573
  493. AddMenuItem(Car4M, 0, "Jester"); // 559
  494. }
  495. FightM = CreateMenu("Fight Style",1,50,120,150);
  496. if(IsValidMenu(FightM)) {
  497. AddMenuItem(FightM, 0, "Normal"); // style 4
  498. AddMenuItem(FightM, 0, "Boxing"); //5
  499. AddMenuItem(FightM, 0, "Kung-Fu"); //6
  500. AddMenuItem(FightM, 0, "Knee/Head"); //7
  501. AddMenuItem(FightM, 0, "Captain Kirk"); //15
  502. AddMenuItem(FightM, 0, "Throw Elbows"); //16
  503. }
  504. CasinoM = CreateMenu("Casinos",1,200,150,200);
  505. if(IsValidMenu(CasinoM)) {
  506. AddMenuItem(CasinoM, 0, "Caligula's");
  507. AddMenuItem(CasinoM, 0, "Four Dragons");
  508. }
  509. Weather = CreateMenu("Weather",1,50,150,200);
  510. if(IsValidMenu(Weather)) {
  511. AddMenuItem(Weather,0,"Sunny");
  512. AddMenuItem(Weather,0,"Cloudy");
  513. AddMenuItem(Weather,0,"Thunderstorm");
  514. AddMenuItem(Weather,0,"Foggy");
  515. AddMenuItem(Weather,0,"Scorching Hot");
  516. AddMenuItem(Weather,0,"Sandstorm");
  517. AddMenuItem(Weather,0,"Polluted");
  518. }
  519.  
  520. WheelsM = CreateMenu("Wheels",1,125,150,200); //125,150,200
  521. if(IsValidMenu(WheelsM)) {
  522. AddMenuItem(WheelsM,0,"Off-Road"); //1025
  523. AddMenuItem(WheelsM,0,"Shadow"); //1073
  524. AddMenuItem(WheelsM,0,"Mega");//1074
  525. AddMenuItem(WheelsM,0,"Rimshine");//1075
  526. AddMenuItem(WheelsM,0,"Wires");//1076
  527. AddMenuItem(WheelsM,0,"Classic");//1077
  528. AddMenuItem(WheelsM,0,"Twist");//1078
  529. AddMenuItem(WheelsM,0,"Cutter");//1079
  530. AddMenuItem(WheelsM,0,"Switch");//1080
  531. AddMenuItem(WheelsM,0,"MORE WHEELS");
  532. }
  533. Wheels2M = CreateMenu("Wheels",1,125,150,200);
  534. if(IsValidMenu(Wheels2M)) {
  535. AddMenuItem(Wheels2M,0,"Grove");//1081
  536. AddMenuItem(Wheels2M,0,"Import");//1082
  537. AddMenuItem(Wheels2M,0,"Dollar");//1083
  538. AddMenuItem(Wheels2M,0,"Trance");//1084
  539. AddMenuItem(Wheels2M,0,"Atomic");//1085
  540. AddMenuItem(Wheels2M,0,"Ahab");//1096
  541. AddMenuItem(Wheels2M,0,"Virtual");//1097
  542. AddMenuItem(Wheels2M,0,"Access");//1098
  543. AddMenuItem(Wheels2M,0,"MORE WHEELS");
  544. }
  545.  
  546. #endif //menus
  547.  
  548. #if defined RACES
  549. rotationtimer = SetTimer("RaceRotation",150000,1); //2.5 minutes
  550. RaceActive=0;
  551. RaceStart=0;
  552. Ranking=1;
  553. LCurrentCheckpoint=0;
  554. Participants=0;
  555. for(new i;i<MAX_BUILDERS;i++) {
  556. BuilderSlots[i]=MAX_PLAYERS+1;
  557. }
  558. #if defined RACE_MENU
  559. CreateRaceMenus();
  560. #endif //race_menu
  561. #endif //races
  562.  
  563. AddPlayerClass(105,2521.8037,-1678.3939,15.4970,74.0388,22,300,25,300,9,300); //FAMILY
  564. AddPlayerClass(102,1727.8440,-1616.2476,14.9564,2.0701,23,300,29,300,5,300); //BALLAS
  565. AddPlayerClass(109,2127.6226,-1153.4991,23.9997,341.1662,24,300,31,300,4,300); //VATTOS
  566. AddPlayerClass(36,-2324.8708,-1622.0394,483.7098,220.8487,28,300,23,300,6,300); //GOLFER
  567. AddPlayerClass(285,2032.8514,-1404.3136,17.2625,145.4797,24,500,27,1000,3,300); //POLICE
  568. AddPlayerClass(61,1911.2904,-2310.3076,13.5469,170.7494,30,300,22,300,42,300); //PILOT
  569. // *********VEHICLES***
  570. //car cannon
  571. AddStaticVehicle(590, -549.3493, 2593.8562, 52.9811, 269.4595,-1,-1);
  572. AddStaticVehicle(590, -549.3493, 2593.8562, 52.9811, 269.4595,-1,-1);
  573. AddStaticVehicle(590, -549.3493, 2593.8562, 52.9811, 269.4595,-1,-1);
  574. AddStaticVehicle(590, -549.3493, 2593.8562, 52.9811, 269.4595,-1,-1);
  575. AddStaticVehicle(590, -549.3493, 2593.8562, 52.9811, 269.4595,-1,-1);
  576. AddStaticVehicle(590, -549.3493, 2593.8562, 52.9811, 269.4595,-1,-1);
  577. AddStaticVehicle(590, -549.3493, 2593.8562, 52.9811, 269.4595,-1,-1);
  578. AddStaticVehicle(590, -549.3493, 2593.8562, 52.9811, 269.4595,-1,-1);
  579. AddStaticVehicle(590, -549.3493, 2593.8562, 52.9811, 269.4595,-1,-1);
  580. AddStaticVehicle(590, -549.3493, 2593.8562, 52.9811, 269.4595,-1,-1);
  581. CreateObject(2395, -508.4950, 2595.0817, 52.4204, 271.4779, 0.0000, 269.9996);
  582. CreateObject(3502, -539.1016, 2593.7387, 53.4335, 0.0000, 0.0000, 89.9992);
  583. CreateObject(2395, -489.7726, 2595.0817, 59.0352, 306.7149, 0.0000, 269.9996);
  584. CreateObject(2395, -498.7724, 2595.0817, 54.1352, 292.1044, 0.0000, 269.9996);
  585. CreateObject(2395, -503.3226, 2595.0817, 52.8103, 283.5101, 0.0000, 269.9996);
  586. CreateObject(2395, -493.9974, 2595.0817, 56.3603, 302.4176, 0.0000, 269.9996);
  587. CreateObject(2395, -505.8226, 2595.0817, 52.4853, 277.4941, 0.0000, 269.9996);
  588. CreateObject(2395, -500.9500, 2595.0817, 53.3804, 289.0964, 0.0000, 269.9996);
  589. CreateObject(2395, -496.2724, 2595.0817, 55.1453, 298.1206, 0.0000, 269.9996);
  590. CreateObject(2395, -491.7724, 2595.0817, 57.7714, 302.6296, 0.0000, 269.9996);
  591. CreateObject(2395, -507.2475, 2595.0817, 52.4340, 273.4948, 0.0000, 269.9996);
  592. CreateObject(2395, -504.8226, 2595.0817, 52.5841, 279.6828, 0.0000, 269.9996);
  593. CreateObject(2395, -502.4500, 2595.0817, 52.9566, 287.0338, 0.0000, 269.9996);
  594. CreateObject(1426, -493.4859, 2593.7763, 52.5696, 0.0000, 0.0000, 269.9996);
  595. CreateObject(1426, -498.7359, 2593.7763, 50.2446, 0.0000, 0.0000, 269.9996);
  596. CreateObject(1426, -496.0609, 2593.7763, 51.2945, 0.0000, 0.0000, 269.9996);
  597. CreateObject(1426, -490.8109, 2593.7763, 54.2194, 0.0000, 0.0000, 269.9996);
  598. CreateObject(1426, -490.8109, 2593.7763, 50.6234, 0.0000, 0.0000, 269.9996);
  599. CreateObject(1426, -488.0108, 2593.7763, 56.0445, 0.0000, 0.0000, 269.9996);
  600. CreateObject(1426, -488.0108, 2593.7763, 52.4484, 0.0000, 0.0000, 269.9996);
  601. CreateObject(3074, -540.3167, 2589.8774, 38.8992, 36.9547, 0.0000, 0.0000);
  602. CreateObject(11492, -552.0051, 2592.4255, 51.9736, 0.0000, 0.0000, 0.0000);
  603. CreateObject(983, -540.5206, 2593.7246, 55.8438, 0.0000, 0.0000, 0.0000);
  604. CreateObject(2938, -563.5327, 2592.1850, 54.0492, 0.0000, 0.0000, 0.0000);
  605. CreateObject(16359, -549.6016, 2593.7011, 53.3519, 0.0000, 0.0000, 90.0000);
  606. CreateObject(12978, -555.0286, 2593.6738, 51.4694, 0.0000, 0.0000, 90.0000);
  607.  
  608.  
  609. //CHILLIAD
  610. AddStaticPickup(1242, 2, -2324.8708,-1622.0394,483.7098); // armor chilliad
  611. AddStaticPickup(370, 2, -2370.2878,-1572.6448,498.3074); // jetpack chilliad
  612. AddStaticPickup(371, 2, -2313.0522,-1642.8228,483.7031); // parachute chilliad
  613. AddStaticPickup(371, 2, -2233.3872,-1737.0549,480.8258); // parachute chilliad
  614. AddStaticPickup(350, 2, -2324.8708,-1622.0394,483.7098); // sawnoff chilliad
  615. AddStaticPickup(360, 2, -2401.8508,-1632.1577,521.1067); // rocket launcher chilliad
  616. AddStaticPickup(363, 2, -2238.1636,-1712.2151,480.8667); // det packs chilliad
  617. //AIRPORT
  618. AddStaticPickup(371, 2, 1878.4415,-2396.1931,13.5547); // airport parachute
  619. AddStaticPickup(1242, 2, 1900.4696,-2328.0867,13.5469); // armor airport
  620. AddStaticPickup(348, 2, 1882.1780,-2310.0657,13.5469); // airport DE
  621. AddStaticPickup(348, 2, 1882.1780,-2310.0657,13.5469); // airport DE
  622. AddStaticPickup(348, 2, 1882.1780,-2310.0657,13.5469); // airport DE
  623. AddStaticPickup(348, 2, 1882.1780,-2310.0657,13.5469); // airport DE
  624. AddStaticPickup(348, 2, 1882.1780,-2310.0657,13.5469); // airport DE
  625. AddStaticPickup(352, 2, 1884.1780,-2310.0657,13.5469); // airport mini uzi
  626. AddStaticPickup(352, 2, 1884.1780,-2310.0657,13.5469); // airport mini uzi
  627. AddStaticPickup(352, 2, 1884.1780,-2310.0657,13.5469); // airport mini uzi
  628. AddStaticPickup(352, 2, 1884.1780,-2310.0657,13.5469); // airport mini uzi
  629. AddStaticPickup(352, 2, 1884.1780,-2310.0657,13.5469); // airport mini uzi
  630. AddStaticPickup(352, 2, 1884.1780,-2310.0657,13.5469); // airport mini uzi
  631. AddStaticPickup(352, 2, 1884.1780,-2310.0657,13.5469); // airport mini uzi
  632. AddStaticPickup(363, 2, 1853.2102,-2327.4004,13.5469); // airport det pack
  633. AddStaticPickup(360, 2, 2061.7407,-2372.1411,16.1250); // airport rocket 1
  634. AddStaticPickup(360, 2, 1389.6195,-2600.5029,13.5469); // airport rocket 2
  635. AddStaticPickup(344, 2, 1644.3447,-2394.0745,13.5547); // airport molotov
  636. //FAMILY
  637. AddStaticPickup(1242, 2, 2515.9084,-1682.6433,13.3945); // family armor
  638. AddStaticPickup(348, 2, 2522.8040,-1682.4972,15.4970); // family DE
  639. AddStaticPickup(348, 2, 2522.8040,-1682.4972,15.4970); // family DE
  640. AddStaticPickup(348, 2, 2522.8040,-1682.4972,15.4970); // family DE
  641. AddStaticPickup(348, 2, 2522.8040,-1682.4972,15.4970); // family DE
  642. AddStaticPickup(348, 2, 2522.8040,-1682.4972,15.4970); // family DE
  643. AddStaticPickup(348, 2, 2522.8040,-1682.4972,15.4970); // family DE
  644. AddStaticPickup(352, 2, 2522.3618,-1680.7299,15.4970); // family mini uzi
  645. AddStaticPickup(352, 2, 2522.3618,-1680.7299,15.4970); // family mini uzi
  646. AddStaticPickup(352, 2, 2522.3618,-1680.7299,15.4970); // family mini uzi
  647. AddStaticPickup(352, 2, 2522.3618,-1680.7299,15.4970); // family mini uzi
  648. AddStaticPickup(352, 2, 2522.3618,-1680.7299,15.4970); // family mini uzi
  649. AddStaticPickup(352, 2, 2522.3618,-1680.7299,15.4970); // family mini uzi
  650. AddStaticPickup(352, 2, 2522.3618,-1680.7299,15.4970); // family mini uzi
  651. //BALLAS
  652. AddStaticPickup(1242, 2, 1733.2368,-1611.3384,13.5469); // armor ballas
  653. AddStaticPickup(348, 2, 1726.1089,-1615.0144,13.5469); // ballas DE
  654. AddStaticPickup(352, 2, 1726.1062,-1617.2410,13.5469); // ballas mini uzi
  655. AddStaticPickup(348, 2, 1726.1089,-1615.0144,13.5469); // ballas DE
  656. AddStaticPickup(352, 2, 1726.1062,-1617.2410,13.5469); // ballas mini uzi
  657. AddStaticPickup(348, 2, 1726.1089,-1615.0144,13.5469); // ballas DE
  658. AddStaticPickup(352, 2, 1726.1062,-1617.2410,13.5469); // ballas mini uzi
  659. AddStaticPickup(348, 2, 1726.1089,-1615.0144,13.5469); // ballas DE
  660. AddStaticPickup(352, 2, 1726.1062,-1617.2410,13.5469); // ballas mini uzi
  661. AddStaticPickup(348, 2, 1726.1089,-1615.0144,13.5469); // ballas DE
  662. AddStaticPickup(352, 2, 1726.1062,-1617.2410,13.5469); // ballas mini uzi
  663. AddStaticPickup(348, 2, 1726.1089,-1615.0144,13.5469); // ballas DE
  664. AddStaticPickup(352, 2, 1726.1062,-1617.2410,13.5469); // ballas mini uzi
  665. AddStaticPickup(348, 2, 1726.1089,-1615.0144,13.5469); // ballas DE
  666. AddStaticPickup(352, 2, 1726.1062,-1617.2410,13.5469); // ballas mini uzi
  667. AddStaticPickup(348, 2, 1726.1089,-1615.0144,13.5469); // ballas DE
  668. AddStaticPickup(352, 2, 1726.1062,-1617.2410,13.5469); // ballas mini uzi
  669. // VATTOS
  670. AddStaticPickup(1242, 2, 2121.7217,-1149.2666,24.2893); // armor vattos
  671. AddStaticPickup(348, 2, 2121.9497,-1157.7094,24.1486); // vattos DE
  672. AddStaticPickup(352, 2, 2118.4583,-1157.9148,24.2648); // vattos mini uzi
  673. AddStaticPickup(348, 2, 2121.9497,-1157.7094,24.1486); // vattos DE
  674. AddStaticPickup(352, 2, 2118.4583,-1157.9148,24.2648); // vattos mini uzi
  675. AddStaticPickup(348, 2, 2121.9497,-1157.7094,24.1486); // vattos DE
  676. AddStaticPickup(352, 2, 2118.4583,-1157.9148,24.2648); // vattos mini uzi
  677. AddStaticPickup(348, 2, 2121.9497,-1157.7094,24.1486); // vattos DE
  678. AddStaticPickup(352, 2, 2118.4583,-1157.9148,24.2648); // vattos mini uzi
  679. AddStaticPickup(348, 2, 2121.9497,-1157.7094,24.1486); // vattos DE
  680. AddStaticPickup(352, 2, 2118.4583,-1157.9148,24.2648); // vattos mini uzi
  681. AddStaticPickup(348, 2, 2121.9497,-1157.7094,24.1486); // vattos DE
  682. AddStaticPickup(352, 2, 2118.4583,-1157.9148,24.2648); // vattos mini uzi
  683. AddStaticPickup(348, 2, 2121.9497,-1157.7094,24.1486); // vattos DE
  684. AddStaticPickup(352, 2, 2118.4583,-1157.9148,24.2648); // vattos mini uzi
  685. AddStaticPickup(348, 2, 2121.9497,-1157.7094,24.1486); // vattos DE
  686. AddStaticPickup(352, 2, 2118.4583,-1157.9148,24.2648); // vattos mini uzi
  687. //POLICE
  688. AddStaticPickup(1242, 2, 2022.3368,-1419.1205,16.9922); // armor cop
  689. //BASEJUMP1
  690. AddStaticPickup(371, 2, 1574.8966,-1249.2684,277.8787); // basejump1 parachute
  691. //BASEJUMP2
  692. AddStaticPickup(371, 2, 1539.4971,-1371.4875,328.3436); // basejump2 parachute
  693. //BASEJUMP3
  694. AddStaticPickup(371, 2, -225.1428,1393.6865,172.4141); // basejump3 parachute
  695. //BASEJUMP4
  696. AddStaticPickup(371, 2, -2872.1931,2606.3821,271.5319); // basejump4 parachute
  697. //BASEJUMP5
  698. AddStaticPickup(371, 2, -341.6077,1601.4565,164.4840); // basejump5 parachute
  699. //SKYDIVE
  700. AddStaticPickup(371, 2, 1951.4064,-2436.0005,97.7329); // skydive parachute
  701. //area69
  702. AddStaticPickup(352, 2, 265.0037,1880.7461,-30.3906); // mini uzi
  703. AddStaticPickup(352, 2, 272.2651,1880.4424,-30.3906); // mini uzi
  704. AddStaticPickup(370, 2, 264.4069,1886.7014,-30.3906); // jetpack
  705. AddStaticPickup(370, 2, 273.4023,1886.7484,-30.3906); // jetpack
  706. AddStaticPickup(352, 2, 265.0037,1880.7461,-30.3906); // mini uzi
  707. AddStaticPickup(352, 2, 272.2651,1880.4424,-30.3906); // mini uzi
  708. AddStaticPickup(352, 2, 265.0037,1880.7461,-30.3906); // mini uzi
  709. AddStaticPickup(352, 2, 272.2651,1880.4424,-30.3906); // mini uzi
  710. AddStaticPickup(352, 2, 265.0037,1880.7461,-30.3906); // mini uzi
  711. AddStaticPickup(352, 2, 272.2651,1880.4424,-30.3906); // mini uzi
  712. AddStaticPickup(352, 2, 265.0037,1880.7461,-30.3906); // mini uzi
  713. AddStaticPickup(352, 2, 272.2651,1880.4424,-30.3906); // mini uzi
  714. AddStaticPickup(352, 2, 265.0037,1880.7461,-30.3906); // mini uzi
  715. AddStaticPickup(352, 2, 272.2651,1880.4424,-30.3906); // mini uzi
  716. AddStaticPickup(352, 2, 265.0037,1880.7461,-30.3906); // mini uzi
  717. AddStaticPickup(352, 2, 272.2651,1880.4424,-30.3906); // mini uzi
  718. AddStaticPickup(352, 2, 265.0037,1880.7461,-30.3906); // mini uzi
  719. AddStaticPickup(352, 2, 272.2651,1880.4424,-30.3906); // mini uzi
  720. AddStaticPickup(352, 2, 265.0037,1880.7461,-30.3906); // mini uzi
  721. AddStaticPickup(352, 2, 272.2651,1880.4424,-30.3906); // mini uzi
  722. AddStaticPickup(352, 2, 265.0037,1880.7461,-30.3906); // mini uzi
  723. AddStaticPickup(352, 2, 272.2651,1880.4424,-30.3906); // mini uzi
  724.  
  725. //******OBJECTS*********
  726. CreateObject(13592,2070.6694,-2545.4927,22.2113,0,0,0); // big airport loop-de-loop
  727. CreateVehicle(590, -549.3493, 2593.8562, 52.9811, 269.4595,-1,-1,300);
  728. CreateVehicle(590, -549.3493, 2593.8562, 52.9811, 269.4595,-1,-1,300);
  729. CreateVehicle(590, -549.3493, 2593.8562, 52.9811, 269.4595,-1,-1,300);
  730. CreateVehicle(590, -549.3493, 2593.8562, 52.9811, 269.4595,-1,-1,300);
  731. CreateVehicle(590, -549.3493, 2593.8562, 52.9811, 269.4595,-1,-1,300);
  732. CreateVehicle(590, -549.3493, 2593.8562, 52.9811, 269.4595,-1,-1,300);
  733. CreateVehicle(590, -549.3493, 2593.8562, 52.9811, 269.4595,-1,-1,300);
  734. CreateVehicle(590, -549.3493, 2593.8562, 52.9811, 269.4595,-1,-1,300);
  735. CreateVehicle(590, -549.3493, 2593.8562, 52.9811, 269.4595,-1,-1,300);
  736. CreateVehicle(590, -549.3493, 2593.8562, 52.9811, 269.4595,-1,-1,300);
  737. CreateObject(2395, -508.4950, 2595.0817, 52.4204, 271.4779, 0.0000, 269.9996);
  738. CreateObject(3502, -539.1016, 2593.7387, 53.4335, 0.0000, 0.0000, 89.9992);
  739. CreateObject(2395, -489.7726, 2595.0817, 59.0352, 306.7149, 0.0000, 269.9996);
  740. CreateObject(2395, -498.7724, 2595.0817, 54.1352, 292.1044, 0.0000, 269.9996);
  741. CreateObject(2395, -503.3226, 2595.0817, 52.8103, 283.5101, 0.0000, 269.9996);
  742. CreateObject(2395, -493.9974, 2595.0817, 56.3603, 302.4176, 0.0000, 269.9996);
  743. CreateObject(2395, -505.8226, 2595.0817, 52.4853, 277.4941, 0.0000, 269.9996);
  744. CreateObject(2395, -500.9500, 2595.0817, 53.3804, 289.0964, 0.0000, 269.9996);
  745. CreateObject(2395, -496.2724, 2595.0817, 55.1453, 298.1206, 0.0000, 269.9996);
  746. CreateObject(2395, -491.7724, 2595.0817, 57.7714, 302.6296, 0.0000, 269.9996);
  747. CreateObject(2395, -507.2475, 2595.0817, 52.4340, 273.4948, 0.0000, 269.9996);
  748. CreateObject(2395, -504.8226, 2595.0817, 52.5841, 279.6828, 0.0000, 269.9996);
  749. CreateObject(2395, -502.4500, 2595.0817, 52.9566, 287.0338, 0.0000, 269.9996);
  750. CreateObject(1426, -493.4859, 2593.7763, 52.5696, 0.0000, 0.0000, 269.9996);
  751. CreateObject(1426, -498.7359, 2593.7763, 50.2446, 0.0000, 0.0000, 269.9996);
  752. CreateObject(1426, -496.0609, 2593.7763, 51.2945, 0.0000, 0.0000, 269.9996);
  753. CreateObject(1426, -490.8109, 2593.7763, 54.2194, 0.0000, 0.0000, 269.9996);
  754. CreateObject(1426, -490.8109, 2593.7763, 50.6234, 0.0000, 0.0000, 269.9996);
  755. CreateObject(1426, -488.0108, 2593.7763, 56.0445, 0.0000, 0.0000, 269.9996);
  756. CreateObject(1426, -488.0108, 2593.7763, 52.4484, 0.0000, 0.0000, 269.9996);
  757. CreateObject(3074, -540.3167, 2589.8774, 38.8992, 36.9547, 0.0000, 0.0000);
  758. CreateObject(11492, -552.0051, 2592.4255, 51.9736, 0.0000, 0.0000, 0.0000);
  759. CreateObject(983, -540.5206, 2593.7246, 55.8438, 0.0000, 0.0000, 0.0000);
  760. CreateObject(2938, -563.5327, 2592.1850, 54.0492, 0.0000, 0.0000, 0.0000);
  761. CreateObject(16359, -549.6016, 2593.7011, 53.3519, 0.0000, 0.0000, 90.0000);
  762. CreateObject(12978, -555.0286, 2593.6738, 51.4694, 0.0000, 0.0000, 90.0000);
  763. }
  764. //------------------------------------------------------------------------------
  765. public OnGameModeExit() {
  766. #if defined MENUS
  767. //DESTROY MENUS
  768. DestroyMenu(Menu:MainM);
  769. // DestroyMenu(Menu:PointsM);
  770. DestroyMenu(Menu:StuntM);
  771. #if defined DM
  772. DestroyMenu(Menu:DMM);
  773. #endif //dm
  774. #if defined PVEHICLES
  775. DestroyMenu(Menu:CarM);
  776. DestroyMenu(Menu:Car2M);
  777. DestroyMenu(Menu:Car3M);
  778. DestroyMenu(Menu:Car4M);
  779. #else
  780. DestroyMenu(Menu:CarTeleM);
  781. #endif //pvehicles
  782. #if defined RACES
  783. #if defined RACE_MENU
  784. DestroyMenu(MAdmin);
  785. DestroyMenu(MPMode);
  786. DestroyMenu(MPrize);
  787. DestroyMenu(MDyna);
  788. DestroyMenu(MBuild);
  789. DestroyMenu(MLaps);
  790. DestroyMenu(MRace);
  791. DestroyMenu(MRacemode);
  792. DestroyMenu(MFee);
  793. DestroyMenu(MCPsize);
  794. DestroyMenu(MDelay);
  795. #endif // race_menu
  796. #endif //races
  797. #endif // menus
  798. return 1;
  799. }
  800.  
  801. //-----------------------------------------------------------------------
  802. //COMMANDS
  803. public OnPlayerCommandText(playerid, cmdtext[]) {
  804. dcmd(help,4,cmdtext);
  805. dcmd(tele,4,cmdtext);
  806. dcmd(cmd,3,cmdtext);
  807. dcmd(dcar,4,cmdtext);
  808. dcmd(fix,3,cmdtext);
  809. dcmd(flip,4,cmdtext);
  810. dcmd(leave,5,cmdtext);
  811. dcmd(sf,2,cmdtext);
  812. dcmd(lv,2,cmdtext);
  813. dcmd(ls,2,cmdtext);
  814. dcmd(ammu,4,cmdtext);
  815. dcmd(desert,6,cmdtext);
  816. dcmd(cannon,6,cmdtext);
  817. dcmd(sdance,6,cmdtext);
  818. dcmd(smoke,5,cmdtext);
  819. dcmd(kill,4,cmdtext);
  820. dcmd(pc,2,cmdtext);
  821. dcmd(bot,3,cmdtext);
  822. dcmd(magic,5,cmdtext);
  823. dcmd(lock,4,cmdtext);
  824. dcmd(unlock,6,cmdtext);
  825. dcmd(unlockall,9,cmdtext);
  826. dcmd(wrc,3,cmdtext);
  827. dcmd(nos,3,cmdtext);
  828. dcmd(jetpack,7,cmdtext);
  829. dcmd(skydive,7,cmdtext);
  830. dcmd(warehouse,9,cmdtext);
  831. dcmd(rctrack,7,cmdtext);
  832. dcmd(bikepark,8,cmdtext);
  833. dcmd(beach,5,cmdtext);
  834. dcmd(basejump1,9,cmdtext);
  835. dcmd(basejump2,9,cmdtext);
  836. dcmd(basejump3,9,cmdtext);
  837. dcmd(basejump4,9,cmdtext);
  838. dcmd(basejump5,9,cmdtext);
  839. dcmd(chiliad,7,cmdtext);
  840. dcmd(airport,7,cmdtext);
  841. dcmd(rallyup,7,cmdtext);
  842. dcmd(boneyard,8,cmdtext);
  843. dcmd(dirtpit,7,cmdtext);
  844. dcmd(pyramid,7,cmdtext);
  845. dcmd(area69,6,cmdtext);
  846. dcmd(silodm,6,cmdtext);
  847. dcmd(boardwalk,9,cmdtext);
  848. dcmd(funpark,7,cmdtext);
  849. dcmd(locos,5,cmdtext);
  850. dcmd(waa,3,cmdtext);
  851. dcmd(canal,5,cmdtext);
  852. dcmd(ramp,4,cmdtext);
  853. dcmd(tuner,5,cmdtext);
  854. #if defined MENUS
  855. #if defined DM
  856. dcmd(dm,2,cmdtext);
  857. #endif //dm
  858. dcmd(car,3,cmdtext);
  859. dcmd(car2,4,cmdtext);
  860. dcmd(car3,4,cmdtext);
  861. dcmd(car4,4,cmdtext);
  862. dcmd(casino, 6, cmdtext);
  863. // dcmd(train,5,cmdtext);
  864. dcmd(basejump,8,cmdtext);
  865. dcmd(weather,7,cmdtext);
  866. #endif
  867.  
  868. #if defined RACES
  869. // dcmd(bet, 3, cmdtext);
  870. dcmd(racehelp,8,cmdtext); // Racehelp - there's a lot of commands!
  871. dcmd(buildhelp,9,cmdtext); // Buildhelp - there's a lot of commands!
  872. dcmd(buildrace,9,cmdtext); // Buildrace - Start building a new race (suprising!)
  873. dcmd(cp,2,cmdtext); // cp - Add a checkpoint
  874. dcmd(scp,3,cmdtext); // scp - Select a checkpoint
  875. dcmd(rcp,3,cmdtext); // rcp - Replace the current checkpoint with a new one
  876. dcmd(mcp,3,cmdtext); // mcp - Move the selected checkpoint
  877. dcmd(dcp,3,cmdtext); // dcp - Delete the selected waypoint
  878. dcmd(join,4,cmdtext);
  879. dcmd(clearrace,9,cmdtext); // clearrace - Clear the current (new) race.
  880. dcmd(editrace,8,cmdtext); // editrace - Load an existing race into the builder
  881. dcmd(saverace,8,cmdtext); // saverace - Save the current checkpoints to a file
  882. dcmd(setlaps,7,cmdtext); // setlaps - Set amount of laps to drive
  883. dcmd(racemode,8,cmdtext); // racemode - Set the current racemode
  884. dcmd(loadrace,8,cmdtext); // loadrace - Load a race from file and start it
  885. dcmd(startrace,9,cmdtext); // starts the loaded race
  886. dcmd(leaverace,9,cmdtext); // leave - leave the current race.
  887. dcmd(endrace,7,cmdtext); // endrace - Complete the current race, clear tables & variables, stop the timer.
  888. dcmd(racers,6,cmdtext);
  889. dcmd(deleterace,10,cmdtext);// deleterace - Remove the race from disk
  890. dcmd(airrace,7,cmdtext); // airrace - Changes the checkpoints to air CPs and back
  891. dcmd(cpsize,6,cmdtext); // cpsize - changes the checkpoint size
  892. dcmd(prizemode,9,cmdtext);
  893. dcmd(setprize,8,cmdtext);
  894. #if defined RACE_MENU
  895. dcmd(raceadmin,9,cmdtext);
  896. dcmd(buildmenu,9,cmdtext);
  897. #endif // race_menu if(!IsPlayerConnected(playerid)) return 0; // Nitroglycerine's snippet
  898. #endif //races
  899.  
  900. return 1;
  901. }
  902.  
  903.  
  904. public OnPlayerConnect(playerid)
  905. {
  906. SendClientMessage(playerid, COLOR_WHITE, ">>> Everystuff Freeroam|Stunt|DM by kaisersouse <<<");
  907. SendClientMessage(playerid, 0xFF9900AA, ">>> Type /help or /cmd to get started! Use SUBMISSION key for NOS + vehicle repair. <<<");
  908. SendClientMessage(playerid, 0xFF9900AA, ">>> Type /car for vehicle menu. Drive into DUAL-SKULL icon to launch vehicle <<<");
  909. GetPlayerName(playerid,pname[playerid],MAX_PLAYER_NAME);
  910. GivePlayerMoney(playerid, 100000);
  911. TextDrawShowForPlayer(playerid, Help);
  912. playercar[playerid] = -1;
  913. pvehicleid[playerid] = -1;
  914. pmodelid[playerid] = 0;
  915. SetPlayerSkillLevel(playerid,WEAPONSKILL_MICRO_UZI,1000);
  916. SetPlayerSkillLevel(playerid,WEAPONSKILL_PISTOL_SILENCED,1000);
  917. SetPlayerSkillLevel(playerid,WEAPONSKILL_PISTOL,1000);
  918. SetPlayerSkillLevel(playerid,WEAPONSKILL_DESERT_EAGLE,1000);
  919. SetPlayerSkillLevel(playerid,WEAPONSKILL_SHOTGUN,1000);
  920. SetPlayerSkillLevel(playerid,WEAPONSKILL_SAWNOFF_SHOTGUN,1000);
  921. SetPlayerSkillLevel(playerid,WEAPONSKILL_SPAS12_SHOTGUN,1000);
  922. SetPlayerSkillLevel(playerid,WEAPONSKILL_MP5,1000);
  923. SetPlayerSkillLevel(playerid,WEAPONSKILL_AK47,1000);
  924. SetPlayerSkillLevel(playerid,WEAPONSKILL_M4,1000);
  925. SetPlayerSkillLevel(playerid,WEAPONSKILL_SNIPERRIFLE,1000);
  926. return 1;
  927. }
  928.  
  929. public OnPlayerDisconnect(playerid, reason)
  930. {
  931. if(playercar[playerid] != -1) KillPlayerVehicle(playerid);
  932. return 1;
  933. }
  934.  
  935.  
  936. public OnPlayerKeyStateChange(playerid,newkeys,oldkeys)
  937. {
  938. if(newkeys & KEY_SUBMISSION && pvehicleid[playerid] != -1)
  939. {
  940. SetVehicleHealth(pvehicleid[playerid],1000.0);
  941. if(pvehicleid[playerid] != -1 && pstate[playerid] == PLAYER_STATE_DRIVER && IsInModVehicle(playerid))
  942. {
  943. AddNosToVehicle(playerid,pvehicleid[playerid]);
  944. PlayerPlaySound(playerid, 1133, 0.0, 0.0, 0.0);
  945. }
  946. return 1;
  947. }
  948. return 1;
  949. }
  950.  
  951. public OnPlayerStateChange(playerid, newstate, oldstate)
  952. {
  953. new vehicleid,modelid;
  954. pstate[playerid] = newstate;
  955. vehicleid = GetPlayerVehicleID(playerid);
  956. modelid = GetVehicleModel(vehicleid);
  957. // format(string64,sizeof(string64),"playerid %i playercar %i",playerid,playercar[playerid]);
  958. // SendClientMessageToAll(COLOR_GREY,string64);
  959. switch(newstate)
  960. {
  961. case 1,7,8://onfoot wasted spawned
  962. {
  963. if(newstate == 1)
  964. {
  965. if(!gTeam[playerid]) SetPlayerWorldBounds(playerid, 9999.00, -9999.00, 9999.00, -9999.00);
  966. if(oldstate == 2 && pvehicleid[playerid] != -1)
  967. {
  968. foreach(Player,i) SetVehicleParamsForPlayer(pvehicleid[playerid],i,false,false);
  969. }
  970. }
  971.  
  972. badcar[playerid] = false;
  973. cantrace[playerid] = false;
  974. aircraft[playerid] = false;
  975. pvehicleid[playerid] = -1;
  976. pmodelid[playerid] = 0;
  977. // if(RaceParticipant[playerid]) LeaveRace(playerid);
  978. return 1;
  979. }
  980. case 2: //driver
  981. {
  982. pvehicleid[playerid] = vehicleid;
  983. pmodelid[playerid] = modelid;
  984. cancount[playerid] = true;
  985. // if(modelid == 520) SetPlayerWorldBounds(playerid, 2966.18, -817.4513, 2335.575, 478.7929);
  986. if(modelid == 525) SendClientMessage(playerid,0xFFFF00AA,"You can use the ACTION KEY to Tow cars");
  987. if(IsInModVehicle(playerid))
  988. {
  989. AddNosToVehicle(playerid,pvehicleid[playerid]);
  990. SetVehicleNumberPlate(pvehicleid[playerid],"EVRYSTUF");
  991. }
  992. // format(string128,sizeof(string128),"Debug: Playerid %i is driving vehicle %i",playerid,pvehicleid[playerid]);
  993. // SendClientMessageToAll(COLOR_GREY,string128);
  994. }
  995. case 3: // passenger
  996. {
  997. pvehicleid[playerid] = vehicleid;
  998. pmodelid[playerid] = modelid;
  999. cantrace[playerid] = true;
  1000. // format(string128,sizeof(string128),"Debug: Playerid %i is a passenger in vehicle %i",playerid,pvehicleid[playerid]);
  1001. // SendClientMessageToAll(COLOR_GREY,string128);
  1002. }
  1003. }
  1004. if(newstate == 2 || newstate == 3)
  1005. {
  1006. new str[32];
  1007. format(str, sizeof(str), "~g~%s", vehName[pmodelid[playerid]-400]);
  1008. GameTextForPlayer(playerid, str, 3000, 1);
  1009. }
  1010. return 1;
  1011. }
  1012.  
  1013.  
  1014.  
  1015. forward IsComplexVehicle(vehicleid);
  1016. public IsComplexVehicle(vehicleid) {
  1017. new modmodel = GetVehicleModel(vehicleid);
  1018. switch(modmodel) {
  1019. case 425,432,520,447,464,430,590,570,569,538,537,449,611,610,608,607,606,591,584,450,435:{
  1020. return true; // there are complex vehicles (vehicles w/guns or 2nd function..or generally odd behaving vehicles)
  1021. }
  1022. }
  1023. return false;
  1024. }
  1025. forward IsInModVehicle(playerid);
  1026. public IsInModVehicle(playerid) {
  1027. if(IsPlayerInVehicle(playerid,pvehicleid[playerid]) && pstate[playerid] == PLAYER_STATE_DRIVER) {
  1028. switch(pmodelid[playerid]) {
  1029. case 417,425,430,435,441,446,447,448,449,450,452,453,454,460,461,462,463,464,465,468,469,472,473,476,481,484,487,488,493,497,501,509,510,511,512,513,519,520,521,522,523,537,538,539,548,553,563,564,569,570,577,581,584,586,590,591,592,593,594,595,606,607,608,610,611: {
  1030. return false; // these are non moddable vehicles
  1031. }
  1032. default: return true;
  1033. }
  1034. }
  1035. return false;
  1036. }
  1037. forward AddNosToVehicle(playerid,nosid);
  1038. public AddNosToVehicle(playerid,nosid) {
  1039. if(IsPlayerConnected(playerid)) {
  1040. if(cantrace[playerid] == true) return 1;
  1041. if(IsInModVehicle(playerid)) {
  1042.  
  1043. AddVehicleComponent(nosid, 1010);
  1044. PlayerPlaySound(playerid, 1133, 0, 0, 0);
  1045. }
  1046.  
  1047.  
  1048. }
  1049. return 1;
  1050. }
  1051. forward AddHydroToVehicle(playerid,hydroid);
  1052. public AddHydroToVehicle(playerid,hydroid) {
  1053. if(IsPlayerConnected(playerid)) {
  1054. if(cantrace[playerid] == true) return 1;
  1055. #if defined MODS
  1056. if(IsInModVehicle(playerid) && pstate[playerid] == PLAYER_STATE_DRIVER) { //added playerstate check to keep dumbasses from adding hydraulics (shitty handling) at inconvenient times (before/during race)
  1057. AddVehicleComponent(hydroid, 1087);
  1058. PlayerPlaySound(playerid, 1133, 0, 0, 0);
  1059. }
  1060. #else
  1061. SendClientMessage(playerid, COLOR_ERROR, "***DISABLED*** All vehicle mods are TEMPORARILY disabled while we trace the 0x007F crash");
  1062. #endif //mods
  1063. }
  1064. return 1;
  1065. }
  1066.  
  1067.  
  1068. public OnPlayerSpawn(playerid)
  1069. {
  1070. SetPlayerWorldBounds(playerid, 9999.00, -9999.00, 9999.00, -9999.00);
  1071. PlayerPlaySound(playerid, 1188,0.0,0.0,0.0); // id 1188 stops ALL music
  1072. ResetPlayerWeapons(playerid);
  1073. switch(gTeam[playerid])
  1074. {
  1075. case 0:
  1076. {
  1077. new rand = random(sizeof(gRandomStuntSpawn));
  1078. SetPlayerPos(playerid,gRandomStuntSpawn[rand][0], gRandomStuntSpawn[rand][1], gRandomStuntSpawn[rand][2]);
  1079. SetPlayerFacingAngle(playerid,gRandomStuntSpawn[rand][3]);
  1080. SetPlayerVirtualWorld(playerid,0);
  1081. GivePlayerWeapon(playerid, 12, 1);
  1082. GivePlayerWeapon(playerid, 39, 50);
  1083. GivePlayerWeapon(playerid, 40, 50);
  1084. GivePlayerWeapon(playerid, 30, 999);
  1085. GivePlayerWeapon(playerid, 28, 999);
  1086. SetPlayerArmour(playerid,100.0);
  1087. #if defined RACES
  1088. if(RaceParticipant[playerid]) LeaveRace(playerid);
  1089. #endif // races
  1090. SetPlayerInterior(playerid,0);
  1091. }
  1092. case 5: MilitaryDM(playerid);
  1093. case 7: SawnOffDM(playerid);
  1094. case 8: SniperDM(playerid);
  1095. case 9: RocketDM(playerid);
  1096. case 10: MinigunDM(playerid);
  1097. case 13: HouseDM(playerid);
  1098. case 17: GasDM(playerid);
  1099. case 18: ShipDM(playerid);
  1100. case 20: SwordDM(playerid);
  1101. case 21: DeagleDM(playerid);
  1102.  
  1103. case 100: //afk
  1104. {
  1105. SetPlayerPos(playerid, 2324.33, -1144.79, 1050.71);
  1106. SetPlayerInterior(playerid,12);
  1107. SetCameraBehindPlayer(playerid);
  1108. TogglePlayerControllable(playerid, false);
  1109. }
  1110. }
  1111. return 1;
  1112. }
  1113.  
  1114. // -----------------------------------------------------------------------------
  1115.  
  1116. public OnPlayerDeath(playerid, killerid, reason){
  1117. for(new i;i<sizeof(f_weapons);i++) {
  1118. if(f_weapons[i] == reason) {
  1119. f_killer[killerid]++;
  1120. f_victim[playerid]++;
  1121. f_kills[killerid][playerid]++;
  1122. if(f_killer[killerid] >= 3) {
  1123. Kick(killerid);
  1124. for(new j;j<MAX_PLAYERS;j++) {
  1125. if(f_kills[killerid][j] > 0) {
  1126. f_victim[j] -= f_kills[killerid][j];
  1127. f_kills[killerid][j] = 0;
  1128. if(f_victim[j] < 0) f_victim[j] = 0;
  1129. }
  1130. }
  1131. }
  1132. if(f_victim[playerid] >= 3) {
  1133. Kick(playerid);
  1134. for(new j;j<MAX_PLAYERS;j++) {
  1135. if(f_kills[j][playerid] > 0) {
  1136. f_killer[j] -= f_kills[j][playerid];
  1137. f_kills[j][playerid] = 0;
  1138. if(f_killer[j] < 0) f_killer[j] = 0;
  1139. }
  1140. }
  1141. }
  1142. return 1;
  1143. }
  1144. SendDeathMessage(INVALID_PLAYER_ID,playerid,reason);
  1145. return 1;
  1146. }
  1147. return 1;
  1148. }
  1149.  
  1150. //--------------------------------------------------------------------------------------------------
  1151.  
  1152. public OnPlayerRequestClass(playerid, classid)
  1153. {
  1154. SetPlayerInterior(playerid,0);
  1155. SetPlayerPos(playerid,-2669.0994,1593.9785,217.2739);
  1156. SetPlayerFacingAngle(playerid, 76.26);
  1157. SetPlayerCameraPos(playerid,-2671.8096,1595.7000,218.2739);
  1158. SetPlayerCameraLookAt(playerid,-2669.0994,1593.9785,217.2739);
  1159. new rand = random(sizeof(startMusic));
  1160. PlayerPlaySound(playerid, startMusic[rand],-2669.0994,1593.9785,217.2739); //was 1068
  1161. pskin[playerid] = GetPlayerSkin(playerid);
  1162. return 1;
  1163. }
  1164.  
  1165.  
  1166.  
  1167. //------------------------------------------------------------------------------
  1168.  
  1169. forward GameModeExitFunc();
  1170. public GameModeExitFunc()
  1171. {
  1172. GameModeExit();
  1173. return 1;
  1174. }
  1175.  
  1176. //------------------------------------------------------------------------------
  1177.  
  1178.  
  1179.  
  1180. dcmd_cmd(const playerid, const params[])
  1181. {
  1182. new commsg[256];
  1183. format(commsg, sizeof(commsg), "/tele /dm /car /nos /lock /unlock /fix /flip /join /tuner /wrc /jetpack /settime /anims /magic /pc /smoke /sdance /kill /bot");
  1184. SendClientMessage(playerid, 0xFFFF00AA, commsg);
  1185. return 1;
  1186. #pragma unused params
  1187. }
  1188. dcmd_tele(const playerid, const params[])
  1189. {
  1190. SendClientMessage(playerid, 0x7CFC00FF, "/register /login /chiliad, /airport /tuner /basejump1 /basejump2 /basejump3 /basejump4 /basejump5");
  1191. SendClientMessage(playerid, 0x7CFC00FF, "/ls /lv /sf /canal /pyramid /boardwalk /funpark /rallyup /dirtpit /skydive /beach /bikepark /cannon");
  1192. SendClientMessage(playerid, 0x7CFC00FF, "/desert /ammu /area69 /tankwar /silodm /warehouse /rctrack /ramp /casino");
  1193. return 1;
  1194. #pragma unused params
  1195. }
  1196. dcmd_help(const playerid, const params[])
  1197. {
  1198. SendClientMessage(playerid, 0x7CFC00FF, ">> Type /cmd for commands, /tele for teleports.");
  1199. SendClientMessage(playerid, 0x7CFC00FF, "Want to help keep the server running? Check out http://madoshi.net/donate");
  1200. return 1;
  1201. #pragma unused params
  1202. }
  1203. dcmd_jetpack(playerid,params[]) {
  1204. if(pstate[playerid] != PLAYER_STATE_ONFOOT) return SendClientMessage(playerid, COLOR_ERROR, "You need to be on-foot to use /jetpack");
  1205. GetPlayerPos(playerid, playerx, playery, playerz);
  1206. if(GetPlayerSpecialAction(playerid) == 2) {
  1207. GetPlayerPos(playerid, playerx, playery, playerz);
  1208. SetPlayerPos(playerid, playerx, playery, playerz);
  1209. return 1;
  1210. }
  1211. GetPlayerPos(playerid, playerx, playery, playerz);
  1212. if(playerz < 0) SetPlayerPos(playerid, playerx, playery, playerz+20);
  1213. return SetPlayerSpecialAction(playerid, SPECIAL_ACTION_USEJETPACK);
  1214. #pragma unused params
  1215. }
  1216. dcmd_nos(const playerid, const params[]) {
  1217. if(IsInModVehicle(playerid))
  1218. {
  1219. AddNosToVehicle(playerid,pvehicleid[playerid]);
  1220. PlayerPlaySound(playerid, 1133, 0.0, 0.0, 0.0);
  1221. }
  1222. #pragma unused params
  1223. return 1;
  1224. }
  1225. dcmd_leave(const playerid, const params[]) {
  1226. SetPlayerWorldBounds(playerid, 9999.00, -9999.00, 9999.00, -9999.00);
  1227. if(gTeam[playerid])
  1228. {
  1229. gTeam[playerid] = 0;
  1230. ResetPlayerWeapons(playerid);
  1231. }
  1232. TogglePlayerControllable(playerid,true);
  1233. #if defined RACES
  1234. if(RaceParticipant[playerid]) LeaveRace(playerid);
  1235. #endif // races
  1236. SetPlayerInterior(playerid,0); // wise to place this before setplayerpos
  1237. SetPlayerPos(playerid, -2324.8708,-1622.0394,483.7098);
  1238. return 1;
  1239. #pragma unused params
  1240. }
  1241. dcmd_flip(const playerid, const params[]) {
  1242. #pragma unused params
  1243. if(pstate[playerid] == PLAYER_STATE_DRIVER) { // NEVER EVER EVER USE SetVehiclePos>EX< for this. It will make ppl leave race + dm just for flipping car over
  1244. new Float:X,Float:Y,Float:Z,Float:Angle;
  1245. GetVehiclePos(pvehicleid[playerid],X,Y,Z);
  1246. GetVehicleZAngle(pvehicleid[playerid],Angle);
  1247. SetVehiclePos(pvehicleid[playerid],X,Y,Z+2);
  1248. SetVehicleZAngle(pvehicleid[playerid],Angle);
  1249. return 1;
  1250. } else return SendClientMessage(playerid,COLOR_ERROR,"Error: You must be in a vehicle.");
  1251. }
  1252. dcmd_fix(const playerid, const params[])
  1253. {
  1254. if(pstate[playerid] != PLAYER_STATE_DRIVER && pstate[playerid] != PLAYER_STATE_PASSENGER) return SendClientMessage(playerid, COLOR_ERROR,"Error: You must be in a vehicle to repair.");
  1255. if(IsComplexVehicle(pvehicleid[playerid]))
  1256. {
  1257. SendClientMessage(playerid, COLOR_RED, "VEHICLE REPAIR Error: You do not have a left-handed screwdriver.");
  1258. return 1;
  1259. }
  1260. else if(pvehicleid[playerid] != -1)
  1261. {
  1262. RepairVehicle(pvehicleid[playerid]);
  1263. }
  1264. return 1;
  1265. #pragma unused params
  1266. }
  1267.  
  1268. dcmd_cannon(const playerid, const params[]) {
  1269. if(pstate[playerid] == PLAYER_STATE_DRIVER && pvehicleid[playerid] != -1) SetVehiclePos(pvehicleid[playerid],-499.3635,2578.3311,53.2842);
  1270. else SetPlayerPos(playerid,-516.7750,2596.8813,53.4154);
  1271. GameTextForPlayer(playerid,"Back into the pipe!!",2500,3);
  1272. return 1;
  1273. #pragma unused params
  1274. }
  1275.  
  1276. #if defined MENUS
  1277. dcmd_dm(const playerid, const params[])
  1278. {
  1279. if(pstate[playerid] == PLAYER_STATE_DRIVER) RemovePlayerFromVehicle(playerid);
  1280. if(IsValidMenu(DMM)) ShowMenuForPlayerEx(DMM, playerid);
  1281. // SendClientMessage(playerid, COLOR_YELLOW, "Use the SPACEBAR to select your choice. Use ENTER to close menu.");
  1282. return 1;
  1283. #pragma unused params
  1284. }
  1285. dcmd_car(const playerid, const params[])
  1286. {
  1287. // KillPlayerVehicle(pvehicleid[playerid]);
  1288. if(IsValidMenu(CarM)) ShowMenuForPlayerEx(CarM, playerid);
  1289. return 1;
  1290. #pragma unused params
  1291. }
  1292. dcmd_car2(const playerid, const params[])
  1293. {
  1294. // KillPlayerVehicle(pvehicleid[playerid]);
  1295. if(IsValidMenu(Car2M)) ShowMenuForPlayerEx(Car2M, playerid);
  1296. // SendClientMessage(playerid, COLOR_YELLOW, "Use the SPACEBAR to select your choice. Use ENTER to close menu.");
  1297. return 1;
  1298. #pragma unused params
  1299. }
  1300. dcmd_car3(const playerid, const params[])
  1301. {
  1302. // KillPlayerVehicle(pvehicleid[playerid]);
  1303. if(IsValidMenu(Car3M)) ShowMenuForPlayerEx(Car3M, playerid);
  1304. // SendClientMessage(playerid, COLOR_YELLOW, "Use the SPACEBAR to select your choice. Use ENTER to close menu.");
  1305. return 1;
  1306. #pragma unused params
  1307. }
  1308. dcmd_car4(const playerid, const params[])
  1309. {
  1310. // KillPlayerVehicle(pvehicleid[playerid]);
  1311. if(IsValidMenu(Car4M)) ShowMenuForPlayerEx(Car4M, playerid);
  1312. // SendClientMessage(playerid, COLOR_YELLOW, "Use the SPACEBAR to select your choice. Use ENTER to close menu.");
  1313. return 1;
  1314. #pragma unused params
  1315. }
  1316. #endif //menus
  1317.  
  1318. dcmd_basejump(const playerid, const params[])
  1319. {
  1320. if(pstate[playerid] == PLAYER_STATE_DRIVER) RemovePlayerFromVehicle(playerid);
  1321. if(IsValidMenu(JumpM)) ShowMenuForPlayerEx(JumpM, playerid);
  1322. // SendClientMessage(playerid, COLOR_YELLOW, "Use the SPACEBAR to select your choice. Use ENTER to close menu.");
  1323. return 1;
  1324. #pragma unused params
  1325. }
  1326. dcmd_train(const playerid, const params[])
  1327. {
  1328. if(pstate[playerid] == PLAYER_STATE_DRIVER) RemovePlayerFromVehicle(playerid);
  1329. if(IsValidMenu(TrainM)) ShowMenuForPlayerEx(TrainM, playerid);
  1330. // SendClientMessage(playerid, COLOR_YELLOW, "Use the SPACEBAR to select your choice. Use ENTER to close menu.");
  1331. return 1;
  1332. #pragma unused params
  1333. }
  1334.  
  1335. dcmd_stunt(const playerid, const params[])
  1336. {
  1337. if(pstate[playerid] == PLAYER_STATE_DRIVER) RemovePlayerFromVehicle(playerid);
  1338. if(IsValidMenu(StuntM)) ShowMenuForPlayerEx(StuntM, playerid);
  1339. return 1;
  1340. #pragma unused params
  1341. }
  1342.  
  1343. dcmd_casino(const playerid, const params[])
  1344. {
  1345. if(IsValidMenu(CasinoM)) ShowMenuForPlayerEx(CasinoM, playerid);
  1346. return 1;
  1347. #pragma unused params
  1348. }
  1349. dcmd_weather(const playerid, const params[])
  1350. {
  1351. #pragma unused params
  1352. if(pstate[playerid] == PLAYER_STATE_DRIVER) RemovePlayerFromVehicle(playerid);
  1353. if(IsValidMenu(Weather)) ShowMenuForPlayerEx(Weather,playerid);
  1354. return 1;
  1355. }
  1356.  
  1357. dcmd_dcar(const playerid, const params[])
  1358. {
  1359. if(playercar[playerid] == -1) SendClientMessage(playerid, COLOR_ERROR, "You do not have a car to destroy. Type /car if you want a vehicle.");
  1360. else KillPlayerVehicle(playerid);
  1361. SendClientMessage(playerid, COLOR_CONFIRM, "Your vehicle has been destroyed. You can spawn a new one using /car.");
  1362. return 1;
  1363. #pragma unused params
  1364. }
  1365.  
  1366.  
  1367. dcmd_wrc(const playerid, const params[])
  1368. {
  1369. CreatePlayerVehicle(playerid,560);
  1370. if(pmodelid[playerid] == 560)
  1371. {
  1372. ChangeVehicleColor(playercar[playerid], 103, 103);
  1373. ChangeVehiclePaintjob(playercar[playerid], 1); // "subaru wrc -ish sort-of" paint job
  1374. AddVehicleComponent(playercar[playerid],1166); // alien front bumper
  1375. AddVehicleComponent(playercar[playerid],1140); // xflo rear bumper
  1376. AddVehicleComponent(playercar[playerid],1032); //alien roof vent
  1377. AddVehicleComponent(playercar[playerid],1139); // xflow wing
  1378. AddVehicleComponent(playercar[playerid],1030); // xflow sideskirt 1
  1379. AddVehicleComponent(playercar[playerid],1031); //xflow sideskirt 2
  1380. AddVehicleComponent(playercar[playerid],1080); // wheels 'switch'
  1381. // AddVehicleComponent(playercar[playerid],1029); //xflow exhaust
  1382. SendClientMessage(playerid, COLOR_CONFIRM, "http://swrt.com");
  1383. }
  1384. return 1;
  1385. #pragma unused params
  1386. }
  1387.  
  1388. dcmd_lock(const playerid, const params[])
  1389. {
  1390. if(pstate[playerid] != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_ERROR, "Error: Unable to lock vehicle doors. You must be driver.");
  1391. if(pvehicleid[playerid] != -1)
  1392. {
  1393. foreach(Player,i)
  1394. {
  1395. if(i != playerid)
  1396. {
  1397. SetVehicleParamsForPlayer(pvehicleid[playerid],i,false,true);
  1398. }
  1399. }
  1400. SendClientMessage(playerid, COLOR_CONFIRM, "You have locked the doors of your vehicle");
  1401. }
  1402. return 1;
  1403. #pragma unused params
  1404. }
  1405. dcmd_unlock(const playerid, const params[])
  1406. {
  1407. if(pstate[playerid] != PLAYER_STATE_DRIVER) return SendClientMessage(playerid, COLOR_ERROR, "Error: Unable to unlock vehicle doors");
  1408. if(pvehicleid[playerid] != -1)
  1409. {
  1410. foreach(Player,i) if(i != playerid)
  1411. {
  1412. SetVehicleParamsForPlayer(pvehicleid[playerid],i,false,false);
  1413. }
  1414. SendClientMessage(playerid, COLOR_CONFIRM, "You have unlocked the doors of your vehicle");
  1415. }
  1416. else SendClientMessage(playerid,COLOR_ERROR,"Error: Vehicle already unlocked. To lock vehicle, type /lock");
  1417. return 1;
  1418. #pragma unused params
  1419. }
  1420. dcmd_unlockall(const playerid, const params[])
  1421. {
  1422. if(IsPlayerAdmin(playerid))
  1423. {
  1424. for(new o = 0;o < MAX_VEHICLES; o++)
  1425. {
  1426. foreach(Player,i) SetVehicleParamsForPlayer(o,i,false,false);
  1427. }
  1428. format(string128,sizeof(string128),"Administrator %s has unlocked the doors of all vehicles",pname[playerid]);
  1429. SendClientMessageToAll(COLOR_YELLOW,string128);
  1430. }
  1431. return 1;
  1432. #pragma unused params
  1433. }
  1434. dcmd_pc(const playerid, const params[]) {
  1435. GivePlayerWeapon(playerid, 46, 1);
  1436. SendClientMessage(playerid, COLOR_CONFIRM, "Parachutes! Don't leave home without them!");
  1437. return 1;
  1438. #pragma unused params
  1439. }
  1440. dcmd_bot(const playerid, const params[])
  1441. {
  1442. if(!params[0]) return SendClientMessage(playerid,COLOR_RED,"Usage: /message [Text]");
  1443. new test[128];
  1444. format(test, sizeof(test), "Me: %s", params);
  1445. SendClientMessage(playerid, 0xFFFFFFFF, test);
  1446. format(test, sizeof(test), params);
  1447. SendPlayerMessageToCleverbot(playerid, test);
  1448. // SendClientMessage(playerid, 0xFFFFFFFF, test);
  1449. return 1;
  1450. }
  1451. dcmd_sdance(const playerid, params[]) {
  1452. if(!params[0]) return SendClientMessage(playerid, COLOR_ERROR, "Error: To change paint jobs type '/sdance <0-5>'. Example: /sdance 1");
  1453. new id = strval(params);
  1454. switch(id) {
  1455. case 1: SetPlayerSpecialAction(playerid,5);
  1456. case 2: SetPlayerSpecialAction(playerid,6);
  1457. case 3: SetPlayerSpecialAction(playerid,7);
  1458. case 4: SetPlayerSpecialAction(playerid,8);
  1459. default: SendClientMessage(playerid,COLOR_ERROR,"Error: dance type must be 1 - 4");
  1460. }
  1461. return 1;
  1462. }
  1463. dcmd_smoke(const playerid, const params[]) {
  1464. SetPlayerSpecialAction(playerid, SPECIAL_ACTION_SMOKE_CIGGY);
  1465. return 1;
  1466. #pragma unused params
  1467. }
  1468. dcmd_kill(const playerid, const params[]) {
  1469. RemovePlayerFromVehicle(playerid);
  1470. SetPlayerHealth(playerid, 0);
  1471. return 1;
  1472. #pragma unused params
  1473. }
  1474. //-----------------------------------------------------------
  1475. Float:GetXYInFrontOfPlayer(playerid, &Float:xx, &Float:yy, Float:distance) // Created by Y_Less
  1476. {
  1477. new Float:a;
  1478. GetPlayerPos(playerid, xx, yy, a);
  1479. if(pstate[playerid] == PLAYER_STATE_DRIVER && pvehicleid[playerid]) GetVehicleZAngle(pvehicleid[playerid], a);
  1480. else GetPlayerFacingAngle(playerid, a);
  1481. xx += (distance * floatsin(-a, degrees));
  1482. yy += (distance * floatcos(-a, degrees));
  1483. return a;
  1484. }
  1485.  
  1486. stock Float:GetXYInFrontOfVehicle(vehicleid, &Float:xx, &Float:yy, Float:distance) // Created by Y_Less
  1487. {
  1488. new Float:a;
  1489. GetVehiclePos(vehicleid, xx, yy, a);
  1490. GetVehicleZAngle(vehicleid, a);
  1491. xx += (distance * floatsin(-a, degrees));
  1492. yy += (distance * floatcos(-a, degrees));
  1493. return a;
  1494. }
  1495.  
  1496. dcmd_magic(const playerid, const params[])
  1497. {
  1498. GetPlayerPos(playerid,playerx,playery,playerz);
  1499. GetXYInFrontOfPlayer(playerid, playerx, playery, 25);
  1500. CreateExplosion(playerx,playery,playerz,11,100);
  1501. return 1;
  1502. #pragma unused params
  1503. }
  1504.  
  1505. //------------------------------------------------------------
  1506. //==============================================================================
  1507. //----------------------------- TELEPORTS ------------------------------------
  1508. //==============================================================================
  1509. dcmd_ammu(const playerid, const params[])
  1510. {
  1511. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1512. SetPlayerPos(playerid,2332.9482,61.5840,26.7058);
  1513. return 1;
  1514. #pragma unused params
  1515. }
  1516. dcmd_ls(const playerid, const params[])
  1517. {
  1518. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1519. if(pstate[playerid] == PLAYER_STATE_DRIVER && pvehicleid[playerid] != -1) SetVehiclePos(pvehicleid[playerid],1511.2477,-1701.0334,14.0469);
  1520. else SetPlayerPos(playerid,1480.1976,-1640.7338, 14.1484);
  1521. SetPlayerVirtualWorld(playerid,0);
  1522. return 1;
  1523. #pragma unused params
  1524. }
  1525.  
  1526. dcmd_sf(const playerid, const params[])
  1527. {
  1528. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1529. if(pstate[playerid] == PLAYER_STATE_DRIVER && pvehicleid[playerid] != -1) SetVehiclePos(pvehicleid[playerid],-1686.5302,-420.0526,16.1402);
  1530. else SetPlayerPos(playerid,-1658.0809,-414.6946,14.1484);
  1531. SetPlayerVirtualWorld(playerid,0);
  1532. return 1;
  1533. #pragma unused params
  1534. }
  1535. dcmd_lv(const playerid, const params[])
  1536. {
  1537. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1538. if(pstate[playerid] == PLAYER_STATE_DRIVER && pvehicleid[playerid] != -1) SetVehiclePos(pvehicleid[playerid],1645.6034,1602.0723,10.8203);
  1539. else SetPlayerPos(playerid,1645.967163, 1625.352295, 18.482553);
  1540. SetPlayerVirtualWorld(playerid,0);
  1541. return 1;
  1542. #pragma unused params
  1543. }
  1544. dcmd_desert(const playerid, const params[])
  1545. {
  1546. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1547. if(pstate[playerid] == PLAYER_STATE_DRIVER && pvehicleid[playerid] != -1) SetVehiclePos(pvehicleid[playerid],-396.8278,2236.2295,42.4297);
  1548. else SetPlayerPos(playerid,-374.2741,2242.7312,48.0599);
  1549. SetPlayerVirtualWorld(playerid,0);
  1550. return 1;
  1551. #pragma unused params
  1552. }
  1553. dcmd_skydive(const playerid, const params[]) {
  1554. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1555. SetPlayerInterior(playerid,0); // wise to place this before setplayerpos
  1556. SetPlayerPos(playerid, 1951.4064,-2436.0005,1000.0000);
  1557. SendClientMessage(playerid, 0xFFFF00AA, "You brought the parachute, right?");
  1558. return 1;
  1559. #pragma unused params
  1560. }
  1561. dcmd_warehouse(const playerid, const params[]) {
  1562. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1563. SetPlayerInterior(playerid,0); // wise to place this before setplayerpos
  1564. SetPlayerPos(playerid, 2131.1143,-2280.1877,20.6643);
  1565. return 1;
  1566. #pragma unused params
  1567. }
  1568. dcmd_rctrack(const playerid, const params[]) {
  1569. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1570. SetPlayerInterior(playerid,10); // wise to place this before setplayerpos
  1571. SetPlayerPos(playerid, -972.4957,1060.9830,1345.6693);
  1572. return 1;
  1573. #pragma unused params
  1574. }
  1575. dcmd_bikepark(const playerid, const params[]) {
  1576. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1577. SetPlayerInterior(playerid,0); // wise to place this before setplayerpos
  1578. SetPlayerPos(playerid, 1920.5529,-1356.7454,14.8103);
  1579. return 1;
  1580. #pragma unused params
  1581. }
  1582. dcmd_beach(const playerid, const params[]) {
  1583. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1584. SetPlayerInterior(playerid,0); // wise to place this before setplayerpos
  1585. SetPlayerPos(playerid, 2858.4048,-2125.3389,10.2529);
  1586. return 1;
  1587. #pragma unused params
  1588. }
  1589. dcmd_basejump1(const playerid, const params[]) {
  1590. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1591. SetPlayerInterior(playerid,0); // wise to place this before setplayerpos
  1592. SetPlayerPos(playerid, 1574.8966,-1249.2684,277.8787);
  1593. SendClientMessage(playerid, 0xFFFF00AA, "Someday it'll be better without the 'chute.");
  1594. return 1;
  1595. #pragma unused params
  1596. }
  1597. dcmd_basejump2(const playerid, const params[]) {
  1598. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1599. SetPlayerInterior(playerid,0); // wise to place this before setplayerpos
  1600. SetPlayerPos(playerid, 1539.4971,-1371.4875,328.3436);
  1601. SendClientMessage(playerid, 0xFFFF00AA, "Someday it'll be better without the 'chute.");
  1602. return 1;
  1603. #pragma unused params
  1604. }
  1605. dcmd_basejump3(const playerid, const params[]) {
  1606. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1607. SetPlayerInterior(playerid,0); // wise to place this before setplayerpos
  1608. SetPlayerPos(playerid, -225.1428,1393.6865,172.4141);
  1609. return 1;
  1610. #pragma unused params
  1611. }
  1612. dcmd_basejump4(const playerid, const params[]) {
  1613. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1614. SetPlayerInterior(playerid,0); // wise to place this before setplayerpos
  1615. SetPlayerPos(playerid, -2872.1931,2606.3821,271.5319);
  1616. SendClientMessage(playerid, 0xFFFF00AA, "Someday it'll be better without the 'chute.");
  1617. return 1;
  1618. #pragma unused params
  1619. }
  1620. dcmd_basejump5(const playerid, const params[]) {
  1621. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1622. SetPlayerInterior(playerid,0); // wise to place this before setplayerpos
  1623. SetPlayerPos(playerid, -341.6077,1601.4565,164.4840);
  1624. SendClientMessage(playerid, 0xFFFF00AA, "Someday it'll be better without the 'chute.");
  1625. return 1;
  1626. #pragma unused params
  1627. }
  1628. dcmd_chiliad(const playerid, const params[]) {
  1629. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1630. SetPlayerInterior(playerid,0); // wise to place this before setplayerpos
  1631. SetPlayerPos(playerid, -2324.8708,-1622.0394,483.7098);
  1632. SendClientMessage(playerid, 0xFFFF00AA, "Oh we'll be comin' down the mountain...");
  1633. return 1;
  1634. #pragma unused params
  1635. }
  1636. dcmd_airport(const playerid, const params[]) {
  1637. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1638. SetPlayerInterior(playerid,0); // wise to place this before setplayerpos
  1639. SetPlayerPos(playerid, 1911.2904,-2310.3076,13.5469);
  1640. return 1;
  1641. #pragma unused params
  1642. }
  1643. dcmd_rallyup(const playerid, const params[]) {
  1644. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1645. SetPlayerInterior(playerid,0); // wise to place this before setplayerpos
  1646. SetPlayerPos(playerid, -2409.2947,-2190.0410,34.0391);
  1647. SendClientMessage(playerid, 0xFFFF00AA, "Can I kick the tiiiires??");
  1648. return 1;
  1649. #pragma unused params
  1650. }
  1651. dcmd_boneyard(const playerid, const params[]) {
  1652. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1653. SetPlayerInterior(playerid,0); // wise to place this before setplayerpos
  1654. SetPlayerPos(playerid, 410.8556,2533.2900,19.1484);
  1655. return 1;
  1656. #pragma unused params
  1657. }
  1658. dcmd_dirtpit(const playerid, const params[]) {
  1659. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1660. SetPlayerInterior(playerid,0); // wise to place this before setplayerpos
  1661. SetPlayerPos(playerid, 563.2621,914.0405,-42.9609);
  1662. return 1;
  1663. #pragma unused params
  1664. }
  1665. dcmd_pyramid(const playerid, const params[]) {
  1666. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1667. SetPlayerInterior(playerid,0); // wise to place this before setplayerpos
  1668. SetPlayerPos(playerid, 2355.9192,1512.0405,42.8203);
  1669. return 1;
  1670. #pragma unused params
  1671. }
  1672. dcmd_area69(const playerid, const params[]) {
  1673. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1674. SetPlayerInterior(playerid,0); // wise to place this before setplayerpos
  1675. SetPlayerPos(playerid, 213.9076,1895.2288,16.3227);
  1676. return 1;
  1677. #pragma unused params
  1678. }
  1679. dcmd_silodm(const playerid, const params[]) {
  1680. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1681. SetPlayerInterior(playerid,0); // wise to place this before setplayerpos
  1682. SetPlayerPos(playerid, 270.0655,1883.5199,-30.0938);
  1683. return 1;
  1684. #pragma unused params
  1685. }
  1686.  
  1687. dcmd_boardwalk(const playerid, const params[]) {
  1688. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1689. SetPlayerInterior(playerid,0); // wise to place this before setplayerpos
  1690. SetPlayerPos(playerid, 850.5974,-1841.2968,12.6037);
  1691. return 1;
  1692. #pragma unused params
  1693. }
  1694. dcmd_funpark(const playerid, const params[]) {
  1695. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1696. SetPlayerInterior(playerid,0); // wise to place this before setplayerpos
  1697. SetPlayerPos(playerid, 381.4741,-2051.8933,7.8359);
  1698. return 1;
  1699. #pragma unused params
  1700. }
  1701. dcmd_locos(const playerid, const params[]) {
  1702. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1703. SetPlayerInterior(playerid,0); // wise to place this before setplayerpos
  1704. SetPlayerPos(playerid, 2645.3501,-2014.5208,13.5579);
  1705. return 1;
  1706. #pragma unused params
  1707. }
  1708. dcmd_waa(const playerid, const params[]) {
  1709. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1710. SetPlayerInterior(playerid,0); // wise to place this before setplayerpos
  1711. SetPlayerPos(playerid, -2689.2144,217.7596,4.1797);
  1712. return 1;
  1713. #pragma unused params
  1714. }
  1715. dcmd_canal(const playerid, const params[]) {
  1716. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1717. SetPlayerInterior(playerid,0); // wise to place this before setplayerpos
  1718. SetPlayerPos(playerid, 2559.4148,-2169.0544,-0.2188);
  1719. SetPlayerFacingAngle(playerid, 226.7265);
  1720. return 1;
  1721. #pragma unused params
  1722. }
  1723. dcmd_ramp(const playerid, const params[]) {
  1724. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1725. if (IsPlayerInAnyVehicle(playerid))
  1726. {
  1727. new VehicleID = GetPlayerVehicleID(playerid);
  1728. SetVehiclePos(VehicleID, -695.9377,2349.9016,127.6754);
  1729. SetVehicleZAngle(VehicleID, 155.0886);
  1730. SetPlayerInterior(playerid,0);
  1731. return 1;
  1732. }
  1733. else
  1734. {
  1735. SetPlayerInterior(playerid,0); // wise to place this before setplayerpos
  1736. SetPlayerPos(playerid, -658.0438,2300.2881,135.8234);
  1737. return 1;
  1738. #pragma unused params
  1739. }
  1740. }
  1741. //tuner subroutine
  1742. dcmd_tuner(const playerid, const params[])
  1743. {
  1744. if(gTeam[playerid] || RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_RED,"You must type /leave to exit the race/DM before you can use this command.");
  1745. if (GetPlayerState(playerid) != PLAYER_STATE_DRIVER)
  1746. {
  1747. SendClientMessage(playerid, 0xFFFF00AA, "You must be in a vehicle!");
  1748. return 1;
  1749. }
  1750. new vehicleid = GetPlayerVehicleID(playerid);
  1751. new modelid = GetVehicleModel(vehicleid);
  1752. new modplace;
  1753. switch (modelid)
  1754. {
  1755. case 432,425,520,447: modplace = 1; // War Vehicles
  1756. case 560,562,561,558,565,559: modplace = 2; // WAA
  1757. case 534,535,536,567,575,576: modplace = 3; // LLC
  1758. case 401,402,404,405,
  1759. 409,410,411,412,415,418,
  1760. 419,420,421,422,426,429,
  1761. 436,438,439,442,445,451,
  1762. 458,466,467,474,475,477,
  1763. 478,479,480,489,491,492,
  1764. 496,500,506,507,516,517,
  1765. 518,526,527,529,533,540,
  1766. 541,542,545,546,547,549,
  1767. 550,551,555,566,579,580,
  1768. 585,587,589,600,602,603: modplace = 4; // TF
  1769. default:modplace = 0;
  1770. }
  1771. switch (modplace)
  1772. {
  1773. case 1:GameTextForPlayer(playerid,"I don't think so, Dave.",5000,5);
  1774. case 2:
  1775. {
  1776. SetVehiclePos(vehicleid, -2689.2144,217.7596,4.1797);
  1777. SetVehicleZAngle(vehicleid, 90.0000);
  1778. SetPlayerInterior(playerid,0);
  1779. GameTextForPlayer(playerid,"Wheel Arch Angels",5000,5);
  1780. SendClientMessage(playerid,0xFFFFFFAA, "IF YOUR CLIENT CRASHES,TURN YOUR \
  1781. WINDOWS AUDIO ACCELERATION DOWN");
  1782. }
  1783. case 3:
  1784. {
  1785. SetVehiclePos(vehicleid, 2645.3501,-2014.5208,13.5579);
  1786. SetVehicleZAngle(vehicleid, 169.2511);
  1787. SetPlayerInterior(playerid,0);
  1788. GameTextForPlayer(playerid,"Locos Low",5000,5);
  1789. SendClientMessage(playerid,0xFFFFFFAA, "IF YOUR CLIENT CRASHES,TURN YOUR \
  1790. WINDOWS AUDIO ACCELERATION DOWN");
  1791. }
  1792. case 4:
  1793. {
  1794. SetVehiclePos(vehicleid, -1917.6486,222.2715,35.0352);
  1795. SetVehicleZAngle(vehicleid, 50.3251);
  1796. SetPlayerInterior(playerid,0);
  1797. GameTextForPlayer(playerid,"Transfender",5000,5);
  1798. SendClientMessage(playerid,0xFFFFFFAA, "IF YOUR CLIENT CRASHES,TURN YOUR \
  1799. WINDOWS AUDIO ACCELERATION DOWN");
  1800. }
  1801. default:SendClientMessage(playerid, 0xFFFF00AA, "This vehicle is not modifiable");
  1802. }
  1803. return 1;
  1804. #pragma unused params
  1805. }
  1806.  
  1807.  
  1808.  
  1809.  
  1810. // =============================================================================
  1811. //------------------------ YRACE Commands ----------------------------------
  1812. // =============================================================================
  1813. #if defined RACES
  1814. dcmd_racehelp(const playerid, const params[]) {
  1815. #pragma unused params
  1816. if(IsPlayerAdmin(playerid)) {
  1817. SendClientMessage(playerid, COLOR_GREEN, "Yagu's race script racing help:");
  1818. SendClientMessage(playerid, COLOR_WHITE, "/loadrace [name] to load a track and start it. Use /join (while in vehicle) to join, and /ready");
  1819. SendClientMessage(playerid, COLOR_WHITE, "once at start to begin the race once others are ready as well. /leave to leave");
  1820. SendClientMessage(playerid, COLOR_WHITE, "the race./endrace to aborts the race. /bestlap and /bestrace can be used to");
  1821. SendClientMessage(playerid, COLOR_WHITE, "display record times for the races, you can also specify a race to see the");
  1822. SendClientMessage(playerid, COLOR_WHITE, "times for it. For info on building races, see /buildhelp. For additional");
  1823. SendClientMessage(playerid, COLOR_WHITE, "settings, see /raceadmin.");
  1824. }
  1825. return 1;
  1826. }
  1827.  
  1828. dcmd_buildhelp(const playerid, const params[]) {
  1829. #pragma unused params
  1830. SendClientMessage(playerid, COLOR_GREEN, "Yagu's race script building help:");
  1831. SendClientMessage(playerid, COLOR_WHITE, "/buildrace to start building, /cp for new a checkpoint, /scp to select an old");
  1832. SendClientMessage(playerid, COLOR_WHITE, "checkpoint, /dcp to delete, /mcp to move and /rcp to replace with a new one.");
  1833. SendClientMessage(playerid, COLOR_WHITE, "/editrace to load a race to editor. /saverace [name] to save the race and");
  1834. SendClientMessage(playerid, COLOR_WHITE, "/buildmenu to set racemode/laps/etc. For info on racing itself, see /racehelp");
  1835. SendClientMessage(playerid, COLOR_WHITE, "For additional settings, see /raceadmin.");
  1836. return 1;
  1837. }
  1838.  
  1839.  
  1840. dcmd_buildrace(const playerid, const params[]) {
  1841. #pragma unused params
  1842. if(BuildAdmin == 1 && !IsPlayerAdmin(playerid)) return 1;
  1843. if(RaceBuilders[playerid] != 0) {
  1844. SendClientMessage(playerid, COLOR_YELLOW, "You are already building a race, dork.");
  1845. }
  1846. else if(RaceParticipant[playerid]>0) {
  1847. SendClientMessage(playerid, COLOR_YELLOW, "You are participating in a race, can't build a race.");
  1848. }
  1849. else {
  1850. new slot;
  1851. slot=GetBuilderSlot(playerid);
  1852. if(slot == 0) {
  1853. SendClientMessage(playerid, COLOR_YELLOW, "No builderslots available!");
  1854. return 1;
  1855. }
  1856. format(string128,sizeof(string128),"You are now building a race (Slot: %d)",slot);
  1857. SendClientMessage(playerid, COLOR_GREEN, string128);
  1858. RaceBuilders[playerid]=slot;
  1859. BCurrentCheckpoints[b(playerid)]=0;
  1860. Bracemode[b(playerid)]=0;
  1861. Blaps[b(playerid)]=0;
  1862. BAirrace[b(playerid)] = 0;
  1863. BCPsize[b(playerid)] = 8.0;
  1864. }
  1865. return 1;
  1866. }
  1867.  
  1868. dcmd_cp(const playerid, const params[]) {
  1869. #pragma unused params
  1870. if(RaceBuilders[playerid] != 0 && BCurrentCheckpoints[b(playerid)] < MAX_RACECHECKPOINTS) {
  1871. GetPlayerPos(playerid,playerx,playery,playerz);
  1872. format(string128,sizeof(string128),"Checkpoint %d created: %f,%f,%f.",BCurrentCheckpoints[b(playerid)],playerx,playery,playerz);
  1873. SendClientMessage(playerid, COLOR_GREEN, string128);
  1874. BRaceCheckpoints[b(playerid)][BCurrentCheckpoints[b(playerid)]][0]=playerx;
  1875. BRaceCheckpoints[b(playerid)][BCurrentCheckpoints[b(playerid)]][1]=playery;
  1876. BRaceCheckpoints[b(playerid)][BCurrentCheckpoints[b(playerid)]][2]=playerz;
  1877. BSelectedCheckpoint[b(playerid)]=BCurrentCheckpoints[b(playerid)];
  1878. SetBRaceCheckpoint(playerid,BCurrentCheckpoints[b(playerid)],-1);
  1879. BCurrentCheckpoints[b(playerid)]++;
  1880. }
  1881. else if(RaceBuilders[playerid] != 0 && BCurrentCheckpoints[b(playerid)] == MAX_RACECHECKPOINTS) {
  1882. format(string128,sizeof(string128),"Sorry, maximum amount of checkpoints reached (%d).",MAX_RACECHECKPOINTS);
  1883. SendClientMessage(playerid, COLOR_YELLOW, string128);
  1884. }
  1885. else SendClientMessage(playerid, COLOR_RED, "You are not building a race!");
  1886. return 1;
  1887. }
  1888.  
  1889. dcmd_scp(const playerid, const params[]) {
  1890. new sele, tmp[128], idx;
  1891. tmp = strtok(params, idx);
  1892. if(!tmp[0]) {
  1893. SendClientMessage(playerid, COLOR_WHITE, "USAGE: /scp [checkpoint]");
  1894. return 1;
  1895. }
  1896. sele = strval(tmp);
  1897. if(RaceBuilders[playerid] != 0) {
  1898. if(sele>BCurrentCheckpoints[b(playerid)]-1 || BCurrentCheckpoints[b(playerid)] < 1 || sele < 0) {
  1899. SendClientMessage(playerid, COLOR_YELLOW, "Invalid checkpoint!");
  1900. return 1;
  1901. }
  1902. format(string128,sizeof(string128),"Selected checkpoint %d.",sele);
  1903. SendClientMessage(playerid, COLOR_GREEN, string128);
  1904. BActiveCP(playerid,sele);
  1905. BSelectedCheckpoint[b(playerid)]=sele;
  1906. }
  1907. else {
  1908. SendClientMessage(playerid, COLOR_RED, "You are not building a race!");
  1909. }
  1910. return 1;
  1911. }
  1912.  
  1913. dcmd_rcp(const playerid, const params[]) {
  1914. #pragma unused params
  1915. if(RaceBuilders[playerid] == 0) {
  1916. SendClientMessage(playerid, COLOR_RED, "You are not building a race!");
  1917. return 1;
  1918. }
  1919. else if(BCurrentCheckpoints[b(playerid)] < 1) {
  1920. SendClientMessage(playerid, COLOR_YELLOW, "No checkpoint to replace!");
  1921. return 1;
  1922. }
  1923. GetPlayerPos(playerid,playerx,playery,playerz);
  1924. format(string128,sizeof(string128),"Checkpoint %d replaced: %f,%f,%f.",BSelectedCheckpoint[b(playerid)],playerx,playery,playerz);
  1925. SendClientMessage(playerid, COLOR_GREEN, string128);
  1926. BRaceCheckpoints[b(playerid)][BSelectedCheckpoint[b(playerid)]][0]=playerx;
  1927. BRaceCheckpoints[b(playerid)][BSelectedCheckpoint[b(playerid)]][1]=playery;
  1928. BRaceCheckpoints[b(playerid)][BSelectedCheckpoint[b(playerid)]][2]=playerz;
  1929. BActiveCP(playerid,BSelectedCheckpoint[b(playerid)]);
  1930. return 1;
  1931. }
  1932.  
  1933. dcmd_mcp(const playerid, const params[]) {
  1934. if(RaceBuilders[playerid] == 0) {
  1935. SendClientMessage(playerid, COLOR_RED, "You are not building a race!");
  1936. return 1;
  1937. }
  1938. else if(BCurrentCheckpoints[b(playerid)] < 1) {
  1939. SendClientMessage(playerid, COLOR_YELLOW, "No checkpoint to move!");
  1940. return 1;
  1941. }
  1942. new idx, direction, dir[64];
  1943. dir=strtok(params, idx);
  1944. new Float:amount=floatstr(strtok(params,idx));
  1945. if(amount == 0.0 || (dir[0] != 'x' && dir[0]!='y' && dir[0]!='z')) {
  1946. SendClientMessage(playerid, COLOR_WHITE, "USAGE: /mcp [x,y or z] [amount]");
  1947. return 1;
  1948. }
  1949. if(dir[0] == 'x') direction=0;
  1950. else if(dir[0] == 'y') direction=1;
  1951. else if(dir[0] == 'z') direction=2;
  1952. BRaceCheckpoints[b(playerid)][BSelectedCheckpoint[b(playerid)]][direction]=BRaceCheckpoints[b(playerid)][BSelectedCheckpoint[b(playerid)]][direction]+amount;
  1953. BActiveCP(playerid,BSelectedCheckpoint[b(playerid)]);
  1954. return 1;
  1955. }
  1956.  
  1957. dcmd_dcp(const playerid, const params[]) {
  1958. #pragma unused params
  1959. if(RaceBuilders[playerid] == 0) {
  1960. SendClientMessage(playerid, COLOR_RED, "You are not building a race!");
  1961. return 1;
  1962. }
  1963. else if(BCurrentCheckpoints[b(playerid)] < 1) {
  1964. SendClientMessage(playerid, COLOR_YELLOW, "No checkpoint to delete!");
  1965. return 1;
  1966. }
  1967. for(new i=BSelectedCheckpoint[b(playerid)];i<BCurrentCheckpoints[b(playerid)];i++) {
  1968. BRaceCheckpoints[b(playerid)][i][0]=BRaceCheckpoints[b(playerid)][i+1][0];
  1969. BRaceCheckpoints[b(playerid)][i][1]=BRaceCheckpoints[b(playerid)][i+1][1];
  1970. BRaceCheckpoints[b(playerid)][i][2]=BRaceCheckpoints[b(playerid)][i+1][2];
  1971.  
  1972. }
  1973. BCurrentCheckpoints[b(playerid)]--;
  1974. BSelectedCheckpoint[b(playerid)]--;
  1975. if(BCurrentCheckpoints[b(playerid)] < 1) {
  1976. DisablePlayerRaceCheckpoint(playerid);
  1977. BSelectedCheckpoint[b(playerid)]=0;
  1978. return 1;
  1979. }
  1980. else if(BSelectedCheckpoint[b(playerid)] < 0) {
  1981. BSelectedCheckpoint[b(playerid)]=0;
  1982. }
  1983. BActiveCP(playerid,BSelectedCheckpoint[b(playerid)]);
  1984. SendClientMessage(playerid,COLOR_GREEN,"Checkpoint deleted!");
  1985. return 1;
  1986. }
  1987. dcmd_clearrace(const playerid, const params[]) {
  1988. #pragma unused params
  1989. if(RaceBuilders[playerid] != 0) clearrace(playerid);
  1990. else SendClientMessage(playerid, COLOR_RED, "You are not building a race!");
  1991. return 1;
  1992. }
  1993. dcmd_editrace(const playerid, const params[]) {
  1994. if(RaceBuilders[playerid] == 0) {
  1995. SendClientMessage(playerid, COLOR_RED, "You are not building a race!");
  1996. return 1;
  1997. }
  1998. if(BCurrentCheckpoints[b(playerid)]>0) {
  1999. for(new i=0;i<BCurrentCheckpoints[b(playerid)];i++) {
  2000. BRaceCheckpoints[b(playerid)][i][0]=0.0;
  2001. BRaceCheckpoints[b(playerid)][i][1]=0.0;
  2002. BRaceCheckpoints[b(playerid)][i][2]=0.0;
  2003.  
  2004. }
  2005. BCurrentCheckpoints[b(playerid)]=0;
  2006. }
  2007. new tmp[64],idx;
  2008. tmp = strtok(params, idx);
  2009. if(!tmp[0]) {
  2010. SendClientMessage(playerid, COLOR_WHITE, "USAGE: /editrace [name]");
  2011. return 1;
  2012. }
  2013. new race_name[32],templine[42];
  2014. format(race_name,sizeof(race_name), "%s.yr",tmp);
  2015. if(!fexist(race_name)) {
  2016. format(string128,sizeof(string128), "The race \"%s\" doesn't exist.",tmp);
  2017. SendClientMessage(playerid, COLOR_RED, string128);
  2018. return 1;
  2019. }
  2020. BCurrentCheckpoints[b(playerid)]=-1;
  2021. new File:f, i;
  2022. f = fopen(race_name, io_read);
  2023. fread(f,templine,sizeof(templine));
  2024. if(templine[0] == 'Y') { //Checking if the racefile is v0.2+
  2025. new fileversion;
  2026. strtok(templine,i); // read off YRACE
  2027. fileversion = strval(strtok(templine,i)); // read off the file version
  2028. if(fileversion > RACEFILE_VERSION) {
  2029. format(string128,sizeof(string128),"Race \'%s\' is created with a newer version of YRACE, unable to load.",tmp);
  2030. SendClientMessage(playerid,COLOR_RED,string128);
  2031. return 1;
  2032. }
  2033. strtok(templine,i); // read off RACEBUILDER
  2034. Bracemode[b(playerid)] = strval(strtok(templine,i)); // read off racemode
  2035. Blaps[b(playerid)] = strval(strtok(templine,i)); // read off amount of laps
  2036. if(fileversion >= 2) {
  2037. BAirrace[b(playerid)] = strval(strtok(templine,i));
  2038. BCPsize[b(playerid)] = floatstr(strtok(templine,i));
  2039. }
  2040. else {
  2041. BAirrace[b(playerid)] = 0;
  2042. BCPsize[b(playerid)] = 8.0;
  2043. }
  2044. fread(f,templine,sizeof(templine)); // read off best race times, not saved due to editing the track
  2045. fread(f,templine,sizeof(templine)); // read off best lap times, -||-
  2046. }
  2047. else {//Otherwise add the lines as checkpoints, the file is made with v0.1 (or older) version of the script.
  2048. BCurrentCheckpoints[b(playerid)]++;
  2049. BRaceCheckpoints[b(playerid)][BCurrentCheckpoints[b(playerid)]][0] = floatstr(strtok(templine,i));
  2050. BRaceCheckpoints[b(playerid)][BCurrentCheckpoints[b(playerid)]][1] = floatstr(strtok(templine,i));
  2051. BRaceCheckpoints[b(playerid)][BCurrentCheckpoints[b(playerid)]][2] = floatstr(strtok(templine,i));
  2052. }
  2053. while(fread(f,templine,sizeof(templine),false)) {
  2054. BCurrentCheckpoints[b(playerid)]++;
  2055. i=0;
  2056. BRaceCheckpoints[b(playerid)][BCurrentCheckpoints[b(playerid)]][0] = floatstr(strtok(templine,i));
  2057. BRaceCheckpoints[b(playerid)][BCurrentCheckpoints[b(playerid)]][1] = floatstr(strtok(templine,i));
  2058. BRaceCheckpoints[b(playerid)][BCurrentCheckpoints[b(playerid)]][2] = floatstr(strtok(templine,i));
  2059. }
  2060. fclose(f);
  2061. BCurrentCheckpoints[b(playerid)]++; // # of next CP to be created
  2062. format(string128,sizeof(string128),"Race \"%s\" has been loaded for editing. (%d checkpoints)",tmp,BCurrentCheckpoints[b(playerid)]);
  2063. SendClientMessage(playerid, COLOR_GREEN,string128);
  2064. return 1;
  2065. }
  2066.  
  2067. dcmd_saverace(const playerid, const params[]) {
  2068. if(RaceBuilders[playerid] != 0) {
  2069. new tmp[64], idx;
  2070. tmp = strtok(params, idx);
  2071. if(!tmp[0]) {
  2072. SendClientMessage(playerid, COLOR_WHITE, "USAGE: /saverace [name]");
  2073. return 1;
  2074. }
  2075. if(BCurrentCheckpoints[b(playerid)] < 2) {
  2076. SendClientMessage(playerid, COLOR_YELLOW, "You need atleast 2 checkpoints to save!");
  2077. return 1;
  2078. }
  2079. new race_name[32],templine[42];
  2080. format(race_name, sizeof(race_name), "%s.yr",tmp);
  2081. if(fexist(race_name)) {
  2082. format(string128,sizeof(string128), "Race \"%s\" already exists.",tmp);
  2083. SendClientMessage(playerid, COLOR_RED, string128);
  2084. return 1;
  2085. }
  2086. new File:f, Bcreator[MAX_PLAYER_NAME];
  2087. GetPlayerName(playerid, Bcreator, MAX_PLAYER_NAME);
  2088. f = fopen(race_name,io_write);
  2089. format(templine,sizeof(templine),"YRACE %d %s %d %d %d %f\n", RACEFILE_VERSION, Bcreator, Bracemode[b(playerid)], Blaps[b(playerid)], BAirrace[b(playerid)], BCPsize[b(playerid)]);
  2090. fwrite(f,templine);
  2091. format(templine,sizeof(templine),"A 0 A 0 A 0 A 0 A 0\n"); //Best complete race times
  2092. fwrite(f,templine);
  2093. format(templine,sizeof(templine),"A 0 A 0 A 0 A 0 A 0\n"); //Best lap times
  2094. fwrite(f,templine);
  2095. for(new i = 0; i < BCurrentCheckpoints[b(playerid)];i++) {
  2096. playerx=BRaceCheckpoints[b(playerid)][i][0];
  2097. playery=BRaceCheckpoints[b(playerid)][i][1];
  2098. playerz=BRaceCheckpoints[b(playerid)][i][2];
  2099. format(templine,sizeof(templine),"%f %f %f\n",playerx,playery,playerz);
  2100. fwrite(f,templine);
  2101. }
  2102. fclose(f);
  2103. format(string128,sizeof(string128),"Your race \"%s\" has been saved.",tmp);
  2104. SendClientMessage(playerid, COLOR_GREEN, string128);
  2105. }
  2106. else {
  2107. SendClientMessage(playerid, COLOR_RED, "You are not building a race!");
  2108. }
  2109. return 1;
  2110. }
  2111.  
  2112. dcmd_setlaps(const playerid, const params[]) {
  2113. new tmp[128], idx;
  2114. tmp = strtok(params, idx);
  2115. if(!tmp[0] || strval(tmp) <= 0) {
  2116. SendClientMessage(playerid, COLOR_WHITE, "USAGE: /setlaps [amount of laps (min: 1)]");
  2117. return 1;
  2118. }
  2119. if(RaceBuilders[playerid] != 0) {
  2120. Blaps[b(playerid)] = strval(tmp);
  2121. format(tmp,sizeof(tmp),"Amount of laps set to %d.", Blaps[b(playerid)]);
  2122. SendClientMessage(playerid, COLOR_GREEN, tmp);
  2123. return 1;
  2124. }
  2125. if(RaceAdmin == 1 && !IsPlayerAdmin(playerid)) return 1;
  2126. if(RaceActive == 1 || RaceStart == 1) SendClientMessage(playerid, COLOR_RED, "Race already in progress!");
  2127. else if(LCurrentCheckpoint == 0) SendClientMessage(playerid, COLOR_YELLOW, "No race loaded.");
  2128. else {
  2129. Racelaps=strval(tmp);
  2130. format(tmp,sizeof(tmp),"Amount of laps set to %d for current race.", Racelaps);
  2131. SendClientMessage(playerid, COLOR_GREEN, tmp);
  2132. }
  2133. return 1;
  2134. }
  2135.  
  2136. dcmd_racemode(const playerid, const params[]) {
  2137. new tmp[64], idx, tempmode;
  2138. tmp = strtok(params, idx);
  2139. if(!tmp[0]) {
  2140. SendClientMessage(playerid, COLOR_WHITE, "USAGE: /racemode [0/1/2/3]");
  2141. return 1;
  2142. }
  2143. if(tmp[0] == 'd') tempmode=0;
  2144. else if(tmp[0] == 'r') tempmode=1;
  2145. else if(tmp[0] == 'y') tempmode=2;
  2146. else if(tmp[0] == 'm') tempmode=3;
  2147. else tempmode=strval(tmp);
  2148. if(0 > tempmode || tempmode > 3) {
  2149. SendClientMessage(playerid, COLOR_YELLOW, "Invalid racemode!");
  2150. return 1;
  2151. }
  2152. if(RaceBuilders[playerid] != 0) {
  2153. if(tempmode == 2 && BCurrentCheckpoints[b(playerid)] < 3) {
  2154. SendClientMessage(playerid, COLOR_YELLOW, "Can't set racemode 2 on races with only 2 CPs. Changing to mode 1 instead.");
  2155. Bracemode[b(playerid)] = 1;
  2156. return 1;
  2157. }
  2158. Bracemode[b(playerid)] = tempmode;
  2159. format(tmp,sizeof(tmp),"Racemode set to %d.", Bracemode[b(playerid)]);
  2160. SendClientMessage(playerid, COLOR_GREEN, tmp);
  2161. return 1;
  2162. }
  2163. if(RaceAdmin == 1 && !IsPlayerAdmin(playerid)) return 1;
  2164. if(RaceActive == 1 || RaceStart == 1) SendClientMessage(playerid, COLOR_RED, "Race already in progress!");
  2165. else if(LCurrentCheckpoint == 0) SendClientMessage(playerid, COLOR_YELLOW, "No race loaded.");
  2166. else {
  2167. if(tempmode == 2 && LCurrentCheckpoint < 2) {
  2168. SendClientMessage(playerid, COLOR_YELLOW, "Can't set racemode 2 on races with only 2 CPs. Changing to mode 1 instead.");
  2169. Racemode = 1;
  2170. return 1;
  2171. }
  2172. Racemode=tempmode;
  2173. format(tmp,sizeof(tmp),"Racemode set to %d.", Racemode);
  2174. SendClientMessage(playerid, COLOR_GREEN, tmp);
  2175. }
  2176. return 1;
  2177. }
  2178.  
  2179. dcmd_loadrace(const playerid, const params[]) {
  2180. // if(!IsPlayerAdmin(playerid) && RacePreLoaded == 1) return SendClientMessage(playerid, COLOR_ERROR, "Error: A race is already loaded. Please wait for it to be started.");
  2181. if(RaceActive == 1) return SendClientMessage(playerid, COLOR_ERROR, "Error: A race is already active! Please wait until you see the 'race finish' message to try again.");
  2182. Racemode = 0; Racelaps = 1;
  2183. new tmp[64], idx, fback;
  2184. tmp = strtok(params, idx);
  2185. if(!tmp[0]) {
  2186. SendClientMessage(playerid, COLOR_SYSTEM, "USAGE: /loadrace [name]. Check race list at madoshi.net Everystuff forum for current names");
  2187. return 1;
  2188. }
  2189.  
  2190. fback=LoadRace(tmp);
  2191. if(fback == -1) format(string128,sizeof(string128),"Race doesn't exist! Check race list at madoshi.net Everystuff forum",tmp);
  2192. else if(fback == -2) format(string128,sizeof(string128),"Race \'%s\' is created with a newer version of YRACE, cannot load.",tmp);
  2193. if(fback < 0) {
  2194. SendClientMessage(playerid,COLOR_ERROR,string128);
  2195. return 1;
  2196. }
  2197. format(string128,sizeof(string128),"[RACE LOAD] Race \'%s\' loaded, /startrace to start it.",CRaceName);
  2198. SendClientMessage(playerid,COLOR_SYSTEM,string128);
  2199. printf(string128);
  2200. if(LCurrentCheckpoint<2 && Racemode == 2) {
  2201. Racemode = 1; // Racemode 2 doesn't work well with only 2CPs, and mode 1 is just the same when playing with 2 CPs.
  2202. } // Setting racemode 2 is prevented from racebuilder so this shouldn't happen anyways.
  2203. #if defined RACE_MENU
  2204. if(IsPlayerAdmin(playerid)) {
  2205. if(!IsValidMenu(MRace)) CreateRaceMenus();
  2206. if(Airrace == 0) SetMenuColumnHeader(MRace,0,"Air race: off");
  2207. else SetMenuColumnHeader(MRace,0,"Air race: ON");
  2208. ShowMenuForPlayerEx(MRace,playerid);
  2209. }
  2210. #endif
  2211. return 1;
  2212. }
  2213.  
  2214. dcmd_startrace(const playerid, const params[]) {
  2215. #pragma unused params
  2216. if(LCurrentCheckpoint == 0) SendClientMessage(playerid,COLOR_YELLOW,"No race loaded!");
  2217. else if(RaceActive == 1) SendClientMessage(playerid,COLOR_YELLOW,"Race is already active!");
  2218. else {
  2219. format(string128,sizeof(string128),"<ID:%i> %s has started a race!",playerid,pname[playerid]);
  2220. SendClientMessageToAll(COLOR_LIGHTBLUE,string128);
  2221. startrace();
  2222. }
  2223. return 1;
  2224. }
  2225.  
  2226. dcmd_deleterace(const playerid, const params[]) {
  2227. if((RaceAdmin == 1 || BuildAdmin == 1) && !IsPlayerAdmin(playerid)) return 1;
  2228. new filename[64], idx;
  2229. filename = strtok(params,idx);
  2230. if(!(strlen(filename))) {
  2231. SendClientMessage(playerid, COLOR_WHITE, "USAGE: /deleterace [race]");
  2232. return 1;
  2233. }
  2234. format(filename,sizeof(filename),"%s.yr",filename);
  2235. if(!fexist(filename)) {
  2236. format(string128,sizeof(string128), "The race \"%s\" doesn't exist.",filename);
  2237. SendClientMessage(playerid, COLOR_RED, string128);
  2238. return 1;
  2239. }
  2240. fremove(filename);
  2241. format(string128,sizeof(string128), "The race \"%s\" has been deleted.",filename);
  2242. SendClientMessage(playerid, COLOR_GREEN, string128);
  2243. return 1;
  2244. }
  2245.  
  2246. dcmd_join(const playerid, const params[]) {
  2247.  
  2248. if(RaceActive == 0) return SendClientMessage(playerid, COLOR_ERROR, "Error: There is no race you can join.");
  2249. else if(RaceStart==1) return SendClientMessage(playerid, COLOR_ERROR, "Error: The race has already started, can't join.");
  2250. else if(pstate[playerid] != PLAYER_STATE_DRIVER) return SendClientMessage(playerid,COLOR_ERROR,"Error: You must be driving a vehicle in order to join a race");
  2251. else if(Participants == MAX_RACERS) return SendClientMessage(playerid,COLOR_ERROR,"Error: You cannot join because the race is full. Please wait for the next race.");
  2252. else if(cantrace[playerid] == true || aircraft[playerid] == true) return SendClientMessage(playerid,COLOR_ERROR,"Error: You cannot join the race with your current vehicle. Please choose a different type.");
  2253. else if(gTeam[playerid]) return SendClientMessage(playerid,COLOR_ERROR,"Error: You cannot join a race until you have left the DM area. Type /leave first.");
  2254. // else if(!Airrace && aircraft[playerid] == true) return SendClientMessage(playerid, COLOR_ERROR, "Error: You may only use aircraft in air-races");
  2255. else if(RaceBuilders[playerid] != 0) return SendClientMessage(playerid, COLOR_ERROR, "Error: You are currently building a race, can't join. Use /clearrace to exit build mode.");
  2256. else if(RaceParticipant[playerid] > 0) return SendClientMessage(playerid, COLOR_ERROR, "Error: You have already joined this race!");
  2257. else {
  2258. SendClientMessage(playerid, COLOR_ERROR, "~~~ DO NOT EXIT YOUR VEHICLE. YOU WILL EXIT THE RACE IF YOU LEAVE YOUR VEHICLE ~~~");
  2259. dcmd_lock(playerid,params);
  2260. new vehicleid = pvehicleid[playerid];
  2261. if(RaceActive==1 && RaceStart==0) {
  2262. CurrentCheckpoint[playerid]=0;
  2263. if(Racemode == 3) {
  2264. SetRaceCheckpoint(playerid,LCurrentCheckpoint,LCurrentCheckpoint-1);
  2265. CurrentCheckpoint[playerid]=LCurrentCheckpoint;
  2266. }
  2267. else SetRaceCheckpoint(playerid,0,1);
  2268. new randx = random(sizeof(startMod));
  2269. new randy = random(sizeof(startMod));
  2270. SetVehiclePos(vehicleid,startX+startMod[randx][0], startY+startMod[randy][0], startZ+5);
  2271. // if(pmodelid[playerid] == 522) RemovePlayerFromVehicle(playerid);
  2272. RaceParticipant[playerid]=1;
  2273. CurrentLap[playerid]=0;
  2274. Participants++;
  2275. if(Participants == MAX_RACERS) GameTextForAll("~r~RACE IS FULL!!",2000,3);
  2276. format(string128, sizeof(string128), "[%i] | %s has joined the race!", playerid, pname[playerid], playerid);
  2277. SendClientMessageToAll(COLOR_WHITE, string128);
  2278. SendClientMessage(playerid, COLOR_SYSTEM, "[RACE] You have joined the race. please make room for others in the starting checkpoint!");
  2279. printf("[RACE JOIN] [%i] | %s has joined the race! Slot: %i", playerid,pname[playerid], Participants);
  2280. rcount[playerid] = 30;
  2281. rtimer[playerid] = SetTimerEx("ReadyTimer", 1000, 1, "i", playerid);
  2282. ResetPlayerWeapons(playerid);
  2283. }
  2284. }
  2285. return 1;
  2286. #pragma unused params
  2287. }
  2288.  
  2289. dcmd_leaverace(const playerid, const params[]) {
  2290. LeaveRace(playerid);
  2291. if(!IsPlayerAdmin(playerid)) {
  2292. SetPlayerInterior(playerid,0); // wise to place this before setplayerpos
  2293. SetPlayerPos(playerid, -2324.8708,-1622.0394,483.7098);
  2294. }
  2295. return 1;
  2296. #pragma unused params
  2297. }
  2298.  
  2299. dcmd_endrace(const playerid, const params[]) {
  2300. if(IsPlayerAdmin(playerid)) {
  2301. if(RaceActive==0) {
  2302. SendClientMessage(playerid, COLOR_YELLOW, "There is no race active.");
  2303. return 1;
  2304. }
  2305. else endrace();
  2306. }
  2307. return 1;
  2308. #pragma unused params
  2309. }
  2310.  
  2311. dcmd_racers(const playerid, const params[]) {
  2312. foreach(Player,i) {
  2313. if(RaceParticipant[i]) {
  2314. format(string128, sizeof(string128),"<ID:%i> %s is currently racing",i,pname[i]);
  2315. SendClientMessage(playerid,COLOR_CONFIRM,string128);
  2316. }
  2317. }
  2318. return 1;
  2319. #pragma unused params
  2320. }
  2321.  
  2322. dcmd_airrace(const playerid, const params[]) {
  2323. #pragma unused params
  2324. if(RaceBuilders[playerid] != 0) {
  2325. if(BAirrace[b(playerid)] == 0) {
  2326. SendClientMessage(playerid,COLOR_GREEN,"Air race enabled.");
  2327. BAirrace[b(playerid)]=1;
  2328. }
  2329. else {
  2330. SendClientMessage(playerid,COLOR_GREEN,"Air race disabled.");
  2331. BAirrace[b(playerid)]=0;
  2332. }
  2333. return 1;
  2334. }
  2335. if(RaceAdmin == 1 && !IsPlayerAdmin(playerid)) return 1;
  2336. if(RaceActive == 1 || RaceStart == 1) SendClientMessage(playerid, COLOR_YELLOW, "Race is already in progress!");
  2337. else if(LCurrentCheckpoint == 0) SendClientMessage(playerid, COLOR_YELLOW, "No race loaded!");
  2338. else if(Airrace == 0) {
  2339. SendClientMessage(playerid,COLOR_GREEN,"Air race enabled.");
  2340. Airrace = 1;
  2341. }
  2342. else if(Airrace == 1) {
  2343. SendClientMessage(playerid,COLOR_GREEN,"Air race disabled.");
  2344. Airrace = 0;
  2345. }
  2346. else printf("Error in /airrace detected. RaceActive: %d, RaceStart: %d LCurrentCheckpoint: %d, Airrace: %d", RaceActive,RaceStart,LCurrentCheckpoint,Airrace);
  2347. return 1;
  2348. }
  2349.  
  2350. dcmd_cpsize(const playerid, const params[]) {
  2351. new idx, tmp[64];
  2352. tmp = strtok(params,idx);
  2353. if(!(strlen(tmp)) || floatstr(tmp) <= 0.0) {
  2354. SendClientMessage(playerid,COLOR_WHITE,"USAGE: /cpsize [size]");
  2355. return 1;
  2356. }
  2357. if(RaceBuilders[playerid] != 0) {
  2358. BCPsize[b(playerid)] = floatstr(tmp);
  2359. format(string128,sizeof(string128),"Checkpoint size set to %f",floatstr(tmp));
  2360. SendClientMessage(playerid,COLOR_GREEN,string128);
  2361. return 1;
  2362. }
  2363. if(RaceAdmin == 1 && !IsPlayerAdmin(playerid)) return 1;
  2364. if(RaceActive == 1) SendClientMessage(playerid, COLOR_YELLOW, "Race has already been activated!");
  2365. else if(LCurrentCheckpoint == 0) SendClientMessage(playerid, COLOR_YELLOW, "No race loaded!");
  2366. else {
  2367. CPsize = floatstr(tmp);
  2368. format(string128,sizeof(string128),"Checkpoint size set to %f",floatstr(tmp));
  2369. SendClientMessage(playerid,COLOR_GREEN,string128);
  2370. }
  2371. return 1;
  2372. }
  2373.  
  2374. dcmd_prizemode(const playerid, const params[]) {
  2375. if(!IsPlayerAdmin(playerid)) return 1;
  2376. new idx, tmp;
  2377. tmp=strval(strtok(params,idx));
  2378. if(tmp < 0 || tmp > 4) SendClientMessage(playerid,COLOR_WHITE,"USAGE: /prizemode [0-4]");
  2379. else if(RaceActive == 1) SendClientMessage(playerid,COLOR_YELLOW,"Race is already active!");
  2380. else {
  2381. PrizeMode = tmp;
  2382. format(string128,sizeof(string128),"Prizemode set to %d",PrizeMode);
  2383. SendClientMessage(playerid,COLOR_GREEN,string128);
  2384. }
  2385. return 1;
  2386. }
  2387.  
  2388. dcmd_setprize(const playerid, const params[]) {
  2389. if(!IsPlayerAdmin(playerid)) return 1;
  2390. new idx, tmp;
  2391. tmp = strval(strtok(params, idx));
  2392. if(0 >= tmp) SendClientMessage(playerid,COLOR_WHITE,"USAGE: /setprize [amount]");
  2393. else if(RaceActive == 1) SendClientMessage(playerid,COLOR_YELLOW,"Race is already active!");
  2394. else
  2395. {
  2396. Prize = tmp;
  2397. format(string128,sizeof(string128),"Prize set to %d",Prize);
  2398. SendClientMessage(playerid,COLOR_GREEN,string128);
  2399. }
  2400. return 1;
  2401. }
  2402.  
  2403. #if defined RACE_MENU
  2404. dcmd_raceadmin(const playerid, const params[]) {
  2405. #pragma unused params
  2406. if(!IsPlayerAdmin(playerid)) return 1;
  2407. if(!IsValidMenu(MAdmin)) CreateRaceMenus();
  2408. ShowMenuForPlayerEx(MAdmin,playerid);
  2409. return 1;
  2410. }
  2411.  
  2412. dcmd_buildmenu(const playerid, const params[]) {
  2413. #pragma unused params
  2414. if(BuildAdmin == 1 && !IsPlayerAdmin(playerid)) return 1;
  2415. if(RaceBuilders[playerid] == 0) {
  2416. SendClientMessage(playerid,COLOR_YELLOW,"You are not building a race!");
  2417. return 1;
  2418. }
  2419. if(BAirrace[b(playerid)] == 0) SetMenuColumnHeader(MBuild,0,"Air race: off");
  2420. else SetMenuColumnHeader(MBuild,0,"Air race: on");
  2421. if(!IsValidMenu(MBuild)) CreateRaceMenus();
  2422. ShowMenuForPlayerEx(MBuild,playerid);
  2423. return 1;
  2424. }
  2425. #endif
  2426.  
  2427. public countdown() {
  2428. if(cd>0) {
  2429. format(string64, sizeof(string64), "%d...",cd);
  2430. foreach(Player,i) {
  2431. if(RaceParticipant[i]>1) {
  2432. RaceSound(i,1056);
  2433. GameTextForPlayer(i,string64,1000,3);
  2434. TogglePlayerControllable(i,false);
  2435. }
  2436. }
  2437. }
  2438. else if(cd == 0) {
  2439. RaceStart=1;
  2440. KillTimer(Countdown);
  2441. raceclear = SetTimer("racecleartimer", 3600000, 0); //1 hour race auto-restart
  2442. foreach(Player,i) {
  2443. if(RaceParticipant[i]>1){
  2444. if(rtimer[i]) {
  2445. KillTimer(rtimer[i]);
  2446. rtimer[i] = 0;
  2447. rcount[i] = 0;
  2448. }
  2449. TogglePlayerControllable(i,true);
  2450. RaceSound(i,1057);
  2451. GameTextForPlayer(i,"~g~GO!",3000,3);
  2452. RaceParticipant[i]=4;
  2453. CurrentLap[i]=1;
  2454. if(Racemode == 3) SetRaceCheckpoint(i,LCurrentCheckpoint,LCurrentCheckpoint-1);
  2455. else SetRaceCheckpoint(i,0,1);
  2456. }
  2457. }
  2458. // RaceTick=tickcount();
  2459. }
  2460. cd--;
  2461. }
  2462.  
  2463. public SetNextCheckpoint(playerid) {
  2464. if(Racemode == 0) {
  2465. CurrentCheckpoint[playerid]++;
  2466. if(CurrentCheckpoint[playerid] == LCurrentCheckpoint) {
  2467. SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],-1);
  2468. RaceParticipant[playerid]=6;
  2469. }
  2470. else SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],CurrentCheckpoint[playerid]+1);
  2471. }
  2472. else if(Racemode == 1) {
  2473. CurrentCheckpoint[playerid]++;
  2474. if(CurrentCheckpoint[playerid] == LCurrentCheckpoint+1 && CurrentLap[playerid] == Racelaps) {
  2475. SetRaceCheckpoint(playerid,0,-1);
  2476. RaceParticipant[playerid]=6;
  2477. }
  2478. else if (CurrentCheckpoint[playerid] == LCurrentCheckpoint+1 && CurrentLap[playerid] != Racelaps) {
  2479. CurrentCheckpoint[playerid]=0;
  2480. SetRaceCheckpoint(playerid,0,1);
  2481. RaceParticipant[playerid]=5;
  2482. }
  2483. else if(CurrentCheckpoint[playerid] == 1 && RaceParticipant[playerid]==5) {
  2484. ChangeLap(playerid);
  2485. if(LCurrentCheckpoint==1) {
  2486. SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],0);
  2487. }
  2488. else {
  2489. SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],2);
  2490. }
  2491. RaceParticipant[playerid]=4;
  2492. }
  2493. else {
  2494. if(LCurrentCheckpoint==1 || CurrentCheckpoint[playerid] == LCurrentCheckpoint) SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],0);
  2495. else SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],CurrentCheckpoint[playerid]+1);
  2496. }
  2497. }
  2498. else if(Racemode == 2) {
  2499. if(RaceParticipant[playerid]==4) {
  2500. if(CurrentCheckpoint[playerid] == LCurrentCheckpoint) {// @ Last CP, trigger last-1
  2501. RaceParticipant[playerid]=5;
  2502. CurrentCheckpoint[playerid]=LCurrentCheckpoint-1;
  2503. SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],CurrentCheckpoint[playerid]-1);
  2504. }
  2505. else if(CurrentCheckpoint[playerid] == LCurrentCheckpoint-1) { // Second last CP, set next accordingly
  2506. CurrentCheckpoint[playerid]++;
  2507. SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],CurrentCheckpoint[playerid]-1);
  2508. }
  2509. else {
  2510. CurrentCheckpoint[playerid]++;
  2511. SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],CurrentCheckpoint[playerid]+1);
  2512. }
  2513. }
  2514. else if(RaceParticipant[playerid]==5) {
  2515. if(CurrentCheckpoint[playerid] == 1 && CurrentLap[playerid] == Racelaps) {//Set the finish line
  2516. SetRaceCheckpoint(playerid,0,-1);
  2517. RaceParticipant[playerid]=6;
  2518. }
  2519. else if(CurrentCheckpoint[playerid] == 0) {//At finish line, change lap.
  2520. ChangeLap(playerid);
  2521. if(LCurrentCheckpoint==1) SetRaceCheckpoint(playerid,1,0);
  2522. else SetRaceCheckpoint(playerid,1,2);
  2523. RaceParticipant[playerid]=4;
  2524. }
  2525. else if(CurrentCheckpoint[playerid] == 1) {
  2526. CurrentCheckpoint[playerid]--;
  2527. SetRaceCheckpoint(playerid,0,1);
  2528. }
  2529. else {
  2530. CurrentCheckpoint[playerid]--;
  2531. SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],CurrentCheckpoint[playerid]-1);
  2532. }
  2533. }
  2534. }
  2535. else if(Racemode == 3) {// Mirror Mode
  2536. CurrentCheckpoint[playerid]--;
  2537. if(CurrentCheckpoint[playerid] == 0) {
  2538. SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],-1);
  2539. RaceParticipant[playerid]=6;
  2540. }
  2541. else SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],CurrentCheckpoint[playerid]-1);
  2542. }
  2543. }
  2544.  
  2545. public SetRaceCheckpoint(playerid,target,next) {
  2546. if(next == -1 && Airrace == 0) SetPlayerRaceCheckpoint(playerid,1,RaceCheckpoints[target][0],RaceCheckpoints[target][1],RaceCheckpoints[target][2],0.0,0.0,0.0,CPsize);
  2547. else if(next == -1 && Airrace == 1) SetPlayerRaceCheckpoint(playerid,4,RaceCheckpoints[target][0],RaceCheckpoints[target][1],RaceCheckpoints[target][2],0.0,0.0,0.0,CPsize);
  2548. else if(Airrace == 1) SetPlayerRaceCheckpoint(playerid,3,RaceCheckpoints[target][0],RaceCheckpoints[target][1],RaceCheckpoints[target][2],RaceCheckpoints[next][0],
  2549. RaceCheckpoints[next][1],RaceCheckpoints[next][2],CPsize);
  2550. else SetPlayerRaceCheckpoint(playerid,0,RaceCheckpoints[target][0],RaceCheckpoints[target][1],RaceCheckpoints[target][2],RaceCheckpoints[next][0],RaceCheckpoints[next][1],
  2551. RaceCheckpoints[next][2],CPsize);
  2552. #if defined ONLINE_MAP
  2553. // addDmapIcon(RaceCheckpoints[target][0],RaceCheckpoints[target][1],53);
  2554. #endif
  2555. }
  2556. public SetBRaceCheckpoint(playerid,target,next) {
  2557. new ar = BAirrace[b(playerid)];
  2558. if(next == -1 && ar == 0) SetPlayerRaceCheckpoint(playerid,1,BRaceCheckpoints[b(playerid)][target][0],BRaceCheckpoints[b(playerid)][target][1],
  2559. BRaceCheckpoints[b(playerid)][target][2],0.0,0.0,0.0,BCPsize[b(playerid)]);
  2560. else if(next == -1 && ar == 1) SetPlayerRaceCheckpoint(playerid,4,BRaceCheckpoints[b(playerid)][target][0],
  2561. BRaceCheckpoints[b(playerid)][target][1],BRaceCheckpoints[b(playerid)][target][2],0.0,0.0,0.0,
  2562. BCPsize[b(playerid)]);
  2563. else if(ar == 1) SetPlayerRaceCheckpoint(playerid,3,BRaceCheckpoints[b(playerid)][target][0],BRaceCheckpoints[b(playerid)][target][1],BRaceCheckpoints[b(playerid)][target][2],
  2564. BRaceCheckpoints[b(playerid)][next][0],BRaceCheckpoints[b(playerid)][next][1],BRaceCheckpoints[b(playerid)][next][2],BCPsize[b(playerid)]);
  2565. else SetPlayerRaceCheckpoint(playerid,0,BRaceCheckpoints[b(playerid)][target][0],BRaceCheckpoints[b(playerid)][target][1],BRaceCheckpoints[b(playerid)][target][2],
  2566. BRaceCheckpoints[b(playerid)][next][0],BRaceCheckpoints[b(playerid)][next][1],BRaceCheckpoints[b(playerid)][next][2],BCPsize[b(playerid)]);
  2567.  
  2568. }
  2569. /*
  2570. public GetLapTick(playerid) {
  2571. new tick, lap;
  2572. tick=tickcount();
  2573. if(CurrentLap[playerid]==1) {
  2574. lap=tick-RaceTick;
  2575. LastLapTick[playerid]=tick;
  2576. }
  2577. else {
  2578. lap=tick-LastLapTick[playerid];
  2579. LastLapTick[playerid]=tick;
  2580. }
  2581. return lap;
  2582. }
  2583.  
  2584. public GetRaceTick(playerid)
  2585. {
  2586. new tick, race;
  2587. tick=tickcount();
  2588. race=tick-RaceTick;
  2589. return race;
  2590. }
  2591. */
  2592. public OnPlayerEnterRaceCheckpoint(playerid) {
  2593. if(RaceParticipant[playerid]>0) {// See if the player is participating in a race, allows race builders to do their stuff in peace.
  2594. if(RaceParticipant[playerid] == 6) { // Player reaches the checkered flag.
  2595. RaceSound(playerid,1139);
  2596. if(Ranking<4) {
  2597. if(IsPlayerConnected(playerid)) {
  2598. switch(Ranking) {
  2599. case 1: if(Participants > 1) race1st[playerid]++;
  2600. case 2: race2nd[playerid]++;
  2601. case 3: race3rd[playerid]++;
  2602. }
  2603. format(string128,sizeof(string128),"Race Winning Totals: 1st: %i 2nd: %i 3rd: %i", race1st[playerid],race2nd[playerid],race3rd[playerid]);
  2604. SendClientMessage(playerid,COLOR_YELLOW,string128);
  2605. }
  2606. else SendClientMessage(playerid, COLOR_ERROR, "You are not logged in, so wins cannot be saved. Type /login to count race wins.");
  2607. new winrar;
  2608. if(Participants == 1 && Ranking == 1) winrar=5000;
  2609. else if(Participants == 2 && Ranking == 1) winrar=15000;
  2610. else if(Participants == 2 && Ranking == 2) winrar=10000;
  2611. else if(Participants > 2){
  2612. switch(Ranking) {
  2613. case 1: winrar=50000;
  2614. case 2: winrar=40000;
  2615. case 3: winrar=25000;
  2616. }
  2617. }
  2618. else {
  2619. SendClientMessage(playerid,COLOR_ERROR,"An error occured in race script. Please report error on www.madoshi.net. Heres five bucks.");
  2620. winrar=5;
  2621. }
  2622. if(Ranking == 1 && IsPlayerConnected(playerid)) format(string128,sizeof(string128),"[RACE] %s has finished the race, position: %d. Wins: %i Pot:$%d",pname[playerid],Ranking,race1st[playerid],winrar);
  2623. else format(string128,sizeof(string128),"[RACE] %s has finished the race, position: %d. Pot:$%d",pname[playerid],Ranking,winrar);
  2624. SendClientMessageToAll(COLOR_SYSTEM,string128);
  2625. GivePlayerMoney(playerid,winrar);
  2626. format(string128,sizeof(string128),"You have earned $%d from the race!",winrar);
  2627. SendClientMessage(playerid, COLOR_LIGHTGREEN, string128);
  2628. if(Ranking== 3) {
  2629. foreach(Player,i) {
  2630. if(RaceParticipant[i]>0) {
  2631. LeaveRace(i);
  2632. }
  2633. }
  2634. }
  2635. }
  2636. Ranking++;
  2637. LeaveRace(playerid);
  2638. return 1;
  2639. }
  2640. else if (RaceStart==1) { // Otherwise switch to the next race CP.
  2641. RaceSound(playerid,1138);
  2642. SetNextCheckpoint(playerid);
  2643. }
  2644. else if (RaceStart == 0 && RaceParticipant[playerid]==1) { // Player arrives to the start CP for 1st time
  2645. SendClientMessage(playerid,COLOR_YELLOW,"NOTE: Your controls will be locked once the race countdown starts.");
  2646. RaceParticipant[playerid]=2;
  2647. }
  2648. }
  2649. return 1;
  2650. }
  2651.  
  2652. forward LeaveRace(playerid);
  2653. public LeaveRace(playerid) {
  2654. if(RaceParticipant[playerid] > 0) {
  2655. SendClientMessage(playerid,COLOR_YELLOW,"You have left the race!");
  2656. if(rtimer[playerid]) KillTimer(rtimer[playerid]);
  2657. rcount[playerid] = 0;
  2658. rtimer[playerid] = 0;
  2659. RaceParticipant[playerid]=0;
  2660. DisablePlayerRaceCheckpoint(playerid);
  2661. TogglePlayerControllable(playerid,true);
  2662. Participants--;
  2663. if(RaceStart == 0 && Participants > 0) ReadyRefresh();
  2664. else if(!Participants) endrace();
  2665. }
  2666. return 1;
  2667. }
  2668.  
  2669. public endrace() {
  2670. RaceActive=0;
  2671. RaceStart=0;
  2672. KillTimer(raceclear);
  2673. raceclear = 0;
  2674. for(new i=0;i<LCurrentCheckpoint;i++) {
  2675. RaceCheckpoints[i][0]=0.0;
  2676. RaceCheckpoints[i][1]=0.0;
  2677. RaceCheckpoints[i][2]=0.0;
  2678. }
  2679. LCurrentCheckpoint=0;
  2680. foreach(Player,i) if(RaceParticipant[i]) LeaveRace(i);
  2681. RacePreLoaded = 0;
  2682. Participants=0;
  2683. SendClientMessageToAll(COLOR_YELLOW, "[RACE FINISH] The current race has been finished. Another may be loaded using /loadrace");
  2684. return 1;
  2685. }
  2686.  
  2687. public BActiveCP(playerid,sele) {
  2688. if(BCurrentCheckpoints[b(playerid)]-1 == sele) SetBRaceCheckpoint(playerid,sele,-1);
  2689. else SetBRaceCheckpoint(playerid,sele,sele+1);
  2690. }
  2691.  
  2692. public RaceSound(playerid,sound) {
  2693. GetPlayerPos(playerid,playerx,playery,playerz);
  2694. PlayerPlaySound(playerid,sound,playerx,playery,playerz);
  2695. }
  2696.  
  2697. public ReadyRefresh() {
  2698. if(RaceActive==1) {
  2699. new Waiting=0, Ready=0;
  2700. foreach(Player,i) {
  2701. if((RaceParticipant[i] == 1 || RaceParticipant[i] == 2) && rcount[i]) Waiting++;
  2702. else if(RaceParticipant[i] == 3 && rcount[i] == 1) Ready++;
  2703. }
  2704. if(Waiting==0) {
  2705. foreach(Player,i) {
  2706. if(RaceParticipant[i]) {
  2707. SendClientMessage(i, COLOR_GREEN,"Everyone is ready, the race begins!");
  2708. if(rtimer[i]) KillTimer(rtimer[i]);
  2709. rcount[i] = 0;
  2710. rtimer[i] = 0;
  2711. }
  2712. }
  2713. cd=5;
  2714. Countdown = SetTimer("countdown",1000,1);
  2715. print("[RACE START] The race has started!");
  2716. }
  2717. else if(Ready >= Waiting && MajorityDelay > 0 && MajStart == 0) {
  2718. MajStart=1;
  2719. format(string128,sizeof(string128),"Half of the racers are ready, race starts in %d seconds!", MajorityDelay);
  2720. SendClientMessageToAll(COLOR_GREEN,string128);
  2721. MajStartTimer = SetTimer("mscountdown",10000,1);
  2722. mscd= MajorityDelay;
  2723. }
  2724. }
  2725. }
  2726.  
  2727. public mscountdown() {
  2728. if(RaceStart == 1 || MajStart == 0) {
  2729. MajStart=0;
  2730. KillTimer(MajStartTimer);
  2731. }
  2732. else {
  2733. mscd-=10;
  2734. if(mscd <= 0) {
  2735. foreach(Player,i) {
  2736. /*
  2737. if(RaceParticipant[i] && RaceParticipant[i] != 3) {
  2738. GameTextForPlayer(i,"~r~You didn't make it in time!",6000,3);
  2739. DisablePlayerRaceCheckpoint(i);
  2740. RaceParticipant[i]=0;
  2741. Participants--;
  2742. }
  2743. */
  2744. if(RaceParticipant[i] == 3) {
  2745. SendClientMessage(i,COLOR_GREEN,"Pre-race countdown done, the race beings!");
  2746. if(!rcount[i]) {
  2747. if(rtimer[i]) KillTimer(rtimer[i]);
  2748. rtimer[i] = 0;
  2749. }
  2750. }
  2751. }
  2752. KillTimer(MajStartTimer);
  2753. cd=5;
  2754. Countdown = SetTimer("countdown",1000,1);
  2755. }
  2756. else {
  2757. format(string128,sizeof(string128),"~y~Race starting in ~w~%d~y~ seconds!",mscd);
  2758. SendClientMessageToAll(COLOR_ERROR, string128);
  2759. }
  2760. }
  2761. return 1;
  2762. }
  2763.  
  2764.  
  2765.  
  2766. public ChangeLap(playerid) {
  2767. format(string128,sizeof(string128),"~w~Lap %d/%d", CurrentLap[playerid], Racelaps);
  2768. /* if(Racemode == ORacemode && ORacelaps == Racelaps)
  2769. {
  2770. checklap=CheckBestLap(playerid,LapTime);
  2771. if(checklap==1) format(string128,sizeof(string128),"%s~n~~y~LAP RECORD!",string128);
  2772. }
  2773. */
  2774. CurrentLap[playerid]++;
  2775. if(CurrentLap[playerid] == Racelaps) format(string128,sizeof(string128),"%s~n~~g~Final lap!",string128);
  2776. GameTextForPlayer(playerid,string128,6000,3);
  2777. }
  2778.  
  2779.  
  2780. public GetBuilderSlot(playerid) {
  2781. for(new i;i < MAX_BUILDERS; i++)
  2782. {
  2783. if(!(BuilderSlots[i] < MAX_PLAYERS+1))
  2784. {
  2785. BuilderSlots[i] = playerid;
  2786. RaceBuilders[playerid] = i+1;
  2787. return i+1;
  2788. }
  2789. // continue;
  2790. }
  2791. return 0;
  2792. }
  2793.  
  2794. public b(playerid) return RaceBuilders[playerid]-1;
  2795.  
  2796. public Float:Distance(Float:dx1,Float:dy1,Float:dz1,Float:dx2,Float:dy2,Float:dz2) {
  2797. new Float:temp=floatsqroot((dx1-dx2) * (dx1-dx2) + (dy1-dy2) * (dy1-dy2) + (dz1-dz2) * (dz1-dz2));
  2798. if(temp < 0) temp=temp*(-1);
  2799. return temp;
  2800. }
  2801.  
  2802. public clearrace(playerid) {
  2803. for(new i=0;i<BCurrentCheckpoints[b(playerid)];i++)
  2804. {
  2805. BRaceCheckpoints[b(playerid)][i][0]=0.0;
  2806. BRaceCheckpoints[b(playerid)][i][1]=0.0;
  2807. BRaceCheckpoints[b(playerid)][i][2]=0.0;
  2808. // continue;
  2809. }
  2810. BCurrentCheckpoints[b(playerid)]=0;
  2811. DisablePlayerRaceCheckpoint(playerid);
  2812. SendClientMessage(playerid, COLOR_GREEN, "Your race has been cleared! Use /buildrace to start a new one.");
  2813. BuilderSlots[b(playerid)] = MAX_PLAYERS+1;
  2814. RaceBuilders[playerid]=0;
  2815. }
  2816.  
  2817. public startrace() {
  2818. format(string128,sizeof(string128),"[RACE] \"%s\" race is starting! To join the race get in a car and type /join",CRaceName);
  2819. SendClientMessageToAll(COLOR_YELLOW,string128);
  2820. RaceStart=0;
  2821. RaceActive=1;
  2822. Ranking=1;
  2823. }
  2824.  
  2825. ReturnModeName(mode) {
  2826. new modename[8];
  2827. if(mode == 0) modename="Default";
  2828. else if(mode == 1) modename="Ring";
  2829. else if(mode == 2) modename="Yoyo";
  2830. else if(mode == 3) modename="Mirror";
  2831. return modename;
  2832. }
  2833.  
  2834. public LoadRace(tmp[]) {
  2835. new race_name[32],templine[512];
  2836. format(CRaceName,sizeof(CRaceName), "%s",tmp);
  2837. format(race_name,sizeof(race_name), "%s.yr",tmp);
  2838. if(!fexist(race_name)) return -1; // File doesn't exist
  2839. CFile=race_name;
  2840. LCurrentCheckpoint=-1; RLenght=0; RLenght=0;
  2841. new File:f, i;
  2842. f = fopen(race_name, io_read);
  2843. fread(f,templine,sizeof(templine));
  2844. if(templine[0] == 'Y') {//Checking if the racefile is v0.2+
  2845. new fileversion;
  2846. strtok(templine,i); // read off YRACE
  2847. fileversion = strval(strtok(templine,i)); // read off the file version
  2848. if(fileversion > RACEFILE_VERSION) return -2; // Check if the race is made with a newer version of the racefile format
  2849. CBuilder=strtok(templine,i); // read off RACEBUILDER
  2850. ORacemode = strval(strtok(templine,i)); // read off racemode
  2851. ORacelaps = strval(strtok(templine,i)); // read off amount of laps
  2852. if(fileversion > 1) {
  2853. Airrace = strval(strtok(templine,i)); // read off airrace
  2854. CPsize = floatstr(strtok(templine,i)); // read off CP size
  2855. }
  2856. else { // v1 file format, set to default
  2857. Airrace = 0;
  2858. CPsize = 8.0;
  2859. }
  2860. Racemode=ORacemode; Racelaps=ORacelaps; //Allows changing the modes, but disables highscores if they've been changed.
  2861. fread(f,templine,sizeof(templine)); // read off best race times
  2862. i=0;
  2863. for(new j=0;j<5;j++) {
  2864. TopRacers[j]=strtok(templine,i);
  2865. TopRacerTimes[j]=strval(strtok(templine,i));
  2866. }
  2867. fread(f,templine,sizeof(templine)); // read off best lap times
  2868. i=0;
  2869. for(new j=0;j<5;j++) {
  2870. TopLappers[j]=strtok(templine,i);
  2871. TopLapTimes[j]=strval(strtok(templine,i));
  2872. }
  2873. RacePreLoaded = true;
  2874. }
  2875. else {//Otherwise add the lines as checkpoints, the file is made with v0.1 (or older) version of the script.
  2876. LCurrentCheckpoint++;
  2877. RaceCheckpoints[LCurrentCheckpoint][0] = floatstr(strtok(templine,i));
  2878. RaceCheckpoints[LCurrentCheckpoint][1] = floatstr(strtok(templine,i));
  2879. RaceCheckpoints[LCurrentCheckpoint][2] = floatstr(strtok(templine,i));
  2880. startX = RaceCheckpoints[0][0];
  2881. startY = RaceCheckpoints[0][1];
  2882. startZ = RaceCheckpoints[0][2];
  2883. Racemode=0; ORacemode=0; Racelaps=0; ORacelaps=0; //Enables converting old files to new versions
  2884. CPsize = 8.0; Airrace = 0; // v2 additions
  2885. CBuilder="UNKNOWN";
  2886. for(new j;j<5;j++) {
  2887. TopLappers[j]="A"; TopLapTimes[j]=0; TopRacers[j]="A"; TopRacerTimes[j]=0;
  2888. // continue;
  2889. }
  2890. }
  2891. while(fread(f,templine,sizeof(templine),false)) {
  2892. LCurrentCheckpoint++;
  2893. i=0;
  2894. RaceCheckpoints[LCurrentCheckpoint][0] = floatstr(strtok(templine,i));
  2895. RaceCheckpoints[LCurrentCheckpoint][1] = floatstr(strtok(templine,i));
  2896. RaceCheckpoints[LCurrentCheckpoint][2] = floatstr(strtok(templine,i));
  2897. startX = RaceCheckpoints[0][0];
  2898. startY = RaceCheckpoints[0][1];
  2899. startZ = RaceCheckpoints[0][2];
  2900. if(LCurrentCheckpoint >= 1) {
  2901. RLenght+=Distance(RaceCheckpoints[LCurrentCheckpoint][0],RaceCheckpoints[LCurrentCheckpoint][1],
  2902. RaceCheckpoints[LCurrentCheckpoint][2],RaceCheckpoints[LCurrentCheckpoint-1][0],
  2903. RaceCheckpoints[LCurrentCheckpoint-1][1],RaceCheckpoints[LCurrentCheckpoint-1][2]);
  2904. }
  2905. }
  2906. RacePreLoaded = true;
  2907. fclose(f);
  2908. return 1;
  2909. }
  2910.  
  2911. public RaceRotation() {
  2912. if(!fexist("yrace.rr")) {
  2913. print("ERROR in YRACE's Race Rotation (yrace.rr): yrace.rr doesn't exist!");
  2914. return -1;
  2915. }
  2916. if(RRotation == -1) {
  2917. return -1; // RRotation has been disabled
  2918. }
  2919. if(Participants > 0) {
  2920. return -1; // A race is still active.
  2921. }
  2922. new File:f, templine[32], rotfile[]="yrace.rr", rraces=-1, idx, fback;
  2923. new rracenames[102][32];
  2924. f = fopen(rotfile, io_read);
  2925. while(fread(f,templine,sizeof(templine),false)) {
  2926. idx = 0;
  2927. rraces++;
  2928. rracenames[rraces]=strtok(templine,idx);
  2929. }
  2930. fclose(f);
  2931. RRotation++;
  2932. if(RRotation > rraces) RRotation = 0;
  2933. fback = LoadRace(rracenames[RRotation]);
  2934. if(fback == -1) printf("ERROR in YRACE's Race Rotation (yrace.rr): Race \'%s\' doesn't exist!",rracenames[RRotation]);
  2935. else if (fback == -2) printf("ERROR in YRACE's Race Rotation (yrace.rr): Race \'%s\' is created with a newer version of YRACE",rracenames[RRotation]);
  2936. else if(fback > -1) {
  2937. printf("[RACE] Race \'%s\' Loaded",rracenames[RRotation]);
  2938. startrace();
  2939. }
  2940. return 1;
  2941. }
  2942.  
  2943.  
  2944. #if defined RACE_MENU
  2945.  
  2946. public RefreshMenuHeader(playerid,Menu:menu,text[]) {
  2947. SetMenuColumnHeader(menu,0,text);
  2948. ShowMenuForPlayerEx(menu,playerid);
  2949. }
  2950.  
  2951. public CreateRaceMenus() {
  2952. //Admin menu
  2953. MAdmin = CreateMenu("Admin menu", 1, 25, 170, 220, 25);
  2954. if(IsValidMenu(MAdmin)) {
  2955. AddMenuItem(MAdmin,0,"Set prizemode...");
  2956. AddMenuItem(MAdmin,0,"Set fixed prize...");
  2957. AddMenuItem(MAdmin,0,"Set dynamic prize...");
  2958. AddMenuItem(MAdmin,0,"Set entry fees...");
  2959. AddMenuItem(MAdmin,0,"Majority delay...");
  2960. AddMenuItem(MAdmin,0,"End current race");
  2961. AddMenuItem(MAdmin,0,"Toggle Race Admin [RA]");
  2962. AddMenuItem(MAdmin,0,"Toggle Build Admin [BA]");
  2963. AddMenuItem(MAdmin,0,"Toggle Race Rotation [RR]");
  2964. AddMenuItem(MAdmin,0,"Leave");
  2965. if(RaceAdmin == 1) format(string128,sizeof(string128),"RA: ON");
  2966. else format(string128,sizeof(string128),"RA: off");
  2967. if(BuildAdmin == 1) format(string128,sizeof(string128),"%s BA: ON",string128);
  2968. else format(string128,sizeof(string128),"%s BA: off",string128);
  2969. if(RRotation >= 0) format(string128,sizeof(string128),"%s RR: ON",string128);
  2970. else format(string128,sizeof(string128),"%s RR: off",string128);
  2971. SetMenuColumnHeader(MAdmin,0,string128);
  2972. }
  2973. //Prizemode menu [Admin submenu]
  2974. MPMode = CreateMenu("Set prizemode:", 1, 25, 170, 220, 25);
  2975. if(IsValidMenu(MPMode)) {
  2976. AddMenuItem(MPMode,0,"Fixed");
  2977. AddMenuItem(MPMode,0,"Dynamic");
  2978. AddMenuItem(MPMode,0,"Entry Fee");
  2979. AddMenuItem(MPMode,0,"Entry Fee + Fixed");
  2980. AddMenuItem(MPMode,0,"Entry Fee + Dynamic");
  2981. AddMenuItem(MPMode,0,"Back");
  2982. SetMenuColumnHeader(MPMode,0,"Mode: Fixed");
  2983. }
  2984. //Fixed prize menu
  2985. MPrize = CreateMenu("Fixed prize:", 1, 25, 170, 220, 25);
  2986. if(IsValidMenu(MPrize)) {
  2987. AddMenuItem(MPrize,0,"+100$");
  2988. AddMenuItem(MPrize,0,"+1000$");
  2989. AddMenuItem(MPrize,0,"+10000$");
  2990. AddMenuItem(MPrize,0,"-100$");
  2991. AddMenuItem(MPrize,0,"-1000$");
  2992. AddMenuItem(MPrize,0,"-10000$");
  2993. AddMenuItem(MPrize,0,"Back");
  2994. format(string128,sizeof(string128),"Amount: %d",Prize);
  2995. SetMenuColumnHeader(MPrize,0,string128);
  2996. }
  2997. //Dynamic prize menu
  2998. MDyna = CreateMenu("Dynamic Prize:", 1, 25, 170, 220, 25);
  2999. if(IsValidMenu(MDyna)) {
  3000. AddMenuItem(MDyna,0,"+1x");
  3001. AddMenuItem(MDyna,0,"+5x");
  3002. AddMenuItem(MDyna,0,"-1x");
  3003. AddMenuItem(MDyna,0,"-5x");
  3004. AddMenuItem(MDyna,0,"Leave");
  3005. format(string128,sizeof(string128),"Multiplier: %dx",DynaMP);
  3006. SetMenuColumnHeader(MDyna,0,string128);
  3007. }
  3008. //Build Menu
  3009. MBuild = CreateMenu("Build Menu", 1, 25, 170, 220, 25);
  3010. if(IsValidMenu(MBuild)) {
  3011. AddMenuItem(MBuild,0,"Set laps...");
  3012. AddMenuItem(MBuild,0,"Set racemode...");
  3013. AddMenuItem(MBuild,0,"Checkpoint size...");
  3014. AddMenuItem(MBuild,0,"Toggle air race");
  3015. AddMenuItem(MBuild,0,"Clear the race and exit");
  3016. AddMenuItem(MBuild,0,"Leave");
  3017. SetMenuColumnHeader(MBuild,0,"Air race: off");
  3018. }
  3019. //Laps menu
  3020. MLaps = CreateMenu("Set laps", 1, 25, 170, 220, 25);
  3021. if(IsValidMenu(MLaps)) {
  3022. AddMenuItem(MLaps,0,"+1");
  3023. AddMenuItem(MLaps,0,"+5");
  3024. AddMenuItem(MLaps,0,"+10");
  3025. AddMenuItem(MLaps,0,"-1");
  3026. AddMenuItem(MLaps,0,"-5");
  3027. AddMenuItem(MLaps,0,"-10");
  3028. AddMenuItem(MLaps,0,"Back");
  3029. }
  3030. //Racemode menu
  3031. MRacemode = CreateMenu("Racemode", 1, 25, 170, 220, 25);
  3032. if(IsValidMenu(MRacemode)) {
  3033. AddMenuItem(MRacemode,0,"Default");
  3034. AddMenuItem(MRacemode,0,"Ring");
  3035. AddMenuItem(MRacemode,0,"Yoyo");
  3036. AddMenuItem(MRacemode,0,"Mirror");
  3037. AddMenuItem(MRacemode,0,"Back");
  3038. }
  3039. //Race menu
  3040. MRace = CreateMenu("Race Menu", 1, 25, 170, 220, 25);
  3041. if(IsValidMenu(MRace)) {
  3042. AddMenuItem(MRace,0,"Set laps...");
  3043. AddMenuItem(MRace,0,"Set racemode...");
  3044. AddMenuItem(MRace,0,"Set checkpoint size...");
  3045. AddMenuItem(MRace,0,"Toggle air race");
  3046. AddMenuItem(MRace,0,"Start race");
  3047. AddMenuItem(MRace,0,"Abort new race");
  3048. }
  3049. //Entry fee menu
  3050. MFee = CreateMenu("Entry fees", 1, 25, 170, 220, 25);
  3051. if(IsValidMenu(MFee)) {
  3052. AddMenuItem(MFee,0,"+100");
  3053. AddMenuItem(MFee,0,"+1000");
  3054. AddMenuItem(MFee,0,"+10000");
  3055. AddMenuItem(MFee,0,"-100");
  3056. AddMenuItem(MFee,0,"-1000");
  3057. AddMenuItem(MFee,0,"-10000");
  3058. AddMenuItem(MFee,0,"Back");
  3059. format(string128,sizeof(string128),"Fee: %d$",JoinFee);
  3060. SetMenuColumnHeader(MFee,0,string128);
  3061. }
  3062. //CP size menu
  3063. MCPsize = CreateMenu("CP size", 1, 25, 170, 220, 25);
  3064. if(IsValidMenu(MCPsize)) {
  3065. AddMenuItem(MCPsize,0,"+0.1");
  3066. AddMenuItem(MCPsize,0,"+1");
  3067. AddMenuItem(MCPsize,0,"+10");
  3068. AddMenuItem(MCPsize,0,"-0.1");
  3069. AddMenuItem(MCPsize,0,"-1");
  3070. AddMenuItem(MCPsize,0,"-10");
  3071. AddMenuItem(MCPsize,0,"Back");
  3072. }
  3073. //Majority Delay menu
  3074. MDelay = CreateMenu("Majority Delay", 1, 25, 170, 220, 25);
  3075. if(IsValidMenu(MDelay)) {
  3076. AddMenuItem(MDelay,0,"+10s");
  3077. AddMenuItem(MDelay,0,"+60s");
  3078. AddMenuItem(MDelay,0,"-10s");
  3079. AddMenuItem(MDelay,0,"-60s");
  3080. AddMenuItem(MDelay,0,"Back");
  3081. if(MajorityDelay == 0) format(string128,sizeof(string128),"Delay: disabled");
  3082. else format(string128,sizeof(string128),"Delay: %ds",MajorityDelay);
  3083. SetMenuColumnHeader(MDelay,0,string128);
  3084. }
  3085. }
  3086.  
  3087. #endif
  3088.  
  3089.  
  3090. forward ReadyTimer(playerid);
  3091. public ReadyTimer(playerid) {
  3092. new rtimermsg[128];
  3093. format(rtimermsg, sizeof(rtimermsg), "You have %i seconds~n~to get into position", rcount[playerid]);
  3094. GameTextForPlayer(playerid, rtimermsg, 1000, 3);
  3095. rcount[playerid]--;
  3096. if(rcount[playerid] == 0) {
  3097. GameTextForPlayer(playerid, "You are now ready. Please wait for the other racers to finish taking position.", 5000, 3);
  3098. RaceParticipant[playerid]=3;
  3099. KillTimer(rtimer[playerid]);
  3100. rtimer[playerid] = 0;
  3101. ReadyRefresh();
  3102. }
  3103. return 1;
  3104. }
  3105.  
  3106. forward racecleartimer();
  3107. public racecleartimer() {
  3108. KillTimer(raceclear);
  3109. raceclear = 0;
  3110. SendClientMessageToAll(COLOR_RED, "I think the last race was abandoned. A new one will start soon.");
  3111. endrace();
  3112. print("[ABANDONED RACE] A race was ended automatically.");
  3113. return 1;
  3114. }
  3115.  
  3116.  
  3117.  
  3118. // Needed by Yrace stuff
  3119.  
  3120. //----------------------------------------------------------------
  3121. strtok(const string[], &index) {
  3122. new length = strlen(string);
  3123. while ((index < length) && (string[index] <= ' ')) {
  3124. index++;
  3125. }
  3126. new offset = index;
  3127. new result[20];
  3128. while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1))) {
  3129. result[index - offset] = string[index];
  3130. index++;
  3131. }
  3132. result[index - offset] = EOS;
  3133. return result;
  3134. }
  3135.  
  3136.  
  3137. //---------------------------------------------------------------
  3138.  
  3139. //forward IsPlayerInProx(playerid, targetid, distance = 5);
  3140. stock IsPlayerInProx(playerid, targetid, distance = 5) {
  3141. new dist = distance;
  3142. new Float:targetx,Float:targety,Float:targetz;
  3143. GetPlayerPos(playerid, playerx, playery, playerz);
  3144. GetPlayerPos(targetid, targetx, targety, targetz);
  3145. if((playerx > targetx-dist && playerx < targetx+dist) && (playery > targety-dist && playery < targety+dist)) return 1;
  3146. else return 0;
  3147. }
  3148. #endif
  3149.  
  3150. forward CreatePlayerVehicle(playerid, modelid);
  3151. public CreatePlayerVehicle(playerid, modelid) {
  3152. // RemovePlayerFromVehicle(playerid);
  3153. // format(string128,sizeof(string128),"Debug: Playerid %i removed from %i",playerid,pvehicleid[playerid]);
  3154. // SendClientMessageToAll(COLOR_GREY,string128);
  3155.  
  3156. // format(string128,sizeof(string128),"Debug: Playerid %i made it thru killvehicle. new playercar id %i",playerid,playercar[playerid]);
  3157. // SendClientMessageToAll(COLOR_GREY,string128);
  3158. new Float:a;
  3159. GetPlayerFacingAngle(playerid, a);
  3160. GetPlayerPos(playerid, playerx, playery, playerz);
  3161. // if(modelid < MIN_VEHI_ID || modelid > MAX_VEHI_ID) return SendClientMessage(playerid, COLOR_ERROR, "Error: Invalid Vehicle MODELID/NAME. Modelid range 400 - 611");
  3162. if(modelid == 569 || modelid == 570) return SendClientMessage(playerid, COLOR_ERROR, "Error: Models 569 and 570 are buggy and cannot be spawned by players at this time");
  3163. new bad,boat,trailer,train,plane;
  3164. switch(modelid)
  3165. {
  3166. case vHUNTER, vHYDRA, vRHINO, vSEASPARROW, vRCPLANE, vGOBLIN: bad = 1; // gun vehicles
  3167. case 430,446,452,453,454,472,473,484,493,595: boat = 1; //boat
  3168. case 435,450,584,591,606,607,608,610,611: trailer = 1; //trailer
  3169. case 449,537,538,569,570,590: train = 1; //train
  3170. case 417,465,469,487,488,497,548,563,460,476,511,512,513,519,539,553,577,592,593: plane = 1; //planre
  3171. }
  3172. if(RaceParticipant[playerid] && (bad || boat || trailer || train || plane)) return SendClientMessage(playerid,COLOR_ERROR,"Error: You cannot spawn this vehicle during a race. Type /leave to leave the race.");
  3173. if(playercar[playerid] != -1) {
  3174. KillPlayerVehicle(playerid);
  3175. playercar[playerid] = -1;
  3176. }
  3177. playercar[playerid] = CreateVehicle(modelid,playerx,playery,playerz+2,a,-1,-1,480);
  3178. LinkVehicleToInterior(playercar[playerid], GetPlayerInterior(playerid));
  3179. SetVehicleVirtualWorld(playercar[playerid], GetPlayerVirtualWorld(playerid));
  3180. // format(string64,sizeof(string64),"Debug: vehicleid %i created by %i",playercar[playerid],playerid);
  3181. // SendClientMessageToAll(COLOR_GREY,string64);
  3182. PutPlayerInPlayerCar(playerid);
  3183. if(playercar[playerid] != -1) return playercar[playerid];
  3184. else return SendClientMessageToAll(COLOR_GREY,"Debug: OMG CreatePlayerVehicle returned a shitty value!");
  3185. }
  3186.  
  3187. forward KillPlayerVehicle(playerid);
  3188. public KillPlayerVehicle(playerid) {
  3189. // RemovePlayerFromVehicle(playerid);
  3190. // format(string128,sizeof(string128),"Debug: vehicleid %i TO BE KILLED by %i | pvehicleid: %i",playercar[playerid],playerid,pvehicleid[playerid]);
  3191. // SendClientMessageToAll(COLOR_GREY,string128);
  3192. DestroyVehicle(playercar[playerid]);
  3193. pvehicleid[playerid] = GetPlayerVehicleID(playerid);
  3194. playercar[playerid] = -1;
  3195. // format(string128,sizeof(string128),"Debug: playerid %i playercarid now %i vehicleid %i modelid %i",playerid,playercar[playerid],pvehicleid[playerid],pmodelid[playerid]);
  3196. // SendClientMessageToAll(COLOR_GREY,string128);
  3197. return 1;
  3198. }
  3199.  
  3200. forward PutPlayerInPlayerCar(playerid);
  3201. public PutPlayerInPlayerCar(playerid) {
  3202. PutPlayerInVehicle(playerid,playercar[playerid],0);
  3203. // pvehicleid[playerid] = GetPlayerVehicleID(playerid);
  3204. // pmodelid[playerid] = GetVehicleModel(playercar[playerid]);
  3205. // TogglePlayerControllable(playerid,true);
  3206. // format(string64,sizeof(string128),"Debug: I put %i in car %i YAAAAAAAY",playerid,pvehicleid[playerid]);
  3207. // SendClientMessageToAll(COLOR_GREY,string64);
  3208. return 1;
  3209. }
  3210.  
  3211. //------------------------------------------------------------------------------
  3212. public OnPlayerSelectedMenuRow(playerid, row)
  3213. {
  3214. TogglePlayerControllable(playerid,true);
  3215. #if defined MENUS
  3216. new Menu:Current = GetPlayerMenu(playerid);
  3217. if(Current == CarM)
  3218. {
  3219. new modelid = 0;
  3220. SendClientMessage(playerid, COLOR_YELLOW, "Use the SPACEBAR to select your choice. Use ENTER to close menu.");
  3221. switch(row)
  3222. {
  3223. case 0: modelid = 560; //sultan
  3224. case 1: modelid = 411; //infernus
  3225. case 2: modelid = 541; //bullet
  3226. case 3: modelid = 506; //supergt
  3227. case 4: modelid = 565;//flash
  3228. case 5: modelid = 568;//bandito
  3229. case 6: modelid = 589;//club vw
  3230. case 7: modelid = 562;//elegy
  3231. case 8: modelid = 496;//blista
  3232. case 9: modelid = 522;//nrg
  3233. case 10: // more cars
  3234. {
  3235. if(IsValidMenu(Car2M)) ShowMenuForPlayerEx(Car2M, playerid);
  3236. return 1;
  3237. }
  3238. }
  3239. if(modelid) CreatePlayerVehicle(playerid,modelid);
  3240. TogglePlayerControllable(playerid,true);
  3241. return 1;
  3242. }
  3243. else if(Current == Car2M)
  3244. {
  3245. new modelid = 0;
  3246. switch(row)
  3247. {
  3248. case 0: modelid = 504; //bloodring
  3249. case 1: modelid = 535; //slamvan
  3250. case 2: modelid = 556;// monster truck
  3251. case 3: modelid = 468; //sanchez
  3252. case 4: modelid = 567; //savanah
  3253. case 5: modelid = 471; //quad
  3254. case 6: modelid = 424; //bfinjection
  3255. case 7: modelid = 571; //kart
  3256. case 8: modelid = 406; //dumper
  3257. case 9: modelid = 431; //coach
  3258. case 10:
  3259. {
  3260. if(IsValidMenu(Car3M)) ShowMenuForPlayerEx(Car3M, playerid);
  3261. // SendClientMessage(playerid, COLOR_YELLOW, "Use the SPACEBAR to select your choice. Use ENTER to close menu.");
  3262. return 1;
  3263. }
  3264. }
  3265. if(modelid) CreatePlayerVehicle(playerid,modelid);
  3266. TogglePlayerControllable(playerid,true);
  3267. return 1;
  3268. }
  3269. else if(Current == Car3M)
  3270. {
  3271. new modelid = 0;
  3272. switch(row)
  3273. {
  3274. case 0: modelid = 443; //packer
  3275. case 1: modelid = 481; //bmx
  3276. case 2: modelid = 588; //hotdog
  3277. case 3: modelid = 483; //camper
  3278. case 4: modelid = 463; //freeway
  3279. case 5: modelid = 539; //vortex
  3280. case 6: modelid = 514; //petro
  3281. case 7: modelid = 596; //cop car
  3282. case 8: modelid = 523; //cop bike
  3283. case 9: modelid = 593; //dodo
  3284. case 10:
  3285. {
  3286. if(IsValidMenu(Car4M)) ShowMenuForPlayerEx(Car4M, playerid);
  3287. // SendClientMessage(playerid, COLOR_YELLOW, "Use the SPACEBAR to select your choice. Use ENTER to close menu.");
  3288. return 1;
  3289. }
  3290. }
  3291. if(modelid) CreatePlayerVehicle(playerid,modelid);
  3292. TogglePlayerControllable(playerid,true);
  3293. return 1;
  3294. }
  3295. else if(Current == Car4M)
  3296. {
  3297. new modelid = 0;
  3298. switch(row)
  3299. {
  3300. case 0: modelid = 457; // golf cart
  3301. case 1: modelid = 460; // sea plane
  3302. case 2: modelid = 420; // taxi
  3303. case 3: modelid = 475; // sabre
  3304. case 4: modelid = 409; // stretch
  3305. case 5: modelid = 446; // sqaullo
  3306. case 6: modelid = 449; // tram
  3307. case 7: modelid = 537; // train
  3308. case 8: modelid = 407; // fire truck
  3309. case 9: modelid = 573; // dakar rally
  3310. case 10: modelid = 559; // jester
  3311. }
  3312. CreatePlayerVehicle(playerid,modelid);
  3313. if(modelid) CreatePlayerVehicle(playerid,modelid);
  3314. TogglePlayerControllable(playerid,true);
  3315. return 1;
  3316. }
  3317. else if(Current == CasinoM)
  3318. {
  3319. TogglePlayerControllable(playerid,true);
  3320. if(RaceParticipant[playerid] > 0) return SendClientMessage(playerid,COLOR_ERROR,"You are in a DM or AFK area, or you are in a race. Type /leave");
  3321. switch(row)
  3322. {
  3323. case 0: {
  3324. SetPlayerInterior(playerid,1);
  3325. SetPlayerPos(playerid, 2235.1851,1677.9374,1008.3594);// Caligulas
  3326. }
  3327. case 1: {
  3328. SetPlayerInterior(playerid,10);
  3329. SetPlayerPos(playerid, 1994.7236,1017.8349,994.8906); // Four Dragons
  3330. }
  3331. default: return 1;
  3332. }
  3333. return 1;
  3334. }
  3335.  
  3336. else if(Current == FightM)
  3337. {
  3338. if(RaceParticipant[playerid] > 0) return SendClientMessage(playerid,COLOR_ERROR,"You are in a DM or AFK area, or you are in a race. Type /leave");
  3339. new fstyle = 0;
  3340. switch(row)
  3341. {
  3342. case 0: fstyle = FIGHT_STYLE_NORMAL; // normal
  3343. case 1: fstyle = FIGHT_STYLE_BOXING; // boxing
  3344. case 2: fstyle = FIGHT_STYLE_KUNGFU; // kungfu
  3345. case 3: fstyle = FIGHT_STYLE_KNEEHEAD;
  3346. case 4: fstyle = FIGHT_STYLE_GRABKICK;
  3347. case 5: fstyle = FIGHT_STYLE_ELBOW;
  3348. }
  3349. #if defined SAMP03
  3350. SetPlayerFightingStyle(playerid, fstyle);
  3351. SendClientMessage(playerid, COLOR_CONFIRM, "Fighting style changed. Type /fight again to choose a different one.");
  3352. #else
  3353. SendClientMessage(playerid, COLOR_ERROR, "Not implemented (beta)");
  3354. #pragma unused fstyle
  3355. #endif
  3356.  
  3357. return 1;
  3358. }
  3359. else if(Current == JumpM)
  3360. {
  3361. if(RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_ERROR,"You are in a DM or AFK area, or you are in a race. Type /leave");
  3362. switch(row)
  3363. {
  3364. case 0: SetPlayerPos(playerid, 1574.8966,-1249.2684,277.8787);
  3365. case 1: SetPlayerPos(playerid, 1539.4971,-1371.4875,328.3436);
  3366. case 2: SetPlayerPos(playerid, -225.1428,1393.6865,172.4141);
  3367. case 3: SetPlayerPos(playerid, -2872.1931,2606.3821,271.5319);
  3368. case 4: SetPlayerPos(playerid, -341.6077,1601.4565,164.4840);
  3369. case 5: SetPlayerPos(playerid, -2671.7253,1594.8706,217.2739);
  3370. case 6: SetPlayerPos(playerid, -1282.2144,51.9589,70.4453);
  3371. case 7: SetPlayerPos(playerid, -1791.7642,558.0606,234.8906);
  3372. case 8: SetPlayerPos(playerid, -1753.6783,885.3945,295.8750);
  3373. case 9: SetPlayerPos(playerid, -372.9020,2125.8528,132.8034);
  3374. default: return 1;
  3375. }
  3376. GivePlayerWeapon(playerid,46,1);
  3377. return 1;
  3378. }
  3379. else if(Current == Weather)
  3380. {
  3381. new id;
  3382. switch(row)
  3383. {
  3384. case 0: id = 15; //sunny
  3385. case 1: id = 7; //cloudy
  3386. case 2: id = 16; //tstorm
  3387. case 3: id = 9; //foggy
  3388. case 4: id = 17; //hot
  3389. case 5: id = 19; //sandstorm
  3390. case 6: id = 35; //polluted
  3391. }
  3392. SetPlayerWeather(playerid,id);
  3393. return 1;
  3394. }
  3395. #if defined DM
  3396. else if(Current == DMM)
  3397. {
  3398. // SendClientMessage(playerid, COLOR_YELLOW, "Use the SPACEBAR to select your choice. Use ENTER to close menu.");
  3399. switch(row)
  3400. {
  3401. // case 1: CarDM(playerid); //added respawn - 0 so msg goes out. Must be placed here to avoid exploiting.
  3402. case 0: return HouseDM(playerid);
  3403. case 1: return ShipDM(playerid);
  3404. case 2: return MilitaryDM(playerid);
  3405. case 3: return GasDM(playerid);
  3406. case 4: return SawnOffDM(playerid);
  3407. case 5: return SniperDM(playerid);
  3408. case 6: return RocketDM(playerid);
  3409. case 7: return MinigunDM(playerid);
  3410. // case 8: return GrenadeDM(playerid);
  3411. case 8: return SwordDM(playerid);
  3412. case 9: return DeagleDM(playerid);
  3413. // case 10: return RCTrackDM(playerid);
  3414. default: return 1;
  3415. }
  3416. return 1;
  3417. }
  3418. #endif
  3419.  
  3420. else if(Current == WheelsM)
  3421. {
  3422. new wheelid;
  3423. // SendClientMessage(playerid, COLOR_YELLOW, "Use the SPACEBAR to select your choice. Use ENTER to close menu.");
  3424. switch(row)
  3425. {
  3426. case 0: wheelid = 1025;
  3427. case 1: wheelid = 1073;
  3428. case 2: wheelid = 1074;
  3429. case 3: wheelid = 1075;
  3430. case 4: wheelid = 1076;
  3431. case 5: wheelid = 1077;
  3432. case 6: wheelid = 1078;
  3433. case 7: wheelid = 1079;
  3434. case 8: wheelid = 1080;
  3435. case 9:
  3436. {
  3437. if(IsValidMenu(Wheels2M)) ShowMenuForPlayerEx(Wheels2M, playerid);
  3438. return 1;
  3439. }
  3440. }
  3441. AddVehicleComponent(pvehicleid[playerid],wheelid);
  3442. return 1;
  3443. }
  3444. else if(Current == Wheels2M)
  3445. {
  3446. new wheelid;
  3447. // SendClientMessage(playerid, COLOR_YELLOW, "Use the SPACEBAR to select your choice. Use ENTER to close menu.");
  3448. switch(row)
  3449. {
  3450. case 0: wheelid = 1081;
  3451. case 1: wheelid = 1082;
  3452. case 2: wheelid = 1083;
  3453. case 3: wheelid = 1084;
  3454. case 4: wheelid = 1085;
  3455. case 5: wheelid = 1096;
  3456. case 6: wheelid = 1097;
  3457. case 7: wheelid = 1098;
  3458. case 8:
  3459. {
  3460. if(IsValidMenu(WheelsM)) ShowMenuForPlayerEx(WheelsM, playerid);
  3461. return 1;
  3462. }
  3463. }
  3464. AddVehicleComponent(pvehicleid[playerid],wheelid);
  3465. return 1;
  3466. }
  3467.  
  3468.  
  3469. #if defined RACES
  3470. else if(Current == MAdmin)
  3471. {
  3472. if(row <=4 && RaceActive == 1)
  3473. {
  3474. SendClientMessage(playerid,COLOR_RED,"Race active, cannot change this setting!");
  3475. if(IsValidMenu(MAdmin)) ShowMenuForPlayerEx(MAdmin,playerid);
  3476. return 1;
  3477. }
  3478. if(row == 0) ShowMenuForPlayerEx(MPMode,playerid);
  3479. else if(row == 1) ShowMenuForPlayerEx(MPrize,playerid);
  3480. else if(row == 2) ShowMenuForPlayerEx(MDyna,playerid);
  3481. else if(row == 3) ShowMenuForPlayerEx(MFee,playerid);
  3482. else if(row == 4) ShowMenuForPlayerEx(MDelay,playerid);
  3483. else if(row == 5)
  3484. {
  3485. if(RaceActive == 1) endrace();
  3486. else SendClientMessage(playerid,COLOR_YELLOW,"No race active!");
  3487. ShowMenuForPlayerEx(MAdmin,playerid);
  3488. }
  3489. else if(row == 9) HideMenuForPlayer(MAdmin,playerid);
  3490. else
  3491. {
  3492. if(row == 6 && RaceAdmin == 1) RaceAdmin=0;
  3493. else if(row == 6 && RaceAdmin == 0) RaceAdmin=1;
  3494. else if(row == 7 && BuildAdmin == 1) BuildAdmin=0;
  3495. else if(row == 7 && BuildAdmin == 0) BuildAdmin=1;
  3496. else if(row == 8 && RRotation >= 0) RRotation = -1;
  3497. else RRotation = 0;
  3498. if(RaceAdmin == 1) format(string128,sizeof(string128),"RA: ON");
  3499. else format(string128,sizeof(string128),"RA: off");
  3500. if(BuildAdmin == 1) format(string128,sizeof(string128),"%s BA: ON",string128);
  3501. else format(string128,sizeof(string128),"%s BA: off",string128);
  3502. if(RRotation >= 0) format(string128,sizeof(string128),"%s RR: ON",string128);
  3503. else format(string128,sizeof(string128),"%s RR: off",string128);
  3504. RefreshMenuHeader(playerid,MAdmin,string128);
  3505. }
  3506. return 1;
  3507. }
  3508. else if(Current == MPMode)
  3509. {
  3510. if(row == 5)
  3511. {
  3512. ShowMenuForPlayerEx(MAdmin,playerid);
  3513. return 1;
  3514. }
  3515. PrizeMode = row;
  3516. if (PrizeMode == 0) string128 = "Fixed";
  3517. else if(PrizeMode == 1) string128 = "Dynamic";
  3518. else if(PrizeMode == 2) string128 = "Join Fee";
  3519. else if(PrizeMode == 3) string128 = "Join Fee + Fixed";
  3520. else if(PrizeMode == 4) string128 = "Join Fee + Dynamic";
  3521. format(string128,sizeof(string128),"Mode: %s",string128);
  3522. RefreshMenuHeader(playerid,MPMode,string128);
  3523. return 1;
  3524. }
  3525. else if(Current == MPrize)
  3526. {
  3527. if(row == 6)
  3528. {
  3529. ShowMenuForPlayerEx(MAdmin,playerid);
  3530. return 1;
  3531. }
  3532. if (row == 0) Prize += 100;
  3533. else if(row == 1) Prize += 1000;
  3534. else if(row == 2) Prize += 10000;
  3535. else if(row == 3) Prize -= 100;
  3536. else if(row == 4) Prize -= 1000;
  3537. else if(row == 5) Prize -= 10000;
  3538. if(Prize < 0) Prize = 0;
  3539. format(string128,sizeof(string128),"Amount: %d",Prize);
  3540. RefreshMenuHeader(playerid,MPrize,string128);
  3541. return 1;
  3542. }
  3543. else if(Current == MDyna)
  3544. {
  3545. if(row == 4)
  3546. {
  3547. ShowMenuForPlayerEx(MAdmin,playerid);
  3548. return 1;
  3549. }
  3550. if (row == 0) DynaMP++;
  3551. else if(row == 1) DynaMP+=5;
  3552. else if(row == 2) DynaMP--;
  3553. else if(row == 3) DynaMP-=5;
  3554. else if(DynaMP < 1) DynaMP = 1;
  3555. format(string128,sizeof(string128),"Multiplier: %dx",DynaMP);
  3556. RefreshMenuHeader(playerid,MDyna,string128);
  3557. return 1;
  3558. }
  3559. else if(Current == MBuild)
  3560. {
  3561. if(row == 0)
  3562. {
  3563. format(string128,sizeof(string128),"Laps: %d",Blaps[b(playerid)]);
  3564. SetMenuColumnHeader(MLaps,0,string128);
  3565. ShowMenuForPlayerEx(MLaps,playerid);
  3566. }
  3567. else if(row == 1)
  3568. {
  3569. format(string128,sizeof(string128),"Mode: %s",ReturnModeName(Bracemode[b(playerid)]));
  3570. SetMenuColumnHeader(MRacemode,0,string128);
  3571. ShowMenuForPlayerEx(MRacemode,playerid);
  3572. }
  3573. else if(row == 2)
  3574. {
  3575. format(string128,sizeof(string128),"Size: %0.2f",BCPsize[b(playerid)]);
  3576. SetMenuColumnHeader(MCPsize,0,string128);
  3577. ShowMenuForPlayerEx(MCPsize,playerid);
  3578. }
  3579. else if(row == 3)
  3580. {
  3581. if(BAirrace[b(playerid)] == 0)
  3582. {
  3583. BAirrace[b(playerid)] = 1;
  3584. format(string128,sizeof(string128),"Air race: ON");
  3585. }
  3586. else if(BAirrace[b(playerid)] == 1)
  3587. {
  3588. BAirrace[b(playerid)] = 0;
  3589. format(string128,sizeof(string128),"Air race: off");
  3590. }
  3591. RefreshMenuHeader(playerid,MBuild,string128);
  3592. }
  3593. else if(row == 4)
  3594. {
  3595. clearrace(playerid);
  3596. HideMenuForPlayer(MBuild,playerid);
  3597. return 1;
  3598. }
  3599. else if(row == 5)
  3600. {
  3601. HideMenuForPlayer(MBuild,playerid);
  3602. }
  3603. return 1;
  3604. }
  3605. else if(Current == MLaps)
  3606. {
  3607. if(row == 6)
  3608. {
  3609. if(RaceBuilders[playerid] != 0) ShowMenuForPlayerEx(MBuild,playerid);
  3610. else ShowMenuForPlayerEx(MRace,playerid);
  3611. return 1;
  3612. }
  3613. new change=0;
  3614. if (row == 0) change++;
  3615. else if(row == 1) change+=5;
  3616. else if(row == 2) change+=10;
  3617. else if(row == 3) change--;
  3618. else if(row == 4) change-=5;
  3619. else if(row == 5) change-=10;
  3620. if(RaceBuilders[playerid] != 0) {
  3621. Blaps[b(playerid)] += change;
  3622. if(Blaps[b(playerid)] < 1) Blaps[b(playerid)] = 1;
  3623. format(string128,sizeof(string128),"Laps: %d",Blaps[b(playerid)]);
  3624. RefreshMenuHeader(playerid,MLaps,string128);
  3625. }
  3626. else
  3627. {
  3628. Racelaps += change;
  3629. if(Racelaps < 1) Racelaps = 1;
  3630. format(string128,sizeof(string128),"Laps: %d",Racelaps);
  3631. RefreshMenuHeader(playerid,MLaps,string128);
  3632. }
  3633. return 1;
  3634. }
  3635. else if(Current == MRacemode)
  3636. {
  3637. if(row == 4)
  3638. {
  3639. if(RaceBuilders[playerid] != 0) ShowMenuForPlayerEx(MBuild,playerid);
  3640. else ShowMenuForPlayerEx(MRace,playerid);
  3641. return 1;
  3642. }
  3643. if(RaceBuilders[playerid] != 0)
  3644. {
  3645. Bracemode[b(playerid)]=row;
  3646. if(Bracemode[b(playerid)] == 2 && BCurrentCheckpoints[b(playerid)] < 3)
  3647. {
  3648. SendClientMessage(playerid,COLOR_YELLOW,"Cannot set racemode 2 with only 2 CPs!");
  3649. Bracemode[b(playerid)] = 1;
  3650. }
  3651. format(string128,sizeof(string128),"Mode: %s",ReturnModeName(Bracemode[b(playerid)]));
  3652. RefreshMenuHeader(playerid,MRacemode,string128);
  3653. return 1;
  3654. }
  3655. else
  3656. {
  3657. Racemode = row;
  3658. if(Racemode == 2 && LCurrentCheckpoint < 2)
  3659. {
  3660. SendClientMessage(playerid,COLOR_YELLOW,"Cannot set racemode 2 with only 2 CPs!");
  3661. Racemode = 1;
  3662. }
  3663. format(string128,sizeof(string128),"Mode: %s",ReturnModeName(Racemode));
  3664. RefreshMenuHeader(playerid,MRacemode,string128);
  3665. }
  3666. return 1;
  3667. }
  3668. else if(Current == MRace)
  3669. {
  3670. if(row == 0)
  3671. {
  3672. format(string128,sizeof(string128),"Laps: %d",Racelaps);
  3673. SetMenuColumnHeader(MLaps,0,string128);
  3674. ShowMenuForPlayerEx(MLaps,playerid);
  3675. }
  3676. else if(row == 1)
  3677. {
  3678. format(string128,sizeof(string128),"Mode: %s",ReturnModeName(Racemode));
  3679. SetMenuColumnHeader(MRacemode,0,string128);
  3680. ShowMenuForPlayerEx(MRacemode,playerid);
  3681. }
  3682. else if(row == 2)
  3683. {
  3684. format(string128,sizeof(string128),"Size: %0.2f",CPsize);
  3685. SetMenuColumnHeader(MCPsize,0,string128);
  3686. ShowMenuForPlayerEx(MCPsize,playerid);
  3687. }
  3688. else if(row == 3)
  3689. {
  3690. if(Airrace == 0)
  3691. {
  3692. Airrace = 1;
  3693. format(string128,sizeof(string128),"Air race: ON");
  3694. }
  3695. else if(Airrace == 1)
  3696. {
  3697. Airrace = 0;
  3698. format(string128,sizeof(string128),"Air race: off");
  3699. }
  3700. RefreshMenuHeader(playerid,MRace,string128);
  3701. }
  3702. else if(row == 4)
  3703. {
  3704. if(RaceActive == 0)
  3705. {
  3706. startrace();
  3707. HideMenuForPlayer(MRace,playerid);
  3708. }
  3709. else SendClientMessage(playerid,COLOR_YELLOW,"Race is already active!");
  3710. }
  3711. else if(row == 5) HideMenuForPlayer(MRace,playerid);
  3712. return 1;
  3713. }
  3714. else if(Current == MFee)
  3715. {
  3716. if(row == 6)
  3717. {
  3718. ShowMenuForPlayerEx(MAdmin,playerid);
  3719. return 1;
  3720. }
  3721. if(row == 0) JoinFee +=100;
  3722. if(row == 1) JoinFee +=1000;
  3723. if(row == 2) JoinFee +=10000;
  3724. if(row == 3) JoinFee -=100;
  3725. if(row == 4) JoinFee -=1000;
  3726. if(row == 5) JoinFee -=10000;
  3727. if(JoinFee < 0) JoinFee = 0;
  3728. format(string128,sizeof(string128),"Fee: %d$",JoinFee);
  3729. RefreshMenuHeader(playerid,MFee,string128);
  3730. return 1;
  3731. }
  3732. else if(Current == MCPsize)
  3733. {
  3734. if(row == 6)
  3735. {
  3736. if(RaceBuilders[playerid] != 0) ShowMenuForPlayerEx(MBuild,playerid);
  3737. else ShowMenuForPlayerEx(MRace,playerid);
  3738. return 1;
  3739. }
  3740. new Float:change;
  3741. if(row == 0) change +=0.1;
  3742. if(row == 1) change +=1.0;
  3743. if(row == 2) change +=10.0;
  3744. if(row == 3) change -=0.1;
  3745. if(row == 4) change -=1.0;
  3746. if(row == 5) change -=10.0;
  3747. if(RaceBuilders[playerid] != 0)
  3748. {
  3749. BCPsize[b(playerid)] += change;
  3750. if(BCPsize[b(playerid)] < 1.0) BCPsize[b(playerid)] = 1.0;
  3751. if(BCPsize[b(playerid)] > 32.0) BCPsize[b(playerid)] = 32.0;
  3752. format(string128,sizeof(string128),"Size %0.2f",BCPsize[b(playerid)]);
  3753. RefreshMenuHeader(playerid,MCPsize,string128);
  3754. }
  3755. else
  3756. {
  3757. CPsize += change;
  3758. if(CPsize < 1.0) CPsize = 1.0;
  3759. if(CPsize > 32.0) CPsize = 32.0;
  3760. format(string128,sizeof(string128),"Size %0.2f",CPsize);
  3761. RefreshMenuHeader(playerid,MCPsize,string128);
  3762. }
  3763. return 1;
  3764. }
  3765. else if(Current == MDelay)
  3766. {
  3767. if(row == 4)
  3768. {
  3769. ShowMenuForPlayerEx(MAdmin,playerid);
  3770. return 1;
  3771. }
  3772. if (row == 0) MajorityDelay+=10;
  3773. else if(row == 1) MajorityDelay+=60;
  3774. else if(row == 2) MajorityDelay-=10;
  3775. else if(row == 3) MajorityDelay-=60;
  3776. if(MajorityDelay <= 0)
  3777. {
  3778. MajorityDelay=0;
  3779. format(string128,sizeof(string128),"Delay: disabled");
  3780. }
  3781. else format(string128,sizeof(string128),"Delay: %ds",MajorityDelay);
  3782. RefreshMenuHeader(playerid,MDelay,string128);
  3783. return 1;
  3784. }
  3785. #endif
  3786. #endif //menus
  3787. return 1;
  3788. }
  3789. //------------------------------------------------------------------------------
  3790. #if defined MENUS
  3791. public OnPlayerExitedMenu(playerid)
  3792. {
  3793.  
  3794. new Menu:Current = GetPlayerMenu(playerid);
  3795. HideMenuForPlayer(Current, playerid);
  3796. TogglePlayerControllable(playerid,true);
  3797. return 1;
  3798. }
  3799.  
  3800. forward ShowMenuForPlayerEx(Menu:menuid, playerid);
  3801. public ShowMenuForPlayerEx(Menu:menuid, playerid) {
  3802. if(IsPlayerConnected(playerid)) {
  3803. if(pvehicleid[playerid]) SendClientMessage(playerid, COLOR_YELLOW, "To make selection please use the ACCELERATE or SPACEBAR key! Press ENTER to close.");
  3804. else if(pstate[playerid] == PLAYER_STATE_ONFOOT) SendClientMessage(playerid, COLOR_YELLOW, "To make selection please use the SPACEBAR key! Press ENTER to close.");
  3805. TogglePlayerControllable(playerid,false);
  3806. ShowMenuForPlayer(Menu:menuid,playerid);
  3807. }
  3808. return 1;
  3809. }
  3810. #endif
  3811.  
  3812. stock IsSkinValid(skinid) {
  3813. #define MAX_BAD_SKINS 22
  3814. new badSkins[MAX_BAD_SKINS] = {
  3815. 3, 4, 5, 6, 8, 42, 65, 74, 86,
  3816. 119, 149, 208, 265, 266, 267,
  3817. 268, 269, 270, 271, 272, 273, 289
  3818. };
  3819. if (skinid < 0 || skinid > 299) return false;
  3820. for (new i = 0; i < MAX_BAD_SKINS; i++) if (skinid == badSkins[i]) return false;
  3821. #undef MAX_BAD_SKINS
  3822. return true;
  3823. }
  3824. #if defined DM
  3825. forward MilitaryDM(playerid);
  3826. public MilitaryDM(playerid) {
  3827. if(RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_ERROR,"You must type /leave before entering another DM zone");
  3828. new rand = random(sizeof(gRandomMilitaryDM));
  3829. SetPlayerPosEx(playerid, gRandomMilitaryDM[rand][0], gRandomMilitaryDM[rand][1], gRandomMilitaryDM[rand][2]+2);
  3830. SetPlayerWorldBounds(playerid, 537.1823, -128.4566, 2370.609, 1576.513);
  3831. ResetPlayerWeapons(playerid);
  3832. // SetPlayerVirtualWorldEx(playerid,WORLD_DM);
  3833. GivePlayerWeapon(playerid,16,100);
  3834. GivePlayerWeapon(playerid,31,999);
  3835. GivePlayerWeapon(playerid,35,500);
  3836. SetPlayerSkin(playerid,287);
  3837. gTeam[playerid] = 5;
  3838. return 1;
  3839. }
  3840. forward SawnOffDM(playerid);
  3841. public SawnOffDM(playerid) {
  3842. if(RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_ERROR,"You must type /leave before entering another DM zone");
  3843. SetPlayerInterior(playerid, 0);
  3844. new rand = random(sizeof(gRandomSawnOffDM));
  3845. SetPlayerPosEx(playerid, gRandomSawnOffDM[rand][0], gRandomSawnOffDM[rand][1], gRandomSawnOffDM[rand][2],gRandomSawnOffDM[rand][3]);
  3846. SetPlayerWorldBounds(playerid, -2394.683, -2502.838, 716.3557, 598.0067);
  3847. ResetPlayerWeapons(playerid);
  3848. // SetPlayerVirtualWorldEx(playerid,WORLD_DM);
  3849. GivePlayerWeapon(playerid, 26, 999);
  3850. gTeam[playerid] = 7;
  3851. return 1;
  3852. }
  3853. forward SniperDM(playerid);
  3854. public SniperDM(playerid) {
  3855. if(RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_ERROR,"You must type /leave before entering another DM zone");
  3856. new rand = random(sizeof(gRandomSniperDM));
  3857. SetPlayerPosEx(playerid, gRandomSniperDM[rand][0], gRandomSniperDM[rand][1], gRandomSniperDM[rand][2],gRandomSniperDM[rand][3]);
  3858. SetPlayerWorldBounds(playerid, 362.0141, 46.7115, 1529.802, 1272.888);
  3859. // SetPlayerVirtualWorldEx(playerid,WORLD_DM);
  3860. ResetPlayerWeapons(playerid);
  3861. GivePlayerWeapon(playerid, 34, 999);
  3862. SetPlayerArmour(playerid, 100);
  3863. gTeam[playerid] = 8;
  3864. return 1;
  3865. }
  3866. forward RocketDM(playerid);
  3867. public RocketDM(playerid) {
  3868. if(RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_ERROR,"You must type /leave before entering another DM zone");
  3869. new rand = random(sizeof(gRandomRocketDM));
  3870. SetPlayerPosEx(playerid, gRandomRocketDM[rand][0], gRandomRocketDM[rand][1], gRandomRocketDM[rand][2],gRandomRocketDM[rand][3],17);
  3871. SetPlayerWorldBounds(playerid, 887.5186, 116.7788, 385.3699, -326.9805);
  3872. // SetPlayerVirtualWorldEx(playerid,WORLD_DM);
  3873. ResetPlayerWeapons(playerid);
  3874. GivePlayerWeapon(playerid, 35, 500);
  3875. SetPlayerArmour(playerid, 100);
  3876. gTeam[playerid] = 9;
  3877. return 1;
  3878. }
  3879. forward MinigunDM(playerid);
  3880. public MinigunDM(playerid) {
  3881. if(RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_ERROR,"You must type /leave before entering another DM zone");
  3882. new rand = random(sizeof(gRandomMinigunDM));
  3883. SetPlayerPosEx(playerid, gRandomMinigunDM[rand][0], gRandomMinigunDM[rand][1], gRandomMinigunDM[rand][2]+2,gRandomMinigunDM[rand][3]);
  3884. SetPlayerWorldBounds(playerid, 1422.014, 1269.725, 2233.659, 2098.277);
  3885. // SetPlayerVirtualWorldEx(playerid,WORLD_DM);
  3886. ResetPlayerWeapons(playerid);
  3887. GivePlayerWeapon(playerid,38,999);
  3888. gTeam[playerid] = 10;
  3889. return 1;
  3890. }
  3891. forward HouseDM(playerid);
  3892. public HouseDM(playerid) {
  3893. if(RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_ERROR,"You must type /leave before entering another DM zone");
  3894. new rand = random(sizeof(gRandomHouseDMSpawns));
  3895. SetPlayerPosEx(playerid, gRandomHouseDMSpawns[rand][0], gRandomHouseDMSpawns[rand][1], gRandomHouseDMSpawns[rand][2],0.0,5);
  3896. SetPlayerWorldBounds(playerid, 2493.814, 2204.798, -1062.067, -1417.363);
  3897. // SetPlayerVirtualWorldEx(playerid,WORLD_DM);
  3898. ResetPlayerWeapons(playerid);
  3899. GivePlayerWeapon(playerid, 25, 999);
  3900. GivePlayerWeapon(playerid, 24, 999);
  3901. GivePlayerWeapon(playerid, 29, 999);
  3902. GivePlayerWeapon(playerid, 31, 999);
  3903. GivePlayerWeapon(playerid, 32, 999);
  3904. gTeam[playerid] = 13;
  3905. return 1;
  3906. }
  3907.  
  3908. forward GasDM(playerid);
  3909. public GasDM(playerid) {
  3910. if(RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_ERROR,"You must type /leave before entering another DM zone");
  3911. SetPlayerPosEx(playerid, -1324.4618,2676.7446,49.6320,86.5);
  3912. SetPlayerWorldBounds(playerid, -1144.432, -1401.345, 2802.69, 2545.777);
  3913. // SetPlayerVirtualWorldEx(playerid,WORLD_DM);
  3914. ResetPlayerWeapons(playerid);
  3915. GivePlayerWeapon(playerid, 37, 999);
  3916. gTeam[playerid] = 17;
  3917. return 1;
  3918. }
  3919. forward ShipDM(playerid);
  3920. public ShipDM(playerid) {
  3921. if(RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_ERROR,"You must type /leave before entering another DM zone");
  3922. new rand = random(sizeof(gRandomShipSpawns));
  3923. SetPlayerPosEx(playerid, gRandomShipSpawns[rand][0], gRandomShipSpawns[rand][1], gRandomShipSpawns[rand][2]);
  3924. SetPlayerWorldBounds(playerid, -2195.441, -2580.811, 1658.258, 1448.057);
  3925. // SetPlayerVirtualWorldEx(playerid,WORLD_DM);
  3926. ResetPlayerWeapons(playerid);
  3927. GivePlayerWeapon(playerid, 25, 900);
  3928. GivePlayerWeapon(playerid, 24, 900);
  3929. GivePlayerWeapon(playerid, 29, 900);
  3930. GivePlayerWeapon(playerid, 31, 900);
  3931. GivePlayerWeapon(playerid, 32, 900);
  3932. gTeam[playerid] = 18;
  3933. return 1;
  3934. }
  3935. forward SwordDM(playerid);
  3936. public SwordDM(playerid) {
  3937. if(RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_ERROR,"You must type /leave before entering another DM zone");
  3938. new rand = random(sizeof(gRandomSwordDM));
  3939. SetPlayerPosEx(playerid, gRandomSwordDM[rand][0], gRandomSwordDM[rand][1], gRandomSwordDM[rand][2], gRandomSwordDM[rand][3],5);
  3940. gTeam[playerid] = 20;
  3941. // SetPlayerVirtualWorldEx(playerid,WORLD_DM);
  3942. ResetPlayerWeapons(playerid);
  3943. GivePlayerWeapon(playerid, 8,1);
  3944. return 1;
  3945. }
  3946. forward DeagleDM(playerid);
  3947. public DeagleDM(playerid) {
  3948. if(RaceParticipant[playerid]) return SendClientMessage(playerid,COLOR_ERROR,"You must type /leave before entering another DM zone");
  3949. new rand = random(sizeof(gRandomDeagleDM));
  3950. SetPlayerPosEx(playerid, gRandomDeagleDM[rand][0], gRandomDeagleDM[rand][1], gRandomDeagleDM[rand][2], gRandomDeagleDM[rand][3],3);
  3951. SetPlayerArmour(playerid,0.0);
  3952. SetPlayerHealth(playerid,40.0);
  3953. gTeam[playerid] = 21;
  3954. // SetPlayerVirtualWorldEx(playerid,WORLD_DM);
  3955. ResetPlayerWeapons(playerid);
  3956. GivePlayerWeapon(playerid, 24,999);
  3957. return 1;
  3958. }
  3959.  
  3960. #endif //dm
  3961.  
  3962.  
  3963. //forward SetPlayerPosEx
  3964. SetPlayerPosEx(playerid, Float:x, Float:y, Float:z, Float:a=0.0, Interior=0)
  3965. {
  3966. if(IsPlayerInAnyVehicle(playerid)) RemovePlayerFromVehicle(playerid);
  3967. SetPlayerPos(playerid, x, y, z);
  3968. SetPlayerFacingAngle(playerid, a);
  3969. SetPlayerInterior(playerid, Interior);
  3970. SetCameraBehindPlayer(playerid);
  3971. return 1;
  3972. }
  3973. //forward SetVehiclePosEx(playerid, vehicleid, Float:x, Float:y, Float:z, Float:a=0.0, Interior=0);
  3974. SetVehiclePosEx(playerid, vehicleid, Float:x, Float:y, Float:z, Float:a=0.0, Interior=0)
  3975. {
  3976. if(pvehicleid[playerid])
  3977. {
  3978. EnableStuntBonusForPlayer(playerid, false);
  3979. if((pmodelid[playerid] != 406 && (cantrace[playerid]) || aircraft[playerid])) return SendClientMessage(playerid,COLOR_ERROR,"Error: This vehicle type is not allowed to teleport.");
  3980. new trailer;
  3981. if(IsTrailerAttachedToVehicle(vehicleid))
  3982. {
  3983. trailer = GetVehicleTrailer(vehicleid);
  3984. }
  3985. SetPlayerInterior(playerid, Interior);
  3986. // SetPlayerVirtualWorldEx(playerid,World);
  3987. SetVehiclePos(vehicleid, x, y, z);
  3988. SetVehicleZAngle(vehicleid, a);
  3989. LinkVehicleToInterior(vehicleid, Interior);
  3990. SetVehicleVirtualWorld(vehicleid,pworld[playerid]);
  3991. if(trailer)
  3992. {
  3993. LinkVehicleToInterior(trailer, Interior);
  3994. AttachTrailerToVehicle(trailer,vehicleid);
  3995. }
  3996. SetCameraBehindPlayer(playerid);
  3997. EnableStuntBonusForPlayer(playerid, true);
  3998. return SendClientMessage(playerid,COLOR_SYSTEM,"You may have to exit the vehicle to force some objects to draw.");
  3999. }
  4000. return 1;
  4001. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement