Bulletje

Untitled

Jan 23rd, 2017
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 27.61 KB | None | 0 0
  1. /*
  2. Script by: Bullet
  3. Map by: Bullet
  4. Mission Base: Parkour
  5. Mission Type: Parkour
  6. Mission Type ID: 7
  7. */
  8. //==============================================================================
  9. // Includes
  10. //==============================================================================
  11. #include <a_samp>
  12. #include <crashdetect>
  13. #include <fixes2>
  14.  
  15. #include "..\filterscripts\MM\stuff\defines"
  16. #include "..\filterscripts\MM\stuff\serverkeymsg"
  17.  
  18. //==============================================================================
  19. // Defines
  20. //==============================================================================
  21.  
  22. #define MISSION_NAME "Roof to Roof"
  23. #define Health Float:0x7F800000
  24. #define MAX_MAP_OBJECTS 67
  25. #define CLASS_POSTION -1357.6470,3904.8469,11.5787
  26. #define CLASS_CAMERA -1357.7566,3895.3135,11.5787
  27. #define CLASS_FACING_AGNLE 178.8214
  28. #define Z_LIMIT 2
  29. #define START_TIME 20
  30.  
  31. //==============================================================================
  32. // Per mission functions
  33. //==============================================================================
  34.  
  35. enum cp_enum
  36. {
  37. Float:cp_x,
  38. Float:cp_y,
  39. Float:cp_z,
  40. cp_type,
  41. Float:cp_size
  42. };
  43.  
  44. new const cp[][cp_enum] =
  45. {
  46. {714.7200,-2729.1570,7.9269,0,10.0},
  47. {715.5039,-2775.8538,9.3253,0,10.0},
  48. {714.7115,-2833.8794,3.8976,0,10.0},
  49. {766.3132,-2798.2715,16.3780,0,10.0},
  50. {791.1300,-2771.6753,25.6961,0,10.0},
  51. {879.8939,-2767.1235,5.3147,0,10.0},
  52. {920.4266,-2771.0664,26.7037,0,10.0},
  53. {914.4606,-2925.9248,4.3336,0,10.0},
  54. {842.6933,-3051.2239,20.7951,1,10.0},
  55.  
  56. };
  57.  
  58. enum ped_enum
  59. {
  60. TeamID,
  61. Skin,
  62. Float:SpawnX,
  63. Float:SpawnY,
  64. Float:SpawnZ,
  65. Float:SpawnAngle,
  66. SpawnInterior,
  67. VirtualWorld,
  68. Weapon1,
  69. Ammo1,
  70. Weapon2,
  71. Ammo2,
  72. Weapon3,
  73. Ammo3,
  74. };
  75.  
  76. new PedInfo[][ped_enum] = {
  77.  
  78. {TEAM_DEFEND,0,713.7255,-2674.3335,1.5261,177.7126,0,0,0,0,0,0,0,0}
  79. };
  80.  
  81. #if MAX_MAP_OBJECTS != 0
  82. new Object[MAX_MAP_OBJECTS];
  83.  
  84. CreateMap()
  85. {
  86. Object[0] = CreateDynamicObject(8040,713.6286000,-2668.1909200,1.1198800,0.0000000,0.0000000,270.0000000); //
  87. Object[1] = CreateDynamicObject(6285,710.3621800,-2730.1696800,4.3800000,0.0000000,0.0000000,90.0000000); //
  88. Object[2] = CreateDynamicObject(6285,710.4205900,-2770.9555700,4.3800000,0.0000000,0.0000000,90.0000000); //
  89. Object[3] = CreateDynamicObject(6294,710.9152800,-2804.2739300,4.3660600,0.0000000,0.0000000,90.0000000); //
  90. Object[4] = CreateDynamicObject(3620,724.0000000,-2835.2534200,4.0000000,0.0000000,0.0000000,90.0000000); //
  91. Object[5] = CreateDynamicObject(3620,724.0000000,-2832.3300800,4.0000000,0.0000000,0.0000000,90.0000000); //
  92. Object[6] = CreateDynamicObject(12990,753.4542200,-2834.6242700,15.1790100,0.0000000,0.0000000,90.0000000); //
  93. Object[7] = CreateDynamicObject(12990,766.0114100,-2817.3322800,15.3320800,0.0000000,0.0000000,180.0000000); //
  94. Object[8] = CreateDynamicObject(5155,768.8121900,-2783.3210400,18.4846600,0.0000000,0.0000000,-270.0000000); //
  95. Object[9] = CreateDynamicObject(8614,757.1120000,-2776.8955100,21.1327100,0.0000000,0.0000000,270.0000000); //
  96. Object[10] = CreateDynamicObject(5126,798.2276000,-2771.5275900,19.5124700,0.0000000,0.0000000,0.0000000); //
  97. Object[11] = CreateDynamicObject(7317,855.0465700,-2772.3361800,2.3675000,0.0000000,0.0000000,180.0000000); //
  98. Object[12] = CreateDynamicObject(7317,874.7158800,-2762.3798800,2.3675000,0.0000000,0.0000000,180.0000000); //
  99. Object[13] = CreateDynamicObject(3257,889.4495200,-2767.2683100,-7.1354600,0.0000000,0.0000000,180.0000000); //
  100. Object[14] = CreateDynamicObject(7947,924.3988000,-2768.2072800,14.7837800,0.0000000,0.0000000,-180.0000000); //
  101. Object[15] = CreateDynamicObject(16267,919.3694500,-2869.2304700,0.5000000,0.0000000,0.0000000,82.0000000); //
  102. Object[16] = CreateDynamicObject(16267,921.9847400,-2869.3039600,0.5000000,0.0000000,0.0000000,82.0000000); //
  103. Object[17] = CreateDynamicObject(16267,925.2423100,-2869.6235400,0.4786700,0.0000000,0.0000000,82.0000000); //
  104. Object[18] = CreateDynamicObject(16342,933.2873500,-2881.3850100,2.4409000,0.0000000,0.0000000,0.0000000); //
  105. Object[19] = CreateDynamicObject(16342,941.8186600,-2900.0988800,2.4409000,0.0000000,0.0000000,0.0000000); //
  106. Object[20] = CreateDynamicObject(16342,937.6704100,-2854.9086900,2.4409000,0.0000000,0.0000000,0.0000000); //
  107. Object[21] = CreateDynamicObject(16342,941.2174100,-2870.6582000,2.4409000,0.0000000,0.0000000,0.0000000); //
  108. Object[22] = CreateDynamicObject(16342,927.0805700,-2908.9528800,2.4409000,0.0000000,0.0000000,0.0000000); //
  109. Object[23] = CreateDynamicObject(16340,907.6574100,-2868.3845200,2.4409000,0.0000000,0.0000000,0.0000000); //
  110. Object[24] = CreateDynamicObject(16340,898.2520800,-2887.8852500,2.4409000,0.0000000,0.0000000,0.0000000); //
  111. Object[25] = CreateDynamicObject(16340,905.1270100,-2905.5290500,2.4409000,0.0000000,0.0000000,0.0000000); //
  112. Object[26] = CreateDynamicObject(8431,848.4116800,-3047.8217800,12.3873900,0.0000000,0.0000000,-281.0000000); //
  113. Object[27] = CreateDynamicObject(8558,901.6981200,-2922.3696300,1.8051300,0.0000000,0.0000000,-10.0000000); //
  114. Object[28] = CreateDynamicObject(8558,901.8486900,-2921.5983900,0.7701000,-90.0000000,0.0000000,-10.0000000); //
  115. Object[29] = CreateDynamicObject(8558,908.1287800,-2930.9580100,1.8051300,0.0000000,0.0000000,-10.0000000); //
  116. Object[30] = CreateDynamicObject(8558,908.2802100,-2929.9477500,0.7701000,-90.0000000,0.0000000,-10.0000000); //
  117. Object[31] = CreateDynamicObject(8558,901.5183100,-2923.4365200,0.7701000,-270.0000000,0.0000000,-10.0000000); //
  118. Object[32] = CreateDynamicObject(8558,907.9613000,-2932.0659200,0.7701000,-270.0000000,0.0000000,-10.0000000); //
  119. Object[33] = CreateDynamicObject(8558,899.2264400,-2935.3901400,0.7701000,-90.0000000,0.0000000,-10.0000000); //
  120. Object[34] = CreateDynamicObject(8558,898.9686300,-2936.3708500,1.8051300,0.0000000,0.0000000,-10.0000000); //
  121. Object[35] = CreateDynamicObject(8558,898.9106400,-2937.4765600,0.7701000,-270.0000000,0.0000000,-10.0000000); //
  122. Object[36] = CreateDynamicObject(8558,904.5341200,-2943.5864300,0.7701000,-90.0000000,0.0000000,-10.0000000); //
  123. Object[37] = CreateDynamicObject(8558,904.4030800,-2944.5991200,1.8051000,0.0000000,0.0000000,-10.0000000); //
  124. Object[38] = CreateDynamicObject(8558,904.1063200,-2945.5744600,0.7701000,-270.0000000,0.0000000,-10.0000000); //
  125. Object[39] = CreateDynamicObject(8558,893.6796900,-2948.5576200,0.7701000,-90.0000000,0.0000000,-10.0000000); //
  126. Object[40] = CreateDynamicObject(8558,893.4765000,-2949.5595700,1.8051300,0.0000000,0.0000000,-10.0000000); //
  127. Object[41] = CreateDynamicObject(8558,893.3386200,-2950.5717800,0.7701000,-270.0000000,0.0000000,-10.0000000); //
  128. Object[42] = CreateDynamicObject(8558,902.1581400,-2956.8996600,0.7701000,-90.0000000,0.0000000,-10.0000000); //
  129. Object[43] = CreateDynamicObject(8558,902.0048800,-2957.9367700,1.8051000,0.0000000,0.0000000,-10.0000000); //
  130. Object[44] = CreateDynamicObject(8558,901.7547000,-2958.9489700,0.7701000,-270.0000000,0.0000000,-10.0000000); //
  131. Object[45] = CreateDynamicObject(8558,890.0440700,-2962.0710400,0.7701000,-90.0000000,0.0000000,-10.0000000); //
  132. Object[46] = CreateDynamicObject(8558,889.8955100,-2963.0747100,1.8051300,0.0000000,0.0000000,-10.0000000); //
  133. Object[47] = CreateDynamicObject(8558,889.6692500,-2964.0656700,0.7701000,-270.0000000,0.0000000,-10.0000000); //
  134. Object[48] = CreateDynamicObject(8558,898.2362100,-2971.9721700,0.7701000,-90.0000000,0.0000000,-10.0000000); //
  135. Object[49] = CreateDynamicObject(8558,898.1355000,-2972.9633800,1.7869500,0.0000000,0.0000000,-10.0000000); //
  136. Object[50] = CreateDynamicObject(8558,897.9945100,-2973.9594700,0.7701000,-270.0000000,0.0000000,-10.0000000); //
  137. Object[51] = CreateDynamicObject(8558,920.0903900,-2925.6887200,-16.7889000,0.0000000,90.0000000,-10.0000000); //
  138. Object[52] = CreateDynamicObject(8558,926.5161700,-2934.1972700,-16.8689000,0.0000000,90.0000000,-10.0000000); //
  139. Object[53] = CreateDynamicObject(8558,917.4805900,-2939.7092300,-16.8689000,0.0000000,90.0000000,-10.0000000); //
  140. Object[54] = CreateDynamicObject(8558,922.7354700,-2947.8544900,-16.8689000,0.0000000,90.0000000,-10.0000000); //
  141. Object[55] = CreateDynamicObject(8558,911.8989300,-2952.7775900,-16.8689000,0.0000000,90.0000000,-10.0000000); //
  142. Object[56] = CreateDynamicObject(8558,920.3893400,-2961.1901900,-16.8689000,0.0000000,90.0000000,-10.0000000); //
  143. Object[57] = CreateDynamicObject(8558,908.2600100,-2966.3471700,-16.8689000,0.0000000,90.0000000,-10.0000000); //
  144. Object[58] = CreateDynamicObject(8558,916.5187400,-2976.2868700,-16.8689000,0.0000000,90.0000000,-10.0000000); //
  145. Object[59] = CreateDynamicObject(3257,897.6294600,-2767.2961400,-0.8058900,0.0000000,0.0000000,180.0000000); //
  146. Object[60] = CreateDynamicObject(3257,905.7420000,-2767.3588900,5.5670700,0.0000000,0.0000000,180.0000000); //
  147. Object[61] = CreateDynamicObject(3724,885.6198700,-3012.6948200,17.1801100,0.0000000,0.0000000,80.0000000); //
  148. Object[62] = CreateDynamicObject(8431,848.4116800,-3047.8217800,-4.7927200,0.0000000,0.0000000,-281.0000000); //
  149. Object[63] = CreateDynamicObject(5155,767.9033800,-2784.2214400,-1.5048300,0.0000000,180.0000000,-270.0000000); //
  150. Object[64] = CreateDynamicObject(3761,884.7175900,-3008.3527800,3.7610600,0.0000000,0.0000000,80.0000000); //
  151. Object[65] = CreateDynamicObject(3761,889.0527300,-3009.1242700,3.7610600,0.0000000,0.0000000,80.0000000); //
  152. Object[66] = CreateDynamicObject(902,715.9528200,-2810.2800300,6.6859700,0.0000000,0.0000000,0.0000000); //
  153. }
  154. #endif
  155.  
  156.  
  157. //==============================================================================
  158. // Basic vars
  159. //==============================================================================
  160.  
  161. new bool:MissionStarted;
  162. new bool:ObjectiveStarted;
  163. new bool:MissionCancelled;
  164.  
  165. new GMTimer;
  166. new GMSec;
  167. new TotalPlayers;
  168. new CurrentRacePos;
  169. new MAX_CPs;
  170. new RaceMin,RaceSec,RaceMili;
  171. new randA;
  172.  
  173. native IsValidVehicle(vehicleid);
  174.  
  175. enum playersdata
  176. {
  177. UserName[MAX_PLAYER_NAME],
  178. rSec,
  179. rMin,
  180. rMili,
  181. CurrentCheckpoint,
  182. MissionFinished,
  183. PlayerClassID,
  184. PlayerCounted,
  185. rBestMin,
  186. rBestSec,
  187. rBestMili
  188. };
  189.  
  190. new PlayerMissionInfo[MAX_PLAYERS][playersdata];
  191.  
  192. //==============================================================================
  193. // Basic script
  194. //==============================================================================
  195.  
  196. main()
  197. {
  198. print("----------------------------------");
  199. print(" Mission: "MISSION_NAME" started.");
  200. print("----------------------------------\n");
  201. }
  202.  
  203. public OnGameModeInit()
  204. {
  205. MissionStarted= true;
  206.  
  207. #if MAX_MAP_OBJECTS != 0
  208. CreateMap();
  209. #endif
  210.  
  211. for(new i=0; i<sizeof(PedInfo); i++)
  212. {
  213. AddPlayerClassEx(PedInfo[i][TeamID],PedInfo[i][Skin],PedInfo[i][SpawnX],PedInfo[i][SpawnY],PedInfo[i][SpawnZ],PedInfo[i][SpawnAngle],0,0,0,0,0,0);
  214. }
  215.  
  216. if(CallRemoteFunction("GetCurrentMissionCJWalk","")) UsePlayerPedAnims();
  217.  
  218. GMTimer = SetTimer("GMClock",1000,true);
  219. MAX_CPs = sizeof(cp);
  220. randA=random(2);
  221. CallRemoteFunction("UpdateRaceRecordsFunc","dd",INVALID_PLAYER_ID,0);
  222. return 1;
  223. }
  224.  
  225. public OnGameModeExit()
  226. {
  227. #if MAX_MAP_OBJECTS != 0
  228. for(new i=0;i<MAX_MAP_OBJECTS;i++) DestroyObject(Object[i]);
  229. #endif
  230. KillTimer(GMTimer);
  231. return 1;
  232. }
  233.  
  234. FUNCTION GMClock()
  235. {
  236. GMSec++;
  237. switch(ObjectiveStarted)
  238. {
  239. case false:
  240. {
  241. switch(GMSec)
  242. {
  243. case 1:
  244. {
  245. new string[40];
  246. format(string,sizeof(string),"The parkour will start in %d seconds.",START_TIME);
  247. CallRemoteFunction("ShowInfoBox", "iisi", -1, -1, string,0);
  248. }
  249. case START_TIME-4:
  250. {
  251. GameTextForAll("~r~~h~GET READY!",1000,3);
  252. PlaySoundForAll(1056);
  253. }
  254. case START_TIME-3:
  255. {
  256. GameTextForAll("~r~~h~~h~3",1000,3);
  257. PlaySoundForAll(1056);
  258. }
  259. case START_TIME-2:
  260. {
  261. GameTextForAll("~r~~h~~h~~h~2",1000,3);
  262. PlaySoundForAll(1056);
  263. }
  264. case START_TIME-1:
  265. {
  266. GameTextForAll("~y~1",1000,3);
  267. PlaySoundForAll(1056);
  268. }
  269. case START_TIME:
  270. {
  271. PlaySoundForAll(1057);
  272. CallRemoteFunction("StartMission","");
  273. GameTextForAll("~g~~h~~h~RUN!",1000,3);
  274. ObjectiveStarted= true;
  275. ToggleControllable(true);
  276. SendClientMessageToAll(COLOR_SERVER,""SERVER_KEY_MSG" DAZZZ! The parkour has started. Good luck.");
  277. CallRemoteFunction("ShowInfoText", "iisi", -1, -1,"DAZZZ! The parkour has started. Good luck.",0);
  278. RaceMili=GetTickCount();
  279. }
  280. }
  281. }
  282. case true:
  283. {
  284. for(new i=0,j=GetPlayerPoolSize(); i<=j; i++)
  285. {
  286. if(IsPlayerConnected(i) && CallRemoteFunction("GetAliveState","i",i) && !PlayerMissionInfo[i][MissionFinished])
  287. {
  288. GetPlayerPosition(i);
  289. new Float:x,Float:y,Float:z;
  290. GetPlayerPos(i,x,y,z);
  291. if(z <= Z_LIMIT)
  292. {
  293. SpawnPlayer(i);
  294. CallRemoteFunction("UpdateAliveState","ii",i,0);
  295. CallRemoteFunction("UpdateLastCheckpoint","dfff",i,-1.0,-1.0,-1.0);
  296. }
  297. }
  298. }
  299. RaceSec++;
  300. if(RaceSec == 60)
  301. {
  302. RaceSec=0;
  303. RaceMin++;
  304. }
  305.  
  306. }
  307. }
  308. }
  309.  
  310. public OnPlayerDisconnect(playerid,reason)
  311. {
  312. if(!PlayerMissionInfo[playerid][MissionFinished])
  313. {
  314. if(PlayerMissionInfo[playerid][PlayerCounted])
  315. {
  316. TotalPlayers--;
  317. PlayerMissionInfo[playerid][PlayerCounted]= false;
  318. }
  319. }
  320. else PlayerMissionInfo[playerid][MissionFinished] = false;
  321.  
  322. RemovePlayerMapIcon(playerid,MAP_ICON_NEXT_CP);
  323. DisablePlayerRaceCheckpoint(playerid);
  324. CallRemoteFunction("PlayerRaceRecords","dd",playerid,1);
  325. return 1;
  326. }
  327.  
  328. public OnPlayerRequestClass(playerid, classid)
  329. {
  330. SetPlayerPos(playerid,CLASS_POSTION);
  331. SetPlayerCameraPos(playerid,CLASS_CAMERA);
  332. SetPlayerCameraLookAt(playerid,CLASS_POSTION);
  333. SetPlayerFacingAngle(playerid,CLASS_FACING_AGNLE);
  334.  
  335. CallRemoteFunction("ShowClassSelection","ddsddd",playerid, 2,"Parkour Artist", PedInfo[classid][Weapon1], PedInfo[classid][Weapon2], PedInfo[classid][Weapon3]);
  336. SetPlayerColor(playerid,COLOR_SERVER);
  337. PlayerMissionInfo[playerid][PlayerClassID]=classid;
  338. return 1;
  339. }
  340.  
  341. public OnPlayerRequestSpawn(playerid)
  342. {
  343. CallRemoteFunction("UpdateRaceRecordsFunc","dd",INVALID_PLAYER_ID,0);
  344. return 1;
  345. }
  346.  
  347. public OnPlayerSpawn(playerid)
  348. {
  349. new string[124];
  350. CallRemoteFunction("UpdateAliveState","ii",playerid,1);
  351. SetPlayerHealth(playerid,Health);
  352.  
  353. if(PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][Skin] == 0)
  354. {
  355. back:
  356. new skin=random(312);
  357. if(skin == 74 || skin < 1) goto back;
  358. SetPlayerSkin(playerid,skin);
  359. }
  360.  
  361. if(CallRemoteFunction("GetSpectateStatus","d",playerid)) return CallRemoteFunction("SpecOffAdmin","d",playerid);
  362. SetPlayerColor(playerid,(randA == TEAM_ATTACK) ? COLOR_TEAM_ATTACK : COLOR_TEAM_DEFEND);
  363. SetPlayerTeam(playerid,PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][TeamID]);
  364. switch(ObjectiveStarted)
  365. {
  366. case false:
  367. {
  368. TogglePlayerControllable(playerid,false);
  369. format(string,sizeof(string),"The parkour will start in %d seconds. Get ready.",(GMSec-START_TIME)*-1);
  370. CallRemoteFunction("ShowInfoBox", "iisi", playerid, -1,string,100);
  371. }
  372. case true:
  373. {
  374. TogglePlayerControllable(playerid,true);
  375. CallRemoteFunction("ShowInfoBox", "iisi", playerid, -1,"HURRY UP! The parkour has already started.",2000);
  376. }
  377. }
  378. CallRemoteFunction("ShowInfoText", "iisi", playerid, -1,"Try to finish first!",2000);
  379. if(CallRemoteFunction("GetJailedStatus","d",playerid)) CallRemoteFunction("SetJailed","d",playerid);
  380. else
  381. {
  382. SetPlayerInterior(playerid,PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][SpawnInterior]);
  383. SetPlayerPos(playerid,PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][SpawnX]-(random(3)),PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][SpawnY],PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][SpawnZ]+5);
  384. SetPlayerFacingAngle(playerid,PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][SpawnAngle]);
  385. SetPlayerVirtualWorld(playerid,PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][VirtualWorld]);
  386. SetCameraBehindPlayer(playerid);
  387. CallRemoteFunction("GivePlayerWeaponEx","ddd",playerid,PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][Weapon1],PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][Ammo1]);
  388. CallRemoteFunction("GivePlayerWeaponEx","ddd",playerid,PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][Weapon2],PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][Ammo2]);
  389. CallRemoteFunction("GivePlayerWeaponEx","ddd",playerid,PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][Weapon3],PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][Ammo3]);
  390. if(!PlayerMissionInfo[playerid][MissionFinished])
  391. {
  392. PlayerMissionInfo[playerid][CurrentCheckpoint]= 0;
  393. SetPlayerVirtualWorld(playerid,PedInfo[PlayerMissionInfo[playerid][PlayerClassID]][VirtualWorld]);
  394. SetPlayerRaceCheckpoint(playerid,cp[PlayerMissionInfo[playerid][CurrentCheckpoint]][cp_type],cp[PlayerMissionInfo[playerid][CurrentCheckpoint]][cp_x],cp[PlayerMissionInfo[playerid][CurrentCheckpoint]][cp_y],cp[PlayerMissionInfo[playerid][CurrentCheckpoint]][cp_z],cp[PlayerMissionInfo[playerid][CurrentCheckpoint]+1][cp_x],cp[PlayerMissionInfo[playerid][CurrentCheckpoint]+1][cp_y],cp[PlayerMissionInfo[playerid][CurrentCheckpoint]+1][cp_z],10.0);
  395. SetPlayerMapIcon(playerid, MAP_ICON_NEXT_CP,cp[PlayerMissionInfo[playerid][CurrentCheckpoint]+1][cp_x],cp[PlayerMissionInfo[playerid][CurrentCheckpoint]+1][cp_y],cp[PlayerMissionInfo[playerid][CurrentCheckpoint]+1][cp_z], 0, 0xFF000033, MAPICON_LOCAL);
  396. }
  397. else
  398. {
  399. SetPlayerVirtualWorld(playerid,2);
  400. CallRemoteFunction("OnPlayerMissionComplete","d",playerid);
  401. }
  402. if(!PlayerMissionInfo[playerid][PlayerCounted])
  403. {
  404. TotalPlayers++;
  405. PlayerMissionInfo[playerid][PlayerCounted]= true;
  406. }
  407. }
  408.  
  409. CallRemoteFunction("GetPlayerPersonalBest","d",playerid);
  410. CallRemoteFunction("UpdateMissionHud","iiiiiiiiiiii",playerid,4,GetPlayerPosition(playerid),TotalPlayers,RaceMin,PlayerMissionInfo[playerid][rSec],PlayerMissionInfo[playerid][CurrentCheckpoint],MAX_CPs,PlayerMissionInfo[playerid][rBestMin],PlayerMissionInfo[playerid][rBestSec],PlayerMissionInfo[playerid][rBestMili],-1);
  411. CallRemoteFunction("PlayerRaceRecords","dd",playerid,2);
  412. return 1;
  413. }
  414.  
  415. public OnPlayerDeath(playerid,killerid,reason)
  416. {
  417. CallRemoteFunction("UpdateAliveState","ii",playerid,0);
  418. if(!PlayerMissionInfo[playerid][MissionFinished]) PlayerMissionInfo[playerid][CurrentCheckpoint]= 0;
  419. CallRemoteFunction("PlayerRaceRecords","dd",playerid,1);
  420. CallRemoteFunction("UpdateLastCheckpoint","dfff",playerid,-1.0,-1.0,-1.0);
  421. return 1;
  422. }
  423.  
  424. public OnPlayerEnterRaceCheckpoint(playerid)
  425. {
  426. if(!MissionStarted || !ObjectiveStarted) return 0;
  427. new string[124],type;
  428. PlayerPlaySound(playerid,1139,0,0,0);
  429. CallRemoteFunction("UpdateLastCheckpoint","dfff",playerid,cp[PlayerMissionInfo[playerid][CurrentCheckpoint]][cp_x],cp[PlayerMissionInfo[playerid][CurrentCheckpoint]][cp_y],cp[PlayerMissionInfo[playerid][CurrentCheckpoint]][cp_z]);
  430. if(PlayerMissionInfo[playerid][CurrentCheckpoint] != MAX_CPs-1)
  431. {
  432. type=cp[PlayerMissionInfo[playerid][CurrentCheckpoint]+1][cp_type];
  433. }
  434. if(PlayerMissionInfo[playerid][CurrentCheckpoint] == MAX_CPs-2)
  435. {
  436. SetPlayerRaceCheckpoint(playerid,type,cp[PlayerMissionInfo[playerid][CurrentCheckpoint]+1][cp_x],cp[PlayerMissionInfo[playerid][CurrentCheckpoint]+1][cp_y],cp[PlayerMissionInfo[playerid][CurrentCheckpoint]+1][cp_z],0.0,0.0,0.0,cp[PlayerMissionInfo[playerid][CurrentCheckpoint]+1][cp_size]);
  437. RemovePlayerMapIcon(playerid,MAP_ICON_NEXT_CP);
  438. }
  439. else if(PlayerMissionInfo[playerid][CurrentCheckpoint] == MAX_CPs-1)
  440. {
  441. PlaySoundForAll(1058);
  442. PlayerMissionInfo[playerid][MissionFinished]= true;
  443. DisablePlayerRaceCheckpoint(playerid);
  444. RemovePlayerMapIcon(playerid,MAP_ICON_NEXT_CP);
  445. new Pos=GetPlayerPosition(playerid);
  446. CurrentRacePos++;
  447. PlayerMissionInfo[playerid][rMin]=RaceMin;
  448. PlayerMissionInfo[playerid][rSec]=RaceSec;
  449. new Prize=floatround(20000/Pos, floatround_round)+(1000*TotalPlayers);
  450. PlayerMissionInfo[playerid][rMili]=(((GetTickCount()-RaceMili)-(1000*PlayerMissionInfo[playerid][rSec]))-((1000*60)*PlayerMissionInfo[playerid][rMin]));
  451. while(PlayerMissionInfo[playerid][rMili] >= 1000)
  452. {
  453. PlayerMissionInfo[playerid][rMili]-=1000;
  454. PlayerMissionInfo[playerid][rSec]++;
  455. if(PlayerMissionInfo[playerid][rSec] == 60)
  456. {
  457. PlayerMissionInfo[playerid][rSec]=0;
  458. PlayerMissionInfo[playerid][rMin]++;
  459. }
  460. }
  461. CallRemoteFunction("UpdateMissionHud","iiiiiiiiiiii",playerid,4,Pos,TotalPlayers,PlayerMissionInfo[playerid][rMin],PlayerMissionInfo[playerid][rSec],PlayerMissionInfo[playerid][CurrentCheckpoint]+1,MAX_CPs,PlayerMissionInfo[playerid][rBestMin],PlayerMissionInfo[playerid][rBestSec],PlayerMissionInfo[playerid][rBestMili],-1);
  462. CallRemoteFunction("GivePlayerCash","ii",playerid,Prize);
  463. if(Pos == 1)
  464. {
  465. CallRemoteFunction("PlayerMissionStats","dd",playerid,3);
  466. format(string,sizeof(string),""SERVER_KEY_MSG" %s (%d) has finished 1st in the parkour. Time Taken: %02d:%02d:%03d | Prize: $%d + Token.",PlayerMissionInfo[playerid][UserName],playerid,PlayerMissionInfo[playerid][rMin],PlayerMissionInfo[playerid][rSec],PlayerMissionInfo[playerid][rMili],Prize);
  467. CallRemoteFunction("GivePlayerToken","dd",playerid,1);
  468. CallRemoteFunction("CheckForBetWinners","d",playerid);
  469. }
  470. else format(string,sizeof(string),""SERVER_KEY_MSG" %s (%d) has finished %d%s in the parkour. Time Taken: %02d:%02d:%03d | Prize: $%d.",PlayerMissionInfo[playerid][UserName],playerid,Pos,GetEndStyle(Pos),PlayerMissionInfo[playerid][rMin],PlayerMissionInfo[playerid][rSec],PlayerMissionInfo[playerid][rMili],Prize);
  471. if(Pos == 2) CallRemoteFunction("PlayerMissionStats","dd",playerid,4);
  472. if(Pos == 3) CallRemoteFunction("PlayerMissionStats","dd",playerid,5);
  473. CallRemoteFunction("PlayerMissionStats","dd",playerid,0);
  474. CallRemoteFunction("IRC_SendMessage","ss",string,IRC_SERVER_COLOR);
  475. new time = ((PlayerMissionInfo[playerid][rMin]*60000)+(PlayerMissionInfo[playerid][rSec]*1000)+(PlayerMissionInfo[playerid][rMili]));
  476. CallRemoteFunction("CheckRaceRecord","dd",playerid,time);
  477. SetPlayerVirtualWorld(playerid,2);
  478. SendClientMessageToAll(COLOR_SERVER,string);
  479. CallRemoteFunction("OnPlayerMissionComplete","d",playerid);
  480. CallRemoteFunction("UpdateLastCheckpoint","dfff",playerid,-2.0,-2.0,-2.0);
  481. CallRemoteFunction("PlayerMissionStats","dd",playerid,11);
  482. }
  483. else if(PlayerMissionInfo[playerid][CurrentCheckpoint] < MAX_CPs-1)
  484. {
  485. SetPlayerRaceCheckpoint(playerid,type,cp[PlayerMissionInfo[playerid][CurrentCheckpoint]+1][cp_x],cp[PlayerMissionInfo[playerid][CurrentCheckpoint]+1][cp_y],cp[PlayerMissionInfo[playerid][CurrentCheckpoint]+1][cp_z],cp[PlayerMissionInfo[playerid][CurrentCheckpoint]+2][cp_x],cp[PlayerMissionInfo[playerid][CurrentCheckpoint]+2][cp_y],cp[PlayerMissionInfo[playerid][CurrentCheckpoint]+2][cp_z],cp[PlayerMissionInfo[playerid][CurrentCheckpoint]+1][cp_size]);
  486. SetPlayerMapIcon(playerid, MAP_ICON_NEXT_CP,cp[PlayerMissionInfo[playerid][CurrentCheckpoint]+2][cp_x],cp[PlayerMissionInfo[playerid][CurrentCheckpoint]+2][cp_y],cp[PlayerMissionInfo[playerid][CurrentCheckpoint]+2][cp_z], 0, 0xFF000033, MAPICON_LOCAL);
  487. }
  488. PlayerMissionInfo[playerid][CurrentCheckpoint]++;
  489. return 1;
  490. }
  491.  
  492.  
  493. FUNCTION EndTheMission()
  494. {
  495. if(!MissionStarted) return 1;
  496. MissionStarted= false;
  497. KillTimer(GMTimer);
  498. if(!MissionCancelled && ObjectiveStarted)
  499. {
  500. SendClientMessageToAll(COLOR_SERVER,""SERVER_KEY_MSG" The parkour has ended.");
  501. CallRemoteFunction("IRC_SendMessage","ss",""SERVER_KEY_MSG" The parkour has ended.",IRC_SERVER_COLOR);
  502. CallRemoteFunction("ShowInfoBox", "iisi", -1, -1,"The parkour has ended.",0);
  503. for(new i=0,j=GetPlayerPoolSize(); i<=j; i++)
  504. {
  505. if(IsPlayerConnected(i) && !PlayerMissionInfo[i][MissionFinished])
  506. {
  507. PlayerPlaySound(i,17004,0,0,0);
  508. GameTextForPlayer(i,"~R~MISSION FAILED~w~!",3000,3);
  509. DisablePlayerCheckpoint(i);
  510. CallRemoteFunction("PlayerMissionStats","dd",i,1);
  511. }
  512. }
  513. }
  514. else
  515. {
  516. PlaySoundForAll(1058);
  517. SendClientMessageToAll(COLOR_SERVER,""SERVER_KEY_MSG" The mission has been cancelled.");
  518. CallRemoteFunction("IRC_SendMessage","ss",""SERVER_KEY_MSG" The mission has been cancelled.",IRC_SERVER_COLOR);
  519. CallRemoteFunction("ShowInfoBox", "iisi", -1, -1,"The mission has been cancelled.",0);
  520. for(new i=0,j=GetPlayerPoolSize(); i<=j; i++)
  521. {
  522. if(IsPlayerConnected(i))
  523. {
  524. GameTextForPlayer(i,"~R~MISSION CANCELLED~w~!",3000,3);
  525. DisablePlayerCheckpoint(i);
  526. RemovePlayerMapIcon(i,MAP_ICON_NEXT_CP);
  527. }
  528. }
  529. }
  530. return 1;
  531. }
  532.  
  533. //==============================================================================
  534. // Mission functions
  535. //==============================================================================
  536.  
  537. GetPlayerPosition(playerid)
  538. {
  539. if(!IsPlayerConnected(playerid)) return 0;
  540. if(PlayerMissionInfo[playerid][MissionFinished]) return GetPlayerScore(playerid);
  541. new PlayerPositon=CurrentRacePos+1;
  542. new Float:PlayerDistance=GetPlayerDistanceFromPoint(playerid,cp[PlayerMissionInfo[playerid][CurrentCheckpoint]][cp_x],cp[PlayerMissionInfo[playerid][CurrentCheckpoint]][cp_y],cp[PlayerMissionInfo[playerid][CurrentCheckpoint]][cp_z]);
  543. new Float:OtherPlayerDistance;
  544. for(new i=0,j=GetPlayerPoolSize(); i<=j; i++)
  545. {
  546. if(!IsPlayerConnected(i)) continue;
  547. if(!CallRemoteFunction("GetAliveState","i",i) || !ObjectiveStarted || PlayerMissionInfo[i][MissionFinished]) continue;
  548. if(PlayerMissionInfo[playerid][CurrentCheckpoint] < PlayerMissionInfo[i][CurrentCheckpoint])
  549. {
  550. PlayerPositon++;
  551. continue;
  552. }
  553. else if(PlayerMissionInfo[playerid][CurrentCheckpoint] == PlayerMissionInfo[i][CurrentCheckpoint])
  554. {
  555. OtherPlayerDistance=GetPlayerDistanceFromPoint(i,cp[PlayerMissionInfo[i][CurrentCheckpoint]][cp_x],cp[PlayerMissionInfo[i][CurrentCheckpoint]][cp_y],cp[PlayerMissionInfo[i][CurrentCheckpoint]][cp_z]);
  556. if(PlayerDistance > OtherPlayerDistance)
  557. {
  558. PlayerPositon++;
  559. continue;
  560. }
  561. }
  562. }
  563. SetPlayerScore(playerid,PlayerPositon);
  564. CallRemoteFunction("UpdateMissionHud","iiiiiiiiiiii",playerid,4,PlayerPositon,TotalPlayers,RaceMin,RaceSec,PlayerMissionInfo[playerid][CurrentCheckpoint],MAX_CPs,PlayerMissionInfo[playerid][rBestMin],PlayerMissionInfo[playerid][rBestSec],PlayerMissionInfo[playerid][rBestMili],-1);
  565. return PlayerPositon;
  566. }
  567.  
  568. GetEndStyle(pos)
  569. {
  570. new end[3];
  571. if(pos == 11 || pos == 12 || pos == 13) { end = "TH"; }
  572. else if(pos - (pos / 10) * 10 == 1) { end = "ST"; }
  573. else if(pos - (pos / 10) * 10 == 2) { end = "ND"; }
  574. else if(pos - (pos / 10) * 10 == 3) { end = "RD"; }
  575. else { end = "TH"; }
  576.  
  577. return end;
  578. }
  579.  
  580. PlaySoundForAll(sound)
  581. {
  582. for (new i=0,j=GetPlayerPoolSize(); i <=j ; i++)
  583. {
  584. if(IsPlayerConnected(i)) PlayerPlaySound(i,sound,0,0,0);
  585. }
  586. }
  587.  
  588.  
  589. ToggleControllable(control)
  590. {
  591. for(new i=0,j=GetPlayerPoolSize(); i<=j; i++)
  592. {
  593. if(IsPlayerConnected(i))
  594. {
  595. if(CallRemoteFunction("GetAliveState","i",i)) TogglePlayerControllable(i,control);
  596. }
  597. }
  598. return 1;
  599. }
  600.  
  601. //==============================================================================
  602. // Important functions required
  603. //==============================================================================
  604.  
  605. FUNCTION OnPlayerGetPersonalBest(playerid,Min,Sec,Mili)
  606. {
  607. PlayerMissionInfo[playerid][rBestMin]=Min;
  608. PlayerMissionInfo[playerid][rBestSec]=Sec;
  609. PlayerMissionInfo[playerid][rBestMili]=Mili;
  610. CallRemoteFunction("UpdateMissionHud","iiiiiiiiiiii",playerid,2,GetPlayerPosition(playerid),TotalPlayers,PlayerMissionInfo[playerid][rMin],PlayerMissionInfo[playerid][rSec],PlayerMissionInfo[playerid][CurrentCheckpoint]+1,MAX_CPs,PlayerMissionInfo[playerid][rBestMin],PlayerMissionInfo[playerid][rBestSec],PlayerMissionInfo[playerid][rBestMili],0);
  611. return 1;
  612. }
  613.  
  614. FUNCTION CancelTheMission()
  615. {
  616. MissionCancelled= true;
  617. return 1;
  618. }
  619.  
  620. FUNCTION OnPlayerNameRecieve(playerid,name[])
  621. {
  622. format(PlayerMissionInfo[playerid][UserName],MAX_PLAYER_NAME,"%s",name);
  623. return 1;
  624. }
  625.  
  626. FUNCTION MissionObjectiveStarted() return ObjectiveStarted;
Add Comment
Please, Sign In to add comment