Advertisement
LePtitClown

fRace - Problème de compteur

Jun 25th, 2012
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 105.38 KB | None | 0 0
  1. /*
  2.  
  3.         fffffffffff RRRRRRRRRRRRRRRRR   AAAAAAAAAAAAAAAAA   CCCCCCCCCCCC    EEEEEEEEEEEEE
  4.         fffff  ffff RRRRR      RRRRRR   AAAAAAAAAAAAAAAAA   CCCCCCCCCCCC    EEEEEEEEEEEEE
  5.         fffff       RRRRR      RRRRRR   AAAAA       AAAAA   CCCCCC          EEEEE
  6.       fffffffff     RRRRR      RRRRRR   AAAAA       AAAAA   CCCCCC          EEEEE
  7.         fffff       RRRRRRRRRRRRRRRRR   AAAAAAAAAAAAAAAAA   CCCCCC          EEEEEEEEEEEEE
  8.         fffff       RRRRRRRRRR          AAAAAAAAAAAAAAAAA   CCCCCC          EEEEEEEEEEEEE
  9.         fffff       RRRRR  RRRRR        AAAAA       AAAAA   CCCCCC          EEEEE
  10.         fffff       RRRRR    RRRRRR     AAAAA       AAAAA   CCCCCCCCCCCC    EEEEEEEEEEEEE
  11.       fffffffff     RRRRR      RRRRRR   AAAAA       AAAAA   CCCCCCCCCCCC    EEEEEEEEEEEEE
  12.  
  13.                                   fRace, FuSion Race v2.0
  14.                                     Base: Yagu's Race
  15.                                     Created by: FuSion
  16.                             For fCreations & GTAonline & GTAeaster
  17.  
  18. */
  19. #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
  20. #include <a_samp>
  21. #include <float>
  22. #include <file>
  23. #include <Dini>
  24.  
  25. #define MAX_RACECHECKPOINTS 99// Nombre MAX de CP
  26. #define MAX_BUILDERS 4
  27. #define RACEFILE_VERSION 2 // !!! DO NOT CHANGE !!! NE PAS CHANGER
  28.  
  29. #define MENU0 80
  30. #define MENU1 81
  31. #define MENU2 82
  32. #define MENU3 83
  33.  
  34. // Variables
  35. new RRotation = -1;
  36. new RRotationDelay = 300000;
  37. new BuildAdmin = 1;
  38. new RaceAdmin = 1;
  39. new PrizeMode=0;
  40. new Prize=30000;
  41. new DynaMP=1;          
  42. new JoinFee=1;       //Prix de course
  43. new RVehicule[MAX_PLAYERS];
  44.  
  45. new voiture[97] =
  46. {
  47. 400,401,402,404,405,410,411,415,418,419,420,421,422,424,426,429,434,436,438,439,
  48. 445,451,458,466,467,470,474,475,477,478,479,480,489,490,491,492,494,495,496,500,
  49. 502,503,504,505,506,507,516,517,518,525,526,527,528,529,533,534,535,356,540,541,
  50. 542,543,545,546,547,549,550,551,552,554,555,558,559,560,561,562,565,566,567,568,
  51. 575,576,579,580,585,587,589,596,597,598,599,600,601,602,603,604,605
  52. };
  53.  
  54. new moto[10] =
  55. {
  56. 448,461,462,463,468,521,522,523,581,586
  57. };
  58.  
  59. new bateaux[12] =
  60. {
  61. 430,446,452,453,454,472,473,484,493,539,595,539
  62. };
  63.  
  64. new sandking[1] =
  65. {
  66. 495
  67. };
  68. new avions[20] =
  69. {
  70. 460,464,476,511,512,513,519,520,577,592,593,417,525,447,469,487,488,497,548,563
  71. };
  72. //################################################//
  73.  
  74. #define COLOR_GREEN 0x33AA33AA
  75. #define COLOR_RED 0xAA3333AA
  76. #define COLOR_YELLOW 0xFFFF00AA
  77. #define COLOR_WHITE 0xFFFFFFAA
  78. new CNumero[128], CType[64];
  79. new GCourse;      // Genre de la course
  80. new gPlayerProgress[MAX_PLAYERS];
  81. new gRacePosition[MAX_PLAYERS];
  82. new Float:esplarg,Float:esphaut;
  83. new Float:X1[MAX_PLAYERS], Float:Y1[MAX_PLAYERS], Float:Z1[MAX_PLAYERS], Float:Angle1[MAX_PLAYERS];
  84. forward Pol1(playerid);
  85. forward Pol2(playerid);
  86. forward Pol3(playerid);
  87. forward Pol4(playerid);
  88. forward Pol5(playerid);
  89. forward Pol6(playerid);
  90. forward Pol7(playerid);
  91. forward Pol8(playerid);
  92. forward Pol9(playerid);
  93. forward Pol10(playerid);
  94. forward Pol11(playerid);
  95. forward Pol12(playerid);
  96. forward Pol13(playerid);
  97. forward Pol14(playerid);
  98. forward Pol15(playerid);
  99. forward Pol16(playerid);
  100. forward Pol17(playerid);
  101. forward Pol18(playerid);
  102. forward Pol19(playerid);
  103. forward Pol20(playerid);
  104. forward Pol21(playerid);
  105. forward Pol22(playerid);
  106. forward Pol23(playerid);
  107. forward Pol24(playerid);
  108. forward Pol25(playerid);
  109. forward Pol26(playerid);
  110. forward Pol27(playerid);
  111. forward Pol28(playerid);
  112.  
  113. forward RaceRotation();
  114. forward LockRacers();
  115. forward UnlockRacers();
  116. forward SaveScores();                   // After race, if new best times have been made, saves them.
  117. forward GetRaceTick(playerid);          // Gets amount of ticks the player was racing
  118. forward GetLapTick(playerid);           // Gets amount of ticks the player spend on the lap
  119. forward ReadyRefresh();                 // Check the /ready status of players and start the race when ready
  120. forward RaceSound(playerid,sound);      // Plays <sound> for <playerid>
  121. forward BActiveCP(playerid,sele);       // Gives the player selected checkpoint
  122. forward endrace();                      // Ends the race, whether it ended normally or by /endrace. Cleans the variables.
  123. forward countdown();                    // Handles the countdown
  124. forward mscountdown();                  //Majority Start countdown handler
  125. forward strtok(const string[],&index);
  126. forward SetNextCheckpoint(playerid);    // Gives the next checkpoint for the player during race
  127. forward CheckBestLap(playerid, laptime);    // Check if <laptime> is better than any of the ones in highscore list, and update.
  128. forward CheckBestRace(playerid,racetime);   // Check if <racetime> is better than any of the ones in highscore list, and update.
  129. forward ChangeLap(playerid);            // Change player's lap, print out time and stuff.
  130. forward SetRaceCheckpoint(playerid,target,next);    // Race-mode checkpoint setter
  131. forward SetBRaceCheckpoint(playerid,target,next);   // Builder-mode checkpoint  setter
  132. forward LoadTimes(playerid,timemode,tmp[]);     // bestlap and bestrace-parameter race loader
  133. forward IsNotAdmin(playerid);          // Is the player admin, if no, return 1 with an error message.
  134. forward GetBuilderSlot(playerid);   // Get next free builderslot, return 0 if none available
  135. forward b(playerid);               // Quick and dirty fix for the BuilderSlots
  136. forward Float:Distance(Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2);
  137. forward clearrace(playerid);
  138. forward startrace();
  139. forward LoadRace(tmp[]);
  140. // General variables
  141. new RotationTimer;
  142. new ystring[128];    // ystring
  143. new CBuilder[MAX_PLAYER_NAME], CFile[64], CRaceName[128];        //Creator of the race and the filename, for score changing purposes.
  144. // Racing-related variables
  145. new Pot=0;              //Join fees go here
  146. new Ranking;            //Finishing order for prizes
  147. new Countdown;          //Countdown timer
  148. new cd;                 //Countdown time
  149. new MajStart=0;         //Status of the Majority Start timer
  150. new MajStartTimer;      //Majority Start timer
  151. new mscd;               //Majority Start time
  152. new RaceActive;         //Is a race active?
  153. new RaceStart;          //Has race started?
  154. new Float:RaceCheckpoints[MAX_RACECHECKPOINTS][4];  //Current race CP array
  155. new LCurrentCheckpoint;                             //Current race array pointer
  156. new CurrentCheckpoint[MAX_PLAYERS];                 //Current race array pointer array :V
  157. new CurrentLap[MAX_PLAYERS];                        //Current lap array
  158. new RaceParticipant[MAX_PLAYERS];                   //Has the player /joined the race
  159.   // \_values: 0 - not in race, 1 - joined, 2 - arrived to start CP, 3 - /ready, 4 - racing, 5 - Last CP
  160. new Participants;                                   //Amount of participants
  161. new PlayerVehicles[MAX_PLAYERS];                    //For slapping the player back in their vehicle.
  162. new ORacelaps, ORacemode;   //Saves the laps/mode from file in case they aren't changed
  163. new OAirrace, Float:OCPsize;
  164. new Racelaps, Racemode;     //If mode/laps has been changed, the new scores won't be saved.
  165. new ScoreChange;            //Flag for new best times, so they are saved.
  166. new RaceTick;               //Startime of the race
  167. new LastLapTick[MAX_PLAYERS];       //Array that stores the times when players started the lap
  168. new TopRacers[6][MAX_PLAYER_NAME]; // Stores 5 top scores, 6th isn't
  169. new TopRacerTimes[6];              // saved to file, used to simplify
  170. new TopLappers[6][MAX_PLAYER_NAME];// for() loops on CheckBestLap and
  171. new TopLapTimes[6];                // CheckBestRace.
  172. new Float:CPsize;                        // Checkpoint size for the race
  173. new Airrace;                       // Is the race airrace?
  174. new Float:RLenght, Float:LLenght; //Lap lenght and race lenght
  175. // Building-related variables
  176. new BCurrentCheckpoints[MAX_BUILDERS];               //Buildrace array pointers
  177. new BSelectedCheckpoint[MAX_BUILDERS];               //Selected checkpoint during building
  178. new RaceBuilders[MAX_PLAYERS];                       //Who is building a race?
  179. new BuilderSlots[MAX_BUILDERS];                      //Stores the racebuilder pids
  180. new Float:BRaceCheckpoints[MAX_BUILDERS][MAX_RACECHECKPOINTS][3]; //Buildrace CP array
  181. new Bracemode[MAX_BUILDERS];
  182. new Blaps[MAX_BUILDERS];
  183. new Float:BCPsize[MAX_BUILDERS];
  184. new BAirrace[MAX_BUILDERS];
  185. //-------------------------------------------------------------------------
  186. new p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28;
  187. new pplayer[MAX_PLAYERS];
  188. new Float:xr[MAX_PLAYERS],Float:yr[MAX_PLAYERS],Float:zr[MAX_PLAYERS];
  189. new Float:Angle;
  190. new Float:a;
  191.  
  192.  
  193. public OnFilterScriptInit()
  194. {
  195.     print("\n+--------------------------------+");
  196.     print("| Yagu's Race Filterscript v0.4a |");
  197.     print("+--------------Loool------------+\n");
  198.     RaceActive=0;
  199.     Ranking=1;
  200.     LCurrentCheckpoint=0;
  201.     Participants=0;
  202.     for(new i;i<MAX_BUILDERS;i++)
  203.     {
  204.         BuilderSlots[i]=MAX_PLAYERS+1;
  205.     }
  206.     if(RRotation != -1) SetTimer("RaceRotation",RRotationDelay,1);
  207.     return 1;
  208. }
  209.  
  210. public OnFilterScriptExit()
  211. {
  212.     print("\n+--------------------------------+");
  213.     print("| Yagu's Race Filterscript v0.4a |");
  214.     print("+------------UNLOADED------------+\n");
  215.     return 1;
  216. }
  217. stock SaveCP(playerid)
  218. {
  219.     X1[playerid] = RaceCheckpoints[CurrentCheckpoint[playerid]-1][0];
  220.     Y1[playerid] = RaceCheckpoints[CurrentCheckpoint[playerid]-1][1];
  221.     Z1[playerid] = RaceCheckpoints[CurrentCheckpoint[playerid]-1][2];
  222.     new Float:NormeAB;
  223.     new Float:SinAngle;
  224.     new Float:Angle3;
  225.     NormeAB = floatsqroot ((RaceCheckpoints[CurrentCheckpoint[playerid]][0]-RaceCheckpoints[CurrentCheckpoint[playerid]-1][0])*(RaceCheckpoints[CurrentCheckpoint[playerid]][0]-RaceCheckpoints[CurrentCheckpoint[playerid]-1][0]) + (RaceCheckpoints[CurrentCheckpoint[playerid]][1]-RaceCheckpoints[CurrentCheckpoint[playerid]-1][1])*(RaceCheckpoints[CurrentCheckpoint[playerid]][1]-RaceCheckpoints[CurrentCheckpoint[playerid]][1]));
  226.     SinAngle = ((RaceCheckpoints[CurrentCheckpoint[playerid]][1]-RaceCheckpoints[CurrentCheckpoint[playerid]][1])/NormeAB);
  227.     Angle3 = asin(SinAngle);
  228.     if (RaceCheckpoints[CurrentCheckpoint[playerid]-1][0] > RaceCheckpoints[CurrentCheckpoint[playerid]][0])
  229.     {
  230.         Angle3 = 90.0 - Angle3;
  231.     }
  232.     else
  233.     {
  234.         Angle3 = Angle3 - 90.0;
  235.     }
  236.     Angle1[playerid]=Angle3+90;
  237.     return 1;
  238. }
  239.  
  240. stock Save1(playerid)
  241. {
  242.     if(IsPlayerInAnyVehicle(playerid))
  243.     {
  244.         new vehicleid = GetPlayerVehicleID(playerid);
  245.         GetVehicleZAngle(vehicleid, Angle1[playerid]);
  246.         SendClientMessage(playerid, COLOR_GREEN, "Position 0 sauvegardée.");
  247.         GetVehiclePos(vehicleid, X1[playerid], Y1[playerid], Z1[playerid]);
  248.     }
  249.     else
  250.     {
  251.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  252.         SendClientMessage(playerid, COLOR_GREEN, "Position 0 sauvegardée.");
  253.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  254.     }
  255.     return 1;
  256. }
  257. stock Telep1(playerid)
  258. {
  259.     if(IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
  260.     {
  261.         new vehicleid = GetPlayerVehicleID(playerid);
  262.         SetVehicleZAngle(vehicleid, Angle1[playerid]);
  263.         SetVehiclePos(vehicleid, X1[playerid], Y1[playerid], Z1[playerid]);
  264.         SendClientMessage(playerid, COLOR_GREEN, "Position 0 restaurée.");
  265.     }
  266.     else
  267.     {
  268.         SetPlayerFacingAngle(playerid, Angle1[playerid]);
  269.         SetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  270.         SendClientMessage(playerid, COLOR_GREEN, "Position 0 restaurée.");
  271.     }
  272.     return 1;
  273. }
  274. public OnPlayerCommandText(playerid, cmdtext[])
  275. {
  276.     dcmd(racehelp,8,cmdtext);   // Aide pour les courses
  277.     dcmd(buildhelp,9,cmdtext)// Aide pour la construction
  278.     dcmd(buildrace,9,cmdtext)// Construire une course
  279.     dcmd(cp,2,cmdtext);         // Ajouter un CP
  280.     dcmd(scp,3,cmdtext);        // Selectionner un CP
  281.     dcmd(rcp,3,cmdtext);        // Remplacer le dernier CP
  282.     dcmd(dcp,3,cmdtext);        // Supprimer le CP
  283.     dcmd(clearrace,9,cmdtext)// Suprimmer la course
  284.     dcmd(editrace,8,cmdtext);   // Editer la course
  285.     dcmd(saverace,8,cmdtext);   // Sauvegarder la course
  286.     dcmd(loadrace,8,cmdtext);   // Charger la course
  287.     dcmd(join,4,cmdtext);       // Rejoindre la course
  288.     dcmd(leave,5,cmdtext);      // Quitter la course
  289.     dcmd(endrace,7,cmdtext);    // Finir la course
  290.     dcmd(deleterace,10,cmdtext);// Supprimer la course
  291.     if (strcmp("/ready", cmdtext, true) == 0)
  292.     {
  293.         if(BuildAdmin == 1 && IsNotAdmin(playerid)) return 1;
  294.         SendClientMessage(playerid,COLOR_GREEN,"Vous avez lancé la course !");
  295.         ReadyRefresh();
  296.         return 1;
  297.     }
  298.    
  299.     if (strcmp(cmdtext, "/s", true)==0)
  300.     {
  301.         if(RaceParticipant[playerid] > 0)
  302.         {
  303.             Save1(playerid);
  304.         }
  305.         return 1;
  306.     }
  307.  
  308.     if (strcmp(cmdtext, "/r", true)==0)
  309.     {
  310.         if(RaceParticipant[playerid] > 0)
  311.         {
  312.             Telep1(playerid);
  313.             RaceSound(playerid,1138);
  314.         }
  315.         return 1;
  316.     }
  317.     return 0;
  318. }
  319.  
  320. dcmd_racehelp(playerid, params[])
  321. {
  322.     #pragma unused params
  323.     SendClientMessage(playerid, COLOR_GREEN, "fRace, FuSion Race: Aide général:");
  324.     SendClientMessage(playerid, COLOR_WHITE, "/loadrace pour charger une course. Utilisez /join pour la rejoindre");
  325.     SendClientMessage(playerid, COLOR_WHITE, "quand celle ci commence. /leave pour quitter la course.");
  326.     SendClientMessage(playerid, COLOR_WHITE, "/endrace pour annuler la course. /bestrace pour voir les meilleurs temps");
  327.     SendClientMessage(playerid, COLOR_WHITE, "vous pouvez aussi voir les temps spécifié pour une course.");
  328.     SendClientMessage(playerid, COLOR_WHITE, "Pour plus d'informations conçernant la construction, tapez /racebuild");
  329.     return 1;
  330. }
  331.  
  332. dcmd_buildhelp(playerid, params[])
  333. {
  334.     #pragma unused params
  335.     SendClientMessage(playerid, COLOR_GREEN, "fRace, FuSion Race: Aide pour la construction:");
  336.     SendClientMessage(playerid, COLOR_WHITE, "/buildrace pour construire une course. /cp pour poser un CP, /scp en selectionner un");
  337.     SendClientMessage(playerid, COLOR_WHITE, "/dcp pour le supprimer, /rcp pour en mettre un nouveau.");
  338.     SendClientMessage(playerid, COLOR_WHITE, "/editrace pour en editer une. /saverace pour sauvegarder la course.");
  339.     SendClientMessage(playerid, COLOR_WHITE, "Pour plus d'info, tapez /racehelp.");
  340.     return 1;
  341. }
  342.  
  343.  
  344. dcmd_buildrace(playerid, params[])
  345. {
  346.     #pragma unused params
  347.     if(BuildAdmin == 1 && IsNotAdmin(playerid)) return 1;
  348.     if(RaceBuilders[playerid] != 0)
  349.     {
  350.         SendClientMessage(playerid, COLOR_YELLOW, "Vous construisez déjà une course !");
  351.     }
  352.     else if(RaceParticipant[playerid]>0)
  353.     {
  354.         SendClientMessage(playerid, COLOR_YELLOW, "Action impossible, vous êtes en course.");
  355.     }
  356.     else
  357.     {
  358.         new slot;
  359.         slot=GetBuilderSlot(playerid);
  360.         if(slot == 0)
  361.         {
  362.             SendClientMessage(playerid, COLOR_YELLOW, "Pas de slots disponible!");
  363.             return 1;
  364.         }
  365.         format(ystring,sizeof(ystring),"Vous êtes entrain de construire une course ! (Slot: %d)",slot);
  366.         SendClientMessage(playerid, COLOR_GREEN, ystring);
  367.         RaceBuilders[playerid]=slot;
  368.         BCurrentCheckpoints[b(playerid)]=0;
  369.         Bracemode[b(playerid)]=0;
  370.         Blaps[b(playerid)]=0;
  371.         BAirrace[b(playerid)] = 0;
  372.         BCPsize[b(playerid)] = 8.0;
  373.     }
  374.     return 1;
  375. }
  376.  
  377. dcmd_cp(playerid, params[])
  378. {
  379.     #pragma unused params
  380.     if(RaceBuilders[playerid] != 0 && BCurrentCheckpoints[b(playerid)] < MAX_RACECHECKPOINTS)
  381.     {
  382.         new Float:x, Float:y, Float:z;
  383.         GetPlayerPos(playerid,x,y,z);
  384.         format(ystring,sizeof(ystring),"Checkpoint %d crée: %f,%f,%f.",BCurrentCheckpoints[b(playerid)],x,y,z);
  385.         SendClientMessage(playerid, COLOR_GREEN, ystring);
  386.         BRaceCheckpoints[b(playerid)][BCurrentCheckpoints[b(playerid)]][0]=x;
  387.         BRaceCheckpoints[b(playerid)][BCurrentCheckpoints[b(playerid)]][1]=y;
  388.         BRaceCheckpoints[b(playerid)][BCurrentCheckpoints[b(playerid)]][2]=z;
  389.         BSelectedCheckpoint[b(playerid)]=BCurrentCheckpoints[b(playerid)];
  390.         SetBRaceCheckpoint(playerid,BCurrentCheckpoints[b(playerid)],-1);
  391.         BCurrentCheckpoints[b(playerid)]++;
  392.         if(IsPlayerInAnyVehicle(playerid))
  393.         {
  394.             new vehicleid = GetPlayerVehicleID(playerid);
  395.             GetVehicleZAngle(vehicleid, Angle1[playerid]);
  396.             GetVehiclePos(vehicleid, X1[playerid], Y1[playerid], Z1[playerid]);
  397.         }
  398.         else
  399.         {
  400.             GetPlayerFacingAngle(playerid, Angle1[playerid]);
  401.             GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  402.         }
  403.  
  404.     }
  405.     else if(RaceBuilders[playerid] != 0 && BCurrentCheckpoints[b(playerid)] == MAX_RACECHECKPOINTS)
  406.     {
  407.         format(ystring,sizeof(ystring),"Desolé, vous aviez atteint le maximum de CP. (%d).",MAX_RACECHECKPOINTS);
  408.         SendClientMessage(playerid, COLOR_YELLOW, ystring);
  409.     }
  410.     else
  411.     {
  412.         SendClientMessage(playerid, COLOR_RED, "Vous ne construisez pas une course !");
  413.     }
  414.     return 1;
  415. }
  416.  
  417. dcmd_scp(playerid, params[])
  418. {
  419.     new sele, tmp[256], idx;
  420.     tmp = strtok(params, idx);
  421.     if(!strlen(tmp)) {
  422.         SendClientMessage(playerid, COLOR_WHITE, "USAGE: /scp [checkpoint]");
  423.         return 1;
  424.     }
  425.     sele = strval(tmp);
  426.     if(RaceBuilders[playerid] != 0)
  427.     {
  428.         if(sele>BCurrentCheckpoints[b(playerid)]-1 || BCurrentCheckpoints[b(playerid)] < 1 || sele < 0)
  429.         {
  430.             SendClientMessage(playerid, COLOR_YELLOW, "Checkpoint invalide !");
  431.             return 1;
  432.         }
  433.         format(ystring,sizeof(ystring),"Checkpoint séléctionné: %d.",sele);
  434.         SendClientMessage(playerid, COLOR_GREEN, ystring);
  435.         BActiveCP(playerid,sele);
  436.         BSelectedCheckpoint[b(playerid)]=sele;
  437.     }
  438.     else
  439.     {
  440.         SendClientMessage(playerid, COLOR_RED, "Vous ne construisez pas une course !");
  441.     }
  442.     return 1;
  443. }
  444.  
  445. dcmd_rcp(playerid, params[])
  446. {
  447.     #pragma unused params
  448.     if(RaceBuilders[playerid] == 0)
  449.     {
  450.         SendClientMessage(playerid, COLOR_RED, "Vous ne construisez pas une course !");
  451.         return 1;
  452.     }
  453.     else if(BCurrentCheckpoints[b(playerid)] < 1)
  454.     {
  455.         SendClientMessage(playerid, COLOR_YELLOW, "Pas de Checkpoint a remplcer");
  456.         return 1;
  457.     }
  458.     new Float:x,Float:y,Float:z;
  459.     GetPlayerPos(playerid,x,y,z);
  460.     format(ystring,sizeof(ystring),"Checkpoint %d remplacé: %f,%f,%f.",BSelectedCheckpoint[b(playerid)],x,y,z);
  461.     SendClientMessage(playerid, COLOR_GREEN, ystring);
  462.     BRaceCheckpoints[b(playerid)][BSelectedCheckpoint[b(playerid)]][0]=x;
  463.     BRaceCheckpoints[b(playerid)][BSelectedCheckpoint[b(playerid)]][1]=y;
  464.     BRaceCheckpoints[b(playerid)][BSelectedCheckpoint[b(playerid)]][2]=z;
  465.     BActiveCP(playerid,BSelectedCheckpoint[b(playerid)]);
  466.     return 1;
  467. }
  468.  
  469. dcmd_dcp(playerid, params[])
  470. {
  471.     #pragma unused params
  472.     if(RaceBuilders[playerid] == 0)
  473.     {
  474.         SendClientMessage(playerid, COLOR_RED, "Vous ne construisez pas une course !");
  475.         return 1;
  476.     }
  477.     else if(BCurrentCheckpoints[b(playerid)] < 1)
  478.     {
  479.         SendClientMessage(playerid, COLOR_YELLOW, "Pas de checkpoint a supprimé");
  480.         return 1;
  481.     }
  482.     for(new i=BSelectedCheckpoint[b(playerid)];i<BCurrentCheckpoints[b(playerid)];i++)
  483.     {
  484.         BRaceCheckpoints[b(playerid)][i][0]=BRaceCheckpoints[b(playerid)][i+1][0];
  485.         BRaceCheckpoints[b(playerid)][i][1]=BRaceCheckpoints[b(playerid)][i+1][1];
  486.         BRaceCheckpoints[b(playerid)][i][2]=BRaceCheckpoints[b(playerid)][i+1][2];
  487.     }
  488.     BCurrentCheckpoints[b(playerid)]--;
  489.     BSelectedCheckpoint[b(playerid)]--;
  490.     if(BCurrentCheckpoints[b(playerid)] < 1)
  491.     {
  492.         DisablePlayerRaceCheckpoint(playerid);
  493.         BSelectedCheckpoint[b(playerid)]=0;
  494.         return 1;
  495.     }
  496.     else if(BSelectedCheckpoint[b(playerid)] < 0)
  497.     {
  498.         BSelectedCheckpoint[b(playerid)]=0;
  499.     }
  500.     BActiveCP(playerid,BSelectedCheckpoint[b(playerid)]);
  501.     SendClientMessage(playerid,COLOR_GREEN,"Checkpoint supprimé !");
  502.     return 1;
  503. }
  504.  
  505. dcmd_clearrace(playerid,params[])
  506. {
  507.     #pragma unused params
  508.     if(RaceBuilders[playerid] != 0) clearrace(playerid);
  509.     else SendClientMessage(playerid, COLOR_RED, "Vous ne construisez pas une course !");
  510.     return 1;
  511. }
  512.  
  513. dcmd_editrace(playerid,params[])
  514. {
  515.     if(RaceBuilders[playerid] == 0)
  516.     {
  517.         SendClientMessage(playerid, COLOR_RED, "Vous ne construisez pas une course !");
  518.         return 1;
  519.     }
  520.     if(BCurrentCheckpoints[b(playerid)]>0) //Clear the old race if there is such.
  521.     {
  522.         for(new i=0;i<BCurrentCheckpoints[b(playerid)];i++)
  523.         {
  524.             BRaceCheckpoints[b(playerid)][i][0]=0.0;
  525.             BRaceCheckpoints[b(playerid)][i][1]=0.0;
  526.             BRaceCheckpoints[b(playerid)][i][2]=0.0;
  527.         }
  528.         BCurrentCheckpoints[b(playerid)]=0;
  529.     }
  530.     new tmp[256],idx;
  531.     tmp = strtok(params, idx);
  532.     if(!strlen(tmp))
  533.     {
  534.         SendClientMessage(playerid, COLOR_WHITE, "USAGE: /editrace [name]");
  535.         return 1;
  536.     }
  537.     new race_name[32],templine[42];
  538.     format(race_name,sizeof(race_name), "/fRace/%s.frace",tmp);
  539.     if(!fexist(race_name))
  540.     {
  541.         format(ystring,sizeof(ystring), "La course \"%s\" n'existe pas.",tmp);
  542.         SendClientMessage(playerid, COLOR_RED, ystring);
  543.         return 1;
  544.     }
  545.     BCurrentCheckpoints[b(playerid)]=-1;
  546.     new File:f, i;
  547.     f = fopen(race_name, io_read);
  548.     fread(f,templine,sizeof(templine));
  549.     if(templine[0] == 'Y') //Checking if the racefile is v0.2+
  550.     {
  551.         new fileversion;
  552.         strtok(templine,i); // read off YRACE
  553.         fileversion = strval(strtok(templine,i)); // read off the file version
  554.         if(fileversion > RACEFILE_VERSION) // Check if the race is made with a newer version of the racefile format
  555.         {
  556.             format(ystring,128,"Race \'%s\' is created with a newer version of YRACE, unable to load.",tmp);
  557.             SendClientMessage(playerid,COLOR_RED,ystring);
  558.             return 1;
  559.         }
  560.         strtok(templine,i); // read off RACEBUILDER
  561.         Bracemode[b(playerid)] = strval(strtok(templine,i)); // read off racemode
  562.         Blaps[b(playerid)] = strval(strtok(templine,i)); // read off amount of laps
  563.         if(fileversion >= 2)
  564.         {
  565.             BAirrace[b(playerid)] = strval(strtok(templine,i));
  566.             BCPsize[b(playerid)] = floatstr(strtok(templine,i));
  567.         }
  568.         else
  569.         {
  570.             BAirrace[b(playerid)] = 0;
  571.             BCPsize[b(playerid)] = 8.0;
  572.         }
  573.         fread(f,templine,sizeof(templine)); // read off best race times, not saved due to editing the track
  574.         fread(f,templine,sizeof(templine)); // read off best lap times,          -||-
  575.     }
  576.     else //Otherwise add the lines as checkpoints, the file is made with v0.1 (or older) version of the script.
  577.     {
  578.         BCurrentCheckpoints[b(playerid)]++;
  579.         BRaceCheckpoints[b(playerid)][BCurrentCheckpoints[b(playerid)]][0] = floatstr(strtok(templine,i));
  580.         BRaceCheckpoints[b(playerid)][BCurrentCheckpoints[b(playerid)]][1] = floatstr(strtok(templine,i));
  581.         BRaceCheckpoints[b(playerid)][BCurrentCheckpoints[b(playerid)]][2] = floatstr(strtok(templine,i));
  582.     }
  583.     while(fread(f,templine,sizeof(templine),false))
  584.     {
  585.         BCurrentCheckpoints[b(playerid)]++;
  586.         i=0;
  587.         BRaceCheckpoints[b(playerid)][BCurrentCheckpoints[b(playerid)]][0] = floatstr(strtok(templine,i));
  588.         BRaceCheckpoints[b(playerid)][BCurrentCheckpoints[b(playerid)]][1] = floatstr(strtok(templine,i));
  589.         BRaceCheckpoints[b(playerid)][BCurrentCheckpoints[b(playerid)]][2] = floatstr(strtok(templine,i));
  590.     }
  591.     fclose(f);
  592.     BCurrentCheckpoints[b(playerid)]++; // # of next CP to be created
  593.     format(ystring,sizeof(ystring),"La course \"%s\" a été chargé avec succès! (%d checkpoints)",tmp,BCurrentCheckpoints[b(playerid)]);
  594.     SendClientMessage(playerid, COLOR_GREEN,ystring);
  595.     return 1;
  596. }
  597.  
  598. dcmd_saverace(playerid, params[])
  599. {
  600.     #pragma unused params
  601.     if(RaceBuilders[playerid] != 0)
  602.     {
  603.         if(BCurrentCheckpoints[b(playerid)] < 2)
  604.         {
  605.             SendClientMessage(playerid, COLOR_YELLOW, "Vous devez avoir au moins 2 CP's");
  606.             return 1;
  607.         }
  608.         ShowPlayerDialog(playerid, MENU3, DIALOG_STYLE_LIST, "Type de la course", "Course voiture\nCourse moto\nCourse bateau\nCourse Sandking\nCourse aerienne\nAutres","Sauvegarde", "Annuler");
  609.     }
  610.     else
  611.     {
  612.         SendClientMessage(playerid, COLOR_RED, "Vous ne construisez pas une course !");
  613.     }
  614.     return 1;
  615. }
  616.  
  617. dcmd_loadrace(playerid, params[])
  618. {
  619.     #pragma unused params
  620.     if(RaceAdmin == 1 && IsNotAdmin(playerid)) return 1;
  621.     Racemode = 0;
  622.     format(ystring, sizeof(ystring), "Type de la course: %s\nNuméro de la course: %s\nLancer la course !",CType,CNumero);
  623.     ShowPlayerDialog(playerid, MENU0, DIALOG_STYLE_LIST, "Options de la course:", ystring, "Executer", "Annuler");
  624.     p1=0;
  625.     p2=0;
  626.     p3=0;
  627.     p4=0;
  628.     p5=0;
  629.     p6=0;
  630.     p7=0;
  631.     p8=0;
  632.     p9=0;
  633.     p10=0;
  634.     p11=0;
  635.     p12=0;
  636.     p13=0;
  637.     p14=0;
  638.     p15=0;
  639.     p16=0;
  640.     p17=0;
  641.     p18=0;
  642.     p19=0;
  643.     p20=0;
  644.     p21=0;
  645.     p22=0;
  646.     p23=0;
  647.     p24=0;
  648.     p25=0;
  649.     p26=0;
  650.     p27=0;
  651.     p28=0;
  652.     for(new i=0;i<MAX_PLAYERS;i++) {
  653.         if(IsPlayerConnected(i)) {
  654.             pplayer[i]=0;
  655.         }
  656.     }
  657.     if(LCurrentCheckpoint<2 && Racemode == 2)
  658.     {
  659.         Racemode = 1; // Racemode 2 doesn't work well with only 2CPs, and mode 1 is just the same when playing with 2 CPs.
  660.     }                 // Setting racemode 2 is prevented from racebuilder so this shouldn't happen anyways.
  661.     return 1;
  662. }
  663.  
  664.  
  665. dcmd_deleterace(playerid, params[])
  666. {
  667.     if((RaceAdmin == 1 || BuildAdmin == 1) && IsNotAdmin(playerid)) return 1;
  668.     new filename[128], idx;
  669.     filename = strtok(params,idx);
  670.     if(!(strlen(filename)))
  671.     {
  672.         SendClientMessage(playerid, COLOR_WHITE, "USAGE: /deleterace [race]");
  673.         return 1;
  674.     }
  675.     format(filename,sizeof(filename),"/fRace/%s.frace",filename);
  676.     if(!fexist(filename))
  677.     {
  678.         format(ystring,sizeof(ystring), "La course n'existe pas.",filename);
  679.         SendClientMessage(playerid, COLOR_RED, ystring);
  680.         return 1;
  681.     }
  682.     fremove(filename);
  683.     format(ystring,sizeof(ystring), "La course a été supprimé.",filename);
  684.     SendClientMessage(playerid, COLOR_GREEN, ystring);
  685.     return 1;
  686. }
  687.  
  688. dcmd_join(playerid,params[])
  689. {
  690.     #pragma unused params
  691.     if(RaceBuilders[playerid] != 0)
  692.     {
  693.         SendClientMessage(playerid, COLOR_YELLOW, "Vous êtes en train de construire une course !");
  694.         return 1;
  695.     }
  696.     if(RaceParticipant[playerid]>0)
  697.     {
  698.         SendClientMessage(playerid, COLOR_YELLOW, "Vous êtes dejà en course !");
  699.         return 1;
  700.     }
  701.     if(RaceActive==0)
  702.     {
  703.         SendClientMessage(playerid, COLOR_YELLOW, "Aucune course en cours.");
  704.         return 1;
  705.     }
  706.     else if(RaceActive==1 && RaceStart==0)
  707.     {
  708.         Vehicule(playerid);
  709.         if(RVehicule[playerid] == 1)return 1;
  710.         if(PrizeMode >= 2 && GetPlayerMoney(playerid) < JoinFee)
  711.         {
  712.             format(ystring,sizeof(ystring),"Vous n'aviez pas l'argent nécessaire! (Prix d'entrée: %d$)",JoinFee);
  713.             SendClientMessage(playerid, COLOR_YELLOW, ystring);
  714.             return 1;
  715.         }
  716.         else if (PrizeMode >= 2)
  717.         {
  718.             new tempval;
  719.             tempval=(-1)*JoinFee;
  720.             GivePlayerMoney(playerid,tempval);
  721.             Pot+=JoinFee;
  722.         }
  723.         CurrentCheckpoint[playerid]=0;
  724.         SetRaceCheckpoint(playerid,0,1);
  725.         RaceParticipant[playerid]=1;
  726.         SendClientMessage(playerid, COLOR_GREEN, "Vous avez rejoins la course !");
  727.         Participants++;
  728.         TogglePlayerControllable(playerid,false);
  729.         new Float:NormeAB;
  730.         new Float:SinAngle;
  731.         NormeAB = floatsqroot ((RaceCheckpoints[1][0]-RaceCheckpoints[0][0])*(RaceCheckpoints[1][0]-RaceCheckpoints[0][0]) + (RaceCheckpoints[1][1]-RaceCheckpoints[0][1])*(RaceCheckpoints[1][1]-RaceCheckpoints[0][1]));      SinAngle = ((RaceCheckpoints[1][1]-RaceCheckpoints[0][1])/NormeAB);
  732.         Angle = asin(SinAngle);
  733.         if (RaceCheckpoints[0][0] > RaceCheckpoints[1][0])
  734.         {
  735.             Angle = 90.0 - Angle;
  736.         }
  737.         else
  738.         {
  739.             Angle = Angle - 90.0;
  740.         }
  741.         a=Angle+90;
  742.         if(p1==0 && pplayer[playerid]==0) Pol1(playerid);
  743.         if(p2==0 && pplayer[playerid]==0) Pol2(playerid);
  744.         if(p3==0 && pplayer[playerid]==0) Pol3(playerid);
  745.         if(p4==0 && pplayer[playerid]==0) Pol4(playerid);
  746.         if(p5==0 && pplayer[playerid]==0) Pol5(playerid);
  747.         if(p6==0 && pplayer[playerid]==0) Pol6(playerid);
  748.         if(p7==0 && pplayer[playerid]==0) Pol7(playerid);
  749.         if(p8==0 && pplayer[playerid]==0) Pol8(playerid);
  750.         if(p9==0 && pplayer[playerid]==0) Pol9(playerid);
  751.         if(p10==0 && pplayer[playerid]==0) Pol10(playerid);
  752.         if(p11==0 && pplayer[playerid]==0) Pol11(playerid);
  753.         if(p12==0 && pplayer[playerid]==0) Pol12(playerid);
  754.         if(p13==0 && pplayer[playerid]==0) Pol13(playerid);
  755.         if(p14==0 && pplayer[playerid]==0) Pol14(playerid);
  756.         if(p15==0 && pplayer[playerid]==0) Pol15(playerid);
  757.         if(p16==0 && pplayer[playerid]==0) Pol16(playerid);
  758.         if(p17==0 && pplayer[playerid]==0) Pol17(playerid);
  759.         if(p18==0 && pplayer[playerid]==0) Pol18(playerid);
  760.         if(p19==0 && pplayer[playerid]==0) Pol19(playerid);
  761.         if(p20==0 && pplayer[playerid]==0) Pol20(playerid);
  762.         if(p21==0 && pplayer[playerid]==0) Pol21(playerid);
  763.         if(p22==0 && pplayer[playerid]==0) Pol22(playerid);
  764.         if(p23==0 && pplayer[playerid]==0) Pol23(playerid);
  765.         if(p24==0 && pplayer[playerid]==0) Pol24(playerid);
  766.         if(p25==0 && pplayer[playerid]==0) Pol25(playerid);
  767.         if(p26==0 && pplayer[playerid]==0) Pol26(playerid);
  768.         if(p27==0 && pplayer[playerid]==0) Pol27(playerid);
  769.         if(p28==0 && pplayer[playerid]==0) Pol28(playerid);
  770.         if(p28==1 && pplayer[playerid]==0) SendClientMessage(playerid,COLOR_RED,"La course a atteint son nombre maximum de concurrents, participation impossible.");
  771.         return 1;
  772.     }
  773.     else if(RaceActive==1 && RaceStart==1)
  774.     {
  775.         SendClientMessage(playerid, COLOR_YELLOW, "La course a déjà commencé.");
  776.         return 1;
  777.     }
  778.     return 1;
  779. }
  780.  
  781. dcmd_leave(playerid,params[])
  782. {
  783.     #pragma unused params
  784.     if(RaceParticipant[playerid] > 0)
  785.     {
  786.         DisablePlayerRaceCheckpoint(playerid);
  787.         RaceParticipant[playerid]=0;
  788.         Participants--;
  789.         SendClientMessage(playerid,COLOR_YELLOW,"Vous avez quitté la course.");
  790.         if(pplayer[playerid]==1) p1=0;
  791.         if(pplayer[playerid]==2) p2=0;
  792.         if(pplayer[playerid]==3) p3=0;
  793.         if(pplayer[playerid]==4) p4=0;
  794.         if(pplayer[playerid]==5) p5=0;
  795.         if(pplayer[playerid]==6) p6=0;
  796.         if(pplayer[playerid]==7) p7=0;
  797.         if(pplayer[playerid]==8) p8=0;
  798.         if(pplayer[playerid]==9) p9=0;
  799.         if(pplayer[playerid]==10) p10=0;
  800.         if(pplayer[playerid]==11) p11=0;
  801.         if(pplayer[playerid]==12) p12=0;
  802.         if(pplayer[playerid]==13) p13=0;
  803.         if(pplayer[playerid]==14) p14=0;
  804.         if(pplayer[playerid]==15) p15=0;
  805.         if(pplayer[playerid]==16) p16=0;
  806.         if(pplayer[playerid]==17) p17=0;
  807.         if(pplayer[playerid]==18) p18=0;
  808.         if(pplayer[playerid]==19) p19=0;
  809.         if(pplayer[playerid]==20) p20=0;
  810.         if(pplayer[playerid]==21) p21=0;
  811.         if(pplayer[playerid]==22) p22=0;
  812.         if(pplayer[playerid]==23) p23=0;
  813.         if(pplayer[playerid]==24) p24=0;
  814.         if(pplayer[playerid]==25) p25=0;
  815.         if(pplayer[playerid]==26) p26=0;
  816.         if(pplayer[playerid]==27) p27=0;
  817.         if(pplayer[playerid]==28) p28=0;
  818.         pplayer[playerid]=0;
  819.         if(PrizeMode >= 2 && RaceStart == 0)
  820.         {
  821.             GivePlayerMoney(playerid,JoinFee/2);
  822.             Pot-=JoinFee/2;
  823.         }
  824.     }
  825.     else SendClientMessage(playerid, COLOR_YELLOW, "Vous n'êtes pas en course !");
  826.     return 1;
  827. }
  828.  
  829. dcmd_endrace(playerid, params[])
  830. {
  831.     #pragma unused params
  832.     if(RaceAdmin == 1 && IsNotAdmin(playerid)) return 1;
  833.     if(RaceActive==0)
  834.     {
  835.         SendClientMessage(playerid, COLOR_YELLOW, "Il n'y a pas de course en cours !");
  836.         return 1;
  837.     }
  838.     endrace();
  839.     return 1;
  840. }
  841.  
  842.  
  843. public OnPlayerDisconnect(playerid,reason)
  844. {
  845.     if(RaceParticipant[playerid]>=1)
  846.     {
  847.         if(Participants==1) //Last participant leaving, ending race.
  848.         {
  849.             endrace();
  850.         }
  851.         if(RaceParticipant[playerid] < 3 && RaceStart == 0 && !(RaceParticipant[playerid]==3 && RaceStart == 1))
  852.         { //Doing readycheck since someone left, but not if they disconnected during countdown.
  853.             ReadyRefresh();
  854.         }
  855.         Participants--;
  856.         RaceParticipant[playerid]=0;
  857.         DisablePlayerRaceCheckpoint(playerid);
  858.     }
  859.     if(RaceBuilders[playerid] != 0)
  860.     {
  861.         DisablePlayerRaceCheckpoint(playerid);
  862.         for(new i;i<BCurrentCheckpoints[b(playerid)];i++)
  863.         {
  864.             BRaceCheckpoints[b(playerid)][i][0]=0.0;
  865.             BRaceCheckpoints[b(playerid)][i][1]=0.0;
  866.             BRaceCheckpoints[b(playerid)][i][2]=0.0;
  867.         }
  868.         BuilderSlots[b(playerid)] = MAX_PLAYERS+1;
  869.         RaceBuilders[playerid] = 0;
  870.     }
  871.     return 1;
  872. }
  873.  
  874. public OnPlayerDeath(playerid,killerid,reason)
  875. {
  876.     if(RaceParticipant[playerid]>=1)
  877.     {
  878.         if(Participants==1) //Last participant leaving, ending race.
  879.         {
  880.             endrace();
  881.         }
  882.         if(RaceParticipant[playerid] < 3 && RaceStart == 0 && !(RaceParticipant[playerid]==3 && RaceStart == 1))
  883.         { //Doing readycheck since someone left, but not if they disconnected during countdown.
  884.             ReadyRefresh();
  885.         }
  886.         Participants--;
  887.         RaceParticipant[playerid]=0;
  888.         DisablePlayerRaceCheckpoint(playerid);
  889.     }
  890.     if(RaceBuilders[playerid] != 0)
  891.     {
  892.         DisablePlayerRaceCheckpoint(playerid);
  893.         for(new i;i<BCurrentCheckpoints[b(playerid)];i++)
  894.         {
  895.             BRaceCheckpoints[b(playerid)][i][0]=0.0;
  896.             BRaceCheckpoints[b(playerid)][i][1]=0.0;
  897.             BRaceCheckpoints[b(playerid)][i][2]=0.0;
  898.         }
  899.         BuilderSlots[b(playerid)] = MAX_PLAYERS+1;
  900.         RaceBuilders[playerid] = 0;
  901.     }
  902.     return 1;
  903. }
  904. strtok(const string[], &index)
  905. {
  906.     new length = strlen(string);
  907.     while ((index < length) && (string[index] <= ' '))
  908.     {
  909.         index++;
  910.     }
  911.  
  912.     new offset = index;
  913.     new result[20];
  914.     while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
  915.     {
  916.         result[index - offset] = string[index];
  917.         index++;
  918.     }
  919.     result[index - offset] = EOS;
  920.     return result;
  921. }
  922.  
  923. public LockRacers()
  924. {
  925.     for(new i;i<MAX_PLAYERS;i++)
  926.     {
  927.         if(RaceParticipant[i] != 0)
  928.         {
  929.             TogglePlayerControllable(i,0);
  930.             if(IsPlayerInAnyVehicle(i)) PlayerVehicles[i]=GetPlayerVehicleID(i);
  931.             else PlayerVehicles[i]=0;
  932.         }
  933.     }
  934. }
  935.  
  936. public UnlockRacers()
  937. {
  938.     for(new i;i<MAX_PLAYERS;i++)
  939.     {
  940.         if(RaceParticipant[i]>0)
  941.         {
  942.             TogglePlayerControllable(i,1);
  943.             if(PlayerVehicles[i] != 0)
  944.             {
  945.                 PutPlayerInVehicle(i,PlayerVehicles[i],0);
  946.                 PlayerVehicles[i]=0;
  947.             }
  948.         }
  949.     }
  950. }
  951.  
  952. public countdown() {
  953.     if(RaceStart == 0)  // Locking players, setting the reward and
  954.     {
  955.         RaceStart=1;
  956.         LockRacers();
  957.         new tmpprize, OPot;
  958.         OPot=Pot;
  959.         if(PrizeMode == 1 || PrizeMode == 4)
  960.         {
  961.             if(Racemode == 0 || Racemode == 3) tmpprize = floatround(RLenght);
  962.             else if(Racemode == 1) tmpprize = floatround(LLenght * Racelaps);
  963.             else if(Racemode == 2) tmpprize = floatround(RLenght * 2 * Racelaps);
  964.         }
  965.         tmpprize *= DynaMP;
  966.         if(PrizeMode == 0 || PrizeMode == 3) Pot += Prize;
  967.         else if(PrizeMode == 1 || PrizeMode == 4) Pot += tmpprize;
  968.         if(Participants == 1) Pot=OPot; // Only 1 racer, force reward to entrance fees.
  969.     }
  970.     if(cd>0)
  971.     {
  972.         if(cd==10) {
  973.             for(new i=0;i<MAX_PLAYERS;i++)
  974.             {
  975.                 if(RaceParticipant[i]>1)
  976.                 {
  977.                     format(ystring,sizeof(ystring),"~b~%s ~w~par ~r~%s",CRaceName,CBuilder);
  978.                     GameTextForPlayer(i,ystring,3000,5);
  979.                 }
  980.             }
  981.         }
  982.         if(cd==7) {
  983.             for(new i=0;i<MAX_PLAYERS;i++)
  984.             {
  985.                 if(RaceParticipant[i]>1)
  986.                 {
  987.                     format(ystring,sizeof(ystring),"~w~Meilleur temps: ~g~%f~n~~w~par ~r~%s",CRaceName,CBuilder);
  988.                     GameTextForPlayer(i,ystring,3000,5);
  989.                 }
  990.             }
  991.         }
  992.         if(cd<=5) {
  993.             format(ystring, sizeof(ystring), "%d...",cd);
  994.             for(new i=0;i<MAX_PLAYERS;i++)
  995.             {
  996.                 if(RaceParticipant[i]>1)
  997.                 {
  998.                     RaceSound(i,1056);
  999.                     GameTextForPlayer(i,ystring,1000,3);
  1000.                 }
  1001.             }
  1002.         }
  1003.     }
  1004.     else if(cd == 0)
  1005.     {
  1006.         format(ystring, sizeof(ystring), "~g~GO!",cd);
  1007.         KillTimer(Countdown);
  1008.         for(new i=0;i<MAX_PLAYERS;i++)
  1009.         {
  1010.             if(RaceParticipant[i]>1)
  1011.             {
  1012.                 RaceSound(i,1057);
  1013.                 GameTextForPlayer(i,ystring,3000,3);
  1014.                 RaceParticipant[i]=4;
  1015.                 CurrentLap[i]=1;
  1016.                 if(Racemode == 3) SetRaceCheckpoint(i,LCurrentCheckpoint,LCurrentCheckpoint-1);
  1017.                 else SetRaceCheckpoint(i,0,1);
  1018.             }
  1019.         }
  1020.         UnlockRacers();
  1021.         RaceTick=tickcount();
  1022.     }
  1023.     cd--;
  1024. }
  1025.  
  1026. public SetNextCheckpoint(playerid)
  1027. {
  1028.     if(Racemode == 0) // Default Mode
  1029.     {
  1030.         CurrentCheckpoint[playerid]++;
  1031.         if(CurrentCheckpoint[playerid] == LCurrentCheckpoint)
  1032.         {
  1033.             SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],-1);
  1034.             RaceParticipant[playerid]=6;
  1035.         }
  1036.         else SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],CurrentCheckpoint[playerid]+1);
  1037.     }
  1038.     else if(Racemode == 1) // Ring Mode
  1039.     {
  1040.         CurrentCheckpoint[playerid]++;
  1041.         if(CurrentCheckpoint[playerid] == LCurrentCheckpoint+1 && CurrentLap[playerid] == Racelaps)
  1042.         {
  1043.             SetRaceCheckpoint(playerid,0,-1);
  1044.             RaceParticipant[playerid]=6;
  1045.         }
  1046.         else if (CurrentCheckpoint[playerid] == LCurrentCheckpoint+1 && CurrentLap[playerid] != Racelaps)
  1047.         {
  1048.             CurrentCheckpoint[playerid]=0;
  1049.             SetRaceCheckpoint(playerid,0,1);
  1050.             RaceParticipant[playerid]=5;
  1051.         }
  1052.         else if(CurrentCheckpoint[playerid] == 1 && RaceParticipant[playerid]==5)
  1053.         {
  1054.             ChangeLap(playerid);
  1055.             if(LCurrentCheckpoint==1)
  1056.             {
  1057.                 SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],0);
  1058.             }
  1059.             else
  1060.             {
  1061.                 SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],2);
  1062.             }
  1063.             RaceParticipant[playerid]=4;
  1064.         }
  1065.         else
  1066.         {
  1067.             if(LCurrentCheckpoint==1 || CurrentCheckpoint[playerid] == LCurrentCheckpoint) SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],0);
  1068.             else SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],CurrentCheckpoint[playerid]+1);
  1069.         }
  1070.     }
  1071.     else if(Racemode == 2) // Yoyo-mode
  1072.     {
  1073.         if(RaceParticipant[playerid]==4)
  1074.         {
  1075.             if(CurrentCheckpoint[playerid] == LCurrentCheckpoint) // @ Last CP, trigger last-1
  1076.             {
  1077.                 RaceParticipant[playerid]=5;
  1078.                 CurrentCheckpoint[playerid]=LCurrentCheckpoint-1;
  1079.                 SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],CurrentCheckpoint[playerid]-1);
  1080.             }
  1081.             else if(CurrentCheckpoint[playerid] == LCurrentCheckpoint-1) // Second last CP, set next accordingly
  1082.             {
  1083.                 CurrentCheckpoint[playerid]++;
  1084.                 SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],CurrentCheckpoint[playerid]-1);
  1085.             }
  1086.             else
  1087.             {
  1088.                 CurrentCheckpoint[playerid]++;
  1089.                 SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],CurrentCheckpoint[playerid]+1);
  1090.             }
  1091.         }
  1092.         else if(RaceParticipant[playerid]==5)
  1093.         {
  1094.             if(CurrentCheckpoint[playerid] == 1 && CurrentLap[playerid] == Racelaps) //Set the finish line
  1095.             {
  1096.                 SetRaceCheckpoint(playerid,0,-1);
  1097.                 RaceParticipant[playerid]=6;
  1098.             }
  1099.             else if(CurrentCheckpoint[playerid] == 0) //At finish line, change lap.
  1100.             {
  1101.                 ChangeLap(playerid);
  1102.                 if(LCurrentCheckpoint==1)
  1103.                 {
  1104.                     SetRaceCheckpoint(playerid,1,0);
  1105.                 }
  1106.                 else
  1107.                 {
  1108.                     SetRaceCheckpoint(playerid,1,2);
  1109.                 }
  1110.                 RaceParticipant[playerid]=4;
  1111.             }
  1112.             else if(CurrentCheckpoint[playerid] == 1)
  1113.             {
  1114.                 CurrentCheckpoint[playerid]--;
  1115.                 SetRaceCheckpoint(playerid,0,1);
  1116.             }
  1117.             else
  1118.             {
  1119.                 CurrentCheckpoint[playerid]--;
  1120.                 SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],CurrentCheckpoint[playerid]-1);
  1121.             }
  1122.         }
  1123.     }
  1124.     else if(Racemode == 3) // Mirror Mode
  1125.     {
  1126.         CurrentCheckpoint[playerid]--;
  1127.         if(CurrentCheckpoint[playerid] == 0)
  1128.         {
  1129.             SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],-1);
  1130.             RaceParticipant[playerid]=6;
  1131.         }
  1132.         else
  1133.         {
  1134.              SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],CurrentCheckpoint[playerid]-1);
  1135.         }
  1136.     }
  1137. }
  1138.  
  1139. public SetRaceCheckpoint(playerid,target,next)
  1140. {
  1141.     if(next == -1 && Airrace == 0) SetPlayerRaceCheckpoint(playerid,1,RaceCheckpoints[target][0],RaceCheckpoints[target][1],RaceCheckpoints[target][2],0.0,0.0,0.0,CPsize);
  1142.     else if(next == 1 && Airrace == 0) SetPlayerRaceCheckpoint(playerid,1,RaceCheckpoints[target][0],RaceCheckpoints[target][1],RaceCheckpoints[target][2],0.0,0.0,0.0,10000.00);
  1143.     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);
  1144.     else if(Airrace == 1) SetPlayerRaceCheckpoint(playerid,3,RaceCheckpoints[target][0],RaceCheckpoints[target][1],RaceCheckpoints[target][2],RaceCheckpoints[next][0],
  1145.                             RaceCheckpoints[next][1],RaceCheckpoints[next][2],CPsize);
  1146.     else SetPlayerRaceCheckpoint(playerid,0,RaceCheckpoints[target][0],RaceCheckpoints[target][1],RaceCheckpoints[target][2],RaceCheckpoints[next][0],RaceCheckpoints[next][1],
  1147.                             RaceCheckpoints[next][2],CPsize);
  1148. }
  1149. public SetBRaceCheckpoint(playerid,target,next)
  1150. {
  1151.     new ar = BAirrace[b(playerid)];
  1152.     if(next == -1 && ar == 0) SetPlayerRaceCheckpoint(playerid,1,BRaceCheckpoints[b(playerid)][target][0],BRaceCheckpoints[b(playerid)][target][1],
  1153.                                 BRaceCheckpoints[b(playerid)][target][2],0.0,0.0,0.0,BCPsize[b(playerid)]);
  1154.     else if(next == -1 && ar == 1) SetPlayerRaceCheckpoint(playerid,4,BRaceCheckpoints[b(playerid)][target][0],
  1155.                 BRaceCheckpoints[b(playerid)][target][1],BRaceCheckpoints[b(playerid)][target][2],0.0,0.0,0.0,
  1156.                 BCPsize[b(playerid)]);
  1157.     else if(ar == 1) SetPlayerRaceCheckpoint(playerid,3,BRaceCheckpoints[b(playerid)][target][0],BRaceCheckpoints[b(playerid)][target][1],BRaceCheckpoints[b(playerid)][target][2],
  1158.                         BRaceCheckpoints[b(playerid)][next][0],BRaceCheckpoints[b(playerid)][next][1],BRaceCheckpoints[b(playerid)][next][2],BCPsize[b(playerid)]);
  1159.     else SetPlayerRaceCheckpoint(playerid,0,BRaceCheckpoints[b(playerid)][target][0],BRaceCheckpoints[b(playerid)][target][1],BRaceCheckpoints[b(playerid)][target][2],
  1160.             BRaceCheckpoints[b(playerid)][next][0],BRaceCheckpoints[b(playerid)][next][1],BRaceCheckpoints[b(playerid)][next][2],BCPsize[b(playerid)]);
  1161. }
  1162.  
  1163. public GetLapTick(playerid)
  1164. {
  1165.     new tick, lap;
  1166.     tick=tickcount();
  1167.     if(CurrentLap[playerid]==1)
  1168.     {
  1169.         lap=tick-RaceTick;
  1170.         LastLapTick[playerid]=tick;
  1171.     }
  1172.     else
  1173.     {
  1174.         lap=tick-LastLapTick[playerid];
  1175.         LastLapTick[playerid]=tick;
  1176.     }
  1177.     return lap;
  1178. }
  1179.  
  1180. public GetRaceTick(playerid)
  1181. {
  1182.     new tick, race;
  1183.     tick=tickcount();
  1184.     race=tick-RaceTick;
  1185.     return race;
  1186. }
  1187.  
  1188. public OnPlayerEnterRaceCheckpoint(playerid)
  1189. {
  1190.     if(RaceParticipant[playerid]>=1) // See if the player is participating in a race, allows race builders to do their stuff in peace.
  1191.     {
  1192.         if(RaceParticipant[playerid] == 6) // Player reaches the checkered flag.
  1193.         {
  1194.             new name[MAX_PLAYER_NAME], LapTime, RaceTime, RaceString[64];
  1195.             LapTime=GetLapTick(playerid);
  1196.             RaceTime=GetRaceTick(playerid);
  1197.             RaceString=BeHuman(RaceTime);
  1198.             GetPlayerName(playerid, name, MAX_PLAYER_NAME);
  1199.             RaceParticipant[playerid]=0;
  1200.             RaceSound(playerid,1139);
  1201.             format(ystring,sizeof(ystring),"%s a fini la course en %d position en: %s.",name,Ranking,RaceString);
  1202.             if (Ranking < 4) SendClientMessageToAll(COLOR_GREEN,ystring);
  1203.             else SendClientMessage(playerid,COLOR_GREEN,ystring);
  1204.             if(Racemode == ORacemode && ORacelaps == Racelaps)
  1205.             {
  1206.                 new LapString[64], laprank, racerank;
  1207.                 LapString=BeHuman(LapTime);
  1208.                 RaceString=BeHuman(RaceTime);
  1209.                 format(ystring,sizeof(ystring),"~w~Temps: %s",RaceString);
  1210.                 if(ORacemode!=0) format(ystring,sizeof(ystring),"%s~n~Laptime: %s",ystring,LapString);
  1211.                 laprank=CheckBestLap(playerid,LapTime);
  1212.                 if(laprank == 1)
  1213.                 {
  1214.                     format(ystring,sizeof(ystring),"%s~n~~y~LAP RECORD!",ystring);
  1215.                 }
  1216.                 racerank=CheckBestRace(playerid,RaceTime);
  1217.                 if(racerank == 1)
  1218.                 {
  1219.                     format(ystring,sizeof(ystring),"%s~n~~y~RECORD DE LA COURSE!",ystring);
  1220.                 }
  1221.                 GameTextForPlayer(playerid,ystring,13000,3);
  1222.             }
  1223.             Ranking++;
  1224.             Participants--;
  1225.             DisablePlayerRaceCheckpoint(playerid);
  1226.             if(Participants == 0)
  1227.             {
  1228.                 endrace();
  1229.             }
  1230.         }
  1231.         else if (RaceStart == 0 && RaceParticipant[playerid]==1) // Player arrives to the start CP for 1st time
  1232.         {
  1233.             //SendClientMessage(playerid,COLOR_YELLOW,"Type /ready when you are ready to start.");
  1234.             SendClientMessage(playerid,COLOR_YELLOW,"NOTE: Vos contrôles sont bloqués, attendez le départ.");
  1235.             RaceParticipant[playerid]=2;
  1236.         }
  1237.         else if (RaceStart==1) // Otherwise switch to the next race CP.
  1238.         {
  1239.             SetNextCheckpoint(playerid);
  1240.             RaceSound(playerid,1138);
  1241.             SaveCP(playerid);
  1242.             gPlayerProgress[playerid]++;
  1243.             RaceCheckpoints[gPlayerProgress[playerid]][3]++;
  1244.             gRacePosition[playerid]=floatround(RaceCheckpoints[gPlayerProgress[playerid]][3],floatround_floor);
  1245.             format(ystring,sizeof(ystring),"~n~~n~~n~~n~~n~~n~~r~Pos :~w~ %d / %d ~n~~g~Cp : ~w~%d / %d ~n~ ~b~Temps :~n~ ~w~ %s ~n~",gRacePosition[playerid], Participants, gPlayerProgress[playerid]-1, LCurrentCheckpoint,BeHuman(GetRaceTick(playerid)));
  1246.             GameTextForPlayer(playerid,ystring,2000,3);
  1247.         }
  1248.  
  1249.     }
  1250.     return 1;
  1251. }
  1252.  
  1253. public endrace()
  1254. {
  1255.     SaveScores(); //If the race had already started, and mode & laps are as originally, save the lapscores and racescores.
  1256.     for(new i=0;i<LCurrentCheckpoint;i++)
  1257.     {
  1258.         RaceCheckpoints[i][0]=0.0;
  1259.         RaceCheckpoints[i][1]=0.0;
  1260.         RaceCheckpoints[i][2]=0.0;
  1261.     }
  1262.     LCurrentCheckpoint=0;
  1263.     for(new i=0;i<MAX_PLAYERS;i++)
  1264.     {
  1265.         LastLapTick[i]=0;
  1266.         DisablePlayerRaceCheckpoint(i);
  1267.         if(RaceParticipant[i]==3) //Player was still /ready-locked, unlocking.
  1268.         {
  1269.                 TogglePlayerControllable(i,1);
  1270.                 if(PlayerVehicles[i] != 0)
  1271.                 {
  1272.                     PutPlayerInVehicle(i,PlayerVehicles[i],0);
  1273.                     PlayerVehicles[i]=0;
  1274.                 }
  1275.         }
  1276.         RaceParticipant[i]=0;
  1277.         gPlayerProgress[i]=0;
  1278.     }
  1279.     RaceActive=0;
  1280.     RaceStart=0;
  1281.     Participants=0;
  1282.  
  1283.     Pot = 0;
  1284.     format(ystring,sizeof(ystring),"%s par %s - Meilleurs temps:",CRaceName,CBuilder);//BUG
  1285.     for(new i=0;i<MAX_PLAYERS;i++)
  1286.     {
  1287.         if(IsPlayerConnected(i))
  1288.         {
  1289.             SendClientMessage(i,COLOR_YELLOW,ystring);
  1290.         }
  1291.     }
  1292.     for(new i;i<5;i++)
  1293.     {
  1294.         if(TopRacerTimes[i] == 0)
  1295.         {
  1296.             format(ystring,sizeof(ystring),"%d. Inconnu",i+1);
  1297.         }
  1298.         else
  1299.         {
  1300.            format(ystring,sizeof(ystring),"%d. %s - %s",i+1,BeHuman(TopRacerTimes[i]),TopRacers[i]);//PB
  1301.         }
  1302.         for(new p=0;p<MAX_PLAYERS;p++)
  1303.         {
  1304.             if(IsPlayerConnected(p))
  1305.             {
  1306.                 SendClientMessage(p,COLOR_YELLOW,ystring);
  1307.             }
  1308.         }
  1309.     }
  1310.     SendClientMessageToAll(COLOR_YELLOW, "La course est terminée.");
  1311.     for(new i=0;i<MAX_PLAYERS;i++) {
  1312.         if(IsPlayerConnected(i)) {
  1313.             if(pplayer[i]==1) p1=0;
  1314.             if(pplayer[i]==2) p2=0;
  1315.             if(pplayer[i]==3) p3=0;
  1316.             if(pplayer[i]==4) p4=0;
  1317.             if(pplayer[i]==5) p5=0;
  1318.             if(pplayer[i]==6) p6=0;
  1319.             if(pplayer[i]==7) p7=0;
  1320.             if(pplayer[i]==8) p8=0;
  1321.             if(pplayer[i]==9) p9=0;
  1322.             if(pplayer[i]==10) p10=0;
  1323.             if(pplayer[i]==11) p11=0;
  1324.             if(pplayer[i]==12) p12=0;
  1325.             if(pplayer[i]==13) p13=0;
  1326.             if(pplayer[i]==14) p14=0;
  1327.             if(pplayer[i]==15) p15=0;
  1328.             if(pplayer[i]==16) p16=0;
  1329.             if(pplayer[i]==17) p17=0;
  1330.             if(pplayer[i]==18) p18=0;
  1331.             if(pplayer[i]==19) p19=0;
  1332.             if(pplayer[i]==20) p20=0;
  1333.             if(pplayer[i]==21) p21=0;
  1334.             if(pplayer[i]==22) p22=0;
  1335.             if(pplayer[i]==23) p23=0;
  1336.             if(pplayer[i]==24) p24=0;
  1337.             if(pplayer[i]==25) p25=0;
  1338.             if(pplayer[i]==26) p26=0;
  1339.             if(pplayer[i]==27) p27=0;
  1340.             if(pplayer[i]==28) p28=0;
  1341.             pplayer[i]=0;
  1342.         }
  1343.     }
  1344. }
  1345.  
  1346. public BActiveCP(playerid,sele)
  1347. {
  1348.     if(BCurrentCheckpoints[b(playerid)]-1 == sele) SetBRaceCheckpoint(playerid,sele,-1);
  1349.     else SetBRaceCheckpoint(playerid,sele,sele+1);
  1350. }
  1351.  
  1352. public RaceSound(playerid,sound)
  1353. {
  1354.     new Float:x,Float:y,Float:z;
  1355.     GetPlayerPos(playerid,x,y,z);
  1356.     PlayerPlaySound(playerid,sound,x,y,z);
  1357. }
  1358.  
  1359. public ReadyRefresh()
  1360. {
  1361.     SendClientMessageToAll(COLOR_GREEN,"La course est lancé, bonne chance au concurrent !");
  1362.     cd=5;
  1363.     Countdown = SetTimer("countdown",1000,1);
  1364. }
  1365.  
  1366. public mscountdown()
  1367. {
  1368.     if(RaceStart == 1 || MajStart == 0)
  1369.     {
  1370.         MajStart=0;
  1371.         KillTimer(MajStartTimer);
  1372.     }
  1373.     else
  1374.     {
  1375.         mscd-=10;
  1376.         if(mscd <= 0)
  1377.         {
  1378.             for(new i;i<MAX_PLAYERS;i++)
  1379.             {
  1380.                 if(RaceParticipant[i] != 3 && RaceParticipant[i] != 0)
  1381.                 {
  1382.                     GameTextForPlayer(i,"~r~You didn't make it in time!",6000,3);
  1383.                     DisablePlayerRaceCheckpoint(i);
  1384.                     RaceParticipant[i]=0;
  1385.                     Participants--;
  1386.                 }
  1387.                 else if (RaceParticipant[i]!=0) SendClientMessage(i,COLOR_GREEN,"Pre-race countdown done, the race beings!");
  1388.             }
  1389.             KillTimer(MajStartTimer);
  1390.             cd=5;
  1391.             Countdown = SetTimer("countdown",1000,1);
  1392.         }
  1393.         else
  1394.         {
  1395.  
  1396.             new hurry_string[64];
  1397.             format(ystring,sizeof(ystring),"~y~Race starting in ~w~%d~y~ seconds!",mscd);
  1398.             format(hurry_string,sizeof(hurry_string),"%s~n~~r~HURRY UP AND /READY",ystring);
  1399.             for(new i;i<MAX_PLAYERS;i++)
  1400.             {
  1401.                 if(RaceParticipant[i] < 3 && mscd < 31) GameTextForPlayer(i,hurry_string,6000,3);
  1402.                 else if(RaceParticipant[i] > 0) GameTextForPlayer(i,ystring,6000,3);
  1403.             }
  1404.         }
  1405.     }
  1406. }
  1407.  
  1408. public CheckBestLap(playerid,laptime)
  1409. {
  1410.     if(TopLapTimes[4]<laptime && TopLapTimes[4] != 0 || Racemode == 0)
  1411.     {
  1412.         return 0;  // If the laptime is more than the previous 5th on the top list, skip to end
  1413.     }              // Or the race is gamemode 0 where laps don't really apply
  1414.     for(new i;i<5;i++)
  1415.     {
  1416.         if(TopLapTimes[i] == 0)
  1417.         {
  1418.             new playername[MAX_PLAYER_NAME];
  1419.             GetPlayerName(playerid,playername,MAX_PLAYER_NAME);
  1420.             TopLappers[i]=playername;
  1421.             TopLapTimes[i]=laptime;
  1422.             ScoreChange=1;
  1423.             return i+1;
  1424.         }
  1425.         else if(TopLapTimes[i] > laptime)
  1426.         {
  1427.             for(new j=4;j>=i;j--)
  1428.             {
  1429.                 TopLapTimes[j+1]=TopLapTimes[j];
  1430.                 TopLappers[j+1]=TopLappers[j];
  1431.             }
  1432.             new playername[MAX_PLAYER_NAME];
  1433.             GetPlayerName(playerid,playername,MAX_PLAYER_NAME);
  1434.             TopLapTimes[i]=laptime;
  1435.             TopLappers[i]=playername;
  1436.             ScoreChange=1;
  1437.             return i+1;
  1438.         }
  1439.     }
  1440.     return -1; //Shouldn't get here.
  1441. }
  1442.  
  1443. public CheckBestRace(playerid,racetime)
  1444. {
  1445.     if(TopRacerTimes[4]<racetime && TopRacerTimes[4] != 0) return 0;
  1446.     for(new i;i<5;i++)
  1447.     {
  1448.         if(TopRacerTimes[i] == 0)
  1449.         {
  1450.             new playername[MAX_PLAYER_NAME];
  1451.             GetPlayerName(playerid,playername,MAX_PLAYER_NAME);
  1452.             TopRacers[i]=playername;
  1453.             TopRacerTimes[i]=racetime;
  1454.             ScoreChange=1;
  1455.             return i+1;
  1456.         }
  1457.         else if(TopRacerTimes[i] > racetime)
  1458.         {
  1459.             for(new j=4;j>=i;j--)
  1460.             {
  1461.                 TopRacerTimes[j+1]=TopRacerTimes[j];
  1462.                 TopRacers[j+1]=TopRacers[j];
  1463.             }
  1464.             new playername[MAX_PLAYER_NAME];
  1465.             GetPlayerName(playerid,playername,MAX_PLAYER_NAME);
  1466.             TopRacerTimes[i]=racetime;
  1467.             TopRacers[i]=playername;
  1468.             ScoreChange=1;
  1469.             return i+1;
  1470.         }
  1471.     }
  1472.     return -1; //Shouldn't get here.
  1473. }
  1474.  
  1475. public SaveScores()
  1476. {
  1477.     if(ScoreChange == 1)
  1478.     {
  1479.         fremove(CFile);
  1480.         new File:f,Float:x,Float:y,Float:z, templine[512];
  1481.         f = fopen(CFile,io_write);
  1482.         format(templine,sizeof(templine),"YRACE %d %s %d %d %d %f\n", RACEFILE_VERSION, CBuilder, ORacemode, ORacelaps, OAirrace, OCPsize);
  1483.         fwrite(f,templine);
  1484.         format(templine,sizeof(templine),"%s %d %s %d %s %d %s %d %s %d\n",
  1485.                 TopRacers[0],TopRacerTimes[0],TopRacers[1], TopRacerTimes[1], TopRacers[2],TopRacerTimes[2],
  1486.                 TopRacers[3],TopRacerTimes[3],TopRacers[4], TopRacerTimes[4]);
  1487.         fwrite(f,templine);
  1488.         format(templine,sizeof(templine),"%s %d %s %d %s %d %s %d %s %d\n",
  1489.                 TopLappers[0],TopLapTimes[0],TopLappers[1], TopLapTimes[1], TopLappers[2],TopLapTimes[2],
  1490.                 TopLappers[3],TopLapTimes[3],TopLappers[4], TopLapTimes[4]);
  1491.         fwrite(f,templine);
  1492.         for(new i = 0; i < LCurrentCheckpoint+1;i++)
  1493.         {
  1494.             x=RaceCheckpoints[i][0];
  1495.             y=RaceCheckpoints[i][1];
  1496.             z=RaceCheckpoints[i][2];
  1497.             format(templine,sizeof(templine),"%f %f %f\n",x,y,z);
  1498.             fwrite(f,templine);
  1499.         }
  1500.         fclose(f);
  1501.     }
  1502.     ScoreChange=0;
  1503. }
  1504. public ChangeLap(playerid)
  1505. {
  1506.     new LapTime, TimeString[64], checklap;
  1507.     LapTime=GetLapTick(playerid);
  1508.     TimeString=BeHuman(LapTime);
  1509.     format(ystring,sizeof(ystring),"~w~Lap %d/%d - time: %s", CurrentLap[playerid], Racelaps, TimeString);
  1510.     if(Racemode == ORacemode && ORacelaps == Racelaps)
  1511.     {
  1512.         checklap=CheckBestLap(playerid,LapTime);
  1513.         if(checklap==1) format(ystring,sizeof(ystring),"%s~n~~y~LAP RECORD!",ystring);
  1514.     }
  1515.     CurrentLap[playerid]++;
  1516.     if(CurrentLap[playerid] == Racelaps) format(ystring,sizeof(ystring),"%s~n~~g~Final lap!",ystring);
  1517.     GameTextForPlayer(playerid,ystring,6000,3);
  1518. }
  1519.  
  1520. BeHuman(ticks)
  1521. {
  1522.     new HumanTime[64], minutes, seconds, secstring[64], minstring[64];
  1523.     minutes=ticks/60000;
  1524.     ticks=ticks-(minutes*60000);
  1525.     seconds=ticks/1000;
  1526.     ticks=ticks-(seconds*1000);
  1527.     if(minutes <10) format(minstring,sizeof(minstring),"0%d",minutes);
  1528.     if(seconds <10) format(secstring,sizeof(secstring),"0%d",seconds);
  1529.     else format(secstring,sizeof(secstring),"%d",seconds);
  1530.     format(HumanTime,sizeof(HumanTime),"%d:%s",minutes,secstring);
  1531.     format(HumanTime,sizeof(HumanTime),"%s",HumanTime);
  1532.     return HumanTime;
  1533. }
  1534.  
  1535.  
  1536. public LoadTimes(playerid,timemode,tmp[])
  1537. {
  1538.     new temprace[67], idx;
  1539.     format(temprace,sizeof(temprace),"/fRace/%s.frace",tmp);
  1540.     if(strlen(tmp))
  1541.     {
  1542.         if(!fexist(temprace))
  1543.         {
  1544.             format(ystring,sizeof(ystring),"Race \'%s\' doesn't exist!",tmp);
  1545.             SendClientMessage(playerid,COLOR_YELLOW,ystring);
  1546.             return 1;
  1547.         }
  1548.         else
  1549.         {
  1550.             new File:f, templine[256], TBuilder[MAX_PLAYER_NAME], TempLapper[MAX_PLAYER_NAME], TempLap;
  1551.             idx=0;
  1552.             f = fopen(temprace, io_read);
  1553.             fread(f,templine,sizeof(templine)); // Read header-line
  1554.             if(templine[0] == 'Y') //Checking if the racefile is v0.2+
  1555.             {
  1556.                 new fileversion;
  1557.                 strtok(templine,idx); // read off YRACE
  1558.                 fileversion = strval(strtok(templine,idx)); // read off the file version
  1559.                 if(fileversion > RACEFILE_VERSION) // Check if the race is made with a newer version of the racefile format
  1560.                 {
  1561.                     format(ystring,sizeof(ystring),"Race \'%s\' is created with a newer version of YRACE, unable to load.",tmp);
  1562.                     SendClientMessage(playerid,COLOR_RED,ystring);
  1563.                     return 1;
  1564.                 }
  1565.                 TBuilder=strtok(templine,idx); // read off RACEBUILDER
  1566.                 fread(f,templine,sizeof(templine)); // read off best race times
  1567.                 if(timemode ==1) fread(f,templine,sizeof(templine)); // read off best lap times
  1568.                 idx=0;
  1569.                 if(timemode == 0) format(ystring,sizeof(ystring),"%s by %s - Meilleurs temps:",tmp,TBuilder);
  1570.                 else if(timemode == 1) format(ystring,sizeof(ystring),"%s by %s - Best laps:",tmp,TBuilder);
  1571.                 else return 1;
  1572.                 SendClientMessage(playerid,COLOR_GREEN,ystring);
  1573.                 for(new i=0;i<5;i++)
  1574.                 {
  1575.                     TempLapper=strtok(templine,idx);
  1576.                     TempLap=strval(strtok(templine,idx));
  1577.                     if(TempLap == 0)
  1578.                     {
  1579.                         format(ystring,sizeof(ystring),"%d. None yet",i+1);
  1580.                         i=6;
  1581.                     }
  1582.                     else format(ystring,sizeof(ystring),"%d. %s - %s",i+1,BeHuman(TempLap),TempLapper);
  1583.                     SendClientMessage(playerid,COLOR_GREEN,ystring);
  1584.                 }
  1585.                 return 1;
  1586.             }
  1587.             else
  1588.             {
  1589.                 format(ystring,sizeof(ystring),"Race \'%s\' doesn't contain any time data.",tmp);
  1590.                 SendClientMessage(playerid,COLOR_GREEN,ystring);
  1591.                 return 1;
  1592.             }
  1593.         }
  1594.     }
  1595.     return 0;
  1596. }
  1597.  
  1598. public IsNotAdmin(playerid)
  1599. {
  1600.     if (!IsPlayerAdmin(playerid))
  1601.     {
  1602.         SendClientMessage(playerid, COLOR_RED, "Tu dois être admin pour avoir droit a cet commande!");
  1603.         return 1;
  1604.     }
  1605.     return 0;
  1606. }
  1607. public GetBuilderSlot(playerid)
  1608. {
  1609.     for(new i;i < MAX_BUILDERS; i++)
  1610.     {
  1611.         if(!(BuilderSlots[i] < MAX_PLAYERS+1))
  1612.         {
  1613.             BuilderSlots[i] = playerid;
  1614.             RaceBuilders[playerid] = i+1;
  1615.             return i+1;
  1616.         }
  1617.     }
  1618.     return 0;
  1619. }
  1620.  
  1621. public b(playerid) return RaceBuilders[playerid]-1;
  1622.  
  1623. public Float:Distance(Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2)
  1624. {
  1625.     new Float:temp=floatsqroot((x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) + (z1-z2) * (z1-z2));
  1626.     if(temp < 0) temp=temp*(-1);
  1627.     return temp;
  1628. }
  1629.  
  1630. public clearrace(playerid)
  1631. {
  1632.     for(new i=0;i<BCurrentCheckpoints[b(playerid)];i++)
  1633.     {
  1634.         BRaceCheckpoints[b(playerid)][i][0]=0.0;
  1635.         BRaceCheckpoints[b(playerid)][i][1]=0.0;
  1636.         BRaceCheckpoints[b(playerid)][i][2]=0.0;
  1637.     }
  1638.     BCurrentCheckpoints[b(playerid)]=0;
  1639.     DisablePlayerRaceCheckpoint(playerid);
  1640.     SendClientMessage(playerid, COLOR_GREEN, "La course est supprimée !");
  1641.     BuilderSlots[b(playerid)] = MAX_PLAYERS+1;
  1642.     RaceBuilders[playerid]=0;
  1643. }
  1644.  
  1645.  
  1646. public startrace()
  1647. {
  1648.     if(GCourse == 1)
  1649.     {
  1650.         SendClientMessageToAll(COLOR_GREEN,"Une course en voitures va commencer, tapez /join pour la rejoindre !");
  1651.         esplarg = 3.5;
  1652.         esphaut = 10;
  1653.         CPsize = 14;
  1654.     }
  1655.     else if(GCourse == 2)
  1656.     {
  1657.         SendClientMessageToAll(COLOR_GREEN,"Une course en motos va commencer, tapez /join pour la rejoindre !");
  1658.         esplarg = 3;
  1659.         esphaut = 5;
  1660.         CPsize = 7;
  1661.     }
  1662.     else if(GCourse == 3)
  1663.     {
  1664.         SendClientMessageToAll(COLOR_GREEN,"Une course en bateaux va commencer, tapez /join pour la rejoindre !");
  1665.         esplarg = 6;
  1666.         esphaut = 15;
  1667.         CPsize = 30;
  1668.     }
  1669.     else if(GCourse == 4)
  1670.     {
  1671.         SendClientMessageToAll(COLOR_GREEN,"Une course en sandking va commencer, tapez /join pour la rejoindre !");
  1672.         esplarg = 3.5;
  1673.         esphaut = 10;
  1674.         CPsize = 14;
  1675.     }
  1676.     else if(GCourse == 5)
  1677.     {
  1678.         SendClientMessageToAll(COLOR_GREEN,"Une course aerienne va commencer, tapez /join pour la rejoindre !");
  1679.         esplarg = 15;
  1680.         esphaut = 20;
  1681.         Airrace = 1;
  1682.         CPsize = 15;
  1683.     }
  1684.     else if(GCourse > 5)
  1685.     {
  1686.         SendClientMessageToAll(COLOR_GREEN,"Une course va commencer, tapez /join pour la rejoindre !");
  1687.         esplarg = 5;
  1688.         esphaut = 10;
  1689.         CPsize = 14;
  1690.     }
  1691.     RaceStart=0;
  1692.     RaceActive=1;
  1693.     ScoreChange=0;
  1694.     Ranking=1;
  1695. }
  1696.  
  1697.  
  1698. public LoadRace(tmp[])
  1699. {
  1700.     new race_name[32],templine[512];
  1701.     format(CRaceName,sizeof(CRaceName), "%s",tmp);
  1702.     format(race_name,sizeof(race_name), "/fRace/%s.frace",tmp);
  1703.     if(!fexist(race_name)) return -1; // File doesn't exist
  1704.     CFile=race_name;
  1705.     LCurrentCheckpoint=-1; RLenght=0; RLenght=0;
  1706.     new File:f, i;
  1707.     f = fopen(race_name, io_read);
  1708.     fread(f,templine,sizeof(templine));
  1709.     if(templine[0] == 'Y') //Checking if the racefile is v0.2+
  1710.     {
  1711.         new fileversion;
  1712.         strtok(templine,i); // read off YRACE
  1713.         fileversion = strval(strtok(templine,i)); // read off the file version
  1714.         if(fileversion > RACEFILE_VERSION) return -2; // Check if the race is made with a newer version of the racefile format
  1715.         CBuilder=strtok(templine,i); // read off RACEBUILDER
  1716.         ORacemode = strval(strtok(templine,i)); // read off racemode
  1717.         ORacelaps = strval(strtok(templine,i)); // read off amount of laps
  1718.         if(fileversion > 1)
  1719.         {
  1720.             Airrace = strval(strtok(templine,i));   // read off airrace
  1721.             CPsize = floatstr(strtok(templine,i));    // read off CP size
  1722.         }
  1723.         else // v1 file format, set to default
  1724.         {
  1725.             Airrace = 0;
  1726.             CPsize = 8.0;
  1727.         }
  1728.         OAirrace = Airrace;
  1729.         OCPsize = CPsize;
  1730.         Racemode=ORacemode; Racelaps=ORacelaps; //Allows changing the modes, but disables highscores if they've been changed.
  1731.         fread(f,templine,sizeof(templine)); // read off best race times
  1732.         i=0;
  1733.         for(new j=0;j<5;j++)
  1734.         {
  1735.             TopRacers[j]=strtok(templine,i);
  1736.             TopRacerTimes[j]=strval(strtok(templine,i));
  1737.         }
  1738.         fread(f,templine,sizeof(templine)); // read off best lap times
  1739.         i=0;
  1740.         for(new j=0;j<5;j++)
  1741.         {
  1742.             TopLappers[j]=strtok(templine,i);
  1743.             TopLapTimes[j]=strval(strtok(templine,i));
  1744.         }
  1745.     }
  1746.     else //Otherwise add the lines as checkpoints, the file is made with v0.1 (or older) version of the script.
  1747.     {
  1748.         LCurrentCheckpoint++;
  1749.         RaceCheckpoints[LCurrentCheckpoint][0] = floatstr(strtok(templine,i));
  1750.         RaceCheckpoints[LCurrentCheckpoint][1] = floatstr(strtok(templine,i));
  1751.         RaceCheckpoints[LCurrentCheckpoint][2] = floatstr(strtok(templine,i));
  1752.         Racemode=0; ORacemode=0; Racelaps=0; ORacelaps=0;   //Enables converting old files to new versions
  1753.         CPsize = 8.0; Airrace = 0;              // v2 additions
  1754.         OCPsize = CPsize; OAirrace = Airrace;   // v2 additions
  1755.         CBuilder="UNKNOWN";
  1756.         for(new j;j<5;j++)
  1757.         {
  1758.             TopLappers[j]="A"; TopLapTimes[j]=0; TopRacers[j]="A"; TopRacerTimes[j]=0;
  1759.         }
  1760.     }
  1761.     while(fread(f,templine,sizeof(templine),false))
  1762.     {
  1763.         LCurrentCheckpoint++;
  1764.         i=0;
  1765.         RaceCheckpoints[LCurrentCheckpoint][0] = floatstr(strtok(templine,i));
  1766.         RaceCheckpoints[LCurrentCheckpoint][1] = floatstr(strtok(templine,i));
  1767.         RaceCheckpoints[LCurrentCheckpoint][2] = floatstr(strtok(templine,i));
  1768.         if(LCurrentCheckpoint >= 1)
  1769.         {
  1770.             RLenght+=Distance(RaceCheckpoints[LCurrentCheckpoint][0],RaceCheckpoints[LCurrentCheckpoint][1],
  1771.                                 RaceCheckpoints[LCurrentCheckpoint][2],RaceCheckpoints[LCurrentCheckpoint-1][0],
  1772.                                 RaceCheckpoints[LCurrentCheckpoint-1][1],RaceCheckpoints[LCurrentCheckpoint-1][2]);
  1773.         }
  1774.     }
  1775.     LLenght = RLenght + Distance(RaceCheckpoints[LCurrentCheckpoint][0],RaceCheckpoints[LCurrentCheckpoint][1],
  1776.                                 RaceCheckpoints[LCurrentCheckpoint][2],RaceCheckpoints[0][0],RaceCheckpoints[0][1],
  1777.                                 RaceCheckpoints[0][2]);
  1778.     fclose(f);
  1779.     return 1;
  1780. }
  1781.  
  1782. public RaceRotation()
  1783. {
  1784.     if(!fexist("yrace.rr"))
  1785.     {
  1786.         printf("ERROR in  YRACE's Race Rotation (yrace.rr): yrace.rr doesn't exist!");
  1787.         return -1;
  1788.     }
  1789.  
  1790.     if(RRotation == -1)
  1791.     {
  1792.         KillTimer(RotationTimer);
  1793.         return -1; // RRotation has been disabled
  1794.     }
  1795.     if(Participants > 0) return 1; // A race is still active.
  1796.  
  1797.     new File:f, templine[32], rotfile[]="yrace.rr", rraces=-1, rracenames[32][32], idx, fback;
  1798.     f = fopen(rotfile, io_read);
  1799.     while(fread(f,templine,sizeof(templine),false))
  1800.     {
  1801.         idx = 0;
  1802.         rraces++;
  1803.         rracenames[rraces]=strtok(templine,idx);
  1804.     }
  1805.     fclose(f);
  1806.     RRotation++;
  1807.     if(RRotation > rraces) RRotation = 0;
  1808.     fback = LoadRace(rracenames[RRotation]);
  1809.     if(fback == -1) printf("ERROR in YRACE's Race Rotation (yrace.rr): Race \'%s\' doesn't exist!",rracenames[RRotation]);
  1810.     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]);
  1811.     else startrace();
  1812.     return 1;
  1813. }
  1814.  
  1815. public Pol1(playerid)
  1816. {
  1817.     xr[playerid]=RaceCheckpoints[0][0];
  1818.     yr[playerid]=RaceCheckpoints[0][1];
  1819.     zr[playerid]=RaceCheckpoints[0][2]+5;
  1820.     if(IsPlayerInAnyVehicle(playerid)) {
  1821.         new vehicleid=GetPlayerVehicleID(playerid);
  1822.         SetVehiclePos(vehicleid,xr[playerid],yr[playerid],zr[playerid]);
  1823.         SetVehicleZAngle(vehicleid,Angle);
  1824.         SetCameraBehindPlayer(playerid);
  1825.     }
  1826.     else {
  1827.         SetPlayerPos(playerid,zr[playerid],yr[playerid],zr[playerid]);
  1828.         SetPlayerFacingAngle(playerid,Angle);
  1829.         SetCameraBehindPlayer(playerid);
  1830.     }
  1831.     p1=1;
  1832.     pplayer[playerid]=1;
  1833.     if(IsPlayerInAnyVehicle(playerid))
  1834.     {
  1835.         GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle1[playerid]);
  1836.         GetVehiclePos(GetPlayerVehicleID(playerid), X1[playerid], Y1[playerid], Z1[playerid]);
  1837.     }
  1838.     else
  1839.     {
  1840.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  1841.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  1842.     }
  1843.     return 1;
  1844. }
  1845.  
  1846. public Pol2(playerid)
  1847. {
  1848.     xr[playerid]=RaceCheckpoints[0][0];
  1849.     yr[playerid]=RaceCheckpoints[0][1];
  1850.     zr[playerid]=RaceCheckpoints[0][2]+5;
  1851.     xr[playerid] += ((esplarg*1) * floatsin(-a, degrees));
  1852.     yr[playerid] += ((esplarg*1) * floatcos(-a, degrees));
  1853.     if(IsPlayerInAnyVehicle(playerid)) {
  1854.         new vehicleid=GetPlayerVehicleID(playerid);
  1855.         SetVehiclePos(vehicleid,xr[playerid],yr[playerid],zr[playerid]);
  1856.         SetVehicleZAngle(vehicleid,Angle);
  1857.         SetCameraBehindPlayer(playerid);
  1858.     }
  1859.     else {
  1860.         SetPlayerPos(playerid,zr[playerid],yr[playerid],zr[playerid]);
  1861.         SetPlayerFacingAngle(playerid,Angle);
  1862.         SetCameraBehindPlayer(playerid);
  1863.     }
  1864.     p2=1;
  1865.     pplayer[playerid]=2;
  1866.     if(IsPlayerInAnyVehicle(playerid))
  1867.     {
  1868.         GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle1[playerid]);
  1869.         GetVehiclePos(GetPlayerVehicleID(playerid), X1[playerid], Y1[playerid], Z1[playerid]);
  1870.     }
  1871.     else
  1872.     {
  1873.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  1874.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  1875.     }
  1876.     return 1;
  1877. }
  1878.  
  1879. public Pol3(playerid)
  1880. {
  1881.     xr[playerid]=RaceCheckpoints[0][0];
  1882.     yr[playerid]=RaceCheckpoints[0][1];
  1883.     zr[playerid]=RaceCheckpoints[0][2]+5;
  1884.     xr[playerid] -= ((esplarg*1) * floatsin(-a, degrees));
  1885.     yr[playerid] -= ((esplarg*1) * floatcos(-a, degrees));
  1886.     if(IsPlayerInAnyVehicle(playerid)) {
  1887.         new vehicleid=GetPlayerVehicleID(playerid);
  1888.         SetVehiclePos(vehicleid,xr[playerid],yr[playerid],zr[playerid]);
  1889.         SetVehicleZAngle(vehicleid,Angle);
  1890.         SetCameraBehindPlayer(playerid);
  1891.     }
  1892.     else {
  1893.         SetPlayerPos(playerid,zr[playerid],yr[playerid],zr[playerid]);
  1894.         SetPlayerFacingAngle(playerid,Angle);
  1895.         SetCameraBehindPlayer(playerid);
  1896.     }
  1897.     p3=1;
  1898.     pplayer[playerid]=3;
  1899.     if(IsPlayerInAnyVehicle(playerid))
  1900.     {
  1901.         GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle1[playerid]);
  1902.         GetVehiclePos(GetPlayerVehicleID(playerid), X1[playerid], Y1[playerid], Z1[playerid]);
  1903.     }
  1904.     else
  1905.     {
  1906.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  1907.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  1908.     }
  1909.     return 1;
  1910. }
  1911.  
  1912. public Pol4(playerid)
  1913. {
  1914.     xr[playerid]=RaceCheckpoints[0][0];
  1915.     yr[playerid]=RaceCheckpoints[0][1];
  1916.     zr[playerid]=RaceCheckpoints[0][2]+5;
  1917.     xr[playerid] += ((esplarg*2) * floatsin(-a, degrees));
  1918.     yr[playerid] += ((esplarg*2) * floatcos(-a, degrees));
  1919.     if(IsPlayerInAnyVehicle(playerid)) {
  1920.         new vehicleid=GetPlayerVehicleID(playerid);
  1921.         SetVehiclePos(vehicleid,xr[playerid],yr[playerid],zr[playerid]);
  1922.         SetVehicleZAngle(vehicleid,Angle);
  1923.         SetCameraBehindPlayer(playerid);
  1924.     }
  1925.     else {
  1926.         SetPlayerPos(playerid,zr[playerid],yr[playerid],zr[playerid]);
  1927.         SetPlayerFacingAngle(playerid,Angle);
  1928.         SetCameraBehindPlayer(playerid);
  1929.     }
  1930.     p4=1;
  1931.     pplayer[playerid]=4;
  1932.     if(IsPlayerInAnyVehicle(playerid))
  1933.     {
  1934.         GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle1[playerid]);
  1935.         GetVehiclePos(GetPlayerVehicleID(playerid), X1[playerid], Y1[playerid], Z1[playerid]);
  1936.     }
  1937.     else
  1938.     {
  1939.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  1940.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  1941.     }
  1942.     return 1;
  1943. }
  1944.  
  1945. public Pol5(playerid)
  1946. {
  1947.     xr[playerid]=RaceCheckpoints[0][0];
  1948.     yr[playerid]=RaceCheckpoints[0][1];
  1949.     zr[playerid]=RaceCheckpoints[0][2]+5;
  1950.     xr[playerid] -= ((esplarg*2) * floatsin(-a, degrees));
  1951.     yr[playerid] -= ((esplarg*2) * floatcos(-a, degrees));
  1952.     if(IsPlayerInAnyVehicle(playerid)) {
  1953.         new vehicleid=GetPlayerVehicleID(playerid);
  1954.         SetVehiclePos(vehicleid,xr[playerid],yr[playerid],zr[playerid]);
  1955.         SetVehicleZAngle(vehicleid,Angle);
  1956.         SetCameraBehindPlayer(playerid);
  1957.     }
  1958.     else {
  1959.         SetPlayerPos(playerid,zr[playerid],yr[playerid],zr[playerid]);
  1960.         SetPlayerFacingAngle(playerid,Angle);
  1961.         SetCameraBehindPlayer(playerid);
  1962.     }
  1963.     p5=1;
  1964.     pplayer[playerid]=5;
  1965.     if(IsPlayerInAnyVehicle(playerid))
  1966.     {
  1967.         GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle1[playerid]);
  1968.         GetVehiclePos(GetPlayerVehicleID(playerid), X1[playerid], Y1[playerid], Z1[playerid]);
  1969.     }
  1970.     else
  1971.     {
  1972.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  1973.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  1974.     }
  1975.     return 1;
  1976. }
  1977.  
  1978. public Pol6(playerid)
  1979. {
  1980.     xr[playerid]=RaceCheckpoints[0][0];
  1981.     yr[playerid]=RaceCheckpoints[0][1];
  1982.     zr[playerid]=RaceCheckpoints[0][2]+5;
  1983.     xr[playerid] += ((esplarg*3) * floatsin(-a, degrees));
  1984.     yr[playerid] += ((esplarg*3) * floatcos(-a, degrees));
  1985.     if(IsPlayerInAnyVehicle(playerid)) {
  1986.         new vehicleid=GetPlayerVehicleID(playerid);
  1987.         SetVehiclePos(vehicleid,xr[playerid],yr[playerid],zr[playerid]);
  1988.         SetVehicleZAngle(vehicleid,Angle);
  1989.         SetCameraBehindPlayer(playerid);
  1990.     }
  1991.     else {
  1992.         SetPlayerPos(playerid,zr[playerid],yr[playerid],zr[playerid]);
  1993.         SetPlayerFacingAngle(playerid,Angle);
  1994.         SetCameraBehindPlayer(playerid);
  1995.     }
  1996.     p6=1;
  1997.     pplayer[playerid]=6;
  1998.     if(IsPlayerInAnyVehicle(playerid))
  1999.     {
  2000.         GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle1[playerid]);
  2001.         GetVehiclePos(GetPlayerVehicleID(playerid), X1[playerid], Y1[playerid], Z1[playerid]);
  2002.     }
  2003.     else
  2004.     {
  2005.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  2006.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  2007.     }
  2008.     return 1;
  2009. }
  2010.  
  2011. public Pol7(playerid)
  2012. {
  2013.     xr[playerid]=RaceCheckpoints[0][0];
  2014.     yr[playerid]=RaceCheckpoints[0][1];
  2015.     zr[playerid]=RaceCheckpoints[0][2]+5;
  2016.     xr[playerid] -= ((esplarg*3) * floatsin(-a, degrees));
  2017.     yr[playerid] -= ((esplarg*3) * floatcos(-a, degrees));
  2018.     if(IsPlayerInAnyVehicle(playerid)) {
  2019.         new vehicleid=GetPlayerVehicleID(playerid);
  2020.         SetVehiclePos(vehicleid,xr[playerid],yr[playerid],zr[playerid]);
  2021.         SetVehicleZAngle(vehicleid,Angle);
  2022.         SetCameraBehindPlayer(playerid);
  2023.     }
  2024.     else {
  2025.         SetPlayerPos(playerid,zr[playerid],yr[playerid],zr[playerid]);
  2026.         SetPlayerFacingAngle(playerid,Angle);
  2027.         SetCameraBehindPlayer(playerid);
  2028.     }
  2029.     p7=1;
  2030.     pplayer[playerid]=7;
  2031.     if(IsPlayerInAnyVehicle(playerid))
  2032.     {
  2033.         GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle1[playerid]);
  2034.         GetVehiclePos(GetPlayerVehicleID(playerid), X1[playerid], Y1[playerid], Z1[playerid]);
  2035.     }
  2036.     else
  2037.     {
  2038.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  2039.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  2040.     }
  2041.     return 1;
  2042. }
  2043.  
  2044. public Pol8(playerid)
  2045. {
  2046.     xr[playerid]=RaceCheckpoints[0][0];
  2047.     yr[playerid]=RaceCheckpoints[0][1];
  2048.     zr[playerid]=RaceCheckpoints[0][2]+5;
  2049.     xr[playerid] -= ((esphaut*1) * floatsin(-Angle, degrees));
  2050.     yr[playerid] -= ((esphaut*1) * floatcos(-Angle, degrees));
  2051.     if(IsPlayerInAnyVehicle(playerid)) {
  2052.         new vehicleid=GetPlayerVehicleID(playerid);
  2053.         SetVehiclePos(vehicleid,xr[playerid],yr[playerid],zr[playerid]);
  2054.         SetVehicleZAngle(vehicleid,Angle);
  2055.         SetCameraBehindPlayer(playerid);
  2056.     }
  2057.     else {
  2058.         SetPlayerPos(playerid,zr[playerid],yr[playerid],zr[playerid]);
  2059.         SetPlayerFacingAngle(playerid,Angle);
  2060.         SetCameraBehindPlayer(playerid);
  2061.     }
  2062.     p8=1;
  2063.     pplayer[playerid]=8;
  2064.     if(IsPlayerInAnyVehicle(playerid))
  2065.     {
  2066.         GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle1[playerid]);
  2067.         GetVehiclePos(GetPlayerVehicleID(playerid), X1[playerid], Y1[playerid], Z1[playerid]);
  2068.     }
  2069.     else
  2070.     {
  2071.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  2072.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  2073.     }
  2074.     return 1;
  2075. }
  2076.  
  2077. public Pol9(playerid)
  2078. {
  2079.     xr[playerid]=RaceCheckpoints[0][0];
  2080.     yr[playerid]=RaceCheckpoints[0][1];
  2081.     zr[playerid]=RaceCheckpoints[0][2]+5;
  2082.     xr[playerid] -= ((esphaut*1) * floatsin(-Angle, degrees));
  2083.     yr[playerid] -= ((esphaut*1) * floatcos(-Angle, degrees));
  2084.     xr[playerid] += ((esplarg*1) * floatsin(-a, degrees));
  2085.     yr[playerid] += ((esplarg*1) * floatcos(-a, degrees));
  2086.     if(IsPlayerInAnyVehicle(playerid)) {
  2087.         new vehicleid=GetPlayerVehicleID(playerid);
  2088.         SetVehiclePos(vehicleid,xr[playerid],yr[playerid],zr[playerid]);
  2089.         SetVehicleZAngle(vehicleid,Angle);
  2090.         SetCameraBehindPlayer(playerid);
  2091.     }
  2092.     else {
  2093.         SetPlayerPos(playerid,zr[playerid],yr[playerid],zr[playerid]);
  2094.         SetPlayerFacingAngle(playerid,Angle);
  2095.         SetCameraBehindPlayer(playerid);
  2096.     }
  2097.     p9=1;
  2098.     pplayer[playerid]=9;
  2099.     if(IsPlayerInAnyVehicle(playerid))
  2100.     {
  2101.         GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle1[playerid]);
  2102.         GetVehiclePos(GetPlayerVehicleID(playerid), X1[playerid], Y1[playerid], Z1[playerid]);
  2103.     }
  2104.     else
  2105.     {
  2106.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  2107.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  2108.     }
  2109.     return 1;
  2110. }
  2111.  
  2112. public Pol10(playerid)
  2113. {
  2114.     xr[playerid]=RaceCheckpoints[0][0];
  2115.     yr[playerid]=RaceCheckpoints[0][1];
  2116.     zr[playerid]=RaceCheckpoints[0][2]+5;
  2117.     xr[playerid] -= ((esphaut*1) * floatsin(-Angle, degrees));
  2118.     yr[playerid] -= ((esphaut*1) * floatcos(-Angle, degrees));
  2119.     xr[playerid] -= ((esplarg*1) * floatsin(-a, degrees));
  2120.     yr[playerid] -= ((esplarg*1) * floatcos(-a, degrees));
  2121.     if(IsPlayerInAnyVehicle(playerid)) {
  2122.         new vehicleid=GetPlayerVehicleID(playerid);
  2123.         SetVehiclePos(vehicleid,xr[playerid],yr[playerid],zr[playerid]);
  2124.         SetVehicleZAngle(vehicleid,Angle);
  2125.         SetCameraBehindPlayer(playerid);
  2126.     }
  2127.     else {
  2128.         SetPlayerPos(playerid,zr[playerid],yr[playerid],zr[playerid]);
  2129.         SetPlayerFacingAngle(playerid,Angle);
  2130.         SetCameraBehindPlayer(playerid);
  2131.     }
  2132.     p10=1;
  2133.     pplayer[playerid]=10;
  2134.     if(IsPlayerInAnyVehicle(playerid))
  2135.     {
  2136.         GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle1[playerid]);
  2137.         GetVehiclePos(GetPlayerVehicleID(playerid), X1[playerid], Y1[playerid], Z1[playerid]);
  2138.     }
  2139.     else
  2140.     {
  2141.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  2142.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  2143.     }
  2144.     return 1;
  2145. }
  2146.  
  2147. public Pol11(playerid)
  2148. {
  2149.     xr[playerid]=RaceCheckpoints[0][0];
  2150.     yr[playerid]=RaceCheckpoints[0][1];
  2151.     zr[playerid]=RaceCheckpoints[0][2]+5;
  2152.     xr[playerid] -= ((esphaut*1) * floatsin(-Angle, degrees));
  2153.     yr[playerid] -= ((esphaut*1) * floatcos(-Angle, degrees));
  2154.     xr[playerid] += ((esplarg*2) * floatsin(-a, degrees));
  2155.     yr[playerid] += ((esplarg*2) * floatcos(-a, degrees));
  2156.     if(IsPlayerInAnyVehicle(playerid)) {
  2157.         new vehicleid=GetPlayerVehicleID(playerid);
  2158.         SetVehiclePos(vehicleid,xr[playerid],yr[playerid],zr[playerid]);
  2159.         SetVehicleZAngle(vehicleid,Angle);
  2160.         SetCameraBehindPlayer(playerid);
  2161.     }
  2162.     else {
  2163.         SetPlayerPos(playerid,zr[playerid],yr[playerid],zr[playerid]);
  2164.         SetPlayerFacingAngle(playerid,Angle);
  2165.         SetCameraBehindPlayer(playerid);
  2166.     }
  2167.     p11=1;
  2168.     pplayer[playerid]=11;
  2169.     if(IsPlayerInAnyVehicle(playerid))
  2170.     {
  2171.         GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle1[playerid]);
  2172.         GetVehiclePos(GetPlayerVehicleID(playerid), X1[playerid], Y1[playerid], Z1[playerid]);
  2173.     }
  2174.     else
  2175.     {
  2176.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  2177.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  2178.     }
  2179.     return 1;
  2180. }
  2181.  
  2182. public Pol12(playerid)
  2183. {
  2184.     xr[playerid]=RaceCheckpoints[0][0];
  2185.     yr[playerid]=RaceCheckpoints[0][1];
  2186.     zr[playerid]=RaceCheckpoints[0][2]+5;
  2187.     xr[playerid] -= ((esphaut*1) * floatsin(-Angle, degrees));
  2188.     yr[playerid] -= ((esphaut*1) * floatcos(-Angle, degrees));
  2189.     xr[playerid] -= ((esplarg*2) * floatsin(-a, degrees));
  2190.     yr[playerid] -= ((esplarg*2) * floatcos(-a, degrees));
  2191.     if(IsPlayerInAnyVehicle(playerid)) {
  2192.         new vehicleid=GetPlayerVehicleID(playerid);
  2193.         SetVehiclePos(vehicleid,xr[playerid],yr[playerid],zr[playerid]);
  2194.         SetVehicleZAngle(vehicleid,Angle);
  2195.         SetCameraBehindPlayer(playerid);
  2196.     }
  2197.     else {
  2198.         SetPlayerPos(playerid,zr[playerid],yr[playerid],zr[playerid]);
  2199.         SetPlayerFacingAngle(playerid,Angle);
  2200.         SetCameraBehindPlayer(playerid);
  2201.     }
  2202.     p12=1;
  2203.     pplayer[playerid]=12;
  2204.     if(IsPlayerInAnyVehicle(playerid))
  2205.     {
  2206.         GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle1[playerid]);
  2207.         GetVehiclePos(GetPlayerVehicleID(playerid), X1[playerid], Y1[playerid], Z1[playerid]);
  2208.     }
  2209.     else
  2210.     {
  2211.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  2212.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  2213.     }
  2214.     return 1;
  2215. }
  2216.  
  2217. public Pol13(playerid)
  2218. {
  2219.     xr[playerid]=RaceCheckpoints[0][0];
  2220.     yr[playerid]=RaceCheckpoints[0][1];
  2221.     zr[playerid]=RaceCheckpoints[0][2]+5;
  2222.     xr[playerid] -= ((esphaut*1) * floatsin(-Angle, degrees));
  2223.     yr[playerid] -= ((esphaut*1) * floatcos(-Angle, degrees));
  2224.     xr[playerid] += ((esplarg*3) * floatsin(-a, degrees));
  2225.     yr[playerid] += ((esplarg*3) * floatcos(-a, degrees));
  2226.     if(IsPlayerInAnyVehicle(playerid)) {
  2227.         new vehicleid=GetPlayerVehicleID(playerid);
  2228.         SetVehiclePos(vehicleid,xr[playerid],yr[playerid],zr[playerid]);
  2229.         SetVehicleZAngle(vehicleid,Angle);
  2230.         SetCameraBehindPlayer(playerid);
  2231.     }
  2232.     else {
  2233.         SetPlayerPos(playerid,zr[playerid],yr[playerid],zr[playerid]);
  2234.         SetPlayerFacingAngle(playerid,Angle);
  2235.         SetCameraBehindPlayer(playerid);
  2236.     }
  2237.     p13=1;
  2238.     pplayer[playerid]=13;
  2239.     if(IsPlayerInAnyVehicle(playerid))
  2240.     {
  2241.         GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle1[playerid]);
  2242.         GetVehiclePos(GetPlayerVehicleID(playerid), X1[playerid], Y1[playerid], Z1[playerid]);
  2243.     }
  2244.     else
  2245.     {
  2246.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  2247.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  2248.     }
  2249.     return 1;
  2250. }
  2251.  
  2252. public Pol14(playerid)
  2253. {
  2254.     xr[playerid]=RaceCheckpoints[0][0];
  2255.     yr[playerid]=RaceCheckpoints[0][1];
  2256.     zr[playerid]=RaceCheckpoints[0][2]+5;
  2257.     xr[playerid] -= ((esphaut*1) * floatsin(-Angle, degrees));
  2258.     yr[playerid] -= ((esphaut*1) * floatcos(-Angle, degrees));
  2259.     xr[playerid] -= ((esplarg*3) * floatsin(-a, degrees));
  2260.     yr[playerid] -= ((esplarg*3) * floatcos(-a, degrees));
  2261.     if(IsPlayerInAnyVehicle(playerid)) {
  2262.         new vehicleid=GetPlayerVehicleID(playerid);
  2263.         SetVehiclePos(vehicleid,xr[playerid],yr[playerid],zr[playerid]);
  2264.         SetVehicleZAngle(vehicleid,Angle);
  2265.         SetCameraBehindPlayer(playerid);
  2266.     }
  2267.     else {
  2268.         SetPlayerPos(playerid,zr[playerid],yr[playerid],zr[playerid]);
  2269.         SetPlayerFacingAngle(playerid,Angle);
  2270.         SetCameraBehindPlayer(playerid);
  2271.     }
  2272.     p14=1;
  2273.     pplayer[playerid]=14;
  2274.     if(IsPlayerInAnyVehicle(playerid))
  2275.     {
  2276.         GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle1[playerid]);
  2277.         GetVehiclePos(GetPlayerVehicleID(playerid), X1[playerid], Y1[playerid], Z1[playerid]);
  2278.     }
  2279.     else
  2280.     {
  2281.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  2282.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  2283.     }
  2284.     return 1;
  2285. }
  2286.  
  2287. public Pol15(playerid)
  2288. {
  2289.     xr[playerid]=RaceCheckpoints[0][0];
  2290.     yr[playerid]=RaceCheckpoints[0][1];
  2291.     zr[playerid]=RaceCheckpoints[0][2]+5;
  2292.     xr[playerid] -= ((esphaut*2) * floatsin(-Angle, degrees));
  2293.     yr[playerid] -= ((esphaut*2) * floatcos(-Angle, degrees));
  2294.     if(IsPlayerInAnyVehicle(playerid)) {
  2295.         new vehicleid=GetPlayerVehicleID(playerid);
  2296.         SetVehiclePos(vehicleid,xr[playerid],yr[playerid],zr[playerid]);
  2297.         SetVehicleZAngle(vehicleid,Angle);
  2298.         SetCameraBehindPlayer(playerid);
  2299.     }
  2300.     else {
  2301.         SetPlayerPos(playerid,zr[playerid],yr[playerid],zr[playerid]);
  2302.         SetPlayerFacingAngle(playerid,Angle);
  2303.         SetCameraBehindPlayer(playerid);
  2304.     }
  2305.     p15=1;
  2306.     pplayer[playerid]=15;
  2307.     if(IsPlayerInAnyVehicle(playerid))
  2308.     {
  2309.         GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle1[playerid]);
  2310.         GetVehiclePos(GetPlayerVehicleID(playerid), X1[playerid], Y1[playerid], Z1[playerid]);
  2311.     }
  2312.     else
  2313.     {
  2314.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  2315.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  2316.     }
  2317.     return 1;
  2318.    
  2319. }
  2320.  
  2321. public Pol16(playerid)
  2322. {
  2323.     xr[playerid]=RaceCheckpoints[0][0];
  2324.     yr[playerid]=RaceCheckpoints[0][1];
  2325.     zr[playerid]=RaceCheckpoints[0][2]+5;
  2326.     xr[playerid] -= ((esphaut*2) * floatsin(-Angle, degrees));
  2327.     yr[playerid] -= ((esphaut*2) * floatcos(-Angle, degrees));
  2328.     xr[playerid] += ((esplarg*1) * floatsin(-a, degrees));
  2329.     yr[playerid] += ((esplarg*1) * floatcos(-a, degrees));
  2330.     if(IsPlayerInAnyVehicle(playerid)) {
  2331.         new vehicleid=GetPlayerVehicleID(playerid);
  2332.         SetVehiclePos(vehicleid,xr[playerid],yr[playerid],zr[playerid]);
  2333.         SetVehicleZAngle(vehicleid,Angle);
  2334.         SetCameraBehindPlayer(playerid);
  2335.     }
  2336.     else {
  2337.         SetPlayerPos(playerid,zr[playerid],yr[playerid],zr[playerid]);
  2338.         SetPlayerFacingAngle(playerid,Angle);
  2339.         SetCameraBehindPlayer(playerid);
  2340.     }
  2341.     p16=1;
  2342.     pplayer[playerid]=16;
  2343.     if(IsPlayerInAnyVehicle(playerid))
  2344.     {
  2345.         GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle1[playerid]);
  2346.         GetVehiclePos(GetPlayerVehicleID(playerid), X1[playerid], Y1[playerid], Z1[playerid]);
  2347.     }
  2348.     else
  2349.     {
  2350.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  2351.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  2352.     }
  2353.     return 1;
  2354. }
  2355.  
  2356. public Pol17(playerid)
  2357. {
  2358.     xr[playerid]=RaceCheckpoints[0][0];
  2359.     yr[playerid]=RaceCheckpoints[0][1];
  2360.     zr[playerid]=RaceCheckpoints[0][2]+5;
  2361.     xr[playerid] -= ((esphaut*2) * floatsin(-Angle, degrees));
  2362.     yr[playerid] -= ((esphaut*2) * floatcos(-Angle, degrees));
  2363.     xr[playerid] -= ((esplarg*1) * floatsin(-a, degrees));
  2364.     yr[playerid] -= ((esplarg*1) * floatcos(-a, degrees));
  2365.     if(IsPlayerInAnyVehicle(playerid)) {
  2366.         new vehicleid=GetPlayerVehicleID(playerid);
  2367.         SetVehiclePos(vehicleid,xr[playerid],yr[playerid],zr[playerid]);
  2368.         SetVehicleZAngle(vehicleid,Angle);
  2369.         SetCameraBehindPlayer(playerid);
  2370.     }
  2371.     else {
  2372.         SetPlayerPos(playerid,zr[playerid],yr[playerid],zr[playerid]);
  2373.         SetPlayerFacingAngle(playerid,Angle);
  2374.         SetCameraBehindPlayer(playerid);
  2375.     }
  2376.     p17=1;
  2377.     pplayer[playerid]=17;
  2378.     if(IsPlayerInAnyVehicle(playerid))
  2379.     {
  2380.         GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle1[playerid]);
  2381.         GetVehiclePos(GetPlayerVehicleID(playerid), X1[playerid], Y1[playerid], Z1[playerid]);
  2382.     }
  2383.     else
  2384.     {
  2385.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  2386.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  2387.     }
  2388.     return 1;
  2389. }
  2390.  
  2391. public Pol18(playerid)
  2392. {
  2393.     xr[playerid]=RaceCheckpoints[0][0];
  2394.     yr[playerid]=RaceCheckpoints[0][1];
  2395.     zr[playerid]=RaceCheckpoints[0][2]+5;
  2396.     xr[playerid] -= ((esphaut*2) * floatsin(-Angle, degrees));
  2397.     yr[playerid] -= ((esphaut*2) * floatcos(-Angle, degrees));
  2398.     xr[playerid] += ((esplarg*2) * floatsin(-a, degrees));
  2399.     yr[playerid] += ((esplarg*2) * floatcos(-a, degrees));
  2400.     if(IsPlayerInAnyVehicle(playerid)) {
  2401.         new vehicleid=GetPlayerVehicleID(playerid);
  2402.         SetVehiclePos(vehicleid,xr[playerid],yr[playerid],zr[playerid]);
  2403.         SetVehicleZAngle(vehicleid,Angle);
  2404.         SetCameraBehindPlayer(playerid);
  2405.     }
  2406.     else {
  2407.         SetPlayerPos(playerid,zr[playerid],yr[playerid],zr[playerid]);
  2408.         SetPlayerFacingAngle(playerid,Angle);
  2409.         SetCameraBehindPlayer(playerid);
  2410.     }
  2411.     p18=1;
  2412.     pplayer[playerid]=18;
  2413.     if(IsPlayerInAnyVehicle(playerid))
  2414.     {
  2415.         GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle1[playerid]);
  2416.         GetVehiclePos(GetPlayerVehicleID(playerid), X1[playerid], Y1[playerid], Z1[playerid]);
  2417.     }
  2418.     else
  2419.     {
  2420.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  2421.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  2422.     }
  2423.     return 1;
  2424. }
  2425.  
  2426. public Pol19(playerid)
  2427. {
  2428.     xr[playerid]=RaceCheckpoints[0][0];
  2429.     yr[playerid]=RaceCheckpoints[0][1];
  2430.     zr[playerid]=RaceCheckpoints[0][2]+5;
  2431.     xr[playerid] -= ((esphaut*2) * floatsin(-Angle, degrees));
  2432.     yr[playerid] -= ((esphaut*2) * floatcos(-Angle, degrees));
  2433.     xr[playerid] -= ((esplarg*2) * floatsin(-a, degrees));
  2434.     yr[playerid] -= ((esplarg*2) * floatcos(-a, degrees));
  2435.     if(IsPlayerInAnyVehicle(playerid)) {
  2436.         new vehicleid=GetPlayerVehicleID(playerid);
  2437.         SetVehiclePos(vehicleid,xr[playerid],yr[playerid],zr[playerid]);
  2438.         SetVehicleZAngle(vehicleid,Angle);
  2439.         SetCameraBehindPlayer(playerid);
  2440.     }
  2441.     else {
  2442.         SetPlayerPos(playerid,zr[playerid],yr[playerid],zr[playerid]);
  2443.         SetPlayerFacingAngle(playerid,Angle);
  2444.         SetCameraBehindPlayer(playerid);
  2445.     }
  2446.     p19=1;
  2447.     pplayer[playerid]=19;
  2448.     if(IsPlayerInAnyVehicle(playerid))
  2449.     {
  2450.         GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle1[playerid]);
  2451.         GetVehiclePos(GetPlayerVehicleID(playerid), X1[playerid], Y1[playerid], Z1[playerid]);
  2452.     }
  2453.     else
  2454.     {
  2455.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  2456.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  2457.     }
  2458.     return 1;
  2459. }
  2460.  
  2461. public Pol20(playerid)
  2462. {
  2463.     xr[playerid]=RaceCheckpoints[0][0];
  2464.     yr[playerid]=RaceCheckpoints[0][1];
  2465.     zr[playerid]=RaceCheckpoints[0][2]+5;
  2466.     xr[playerid] -= ((esphaut*2) * floatsin(-Angle, degrees));
  2467.     yr[playerid] -= ((esphaut*2) * floatcos(-Angle, degrees));
  2468.     xr[playerid] += ((esplarg*3) * floatsin(-a, degrees));
  2469.     yr[playerid] += ((esplarg*3) * floatcos(-a, degrees));
  2470.     if(IsPlayerInAnyVehicle(playerid)) {
  2471.         new vehicleid=GetPlayerVehicleID(playerid);
  2472.         SetVehiclePos(vehicleid,xr[playerid],yr[playerid],zr[playerid]);
  2473.         SetVehicleZAngle(vehicleid,Angle);
  2474.         SetCameraBehindPlayer(playerid);
  2475.     }
  2476.     else {
  2477.         SetPlayerPos(playerid,zr[playerid],yr[playerid],zr[playerid]);
  2478.         SetPlayerFacingAngle(playerid,Angle);
  2479.         SetCameraBehindPlayer(playerid);
  2480.     }
  2481.     p20=1;
  2482.     pplayer[playerid]=20;
  2483.     if(IsPlayerInAnyVehicle(playerid))
  2484.     {
  2485.         GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle1[playerid]);
  2486.         GetVehiclePos(GetPlayerVehicleID(playerid), X1[playerid], Y1[playerid], Z1[playerid]);
  2487.     }
  2488.     else
  2489.     {
  2490.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  2491.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  2492.     }
  2493.     return 1;
  2494. }
  2495.  
  2496. public Pol21(playerid)
  2497. {
  2498.     xr[playerid]=RaceCheckpoints[0][0];
  2499.     yr[playerid]=RaceCheckpoints[0][1];
  2500.     zr[playerid]=RaceCheckpoints[0][2]+5;
  2501.     xr[playerid] -= ((esphaut*2) * floatsin(-Angle, degrees));
  2502.     yr[playerid] -= ((esphaut*2) * floatcos(-Angle, degrees));
  2503.     xr[playerid] -= ((esplarg*3) * floatsin(-a, degrees));
  2504.     yr[playerid] -= ((esplarg*3) * floatcos(-a, degrees));
  2505.     if(IsPlayerInAnyVehicle(playerid)) {
  2506.         new vehicleid=GetPlayerVehicleID(playerid);
  2507.         SetVehiclePos(vehicleid,xr[playerid],yr[playerid],zr[playerid]);
  2508.         SetVehicleZAngle(vehicleid,Angle);
  2509.         SetCameraBehindPlayer(playerid);
  2510.     }
  2511.     else {
  2512.         SetPlayerPos(playerid,zr[playerid],yr[playerid],zr[playerid]);
  2513.         SetPlayerFacingAngle(playerid,Angle);
  2514.         SetCameraBehindPlayer(playerid);
  2515.     }
  2516.     p21=1;
  2517.     pplayer[playerid]=21;
  2518.     if(IsPlayerInAnyVehicle(playerid))
  2519.     {
  2520.         GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle1[playerid]);
  2521.         GetVehiclePos(GetPlayerVehicleID(playerid), X1[playerid], Y1[playerid], Z1[playerid]);
  2522.     }
  2523.     else
  2524.     {
  2525.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  2526.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  2527.     }
  2528.    
  2529.     return 1;
  2530. }
  2531.  
  2532. public Pol22(playerid)
  2533. {
  2534.     xr[playerid]=RaceCheckpoints[0][0];
  2535.     yr[playerid]=RaceCheckpoints[0][1];
  2536.     zr[playerid]=RaceCheckpoints[0][2]+5;
  2537.     xr[playerid] -= ((esphaut*3) * floatsin(-Angle, degrees));
  2538.     yr[playerid] -= ((esphaut*3) * floatcos(-Angle, degrees));
  2539.     if(IsPlayerInAnyVehicle(playerid)) {
  2540.         new vehicleid=GetPlayerVehicleID(playerid);
  2541.         SetVehiclePos(vehicleid,xr[playerid],yr[playerid],zr[playerid]);
  2542.         SetVehicleZAngle(vehicleid,Angle);
  2543.         SetCameraBehindPlayer(playerid);
  2544.     }
  2545.     else {
  2546.         SetPlayerPos(playerid,zr[playerid],yr[playerid],zr[playerid]);
  2547.         SetPlayerFacingAngle(playerid,Angle);
  2548.         SetCameraBehindPlayer(playerid);
  2549.     }
  2550.     p22=1;
  2551.     pplayer[playerid]=22;
  2552.     if(IsPlayerInAnyVehicle(playerid))
  2553.     {
  2554.         GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle1[playerid]);
  2555.         GetVehiclePos(GetPlayerVehicleID(playerid), X1[playerid], Y1[playerid], Z1[playerid]);
  2556.     }
  2557.     else
  2558.     {
  2559.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  2560.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  2561.     }
  2562.     return 1;
  2563. }
  2564.  
  2565. public Pol23(playerid)
  2566. {
  2567.     xr[playerid]=RaceCheckpoints[0][0];
  2568.     yr[playerid]=RaceCheckpoints[0][1];
  2569.     zr[playerid]=RaceCheckpoints[0][2]+5;
  2570.     xr[playerid] -= ((esphaut*3) * floatsin(-Angle, degrees));
  2571.     yr[playerid] -= ((esphaut*3) * floatcos(-Angle, degrees));
  2572.     xr[playerid] += ((esplarg*1) * floatsin(-a, degrees));
  2573.     yr[playerid] += ((esplarg*1) * floatcos(-a, degrees));
  2574.     if(IsPlayerInAnyVehicle(playerid)) {
  2575.         new vehicleid=GetPlayerVehicleID(playerid);
  2576.         SetVehiclePos(vehicleid,xr[playerid],yr[playerid],zr[playerid]);
  2577.         SetVehicleZAngle(vehicleid,Angle);
  2578.         SetCameraBehindPlayer(playerid);
  2579.     }
  2580.     else {
  2581.         SetPlayerPos(playerid,zr[playerid],yr[playerid],zr[playerid]);
  2582.         SetPlayerFacingAngle(playerid,Angle);
  2583.         SetCameraBehindPlayer(playerid);
  2584.     }
  2585.     p23=1;
  2586.     pplayer[playerid]=23;
  2587.     if(IsPlayerInAnyVehicle(playerid))
  2588.     {
  2589.         GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle1[playerid]);
  2590.         GetVehiclePos(GetPlayerVehicleID(playerid), X1[playerid], Y1[playerid], Z1[playerid]);
  2591.     }
  2592.     else
  2593.     {
  2594.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  2595.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  2596.     }
  2597.     return 1;
  2598. }
  2599.  
  2600. public Pol24(playerid)
  2601. {
  2602.     xr[playerid]=RaceCheckpoints[0][0];
  2603.     yr[playerid]=RaceCheckpoints[0][1];
  2604.     zr[playerid]=RaceCheckpoints[0][2]+5;
  2605.     xr[playerid] -= ((esphaut*3) * floatsin(-Angle, degrees));
  2606.     yr[playerid] -= ((esphaut*3) * floatcos(-Angle, degrees));
  2607.     xr[playerid] -= ((esplarg*1) * floatsin(-a, degrees));
  2608.     yr[playerid] -= ((esplarg*1) * floatcos(-a, degrees));
  2609.     if(IsPlayerInAnyVehicle(playerid)) {
  2610.         new vehicleid=GetPlayerVehicleID(playerid);
  2611.         SetVehiclePos(vehicleid,xr[playerid],yr[playerid],zr[playerid]);
  2612.         SetVehicleZAngle(vehicleid,Angle);
  2613.         SetCameraBehindPlayer(playerid);
  2614.     }
  2615.     else {
  2616.         SetPlayerPos(playerid,zr[playerid],yr[playerid],zr[playerid]);
  2617.         SetPlayerFacingAngle(playerid,Angle);
  2618.         SetCameraBehindPlayer(playerid);
  2619.     }
  2620.     p24=1;
  2621.     pplayer[playerid]=24;
  2622.     if(IsPlayerInAnyVehicle(playerid))
  2623.     {
  2624.         GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle1[playerid]);
  2625.         GetVehiclePos(GetPlayerVehicleID(playerid), X1[playerid], Y1[playerid], Z1[playerid]);
  2626.     }
  2627.     else
  2628.     {
  2629.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  2630.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  2631.     }
  2632.     return 1;
  2633. }
  2634.  
  2635. public Pol25(playerid)
  2636. {
  2637.     xr[playerid]=RaceCheckpoints[0][0];
  2638.     yr[playerid]=RaceCheckpoints[0][1];
  2639.     zr[playerid]=RaceCheckpoints[0][2]+5;
  2640.     xr[playerid] -= ((esphaut*3) * floatsin(-Angle, degrees));
  2641.     yr[playerid] -= ((esphaut*3) * floatcos(-Angle, degrees));
  2642.     xr[playerid] += ((esplarg*2) * floatsin(-a, degrees));
  2643.     yr[playerid] += ((esplarg*2) * floatcos(-a, degrees));
  2644.     if(IsPlayerInAnyVehicle(playerid)) {
  2645.         new vehicleid=GetPlayerVehicleID(playerid);
  2646.         SetVehiclePos(vehicleid,xr[playerid],yr[playerid],zr[playerid]);
  2647.         SetVehicleZAngle(vehicleid,Angle);
  2648.         SetCameraBehindPlayer(playerid);
  2649.     }
  2650.     else {
  2651.         SetPlayerPos(playerid,zr[playerid],yr[playerid],zr[playerid]);
  2652.         SetPlayerFacingAngle(playerid,Angle);
  2653.         SetCameraBehindPlayer(playerid);
  2654.     }
  2655.     p25=1;
  2656.     pplayer[playerid]=25;
  2657.     if(IsPlayerInAnyVehicle(playerid))
  2658.     {
  2659.         GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle1[playerid]);
  2660.         GetVehiclePos(GetPlayerVehicleID(playerid), X1[playerid], Y1[playerid], Z1[playerid]);
  2661.     }
  2662.     else
  2663.     {
  2664.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  2665.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  2666.     }
  2667.     return 1;
  2668. }
  2669.  
  2670. public Pol26(playerid)
  2671. {
  2672.     xr[playerid]=RaceCheckpoints[0][0];
  2673.     yr[playerid]=RaceCheckpoints[0][1];
  2674.     zr[playerid]=RaceCheckpoints[0][2]+5;
  2675.     xr[playerid] -= ((esphaut*3) * floatsin(-Angle, degrees));
  2676.     yr[playerid] -= ((esphaut*3) * floatcos(-Angle, degrees));
  2677.     xr[playerid] -= ((esplarg*2) * floatsin(-a, degrees));
  2678.     yr[playerid] -= ((esplarg*2) * floatcos(-a, degrees));
  2679.     if(IsPlayerInAnyVehicle(playerid)) {
  2680.         new vehicleid=GetPlayerVehicleID(playerid);
  2681.         SetVehiclePos(vehicleid,xr[playerid],yr[playerid],zr[playerid]);
  2682.         SetVehicleZAngle(vehicleid,Angle);
  2683.         SetCameraBehindPlayer(playerid);
  2684.     }
  2685.     else {
  2686.         SetPlayerPos(playerid,zr[playerid],yr[playerid],zr[playerid]);
  2687.         SetPlayerFacingAngle(playerid,Angle);
  2688.         SetCameraBehindPlayer(playerid);
  2689.     }
  2690.     p26=1;
  2691.     pplayer[playerid]=26;
  2692.     if(IsPlayerInAnyVehicle(playerid))
  2693.     {
  2694.         GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle1[playerid]);
  2695.         GetVehiclePos(GetPlayerVehicleID(playerid), X1[playerid], Y1[playerid], Z1[playerid]);
  2696.     }
  2697.     else
  2698.     {
  2699.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  2700.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  2701.     }
  2702.     return 1;
  2703. }
  2704.  
  2705. public Pol27(playerid)
  2706. {
  2707.     xr[playerid]=RaceCheckpoints[0][0];
  2708.     yr[playerid]=RaceCheckpoints[0][1];
  2709.     zr[playerid]=RaceCheckpoints[0][2]+5;
  2710.     xr[playerid] -= ((esphaut*3) * floatsin(-Angle, degrees));
  2711.     yr[playerid] -= ((esphaut*3) * floatcos(-Angle, degrees));
  2712.     xr[playerid] += ((esplarg*3) * floatsin(-a, degrees));
  2713.     yr[playerid] += ((esplarg*3) * floatcos(-a, degrees));
  2714.     if(IsPlayerInAnyVehicle(playerid)) {
  2715.         new vehicleid=GetPlayerVehicleID(playerid);
  2716.         SetVehiclePos(vehicleid,xr[playerid],yr[playerid],zr[playerid]);
  2717.         SetVehicleZAngle(vehicleid,Angle);
  2718.         SetCameraBehindPlayer(playerid);
  2719.     }
  2720.     else {
  2721.         SetPlayerPos(playerid,zr[playerid],yr[playerid],zr[playerid]);
  2722.         SetPlayerFacingAngle(playerid,Angle);
  2723.         SetCameraBehindPlayer(playerid);
  2724.     }
  2725.     p27=1;
  2726.     pplayer[playerid]=27;
  2727.     if(IsPlayerInAnyVehicle(playerid))
  2728.     {
  2729.         GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle1[playerid]);
  2730.         GetVehiclePos(GetPlayerVehicleID(playerid), X1[playerid], Y1[playerid], Z1[playerid]);
  2731.     }
  2732.     else
  2733.     {
  2734.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  2735.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  2736.     }
  2737.     return 1;
  2738. }
  2739.  
  2740. public Pol28(playerid)
  2741. {
  2742.     xr[playerid]=RaceCheckpoints[0][0];
  2743.     yr[playerid]=RaceCheckpoints[0][1];
  2744.     zr[playerid]=RaceCheckpoints[0][2]+5;
  2745.     xr[playerid] -= ((esphaut*3) * floatsin(-Angle, degrees));
  2746.     yr[playerid] -= ((esphaut*3) * floatcos(-Angle, degrees));
  2747.     xr[playerid] -= ((esplarg*3) * floatsin(-a, degrees));
  2748.     yr[playerid] -= ((esplarg*3) * floatcos(-a, degrees));
  2749.     if(IsPlayerInAnyVehicle(playerid)) {
  2750.         new vehicleid=GetPlayerVehicleID(playerid);
  2751.         SetVehiclePos(vehicleid,xr[playerid],yr[playerid],zr[playerid]);
  2752.         SetVehicleZAngle(vehicleid,Angle);
  2753.         SetCameraBehindPlayer(playerid);
  2754.     }
  2755.     else {
  2756.         SetPlayerPos(playerid,zr[playerid],yr[playerid],zr[playerid]);
  2757.         SetPlayerFacingAngle(playerid,Angle);
  2758.         SetCameraBehindPlayer(playerid);
  2759.     }
  2760.     p28=1;
  2761.     pplayer[playerid]=28;
  2762.     if(IsPlayerInAnyVehicle(playerid))
  2763.     {
  2764.         GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle1[playerid]);
  2765.         GetVehiclePos(GetPlayerVehicleID(playerid), X1[playerid], Y1[playerid], Z1[playerid]);
  2766.     }
  2767.     else
  2768.     {
  2769.         GetPlayerFacingAngle(playerid, Angle1[playerid]);
  2770.         GetPlayerPos(playerid, X1[playerid], Y1[playerid], Z1[playerid]);
  2771.     }
  2772.     return 1;
  2773. }
  2774.  
  2775. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  2776. {
  2777.     if(dialogid == MENU0)
  2778.     {
  2779.         if(response)
  2780.         {
  2781.             if(listitem == 0)
  2782.             {
  2783.                 ShowPlayerDialog(playerid, MENU1, DIALOG_STYLE_LIST, "Véhicule de la course", "Voiture\nMoto\nBateau\nSandking\nAerienne\nAutres","Sauvegarde", "Annuler");
  2784.             }
  2785.             if(listitem == 1)
  2786.             {
  2787.                 ShowPlayerDialog(playerid, MENU2, DIALOG_STYLE_INPUT, "Numéro de la course", "Veuillez entrer le numéro de la course \nN.B: Le chiffre doit contenir 3chiifre(exemple: 001)","Sauvegarde", "Annuler");
  2788.                 return 1;
  2789.             }
  2790.             if(listitem == 2)
  2791.             {
  2792.                 new tmp[256], fback;
  2793.                 format(tmp,sizeof(tmp),"%s%s",CType,CNumero);
  2794.                 fback=LoadRace(tmp);
  2795.                 if(fback == -1)
  2796.                 {
  2797.                     format(ystring,sizeof(ystring),"La course %s n'existe pas !",tmp);
  2798.                     SendClientMessage(playerid,COLOR_RED,ystring);
  2799.                     return 1;
  2800.                 }
  2801.                 startrace();
  2802.                 return 1;
  2803.             }
  2804.         }
  2805.     }
  2806.     if(dialogid == MENU1)
  2807.     {
  2808.         if(response)
  2809.         {
  2810.             if(listitem == 0)
  2811.             {
  2812.                 format(CType,sizeof(CType),"Voiture");
  2813.                 format(ystring, sizeof(ystring), "Type de la course: %s\nNuméro de la course: %s\nLancer la course !",CType,CNumero);
  2814.                 ShowPlayerDialog(playerid, MENU0, DIALOG_STYLE_LIST, "Options de la course:", ystring, "Executer", "Annuler");
  2815.                 GCourse = 1;
  2816.  
  2817.             }
  2818.             if(listitem == 1)
  2819.             {
  2820.                 format(CType,sizeof(CType),"Moto");
  2821.                 format(ystring, sizeof(ystring), "Type de la course: %s\nNuméro de la course: %s\nLancer la course !",CType,CNumero);
  2822.                 ShowPlayerDialog(playerid, MENU0, DIALOG_STYLE_LIST, "Options de la course:", ystring, "Executer", "Annuler");
  2823.                 GCourse = 2;
  2824.  
  2825.             }
  2826.             if(listitem == 2)
  2827.             {
  2828.                 format(CType,sizeof(CType),"Bateau");
  2829.                 format(ystring, sizeof(ystring), "Type de la course: %s\nNuméro de la course: %s\nLancer la course !",CType,CNumero);
  2830.                 ShowPlayerDialog(playerid, MENU0, DIALOG_STYLE_LIST, "Options de la course:", ystring, "Executer", "Annuler");
  2831.                 GCourse = 3;
  2832.             }
  2833.             if(listitem == 3)
  2834.             {
  2835.                 format(CType,sizeof(CType),"Sandking");
  2836.                 format(ystring, sizeof(ystring), "Type de la course: %s\nNuméro de la course: %s\nLancer la course !",CType,CNumero);
  2837.                 ShowPlayerDialog(playerid, MENU0, DIALOG_STYLE_LIST, "Options de la course:", ystring, "Executer", "Annuler");
  2838.                 GCourse = 4;
  2839.             }
  2840.             if(listitem == 4)
  2841.             {
  2842.                 format(CType,sizeof(CType),"Aerienne");
  2843.                 format(ystring, sizeof(ystring), "Type de la course: %s\nNuméro de la course: %s\nLancer la course !",CType,CNumero);
  2844.                 ShowPlayerDialog(playerid, MENU0, DIALOG_STYLE_LIST, "Options de la course:", ystring, "Executer", "Annuler");
  2845.                 GCourse = 5;
  2846.             }
  2847.             if(listitem == 5)
  2848.             {
  2849.                 format(CType,sizeof(CType),"Autres");
  2850.                 format(ystring, sizeof(ystring), "Type de la course: %s\nNuméro de la course: %s\nLancer la course !",CType,CNumero);
  2851.                 ShowPlayerDialog(playerid, MENU0, DIALOG_STYLE_LIST, "Options de la course:", ystring, "Executer", "Annuler");
  2852.                 GCourse = 6;
  2853.                 return 1;
  2854.             }
  2855.         }
  2856.     }
  2857.     if(dialogid == MENU2)
  2858.     {
  2859.         if(response)
  2860.         {
  2861.             format(CNumero,sizeof(CNumero),"%s",inputtext);
  2862.             format(ystring, sizeof(ystring), "Type de la course: %s\nNuméro de la course: %s\nLancer la course !",CType,CNumero);
  2863.             ShowPlayerDialog(playerid, MENU0, DIALOG_STYLE_LIST, "Options de la course:", ystring, "Executer", "Annuler");
  2864.         }
  2865.     }
  2866.     if(dialogid == MENU3)
  2867.     {
  2868.         if(response)
  2869.         {
  2870.             if(listitem == 0)
  2871.             {
  2872.                 new tmp[128], e = 0, Save;
  2873.                 do
  2874.                 {
  2875.                     e++;
  2876.                     format(tmp, sizeof(tmp), "/fRace/Voiture%03d.frace",e);
  2877.                 }
  2878.                 while(fexist(tmp));
  2879.                 e -=1;
  2880.                 e++;
  2881.                 Save = e++;
  2882.                 format(ystring,sizeof(ystring),"/fRace/Voiture%03d.frace",Save);
  2883.                 new File:f,Float:x,Float:y,Float:z, Bcreator[MAX_PLAYER_NAME], templine[42];
  2884.                 GetPlayerName(playerid, Bcreator, MAX_PLAYER_NAME);
  2885.                 f = fopen(ystring,io_write);
  2886.                 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)]);
  2887.                 fwrite(f,templine);
  2888.                 format(templine,sizeof(templine),"A 0 A 0 A 0 A 0 A 0\n"); //Best complete race times
  2889.                 fwrite(f,templine);
  2890.                 format(templine,sizeof(templine),"A 0 A 0 A 0 A 0 A 0\n"); //Best lap times
  2891.                 fwrite(f,templine);
  2892.                 for(new i = 0; i < BCurrentCheckpoints[b(playerid)];i++)
  2893.                 {
  2894.                     x=BRaceCheckpoints[b(playerid)][i][0];
  2895.                     y=BRaceCheckpoints[b(playerid)][i][1];
  2896.                     z=BRaceCheckpoints[b(playerid)][i][2];
  2897.                     format(templine,sizeof(templine),"%f %f %f\n",x,y,z);
  2898.                     fwrite(f,templine);
  2899.                 }
  2900.                 fclose(f);
  2901.                 format(tmp,sizeof(tmp),"La course a été sauvegardé !",ystring);
  2902.                 SendClientMessage(playerid,COLOR_GREEN,tmp);
  2903.                 RaceBuilders[playerid] = 0;//NOUVEAU
  2904.                 SendClientMessage(playerid,COLOR_GREEN,"Vous avez quitté le mode constructeur");
  2905.             }
  2906.             if(listitem == 1)
  2907.             {
  2908.                 new tmp[128], e = 0, Save;
  2909.                 do
  2910.                 {
  2911.                     e++;
  2912.                     format(tmp, sizeof(tmp), "/fRace/Moto%03d.frace",e);
  2913.                 }
  2914.                 while(fexist(tmp));
  2915.                 e -=1;
  2916.                 e++;
  2917.                 Save = e++;
  2918.                 format(ystring,sizeof(ystring),"/fRace/Moto%03d.frace",Save);
  2919.                 new File:f,Float:x,Float:y,Float:z, Bcreator[MAX_PLAYER_NAME], templine[42];
  2920.                 GetPlayerName(playerid, Bcreator, MAX_PLAYER_NAME);
  2921.                 f = fopen(ystring,io_write);
  2922.                 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)]);
  2923.                 fwrite(f,templine);
  2924.                 format(templine,sizeof(templine),"A 0 A 0 A 0 A 0 A 0\n"); //Best complete race times
  2925.                 fwrite(f,templine);
  2926.                 format(templine,sizeof(templine),"A 0 A 0 A 0 A 0 A 0\n"); //Best lap times
  2927.                 fwrite(f,templine);
  2928.                 for(new i = 0; i < BCurrentCheckpoints[b(playerid)];i++)
  2929.                 {
  2930.                     x=BRaceCheckpoints[b(playerid)][i][0];
  2931.                     y=BRaceCheckpoints[b(playerid)][i][1];
  2932.                     z=BRaceCheckpoints[b(playerid)][i][2];
  2933.                     format(templine,sizeof(templine),"%f %f %f\n",x,y,z);
  2934.                     fwrite(f,templine);
  2935.                 }
  2936.                 fclose(f);
  2937.                 format(tmp,sizeof(tmp),"La course a été sauvegardé !",ystring);
  2938.                 SendClientMessage(playerid,COLOR_GREEN,tmp);
  2939.             }
  2940.             if(listitem == 2)
  2941.             {
  2942.                 new tmp[128], e = 0, Save;
  2943.                 do
  2944.                 {
  2945.                     e++;
  2946.                     format(tmp, sizeof(tmp), "/fRace/Bateau%03d.frace",e);
  2947.                 }
  2948.                 while(fexist(tmp));
  2949.                 e -=1;
  2950.                 e++;
  2951.                 Save = e++;
  2952.                 format(ystring,sizeof(ystring),"/fRace/Bateau%03d.frace",Save);
  2953.                 new File:f,Float:x,Float:y,Float:z, Bcreator[MAX_PLAYER_NAME], templine[42];
  2954.                 GetPlayerName(playerid, Bcreator, MAX_PLAYER_NAME);
  2955.                 f = fopen(ystring,io_write);
  2956.                 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)]);
  2957.                 fwrite(f,templine);
  2958.                 format(templine,sizeof(templine),"A 0 A 0 A 0 A 0 A 0\n"); //Best complete race times
  2959.                 fwrite(f,templine);
  2960.                 format(templine,sizeof(templine),"A 0 A 0 A 0 A 0 A 0\n"); //Best lap times
  2961.                 fwrite(f,templine);
  2962.                 for(new i = 0; i < BCurrentCheckpoints[b(playerid)];i++)
  2963.                 {
  2964.                     x=BRaceCheckpoints[b(playerid)][i][0];
  2965.                     y=BRaceCheckpoints[b(playerid)][i][1];
  2966.                     z=BRaceCheckpoints[b(playerid)][i][2];
  2967.                     format(templine,sizeof(templine),"%f %f %f\n",x,y,z);
  2968.                     fwrite(f,templine);
  2969.                 }
  2970.                 fclose(f);
  2971.                 format(tmp,sizeof(tmp),"La course a été sauvegardé !",ystring);
  2972.                 SendClientMessage(playerid,COLOR_GREEN,tmp);
  2973.             }
  2974.             if(listitem == 3)
  2975.             {
  2976.                 new tmp[128], e = 0, Save;
  2977.                 do
  2978.                 {
  2979.                     e++;
  2980.                     format(tmp, sizeof(tmp), "/fRace/Sandking%03d.frace",e);
  2981.                 }
  2982.                 while(fexist(tmp));
  2983.                 e -=1;
  2984.                 e++;
  2985.                 Save = e++;
  2986.                 format(ystring,sizeof(ystring),"/fRace/Sandking%03d.frace",Save);
  2987.                 new File:f,Float:x,Float:y,Float:z, Bcreator[MAX_PLAYER_NAME], templine[42];
  2988.                 GetPlayerName(playerid, Bcreator, MAX_PLAYER_NAME);
  2989.                 f = fopen(ystring,io_write);
  2990.                 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)]);
  2991.                 fwrite(f,templine);
  2992.                 format(templine,sizeof(templine),"A 0 A 0 A 0 A 0 A 0\n"); //Best complete race times
  2993.                 fwrite(f,templine);
  2994.                 format(templine,sizeof(templine),"A 0 A 0 A 0 A 0 A 0\n"); //Best lap times
  2995.                 fwrite(f,templine);
  2996.                 for(new i = 0; i < BCurrentCheckpoints[b(playerid)];i++)
  2997.                 {
  2998.                     x=BRaceCheckpoints[b(playerid)][i][0];
  2999.                     y=BRaceCheckpoints[b(playerid)][i][1];
  3000.                     z=BRaceCheckpoints[b(playerid)][i][2];
  3001.                     format(templine,sizeof(templine),"%f %f %f\n",x,y,z);
  3002.                     fwrite(f,templine);
  3003.                    
  3004.                 }
  3005.                 fclose(f);
  3006.                 format(tmp,sizeof(tmp),"La course a été sauvegardé !",ystring);
  3007.                 SendClientMessage(playerid,COLOR_GREEN,tmp);
  3008.             }
  3009.             if(listitem == 4)
  3010.             {
  3011.                 new tmp[128], e = 0, Save;
  3012.                 do
  3013.                 {
  3014.                     e++;
  3015.                     format(tmp, sizeof(tmp), "/fRace/Aerienne%03d.frace",e);
  3016.                 }
  3017.                 while(fexist(tmp));
  3018.                 e -=1;
  3019.                 e++;
  3020.                 Save = e++;
  3021.                 format(ystring,sizeof(ystring),"/fRace/Aerienne%03d.frace",Save);
  3022.                 new File:f,Float:x,Float:y,Float:z, Bcreator[MAX_PLAYER_NAME], templine[42];
  3023.                 GetPlayerName(playerid, Bcreator, MAX_PLAYER_NAME);
  3024.                 f = fopen(ystring,io_write);
  3025.                 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)]);
  3026.                 fwrite(f,templine);
  3027.                 format(templine,sizeof(templine),"A 0 A 0 A 0 A 0 A 0\n"); //Best complete race times
  3028.                 fwrite(f,templine);
  3029.                 format(templine,sizeof(templine),"A 0 A 0 A 0 A 0 A 0\n"); //Best lap times
  3030.                 fwrite(f,templine);
  3031.                 for(new i = 0; i < BCurrentCheckpoints[b(playerid)];i++)
  3032.                 {
  3033.                     x=BRaceCheckpoints[b(playerid)][i][0];
  3034.                     y=BRaceCheckpoints[b(playerid)][i][1];
  3035.                     z=BRaceCheckpoints[b(playerid)][i][2];
  3036.                     format(templine,sizeof(templine),"%f %f %f\n",x,y,z);
  3037.                     fwrite(f,templine);
  3038.                 }
  3039.                 fclose(f);
  3040.                 format(tmp,sizeof(tmp),"La course a été sauvegardé !",ystring);
  3041.                 SendClientMessage(playerid,COLOR_GREEN,tmp);
  3042.             }
  3043.             if(listitem == 5)
  3044.             {
  3045.                 new tmp[128], e = 0, Save;
  3046.                 do
  3047.                 {
  3048.                     e++;
  3049.                     format(ystring,sizeof(ystring),"/fRace/Autres%03d.frace",e);
  3050.                 }
  3051.                 while(fexist(tmp));
  3052.                 e -=1;
  3053.                 e++;
  3054.                 Save = e++;
  3055.                 format(ystring,sizeof(ystring),"/fRace/Autres%03d.frace",Save);
  3056.                 new File:f,Float:x,Float:y,Float:z, Bcreator[MAX_PLAYER_NAME], templine[42];
  3057.                 GetPlayerName(playerid, Bcreator, MAX_PLAYER_NAME);
  3058.                 f = fopen(ystring,io_write);
  3059.                 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)]);
  3060.                 fwrite(f,templine);
  3061.                 format(templine,sizeof(templine),"A 0 A 0 A 0 A 0 A 0\n"); //Best complete race times
  3062.                 fwrite(f,templine);
  3063.                 format(templine,sizeof(templine),"A 0 A 0 A 0 A 0 A 0\n"); //Best lap times
  3064.                 fwrite(f,templine);
  3065.                 for(new i = 0; i < BCurrentCheckpoints[b(playerid)];i++)
  3066.                 {
  3067.                     x=BRaceCheckpoints[b(playerid)][i][0];
  3068.                     y=BRaceCheckpoints[b(playerid)][i][1];
  3069.                     z=BRaceCheckpoints[b(playerid)][i][2];
  3070.                     format(templine,sizeof(templine),"%f %f %f\n",x,y,z);
  3071.                     fwrite(f,templine);
  3072.                 }
  3073.                 fclose(f);
  3074.                 format(tmp,sizeof(tmp),"La course a été sauvegardé sous le nom de: %s",ystring);
  3075.                 SendClientMessage(playerid,COLOR_GREEN,tmp);
  3076.             }
  3077.         }
  3078.     }
  3079.     return 1;
  3080. }
  3081. stock IsPlayerInCar(playerid)
  3082. {
  3083.     new vehicleid = GetPlayerVehicleID(playerid);
  3084.     if(IsPlayerInAnyVehicle(playerid))
  3085.     {
  3086.         for(new i = 0; i < 97; i++)
  3087.         {
  3088.             if(GetVehicleModel(vehicleid) == voiture[i])
  3089.             {
  3090.                 return true;
  3091.             }
  3092.         }
  3093.     }
  3094.     return false;
  3095. }
  3096.  
  3097. stock IsPlayerInBike(playerid)
  3098. {
  3099.  
  3100.     new vehicleid = GetPlayerVehicleID(playerid);
  3101.  
  3102.     if(IsPlayerInAnyVehicle(playerid))
  3103.     {
  3104.         for(new i = 0; i < 10; i++)
  3105.         {
  3106.             if(GetVehicleModel(vehicleid) == moto[i])
  3107.             {
  3108.                 return true;
  3109.             }
  3110.         }
  3111.     }
  3112.     return false;
  3113. }
  3114.  
  3115. stock IsPlayerInBoats(playerid)
  3116. {
  3117.     new vehicleid = GetPlayerVehicleID(playerid);
  3118.  
  3119.     if(IsPlayerInAnyVehicle(playerid))
  3120.     {
  3121.         for(new i = 0; i < 12; i++)
  3122.         {
  3123.             if(GetVehicleModel(vehicleid) == bateaux[i])
  3124.             {
  3125.                 return true;
  3126.             }
  3127.         }
  3128.     }
  3129.     return false;
  3130. }
  3131.  
  3132. stock IsPlayerInSand(playerid)
  3133. {
  3134.     new vehicleid = GetPlayerVehicleID(playerid);
  3135.  
  3136.     if(IsPlayerInAnyVehicle(playerid))
  3137.     {
  3138.         for(new i = 0; i < 1; i++)
  3139.         {
  3140.             if(GetVehicleModel(vehicleid) == sandking[i])
  3141.             {
  3142.                 return true;
  3143.             }
  3144.         }
  3145.     }
  3146.     return false;
  3147. }
  3148.  
  3149. stock IsPlayerInAir(playerid)
  3150. {
  3151.     new vehicleid = GetPlayerVehicleID(playerid);
  3152.  
  3153.     if(IsPlayerInAnyVehicle(playerid))
  3154.     {
  3155.         for(new i = 0; i < 20; i++)
  3156.         {
  3157.             if(GetVehicleModel(vehicleid) == avions[i])
  3158.             {
  3159.                 return true;
  3160.             }
  3161.         }
  3162.     }
  3163.     return false;
  3164. }
  3165.  
  3166. Vehicule(playerid)
  3167. {
  3168.     if(GCourse == 1)
  3169.     {
  3170.         if(!IsPlayerInCar(playerid))
  3171.         {
  3172.             SendClientMessage(playerid, COLOR_YELLOW, "Vous n'êtes pas équipé du bon véhicule ! (Voiture)");
  3173.             RVehicule[playerid] = 1;
  3174.             return 1;
  3175.         }
  3176.         else
  3177.         {
  3178.             RVehicule[playerid] = 0;
  3179.             return 1;
  3180.         }
  3181.     }
  3182.     else if(GCourse == 2)
  3183.     {
  3184.         if(!IsPlayerInBike(playerid))
  3185.         {
  3186.             SendClientMessage(playerid, COLOR_YELLOW, "Vous n'êtes pas équipé du bon véhicule ! (Deux roues)");
  3187.             RVehicule[playerid] = 1;
  3188.             return 1;
  3189.         }
  3190.         else
  3191.         {
  3192.             RVehicule[playerid] = 0;
  3193.             return 1;
  3194.         }
  3195.     }
  3196.  
  3197.     else if(GCourse == 3)
  3198.     {
  3199.         if(!IsPlayerInBoats(playerid))
  3200.         {
  3201.             SendClientMessage(playerid, COLOR_YELLOW, "Vous n'êtes pas équipé du bon véhicule ! (Bateau)");
  3202.             RVehicule[playerid] = 1;
  3203.             return 1;
  3204.         }
  3205.         else
  3206.         {
  3207.             RVehicule[playerid] = 0;
  3208.             return 1;
  3209.         }
  3210.     }
  3211.     else if(GCourse == 4)
  3212.     {
  3213.         if(!IsPlayerInSand(playerid))
  3214.         {
  3215.             SendClientMessage(playerid, COLOR_YELLOW, "Vous n'êtes pas équipé du bon véhicule ! (Sandking)");
  3216.             RVehicule[playerid] = 1;
  3217.             return 1;
  3218.         }
  3219.         else
  3220.         {
  3221.             RVehicule[playerid] = 0;
  3222.             return 1;
  3223.         }
  3224.     }
  3225.     else if(GCourse == 5)
  3226.     {
  3227.         if(!IsPlayerInAir(playerid))
  3228.         {
  3229.             SendClientMessage(playerid, COLOR_YELLOW, "Vous n'êtes pas équipé du bon véhicule ! (Véhicule aérien)");
  3230.             RVehicule[playerid] = 1;
  3231.             return 1;
  3232.         }
  3233.         else
  3234.         {
  3235.             RVehicule[playerid] = 0;
  3236.             return 1;
  3237.         }
  3238.     }
  3239.     return 1;
  3240. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement