Advertisement
itsDevi

Mia Race Event

Aug 17th, 2020
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 13.73 KB | None | 0 0
  1. #include <a_samp>
  2. #include <Pawn.CMD>
  3. #include <sscanf2>
  4.  
  5. new playerCheckpoint[MAX_PLAYERS];
  6. new pRaceParticipant[MAX_PLAYERS];
  7. new pRaceVehicle[MAX_PLAYERS];
  8. new raceFinishers;
  9. new bool:inRace[MAX_PLAYERS];
  10. new Float:pLastPos[MAX_PLAYERS][3];
  11. new raceCountdown = 0;
  12. new pPlayers;
  13.  
  14. enum rEnum {
  15.     rRaceTimer,
  16.     bool:rRaceStarted,
  17.     bool:rEventStarted,
  18.     bool:rEventLocked
  19. };
  20. new RaceInfo[rEnum];
  21.  
  22. #define FILTERSCRIPT
  23.  
  24. public OnFilterScriptInit()
  25. {
  26.     RaceInfo[rRaceStarted] = false;
  27.     RaceInfo[rEventStarted] = false;
  28.     RaceInfo[rEventLocked] = true;
  29.     pPlayers = 0;
  30. }
  31.  
  32. public OnPlayerConnect(playerid)
  33. {
  34.     inRace[playerid] = false;
  35.     pRaceParticipant[playerid] = 0;
  36.     return 1;  
  37. }
  38. CMD:leaverace(playerid, params[])
  39. {
  40.     new string[256];
  41.     if(pRaceParticipant[playerid] != 1)
  42.     {
  43.         return SendClientMessage(playerid, -1, "{FF0000}You have not joined the race!");
  44.     }
  45.     pRaceParticipant[playerid] = 0;
  46.     SendClientMessage(playerid, -1, "{8FDE1F}You have left the race! {FFFFFF}/joinrace {8FDE1F}to join again.");
  47.     SetPlayerPos(playerid, pLastPos[playerid][0], pLastPos[playerid][1], pLastPos[playerid][2]);
  48.  
  49.     DisableRemoteVehicleCollisions(playerid, 0);
  50.     DestroyVehicle(pRaceVehicle[playerid]);
  51.  
  52.     pPlayers--;
  53.  
  54.     for(new i = 0; i < MAX_PLAYERS; i++)
  55.     {
  56.         if(pRaceParticipant[i])
  57.         {
  58.             format(string, sizeof(string), "{FFFFFF}%s {8FDE1F}has left the event :( There are now {FFFFFF}%d players{8FDE1F} in the race!", GetPlayerRPName(playerid), pPlayers);
  59.             SendClientMessage(i, -1, string);          
  60.         }
  61.     }  
  62.     return 1;
  63. }
  64.  
  65. CMD:joinrace(playerid, params[])
  66. {
  67.     new Float:pos[3], string[256];
  68.     if(pRaceParticipant[playerid] == 1)
  69.     {
  70.         return SendClientMessage(playerid, -1, "{FF0000}You have already joined the race!");
  71.     }
  72.     if(RaceInfo[rEventStarted] == false)
  73.     {
  74.         return SendClientMessage(playerid, -1, "{FF0000}No one has started a race event yet.");
  75.     }
  76.     if(RaceInfo[rEventLocked] == true)
  77.     {
  78.         return SendClientMessage(playerid, -1, "{FF0000}The race has already started, better luck next time!");
  79.     }
  80.     pRaceParticipant[playerid] = 1;
  81.     pRaceVehicle[playerid] = AddStaticVehicle(468,30.6976, 1523.6914, 14.1109, 109.6104,0,0);
  82.     pPlayers++;
  83.  
  84.     GetPlayerPos(playerid, pos[0],pos[1],pos[2]);
  85.     pLastPos[playerid][0] = pos[0];
  86.     pLastPos[playerid][1] = pos[1];
  87.     pLastPos[playerid][2] = pos[2];
  88.  
  89.     DisableRemoteVehicleCollisions(playerid, 1);
  90.     TogglePlayerControllable(playerid, 0);
  91.     PutPlayerInVehicle(playerid, pRaceVehicle[playerid], 0);
  92.  
  93.     SendClientMessage(playerid, -1, "{8FDE1F}City Of Manila Race Event:");
  94.     SendClientMessage(playerid, -1, "You have joined the race event, please");
  95.     SendClientMessage(playerid, -1, "wait for the host to lock and start the event.");
  96.  
  97.     for(new i = 0; i < MAX_PLAYERS; i++)
  98.     {
  99.         if(pRaceParticipant[i])
  100.         {
  101.             format(string, sizeof(string), "{FFFFFF}%s {8FDE1F}has joined the event! There are now {FFFFFF}%d players{8FDE1F} in the race!", GetPlayerRPName(playerid), pPlayers);
  102.             SendClientMessage(i, -1, string);          
  103.         }
  104.     }
  105.     return 1;
  106. }
  107.  
  108. CMD:startrace(playerid, params[])
  109. {
  110.     if(RaceInfo[rEventStarted] == false)
  111.     {
  112.         return SendClientMessage(playerid, -1, "{FF0000}You have not started the event yet, type /startevent to start it.");
  113.     }  
  114.     if(RaceInfo[rRaceStarted] == true)
  115.     {
  116.         return SendClientMessage(playerid, -1, "{FF0000}You have already started the race, wait till someone gets to the finish line!");
  117.     }
  118.     raceFinishers = 0;
  119.     RaceInfo[rEventLocked] = true;
  120.     raceCountdown = 10;
  121.     RaceInfo[rRaceTimer] = SetTimer("OnPlayerStartRaceEvent", 1000, true);
  122.     return 1;
  123. }
  124.  
  125. CMD:startevent(playerid, params[])
  126. {
  127.     // - ADMIN ONLY COMMAND, palagay nalang hehehehe
  128.     new string[256], message[256];
  129.  
  130.     if(sscanf(params, "s[256]", message))
  131.     {
  132.         return SendClientMessage(playerid, -1, "[Usage]: /startevent [message]");
  133.     }
  134.     if(RaceInfo[rEventStarted] == true)
  135.     {
  136.         return SendClientMessage(playerid, -1, "{FF0000}You have already started the event, wait for players to join. And type /startrace when ready!");
  137.     }
  138.     RaceInfo[rEventStarted] = true;
  139.     RaceInfo[rRaceStarted] = false;
  140.     RaceInfo[rEventLocked] = false;
  141.     pPlayers = 0;
  142.     SendClientMessageToAll(-1, "{8FDE1F}================[{FFFFFF}City of Manila Race Event{8FDE1F}]================");
  143.     SendClientMessageToAll(-1, "The City of Manila Race Event has commenced! Type {8FDE1F}/joinrace{FFFFFF} to join!");
  144.     format(string, sizeof(string), "Host's Message: %s", message);
  145.     SendClientMessageToAll(-1, string);
  146.     return 1;
  147. }
  148.  
  149. forward OnPlayerStartRaceEvent();
  150. public OnPlayerStartRaceEvent()
  151. {
  152.     new string[16];
  153.     raceCountdown -= 1;
  154.     for(new i = 0; i < MAX_PLAYERS; i++)
  155.     {
  156.         if(pRaceParticipant[i])
  157.         {
  158.             PlayerPlaySound(i,17802,0.0,0.0,0.0);
  159.  
  160.             format(string, sizeof(string), "~w~%d", raceCountdown);
  161.             GameTextForPlayer(i, string, 990, 3);
  162.         }
  163.     }
  164.  
  165.     if(raceCountdown == 0)
  166.     {
  167.         KillTimer(RaceInfo[rRaceTimer]);
  168.  
  169.         for(new i = 0; i < MAX_PLAYERS; i++)
  170.         {
  171.             if(pRaceParticipant[i])
  172.             {
  173.                 GameTextForPlayer(i, "GO GO GO!", 990, 3);
  174.                 TogglePlayerControllable(i, true);
  175.                 SetPlayerCheckpoint(i,-148.0093,1594.5282,16.9782,17.5);
  176.                 playerCheckpoint[i] = 1;
  177.             }
  178.         }
  179.     }
  180. }
  181. forward OnPlayerFinishRace(playerid);
  182. public OnPlayerFinishRace(playerid)
  183. {
  184.     new string[256];
  185.     raceFinishers += 1;
  186.     if(raceFinishers == 1) { // {8FDE1F}
  187.         format(string, sizeof(string), "{FFFFFF}%s {FFC200}has finished {FFFFFF}1st {FFC200}in the race.", GetPlayerRPName(playerid));
  188.         SendClientMessageToAll(-1, string);
  189.     } else if(raceFinishers == 2) { // {8FDE1F}
  190.         format(string, sizeof(string), "{FFFFFF}%s {FFC200}has finished {FFFFFF}2nd {FFC200}in the race.",GetPlayerRPName(playerid));
  191.         SendClientMessageToAll(-1, string);
  192.     } else if(raceFinishers == 3) { // {8FDE1F}
  193.         format(string, sizeof(string), "{FFFFFF}%s {FFC200}has finished {FFFFFF}3rd {FFC200}in the race.",GetPlayerRPName(playerid));
  194.         SendClientMessageToAll(-1, string);
  195.     } else {
  196.         format(string, sizeof(string), "{FFFFFF}%s {8FDE1F}has finished {FFFFFF}%dth {8FDE1F}in the race.",GetPlayerRPName(playerid), raceFinishers);
  197.         SendClientMessageToAll(-1, string);    
  198.     }
  199.     pRaceParticipant[playerid] = 0;
  200.     DisableRemoteVehicleCollisions(playerid, 0);
  201.     DestroyVehicle(pRaceVehicle[playerid]);
  202.     DisablePlayerCheckpoint(playerid);
  203.     playerCheckpoint[playerid] = -1;
  204.     return 1;
  205. }
  206.  
  207. public OnPlayerEnterCheckpoint(playerid)
  208. {
  209.     switch(playerCheckpoint[playerid])
  210.     {
  211.         case 1: { SetPlayerCheckpoint(playerid,-89.1638,1536.4152,16.3669,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  212.         case 2: { SetPlayerCheckpoint(playerid,-148.0093,1594.5282,16.9782,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  213.         case 3: { SetPlayerCheckpoint(playerid,-196.8481,1659.1995,25.6718,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  214.         case 4: { SetPlayerCheckpoint(playerid,-304.3438,1673.4180,27.1392,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  215.         case 5: { SetPlayerCheckpoint(playerid,-400.7416,1747.8184,42.0860,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  216.         case 6: { SetPlayerCheckpoint(playerid,-401.5449,1914.7720,57.7547,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  217.         case 7: { SetPlayerCheckpoint(playerid,-438.4989,1760.8953,71.7257,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  218.         case 8: { SetPlayerCheckpoint(playerid,-478.8807,1945.9531,85.9020,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  219.         case 9: { SetPlayerCheckpoint(playerid,-370.4173,2190.2378,41.7504,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  220.         case 10: { SetPlayerCheckpoint(playerid,-417.3397,2291.1155,40.8808,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  221.         case 11: { SetPlayerCheckpoint(playerid,-510.4167,2333.2485,68.0319,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  222.         case 12: { SetPlayerCheckpoint(playerid,-714.8569,2461.5740,121.3162,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  223.         case 13: { SetPlayerCheckpoint(playerid,-689.3806,2306.8826,131.5038,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  224.         case 14: { SetPlayerCheckpoint(playerid,-860.1246,2308.8479,158.0858,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  225.         case 15: { SetPlayerCheckpoint(playerid,-1109.1602,2481.4265,80.5265,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  226.         case 16: { SetPlayerCheckpoint(playerid,-1223.4731,2674.2148,46.0405,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  227.         case 17: { SetPlayerCheckpoint(playerid,-1348.9530,2646.5376,50.5557,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  228.         case 18: { SetPlayerCheckpoint(playerid,-1767.3956,2706.5469,59.0966,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  229.         case 19: { SetPlayerCheckpoint(playerid,-1653.4254,2602.8179,80.2604,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  230.         case 20: { SetPlayerCheckpoint(playerid,-1653.6700,2469.9709,86.6574,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  231.         case 21: { SetPlayerCheckpoint(playerid,-1744.2531,2460.2007,72.2669,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  232.         case 22: { SetPlayerCheckpoint(playerid,-1685.0560,2400.9561,57.7922,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  233.         case 23: { SetPlayerCheckpoint(playerid,-1753.7842,2291.1743,35.3761,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  234.         case 24: { SetPlayerCheckpoint(playerid,-1664.5391,2348.1858,37.0445,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  235.         case 25: { SetPlayerCheckpoint(playerid,-1601.7245,2374.2527,49.5566,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  236.         case 26: { SetPlayerCheckpoint(playerid,-1519.0881,2156.4834,49.0014,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  237.         case 27: { SetPlayerCheckpoint(playerid,-1476.5074,1942.3528,49.9472,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  238.         case 28: { SetPlayerCheckpoint(playerid,-1241.2045,1919.3082,42.5119,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  239.         case 29: { SetPlayerCheckpoint(playerid,-1122.3887,2107.0457,86.3178,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  240.         case 30: { SetPlayerCheckpoint(playerid,-1065.7930,2193.3284,87.3968,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  241.         case 31: { SetPlayerCheckpoint(playerid,-1137.6776,2562.5698,73.2277,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  242.         case 32: { SetPlayerCheckpoint(playerid,-1142.5548,2695.1790,45.5590,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  243.         case 33: { SetPlayerCheckpoint(playerid,-779.0065,2721.3096,45.0116,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  244.         case 34: { SetPlayerCheckpoint(playerid,-699.5007,2684.4172,56.3463,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  245.         case 35: { SetPlayerCheckpoint(playerid,-713.9308,2520.5427,74.6253,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  246.         case 36: { SetPlayerCheckpoint(playerid,-833.5760,2371.5325,121.1072,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  247.         case 37: { SetPlayerCheckpoint(playerid,-733.8931,2349.4683,125.4816,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  248.         case 38: { SetPlayerCheckpoint(playerid,-678.4554,2467.1707,115.1896,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  249.         case 39: { SetPlayerCheckpoint(playerid,-505.4073,2326.0903,66.8654,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  250.         case 40: { SetPlayerCheckpoint(playerid,-387.4561,2298.6714,37.1955,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  251.         case 41: { SetPlayerCheckpoint(playerid,-397.1547,2452.6111,41.8498,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  252.         case 42: { SetPlayerCheckpoint(playerid,-348.9204,2522.7346,35.6884,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  253.         case 43: { SetPlayerCheckpoint(playerid,-410.8728,2674.2305,53.7061,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  254.         case 44: { SetPlayerCheckpoint(playerid,-560.2380,2702.3237,67.6744,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  255.         case 45: { SetPlayerCheckpoint(playerid,-522.6776,2444.0098,59.9100,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  256.         case 46: { SetPlayerCheckpoint(playerid,-374.8915,2483.3823,38.8120,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  257.         case 47: { SetPlayerCheckpoint(playerid,-505.8501,2592.7168,53.1194,17.5); playerCheckpoint[playerid]++; PlayerPlaySound(playerid,17802,0.0,0.0,0.0); }
  258.         case 48: { OnPlayerFinishRace(playerid); }
  259.     }
  260. }
  261.  
  262. GetPlayerRPName(playerid)
  263. {
  264.     new
  265.         name[MAX_PLAYER_NAME];
  266.  
  267.     GetPlayerName(playerid, name, sizeof(name));
  268.  
  269.     for(new i = 0, l = strlen(name); i < l; i ++)
  270.     {
  271.         if(name[i] == '_')
  272.         {
  273.             name[i] = ' ';
  274.         }
  275.     }
  276.  
  277.     return name;
  278. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement