Advertisement
LePtitClown

fRace problème

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