Advertisement
Guest User

Untitled

a guest
Jun 24th, 2017
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 143.52 KB | None | 0 0
  1.  
  2. #include <a_samp>
  3. /*
  4.     Things To Do
  5.    
  6. 50 Races
  7.     - Car models
  8.     - skin
  9.     - ratio
  10.     - prize
  11.    
  12. Help Topics
  13.     - Races
  14.     - Diskettes
  15.     - Respawn
  16.     - Recordings
  17.  
  18. */
  19. /*
  20.     Player.ini
  21.    
  22. password
  23. money
  24. level
  25. carmodel
  26. color1
  27. color2
  28. skin
  29. totalraces
  30. mptotalraces
  31. mptotalwins
  32. */
  33.  
  34. #define MAX_BOTS 10
  35. #undef MAX_PLAYERS
  36. #define MAX_PLAYERS (100+MAX_BOTS)
  37. #define COLOR_BOT       0x90BB90FF
  38. #define COLOR_WHITE     0x808080FF
  39. #define COLOR_LYELLOW   0xFFFF82FF
  40. #define COLOR_YELLOW    0xFFFF00FF
  41. #define COLOR_LGREEN    0x90EE90FF
  42. #define COLOR_DGREEN    0x006400FF
  43. #define COLOR_GREEN     0xADFF2FFF
  44. #define COLOR_BLUE      0x4169FFFF
  45. #define COLOR_DBLUE     0x000080FF
  46. #define COLOR_LBLUE     0x6495EDFF
  47. #define COLOR_PINK      0xFF1493FF
  48. #define COLOR_LPINK     0xFF69B4FF
  49. #define COLOR_RED       0xDC143CFF
  50. #define COLOR_LRED      0xDC143CFF
  51. #define COLOR_MAROON    0x800000FF
  52. #define COLOR_BROWN     0x8B4513FF
  53. #define COLOR_GREY      0x808080FF
  54. #define COLOR_BLACK     0x808080FF
  55.  
  56. #define MAX_PLAYBACK_BOTS 10
  57. #define CHECKPOINT_ENTER_SOUND 1138
  58. #define COUNTDOWN_SOUND 1056
  59. #define GO_SOUND 1057
  60. #define DIALOG_CLICK_SOUND 1150
  61. #define DISK_PICK_SOUND 0
  62. #define DISK_SOUND 0
  63. #define QUIT_RACE_SOUND 1053
  64. #define LOST_RACE_SOUND 1055
  65. #define WON_RACE_SOUND 1058
  66. #define LEVEL_UP_SOUND 1183
  67. #define RESPAWN_SOUND 1132
  68. #define BIKE_BOUGHT_SOUND 1149
  69. #define RECORD_SOUND 1185
  70. #define STOP_SOUND  1190
  71. #define PLAY_SOUND 1186
  72.  
  73. const default_weather = 1337;
  74. new ignordisk[MAX_PLAYERS];
  75. new joined[MAX_PLAYERS];
  76. new Nitrox[MAX_PLAYERS];
  77. const min_players = 2;
  78. const max_counts = 20;
  79. new MPCounter = 0;
  80. new mpRace[MAX_PLAYERS] = 0;
  81. const Float:cpbelow = 1.2;
  82. new File:hbot;
  83. new Finishmp = 0;
  84. new Prizemp[3];
  85. new timetaken = 0;
  86. new DiskP[MAX_PLAYERS];
  87. new SpecMod[MAX_PLAYERS];
  88. new DidUask[MAX_PLAYERS] = -1;
  89. new mp = -1;
  90. new Recording[MAX_PLAYERS];
  91.  
  92. new Float:FuelStations[][] =
  93. {
  94.     {1004.0070,-939.3102,42.1797},
  95.     {1944.3260,-1772.9254,13.3906},
  96.     {-90.5515,-1169.4578,2.4079},
  97.     {-1609.7958,-2718.2048,48.5391},
  98.     {-2029.4968,156.4366,28.9498},
  99.     {-2408.7590,976.0934,45.4175},
  100.     {-2243.9629,-2560.6477,31.8841},
  101.     {-1676.6323,414.0262,6.9484},
  102.     {2202.2349,2474.3494,10.5258},
  103.     {614.9333,1689.7418,6.6968},
  104.     {-1328.8250,2677.2173,49.7665},
  105.     {70.3882,1218.6783,18.5165},
  106.     {2113.7390,920.1079,10.5255},
  107.     {-1327.7218,2678.8723,50.0625}
  108. };
  109.  
  110. new Channel[MAX_PLAYERS][128];
  111. new FreeNPC[MAX_BOTS];
  112. enum ecp
  113. {
  114.     ename[23],
  115.     emodel,
  116.     eskin,
  117.     Float:ex1,
  118.     Float:ey1,
  119.     Float:ez1,
  120.     Float:ex2,
  121.     Float:ey2,
  122.     Float:ez2,
  123.     emoney,
  124.     eratio,
  125.     ecolor1,ecolor2,
  126.     ev,
  127.     eid
  128. };
  129.  
  130. new max_checkpoints;
  131. new pKey[MAX_PLAYERS];
  132. new CPid[MAX_PLAYERS];
  133. new Rc[MAX_PLAYERS][30];
  134. new Text3D:DDD[MAX_PLAYERS];
  135. new Text3D:DDD2[MAX_PLAYERS];
  136. new Text:NitroBar[MAX_PLAYERS];
  137. new Text:SpeedBar[MAX_PLAYERS];
  138.  
  139. //new PlayerText3D:Dist[MAX_PLAYERS];
  140. new Checkpoints[100][ecp];
  141.  
  142. new WannaRace[][64] =
  143. {
  144.     {"wroom wroooooom?"},
  145.     {"a challenge?"},
  146.     {"street race?"},
  147.     {"My rides better, doubt it?"},
  148.     {"hey, lets compare? what do you say."},
  149.     {"excuse me, would you like to race me?"},
  150.     {"hey, wanna race?"},
  151.     {"like to race?"},
  152.     {"lets race?"},
  153.     {"yo, would you like to race with me?"}
  154. };
  155.  
  156. new Race[MAX_PLAYERS];
  157. enum carStats
  158. {
  159.     ename[20],
  160.     emodel,
  161.     ecost,
  162.     elevel,
  163.     etopspeed[6],
  164.     accelaration[6],
  165.     ehandling[6]
  166. };
  167. new Text:WWW;
  168. new Text:HUD;
  169. new pCar[MAX_PLAYERS];
  170. new Purchase[MAX_PLAYERS];
  171. new cars[][carStats] =
  172. {
  173.  
  174.  
  175.     { "NONE", 0, 0, 0, "" , "" , "" },
  176.     { "Admiral",445, 1500, 1, "]]", "]]" , "]]]]" },
  177.     { "Elegant",507, 1500, 1, "]]", "]]" , "]]]]" },
  178.     { "Emperor",585, 1500, 1, "]]", "]]" , "]]]]" },
  179.     { "Euros",587, 9500, 3, "]]]]", "]]]]" , "]]]" },
  180.     { "Glendale",466, 1500, 1, "]]", "]]" , "]]]]" },
  181.     { "Intruder",546, 2500, 2, "]]]", "]]]" , "]]]]" },
  182.     { "Merit",551, 2500, 2, "]]]", "]]]" , "]]]]" },
  183.     { "Nebula",516, 2500, 2, "]]]", "]]]" , "]]]]" },
  184.     { "Oceanic",467, 2000, 2, "]]", "]]]" , "]]]]" },
  185.     { "Premier",426, 2500, 2, "]]]", "]]]" , "]]]]" },
  186.     { "Sentinel",405, 1500, 1, "]]", "]]]" , "]]]]" },
  187.     { "Stretch",409, 1600, 1, "]]]", "]]" , "]]]]" },
  188.     { "Sunrise",550, 2500, 2, "]]]", "]]]" , "]]]]" },
  189.     { "Tahoma",566, 2000, 1, "]]]", "]]]" , "]]]]" },
  190.     { "Vincent",540, 1500, 1, "]]", "]]]" , "]]]]" },
  191.     { "Washington",421, 1500, 1, "]]]", "]]" , "]]]]" },
  192.     { "Willard",529, 1500, 1, "]]", "]]]" , "]]]]" },
  193.     { "Alpha",602, 9000, 3, "]]]]", "]]]" , "]]]" },
  194.     { "Blista",496, 2500, 2, "]]]", "]]]" , "]]]]" },
  195.     { "Bravura",401, 2000, 1, "]]]", "]]]" , "]]]]" },
  196.     { "Buccaneer",518, 1700, 1, "]]]", "]]]" , "]]]]" },
  197.     { "Cadrona",527, 2500, 2, "]]]", "]]]" , "]]]]" },
  198.     { "Club",589, 2600, 2, "]]]", "]]]" , "]]]]" },
  199.     { "Esperanto",419, 1500, 1, "]]", "]]]" , "]]]" },
  200.     { "Feltzer",533, 1700, 1, "]]", "]]]" , "]]]" },
  201.     { "Fortune",526, 1700, 1, "]]]", "]]]" , "]]]]" },
  202.     { "Hermes",474, 1500, 1, "]]", "]]" , "]]]" },
  203.     { "Hustler",545, 1500, 1, "]]", "]]" , "]]]" },
  204.     { "Majestic",517, 1700, 1, "]]]", "]]]" , "]]]" },
  205.     { "Picador",600, 1500, 1, "]]", "]]]" , "]]]" },
  206.     { "Stafford",580, 1500, 1, "]]", "]]]" , "]]]" },
  207.     { "Stallion",439, 1600, 1, "]]", "]]]" , "]]]]" },
  208.     { "Tampa",549, 1700, 1, "]]", "]]]" , "]]]]" },
  209.     { "Virgo",491, 1600, 1, "]]]", "]]]" , "]]]]" },
  210.     { "Buffalo",402, 3000, 2, "]]]", "]]" , "]]]" },
  211.     { "Clover",542, 2000, 2, "]]]", "]]]" , "]]]" },
  212.     { "Phoenix",603, 2500, 2, "]]]", "]]]" , "]]]" },
  213.     { "Sabre",475, 2500, 2, "]]]", "]]]" , "]]]" },
  214.     { "Elegy",562, 2700, 2, "]]]", "]]" , "]]]]" },
  215.     { "Flash",565, 2500, 2, "]]]", "]]]" , "]]]]" },
  216.     { "Jester",559, 6000, 3, "]]]]", "]]]" , "]]]" },
  217.     { "Stratum",561, 1700, 1, "]]", "]]]" , "]]]]" },
  218.     { "Sultan",560, 1900, 1, "]]]", "]]]" , "]]]]" },
  219.     { "Uranus",558, 2500, 2, "]]]", "]]]" , "]]]]" },
  220.     { "Banshee",429, 4500, 3, "]]]", "]]]]" , "]]]]" },
  221.     { "Bullet",541, 9000, 3, "]]]]", "]]]]" , "]]]" },
  222.     { "Cheetah",415, 9050, 3, "]]]]", "]]]]" , "]]]" },
  223.     { "Comet",480, 1800, 1, "]]]", "]]]" , "]]]" },
  224.     { "Hotknife",434, 1400, 4, "]]", "]]" , "]]]" },
  225.     { "Hotring A",502, 4000, 4, "]]]", "]]]" , "]]]]" },
  226.     { "Hotring B",503, 4000, 4, "]]]", "]]]" , "]]]]" },
  227.     { "Infernus",411, 7500, 3, "]]]]", "]]]]" , "]]]" },
  228.     { "Super GT",506, 8700, 3, "]]]]", "]]]]" , "]]]" },
  229.     { "Turismo",451, 10000, 3, "]]]]", "]]]]" , "]]]]" },
  230.     { "Windsor",555, 1700, 1, "]]]", "]]]" , "]]]]" },
  231.     { "ZR-350",477, 9500, 3, "]]]]", "]]]]" , "]]]]" },
  232.     { "Blade",536, 2000, 1, "]]]", "]]]" , "]]]]" },
  233.     { "Broadway",575, 1500, 1, "]]", "]]" , "]]]" },
  234.     { "Remington",534, 1500, 1, "]]", "]]]" , "]]]" },
  235.     { "Savanna",567, 2000, 1, "]]]", "]]]" , "]]]]" },
  236.     { "Slamvan",535, 2400, 1, "]]]", "]]]" , "]]" },
  237.     { "Tornado",576, 1600, 1, "]]", "]]]" , "]]]" },
  238.     { "Voodoo",412, 1500, 1, "]]", "]]" , "]]]" },
  239.     { "Bandito",568, 1800, 1, "]]]", "]]]" , "]]]" },
  240.     { "BF Injection",424, 2000, 1, "]]]", "]]]" , "]]]" },
  241.     { "Bloodring Banger",504, 1800, 1, "]]]", "]]]" , "]]]" },
  242.     { "Kart",571, 1900, 1, "]]]", "]]]" , "]]]]" },
  243.     { "Mesa",500, 1600, 1, "]]", "]]" , "]]]]" },
  244.     { "Monster",444, 2500, 4, "]]]", "]]]" , "]]]" },
  245.     { "Monster A",556, 2600, 4, "]]]", "]]]" , "]]]" },
  246.     { "Moster B",557, 2700, 4, "]]]", "]]]" , "]]]" },
  247.     { "Sandking",495, 6500, 4, "]]]]", "]]]" , "]]]]]" }
  248. };
  249.  
  250. new Text:CarStats[sizeof(cars)];
  251.  
  252. enum
  253. {
  254.  
  255.     dLogin,
  256.     dRegister1,
  257.     dRegister2,
  258.     dRegister3,
  259.     dRegistered,
  260.     Car1,
  261.     Car2,
  262.     Car3,
  263.     Car4,
  264.     Car5,
  265.     Car6,
  266.     Car7,
  267.     Car8,
  268.     Car9,
  269.     Car10,
  270.     Car11,
  271.     Car12,
  272.     Car13,
  273.     Car14,
  274.     Car15,
  275.     Car16,
  276.     Car17,
  277.     Car18,
  278.     Car19,
  279.     Car20,
  280.     Car21,
  281.     Car22,
  282.     Car23,
  283.     dPurchase,
  284.     dCant,
  285.     dExit,
  286.     dRace,
  287.     dLost,
  288.     dWon,
  289.     dOk,
  290.     dRec,
  291.     dPlay,
  292.     dRecord,
  293.     dColorize,
  294.     dHelp,
  295.     dChannel,
  296.     dTeleport,
  297.     dWhite,
  298.     dYellow,
  299.     dGreen,
  300.     dBlue,
  301.     dPink,
  302.     dRed,
  303.     dBlack,
  304.     dSubHelp,
  305.     dGoto
  306. };
  307. new CurrentDialog[MAX_PLAYERS];
  308. main()
  309. {
  310.     print("\n------------------------------------------");
  311.     print(" Game: Ride Author: Kapil Date: 24|9|2009");
  312.     print("------------------------------------------\n");
  313. }
  314.  
  315.  
  316. Float:getXfromDistance( Float:x  , Float:distance , Float:angle)
  317. {
  318.     new Float:a = 0.017453 * (90-angle);
  319.     new Float:rx;
  320.     rx = floatcos( a )*distance;
  321.     return rx+x;
  322. }
  323.  
  324. stock Float:findRotation(Float:x1,Float:y1,Float:x2,Float:y2)
  325. {
  326.   new Float:t = -atan2(x2-x1,y2-y1);
  327.   if (t < 0)  t = t + 360.0;
  328.   //printf("%f",t);
  329.   return t;
  330. }
  331.  
  332. Float:getYfromDistance( Float:y , Float:distance ,Float:angle )
  333. {
  334.     new Float:a = 0.017453 * (90-angle);
  335.     new Float:ry;
  336.     ry = floatsin( a )*distance;
  337.     return ry+y;
  338. }
  339.  
  340. new Text3D:Disk[MAX_PLAYERS];
  341. new Text:VertiDraw[MAX_PLAYERS];
  342. new GameModeInitiated = 0;
  343.  
  344. stock LoadRaces()
  345. {
  346.     if(!fexist("races.txt"))
  347.         return 1;
  348.     new File:h = fopen("races.txt",io_read);
  349.     new string[256];
  350.     new str[32],indx;
  351.     new i = 0;
  352.     while(fread(h,string))
  353.     {
  354.         indx = 0;
  355.         str = strtok(string,indx,',');
  356.         if(i != 0)
  357.         if(strcmp(Checkpoints[i-1][ename],str,true)==0)
  358.         {
  359.             i = i - 1;
  360.         }
  361.         format(Checkpoints[i][ename],23,"%s",str);
  362.         i++;
  363.     }
  364.     max_checkpoints = i;
  365.     printf("max checkpoints %d",max_checkpoints);
  366.     i = 0;
  367.     fclose(h);
  368.     h =  fopen("races.txt",io_read);
  369.     while(fread(h,string))
  370.     {
  371.         indx = 0;
  372.         str = strtok(string,indx,',');
  373.         if(i != 0)
  374.         if(strcmp(Checkpoints[i-1][ename],str,true)==0)
  375.         {
  376.             i = i - 1;
  377.         }
  378.         format(Checkpoints[i][ename],23,"%s",str);
  379.         printf("Loading bot %s",str);
  380.         str = strtok(string,indx,',');
  381.         Checkpoints[i][emodel] = strval(str);
  382.         str = strtok(string,indx,',');
  383.         Checkpoints[i][eskin] = strval(str);
  384.         str = strtok(string,indx,',');
  385.         Checkpoints[i][ex1] = floatstr(str);
  386.         str = strtok(string,indx,',');
  387.         Checkpoints[i][ey1] = floatstr(str);
  388.         str = strtok(string,indx,',');
  389.         Checkpoints[i][ez1] = floatstr(str);
  390.         str = strtok(string,indx,',');
  391.         Checkpoints[i][ex2] = floatstr(str);
  392.         str = strtok(string,indx,',');
  393.         Checkpoints[i][ey2] = floatstr(str);
  394.         str = strtok(string,indx,',');
  395.         Checkpoints[i][ez2] = floatstr(str);
  396.         str = strtok(string,indx,',');
  397.         Checkpoints[i][emoney] = strval(str);
  398.         str = strtok(string,indx,',');
  399.         Checkpoints[i][eratio] = strval(str);
  400.         str = strtok(string,indx,',');
  401.         Checkpoints[i][ecolor1] = strval(str);
  402.         str = strtok(string,indx,',');
  403.         Checkpoints[i][ecolor2] = strval(str);
  404.         str = strtok(string,indx,',');
  405.         i++;
  406.     }
  407.     fclose(h);
  408.  
  409. //  printf("CHECKKING CHECKPOINTS");
  410.     for(i = 0;i < max_checkpoints;i++)
  411.     {
  412. //      printf("%s %f %f %f",Checkpoints[i][ename],Checkpoints[i][ex1],Checkpoints[i][ey1],Checkpoints[i][ez1]);
  413.     }
  414.     LoadBots();
  415.    
  416.     return 1;
  417. }
  418. public OnGameModeInit()
  419. {
  420.     SetWeather(1337);
  421.     SetWorldTime (12);
  422.     SetTimer("UpdateDisks",6*1000,1);
  423.     SetTimer("RaceManager",15*1000,1);
  424.     SetTimer("UpdateVehicleBots",1*1000,1);
  425.  
  426. //  printf("OnGameModeInit");
  427.     SetTimer("ManageVehicle",1000,1);
  428.     SetTimer("MultiplayerRaceManagement",10*1000,0);
  429. //  SetTimer("UpdateVelocity",100,1);
  430.  
  431.     //EnableStuntBonusForAll ( 1 );
  432.  
  433.     EnableStuntBonusForAll(0);
  434.  
  435.     ShowPlayerMarkers(2);
  436.     SetNameTagDrawDistance (0);
  437.     ShowPlayerMarkers(1);
  438.     SetGameModeText("My ride my style");
  439.    
  440.     WWW = TextDrawCreate( 30, 430 , "IAMFASTER.in" );
  441.     TextDrawFont( WWW , 3 );
  442.     TextDrawSetShadow( WWW , 0 );
  443.     TextDrawSetOutline( WWW , 2 );
  444.  
  445.     HUD = TextDrawCreate( 185, 415 , "Speed:~n~Nitro:" );
  446.     TextDrawFont( HUD , 2 );
  447.     TextDrawSetShadow( HUD , 0 );
  448.     TextDrawSetOutline( HUD , 2 );
  449.     TextDrawLetterSize(HUD,0.25,0.9);
  450.  
  451.     for(new i = 0;i < MAX_PLAYERS;i++)
  452.     {
  453.  
  454.         DDD[i] = Create3DTextLabel("0kmph",0xFFFFFFAA,0.0,0.0,0.0,200.0,0);
  455.         DDD2[i] = Create3DTextLabel("Error loading stats",0xFFFFFFAA,0.0,0.0,0.0,15.0,0);
  456.  
  457.         VertiDraw[i] = TextDrawCreate(400, 390, "This is a message box." );
  458.         TextDrawFont( VertiDraw[i] , 1);
  459.         TextDrawSetShadow( VertiDraw[i] , 0);
  460.         TextDrawUseBox( VertiDraw[i] , 1 );
  461.         TextDrawBoxColor(VertiDraw[i],0x000000AA);
  462.         TextDrawTextSize( VertiDraw[i] , 620 , 480 );
  463.         TextDrawLetterSize(VertiDraw[i],0.25,0.9);
  464.         TextDrawSetOutline( VertiDraw[i] , 1);
  465.        
  466.         NitroBar[i] = TextDrawCreate( 220 , 420 , "~g~llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll" );
  467.         TextDrawFont( NitroBar[i] , 1);
  468.         TextDrawSetShadow( NitroBar[i] , 0);
  469.         TextDrawLetterSize(NitroBar[i],0.15,2);
  470.  
  471.         SpeedBar[i] = TextDrawCreate( 220 , 408 , "~r~llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll" );
  472.         TextDrawFont( SpeedBar[i] , 1);
  473.         TextDrawSetShadow( SpeedBar[i] , 0);
  474.         TextDrawLetterSize(SpeedBar[i],0.15,2);
  475.  
  476.     }
  477.    
  478.    
  479.     // Player Class's
  480.     AddPlayerClass(254,1958.3783,1343.1572,15.3746,0.0,0,0,0,0,-1,-1);
  481.     AddPlayerClass(255,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  482.     AddPlayerClass(256,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  483.     AddPlayerClass(257,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  484.     AddPlayerClass(258,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  485.     AddPlayerClass(259,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  486.     AddPlayerClass(260,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  487.     AddPlayerClass(261,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  488.     AddPlayerClass(262,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  489.     AddPlayerClass(263,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  490.     AddPlayerClass(264,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  491.     AddPlayerClass(274,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  492.     AddPlayerClass(275,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  493.     AddPlayerClass(276,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  494.  
  495.     AddPlayerClass(1,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  496.     AddPlayerClass(2,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  497.     AddPlayerClass(290,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  498.     AddPlayerClass(291,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  499.     AddPlayerClass(292,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  500.     AddPlayerClass(293,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  501.     AddPlayerClass(294,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  502.     AddPlayerClass(295,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  503.     AddPlayerClass(296,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  504.     AddPlayerClass(297,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  505.     AddPlayerClass(298,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  506.     AddPlayerClass(299,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  507.  
  508.     AddPlayerClass(277,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  509.     AddPlayerClass(278,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  510.     AddPlayerClass(279,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  511.     AddPlayerClass(288,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  512.     AddPlayerClass(47,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  513.     AddPlayerClass(48,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  514.     AddPlayerClass(49,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  515.     AddPlayerClass(50,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  516.     AddPlayerClass(51,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  517.     AddPlayerClass(52,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  518.     AddPlayerClass(53,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  519.     AddPlayerClass(54,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  520.     AddPlayerClass(55,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  521.     AddPlayerClass(56,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  522.     AddPlayerClass(57,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  523.     AddPlayerClass(58,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  524.     AddPlayerClass(59,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  525.     AddPlayerClass(60,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  526.     AddPlayerClass(61,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  527.     AddPlayerClass(62,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  528.     AddPlayerClass(63,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  529.     AddPlayerClass(64,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  530.     AddPlayerClass(66,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  531.     AddPlayerClass(67,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  532.     AddPlayerClass(68,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  533.     AddPlayerClass(69,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  534.     AddPlayerClass(70,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  535.     AddPlayerClass(71,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  536.     AddPlayerClass(72,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  537.     AddPlayerClass(73,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  538.     AddPlayerClass(75,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  539.     AddPlayerClass(76,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  540.     AddPlayerClass(78,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  541.     AddPlayerClass(79,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  542.     AddPlayerClass(80,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  543.     AddPlayerClass(81,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  544.     AddPlayerClass(82,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  545.     AddPlayerClass(83,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  546.     AddPlayerClass(84,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  547.     AddPlayerClass(85,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  548.     AddPlayerClass(87,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  549.     AddPlayerClass(88,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  550.     AddPlayerClass(89,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  551.     AddPlayerClass(91,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  552.     AddPlayerClass(92,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  553.     AddPlayerClass(93,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  554.     AddPlayerClass(95,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  555.     AddPlayerClass(96,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  556.     AddPlayerClass(97,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  557.     AddPlayerClass(98,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  558.     AddPlayerClass(99,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  559.     AddPlayerClass(100,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  560.     AddPlayerClass(101,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  561.     AddPlayerClass(102,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  562.     AddPlayerClass(103,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  563.     AddPlayerClass(104,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  564.     AddPlayerClass(105,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  565.     AddPlayerClass(106,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  566.     AddPlayerClass(107,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  567.     AddPlayerClass(108,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  568.     AddPlayerClass(109,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  569.     AddPlayerClass(110,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  570.     AddPlayerClass(111,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  571.     AddPlayerClass(112,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  572.     AddPlayerClass(113,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  573.     AddPlayerClass(114,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  574.     AddPlayerClass(115,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  575.     AddPlayerClass(116,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  576.     AddPlayerClass(117,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  577.     AddPlayerClass(118,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  578.     AddPlayerClass(120,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  579.     AddPlayerClass(121,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  580.     AddPlayerClass(122,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  581.     AddPlayerClass(123,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  582.     AddPlayerClass(124,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  583.     AddPlayerClass(125,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  584.     AddPlayerClass(126,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  585.     AddPlayerClass(127,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  586.     AddPlayerClass(128,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  587.     AddPlayerClass(129,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  588.     AddPlayerClass(131,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  589.     AddPlayerClass(133,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  590.     AddPlayerClass(134,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  591.     AddPlayerClass(135,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  592.     AddPlayerClass(136,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  593.     AddPlayerClass(137,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  594.     AddPlayerClass(138,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  595.     AddPlayerClass(139,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  596.     AddPlayerClass(140,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  597.     AddPlayerClass(141,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  598.     AddPlayerClass(142,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  599.     AddPlayerClass(143,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  600.     AddPlayerClass(144,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  601.     AddPlayerClass(145,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  602.     AddPlayerClass(146,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  603.     AddPlayerClass(147,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  604.     AddPlayerClass(148,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  605.     AddPlayerClass(150,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  606.     AddPlayerClass(151,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  607.     AddPlayerClass(152,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  608.     AddPlayerClass(153,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  609.     AddPlayerClass(154,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  610.     AddPlayerClass(155,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  611.     AddPlayerClass(156,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  612.     AddPlayerClass(157,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  613.     AddPlayerClass(158,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  614.     AddPlayerClass(159,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  615.     AddPlayerClass(160,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  616.     AddPlayerClass(161,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  617.     AddPlayerClass(162,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  618.     AddPlayerClass(163,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  619.     AddPlayerClass(164,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  620.     AddPlayerClass(165,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  621.     AddPlayerClass(166,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  622.     AddPlayerClass(167,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  623.     AddPlayerClass(168,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  624.     AddPlayerClass(169,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  625.     AddPlayerClass(170,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  626.     AddPlayerClass(171,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  627.     AddPlayerClass(172,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  628.     AddPlayerClass(173,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  629.     AddPlayerClass(174,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  630.     AddPlayerClass(175,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  631.     AddPlayerClass(176,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  632.     AddPlayerClass(177,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  633.     AddPlayerClass(178,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  634.     AddPlayerClass(179,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  635.     AddPlayerClass(180,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  636.     AddPlayerClass(181,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  637.     AddPlayerClass(182,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  638.     AddPlayerClass(183,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  639.     AddPlayerClass(184,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  640.     AddPlayerClass(185,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  641.     AddPlayerClass(186,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  642.     AddPlayerClass(187,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  643.     AddPlayerClass(188,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  644.     AddPlayerClass(189,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  645.     AddPlayerClass(190,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  646.     AddPlayerClass(191,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  647.     AddPlayerClass(192,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  648.     AddPlayerClass(193,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  649.     AddPlayerClass(194,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  650.     AddPlayerClass(195,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  651.     AddPlayerClass(196,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  652.     AddPlayerClass(197,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  653.     AddPlayerClass(198,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  654.     AddPlayerClass(199,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  655.     AddPlayerClass(200,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  656.     AddPlayerClass(201,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  657.     AddPlayerClass(202,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  658.     AddPlayerClass(203,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  659.     AddPlayerClass(204,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  660.     AddPlayerClass(205,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  661.     AddPlayerClass(206,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  662.     AddPlayerClass(207,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  663.     AddPlayerClass(209,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  664.     AddPlayerClass(210,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  665.     AddPlayerClass(211,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  666.     AddPlayerClass(212,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  667.     AddPlayerClass(213,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  668.     AddPlayerClass(214,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  669.     AddPlayerClass(215,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  670.     AddPlayerClass(216,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  671.     AddPlayerClass(217,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  672.     AddPlayerClass(218,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  673.     AddPlayerClass(219,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  674.     AddPlayerClass(220,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  675.     AddPlayerClass(221,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  676.     AddPlayerClass(222,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  677.     AddPlayerClass(223,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  678.     AddPlayerClass(224,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  679.     AddPlayerClass(225,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  680.     AddPlayerClass(226,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  681.     AddPlayerClass(227,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  682.     AddPlayerClass(228,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  683.     AddPlayerClass(229,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  684.     AddPlayerClass(230,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  685.     AddPlayerClass(231,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  686.     AddPlayerClass(232,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  687.     AddPlayerClass(233,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  688.     AddPlayerClass(234,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  689.     AddPlayerClass(235,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  690.     AddPlayerClass(236,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  691.     AddPlayerClass(237,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  692.     AddPlayerClass(238,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  693.     AddPlayerClass(239,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  694.     AddPlayerClass(240,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  695.     AddPlayerClass(241,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  696.     AddPlayerClass(242,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  697.     AddPlayerClass(243,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  698.     AddPlayerClass(244,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  699.     AddPlayerClass(245,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  700.     AddPlayerClass(246,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  701.     AddPlayerClass(247,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  702.     AddPlayerClass(248,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  703.     AddPlayerClass(249,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  704.     AddPlayerClass(250,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  705.     AddPlayerClass(251,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  706.     AddPlayerClass(253,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  707.     AddPlayerClass(254,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  708.     AddPlayerClass(255,1958.3783,1343.1572,15.3746,269.1425,0,0,0,0,-1,-1);
  709.  
  710.     DisableInteriorEnterExits();
  711.     //SetWeather( 1337 );
  712.  
  713.     for(new i = 1; i < sizeof(cars);i++)
  714.     {
  715.         AddStaticVehicle( cars[i][emodel] , 404.0320,2450.8276,16.0675 , 0 , -1 , -1  );
  716.         new j =i-1;
  717.         new string[256];
  718.         format(string,256,"Name: %s~n~Price: $%d~n~Top Speed: %s~n~Accelaration: %s~n~Handling: %s~n~Level: %d",cars[i][ename],cars[i][ecost],cars[i][etopspeed],cars[i][accelaration],cars[i][ehandling],cars[i][elevel]);
  719.         CarStats[j] = TextDrawCreate( 30 , 200 , string);
  720.         TextDrawSetShadow(CarStats[j],0);
  721.         TextDrawFont(CarStats[j],0);
  722.         TextDrawSetOutline(CarStats[j],1);
  723.         TextDrawUseBox(CarStats[j],1);
  724.         TextDrawBoxColor(CarStats[j] , 0x000000AA );
  725.         TextDrawTextSize(CarStats[j],183,1);
  726.     }
  727.    
  728.     LoadRaces();
  729.    
  730.     for(new  i = 0;i < MAX_BOTS;i++)
  731.     {
  732.         FreeNPC[i] = 1;
  733.         new str[64];
  734.         format(str,64,"BotBot%d",i);
  735.         ConnectNPC(str,"JaControl");
  736.     }
  737. /// printf("OnGamemodeInit Ended");
  738.     GameModeInitiated = 1;
  739.     return 1;
  740. }
  741.  
  742. npcIgnored(name[])
  743. {
  744.     if(!fexist("IgnoreList.txt"))
  745.         return 0;
  746.     new File:h = fopen("IgnoreList.txt",io_read);
  747.     new string[256];
  748.     while(fread(h,string))
  749.     {
  750.         if(com(string,name)==0)
  751.             return 1;
  752.     }
  753.     fclose(h);
  754.     return 0;
  755. }
  756.  
  757. ignoreNPC( name[] )
  758. {
  759.     new File:h = fopen("IgnoreList.txt",io_append);
  760.     new string[256];
  761.     format(string,256,"%s\r\n",name);
  762.     fwrite(h,string);
  763.     fclose(h);
  764. }
  765.  
  766. forward LoadBots();
  767. public LoadBots()
  768. {
  769.    
  770.     for(new i = 0;i < max_checkpoints;i++)
  771.     {
  772. //      printf("%d %d",max_checkpoints,i);
  773. //          printf("Connecting %s",Checkpoints[i][ename]);
  774.         new Float:rot;
  775. //      ConnectNPC(Checkpoints[i][ename],"JaControl");
  776.         rot = findRotation( Checkpoints[i][ex1],Checkpoints[i][ey1],Checkpoints[i][ex2],Checkpoints[i][ey2]);
  777.         Checkpoints[i][ev] = CreateVehicle( Checkpoints[i][emodel] , Checkpoints[i][ex1] , Checkpoints[i][ey1] , Checkpoints[i][ez1], rot , Checkpoints[i][ecolor1], Checkpoints[i][ecolor2] , 0 );
  778.         for(new j = 0;j <= 13;j++)
  779.         {
  780.             new t = strval(cbGet( i , j+1 ));
  781.             if(t)
  782.                 AddVehicleComponent(Checkpoints[i][ev],t);
  783.         }
  784.         ChangeVehiclePaintjob(Checkpoints[i][ev],strval(cbGet(i,15))-1);
  785.     }
  786. }
  787.  
  788. forward TryConnect(i);
  789. public TryConnect(i)
  790. {
  791.     static tries = 0;
  792.     if(joined[i] != 1)
  793.     {
  794.         if(tries > 10)
  795.             GameModeExit();
  796.         tries++;
  797. //      ConnectNPC(Checkpoints[i][ename],"JaControl");
  798.         SetTimerEx("TryConnect",100,0,"i",i);
  799.     }
  800.     else if(i+1 < max_checkpoints)
  801.     {
  802.         tries = 0;
  803.         SetTimerEx("TryConnect",100,0,"i",++i);
  804.     }
  805. //  printf("try %d",i);
  806. }
  807.  
  808.  
  809. public OnGameModeExit()
  810. {
  811.     for(new  i = 0;i < MAX_PLAYERS;i++)
  812.     {
  813.         TextDrawDestroy( VertiDraw[i] );
  814.         TextDrawDestroy( NitroBar[i] );
  815.         TextDrawDestroy( SpeedBar[i] );
  816.         Delete3DTextLabel (DDD[i]);
  817.         Delete3DTextLabel (DDD2[i]);
  818.     }
  819.     for(new i = 0;i < sizeof(cars);i++)
  820.         TextDrawDestroy( CarStats[i] );
  821.     TextDrawDestroy( WWW );
  822.     TextDrawDestroy( HUD );
  823. //  printf("OnGameModeExit");
  824.     return 1;
  825. }
  826. new PlayerSpawned[MAX_PLAYERS];
  827.  
  828. forward Spawn( playerid );
  829. public Spawn( playerid )
  830. {
  831.     SpawnPlayer(playerid);
  832.     if(PlayerSpawned[ playerid ] == 0 )
  833.         SetTimerEx("Spawn",100,0,"i",playerid );
  834. }
  835. public OnPlayerRequestClass(playerid, classid)
  836. {
  837. //  printf("OnPlayerRequestClass %d %d",playerid, classid);
  838.     if(pExist(playerid))
  839.     {
  840.         Spawn(playerid);
  841.         TogglePlayerControllable( playerid , 0 );
  842.         SetPlayerCameraPos( playerid ,-1893.8807,102.3724,37.7039+350);
  843.         SetPlayerCameraLookAt( playerid , -1893.8807,102.3724+500,37.7039 );
  844.     }
  845.     else
  846.     {
  847.         SetPlayerPos(playerid,1984.4445,157.9501,55.9384);
  848.         SetPlayerCameraPos(playerid,1984.4445,160.9501,55.9384);
  849.         SetPlayerCameraLookAt(playerid,1984.4445,157.9501,55.9384);
  850.         SetPlayerFacingAngle(playerid,0.0);
  851.         TogglePlayerControllable( playerid , 0 );
  852.     }
  853.     return 1;
  854. }
  855.  
  856. GetCheckpointId( playerid )
  857. {
  858.     for(new i = 0;i < max_checkpoints;i++)
  859.     {
  860.         new name[23];
  861.         GetPlayerName(playerid,name,23);
  862.         if(strcmp(name,Checkpoints[i][ename],true)==0)
  863.             return i;
  864.     }
  865.     printf("GetCheckpointID %d");
  866.     return 0;
  867. }
  868. stock CLS(playerid)
  869. {
  870.     for(new i = 0;i < 60;i++)
  871.         SendClientMessage(playerid,0," ");
  872. }
  873. new alerts[MAX_PLAYERS] = 1;
  874. public OnPlayerConnect(playerid)
  875. {
  876.     new string[256],name[23];
  877.     GetPlayerName(playerid,name,23);
  878.     format(string,256,"%s joined the server.",name);
  879.     for(new i =0;i < MAX_PLAYERS;i++)
  880.         if(IsPlayerConnected(i))
  881.             if(!IsPlayerNPC(i))
  882.             {
  883.                 Message(i,string);
  884.             }
  885.  
  886.     alerts[playerid] = 1;
  887.     if(IsPlayerNPC(playerid))
  888.     {
  889.         for(new i = 0;i < max_checkpoints;i++)
  890.         {
  891.             GetPlayerName(playerid,name,23);
  892.             if(strcmp(name,Checkpoints[i][ename],true)==0)
  893.             {
  894.                 Checkpoints[i][eid] = playerid;
  895. //              printf(" Bot %d is %d",i,playerid);
  896.             }
  897.         }
  898.         SetPlayerColor(playerid,GetPlayerColorFromCarColor( Checkpoints[GetCheckpointId(playerid)][ecolor1] ));
  899.     }
  900.     format(Channel[playerid],128,"Global");
  901.    
  902.    
  903.  
  904.  
  905. //  if(playerid < max_checkpoints)
  906. //  if(IsPlayerNPC(playerid))
  907. //      LoadBots();
  908.     Race[playerid] = -1;
  909.     PlayerSpawned[playerid] = 0;
  910.     CPid[playerid] = -1;
  911.     DidUask[playerid] = -1;
  912.     Recording[playerid] = 0;
  913.     pCar[playerid]=0;
  914.     ignordisk[playerid] = 0;
  915.     DiskP[playerid] = -1;
  916. //  printf("OnPlayerConnect %d",playerid);
  917.  
  918.     if(IsPlayerNPC(playerid))
  919.     {
  920.         Attach3DTextLabelToVehicle(DDD[playerid],Checkpoints[GetCheckpointId(playerid)][ev],0,0,0);
  921.         Attach3DTextLabelToPlayer(DDD2[playerid],playerid,0,0,0);
  922.     }
  923.     if(IsPlayerNPC(playerid))
  924.     {
  925.         static bots = 1;
  926. //      printf("Bot Count: %d",bots++);
  927.     }
  928. //  SetPlayerArmour(playerid,75);
  929.     return 1;
  930. }
  931.  
  932. public OnPlayerDisconnect(playerid, reason)
  933. {
  934.     new string[256];
  935.     new name[23];
  936.     GetPlayerName(playerid,name,23);
  937.     format(string,256,"%s left the server.",name);
  938.     for(new i =0;i < MAX_PLAYERS;i++)
  939.         if(IsPlayerConnected(i))
  940.             if(!IsPlayerNPC(i))
  941.             {
  942.                 Message(i,string);
  943.             }
  944.     if(Race[playerid] != -1)
  945.         PlayerLost(playerid,Race[playerid]);
  946.     if(mpRace[playerid] == 1)
  947.     {
  948.         mpRace[playerid] = 0;
  949.         new temp = 0;
  950.         for(new i = 0;i < MAX_PLAYERS;i++)
  951.         {
  952.             if(mpRace[i] == 1)
  953.                 temp++;
  954.         }
  955.         if(temp < 1)
  956.         {
  957.             mp = -1;
  958.             MultiplayerRaceManagement();
  959.         }
  960.         DisablePlayerRaceCheckpoint( playerid );
  961.     }
  962. //  printf("OnPlayerDisconnect %d %d",playerid, reason);
  963.     if(pExist(playerid))
  964.     {
  965.         if(strval(pGet(playerid,4))==0)
  966.         {
  967.             pRemove(playerid);
  968.             return 1;
  969.         }
  970.         new m = GetPlayerMoney( playerid );
  971.         if(m)
  972.         {
  973.             new str[30];
  974.             valstr(str,m);
  975.             pSet( playerid , 2 , str );
  976.         }
  977.         new s[10];
  978.         valstr(s,GetPlayerWantedLevel(playerid));
  979.         pSet(playerid,22,s);
  980.     }
  981.  
  982.     DestroyVehicle( pCar[playerid] );
  983.     return 1;
  984. }
  985.  
  986. public OnPlayerSpawn(playerid)
  987. {
  988.  
  989. //  printf("OnPlayerSpawn %d",playerid);
  990.     PlayerSpawned[playerid] = 1;
  991.     if(SpecMod[playerid] == 0)
  992.     {
  993.         if(IsPlayerNPC(playerid))
  994.         {
  995.             SetPlayerVirtualWorld(playerid,8900);
  996.             if(playerid < max_checkpoints)
  997.             {
  998.                 //new name[23];
  999.                 //GetPlayerName(playerid,name,23);
  1000.                 //new c = GetCheckpoint(name);
  1001.                 //SetPlayerSkin( playerid , Checkpoints[c][eskin]);
  1002.                 //GivePlayerMoney(playerid,1000000 + random(999999999));
  1003.             }
  1004.             else
  1005.             {
  1006.                 SetPlayerVirtualWorld(playerid,9898);
  1007.             }
  1008.         }
  1009.         else
  1010.         {
  1011.             SetPlayerCameraPos( playerid ,-1893.8807,102.3724,37.7039+350);
  1012.             SetPlayerCameraLookAt( playerid , -1893.8807,102.3724+500,37.7039 );
  1013.  
  1014.             if(!pExist(playerid))
  1015.             {
  1016.                 OnPlayerJoin( playerid , 0 );
  1017.                 return 1;
  1018.             }
  1019.             else
  1020.             {
  1021.                 OnPlayerJoin( playerid , 1 );
  1022.             }
  1023.             SetPlayerSkin(playerid,strval(pGet(playerid,7)));
  1024.         }
  1025.     }
  1026.     else
  1027.     {
  1028.         SpecMod[playerid] = 0;
  1029.         PutPlayerInVehicle(playerid ,pCar[playerid],0);
  1030.     }
  1031.     return 1;
  1032. }
  1033.  
  1034. public OnPlayerDeath(playerid, killerid, reason)
  1035. {
  1036. //  printf("OnPlayerDeath %d %d %d",playerid, killerid , reason );
  1037.     return 1;
  1038. }
  1039.  
  1040. public OnVehicleSpawn(vehicleid)
  1041. {
  1042. //  printf("OnVehicleSpawn %d ",vehicleid);
  1043.     return 1;
  1044. }
  1045.  
  1046. public OnVehicleDeath(vehicleid, killerid)
  1047. {
  1048. //  printf("OnVehicleDeath %d %d ",vehicleid,killerid);
  1049.     return 1;
  1050. }
  1051.  
  1052. stock GetCheckpoint(name[])
  1053. {
  1054.     for(new i = 0;i < max_checkpoints;i++)
  1055.             if(com(name,Checkpoints[i][ename])==0)
  1056.             {
  1057.                 return i;
  1058.             }
  1059.  
  1060.     return -1;
  1061. }
  1062.  
  1063. Float:GetDistanceBetweenPlayers(p1,p2)
  1064. {
  1065.     new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2;
  1066.     if(!IsPlayerConnected(p1) || !IsPlayerConnected(p2))
  1067.     {
  1068.         return -1.00;
  1069.     }
  1070.     GetPlayerPos(p1,x1,y1,z1);
  1071.     GetPlayerPos(p2,x2,y2,z2);
  1072.     return floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
  1073. }
  1074.  
  1075. Float:GetDistance(Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2)
  1076. {
  1077.     return floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
  1078. }
  1079.  
  1080. stock GetClosestBot( playerid )
  1081. {
  1082.     new Float:C=99999.9999,c = -1;
  1083.     new i;
  1084.     for(i = 0;i < MAX_PLAYERS;i++)
  1085.     {
  1086.         if(IsPlayerConnected(i))
  1087.         if(IsPlayerNPC( i ))
  1088.         {
  1089.             new Float:t = GetDistanceBetweenPlayers(i,playerid);
  1090.             if(t < C)
  1091.             {
  1092.                 C = t;
  1093.                 c = i;
  1094.             }
  1095.         }
  1096.     }
  1097.     return c;
  1098. }
  1099.  
  1100. stock StartRace(playerid)
  1101. {
  1102.     new str[23];
  1103.     new bot = DidUask[playerid];
  1104.     GetPlayerName(bot,str,23);
  1105.     //printf("---------- %d %s",bot,str);
  1106.     new c = GetCheckpoint(str);
  1107.     if(c != -1)
  1108.     {
  1109.         Race[playerid] = bot;
  1110.         new string[30];
  1111.         format(string,30,"go %s",str);
  1112.         SendClientMessage(bot,0,string);
  1113.         //SetPlayerRaceCheckpoint( playerid , 2 , Checkpoints[c][ex2],Checkpoints[c][ey2],Checkpoints[c][ez2],0,0,0,5);
  1114.         SetPlayerRaceCheckpoint( bot , 2 , Checkpoints[c][ex2],Checkpoints[c][ey2],Checkpoints[c][ez2]-cpbelow,0,0,0,15);
  1115.     }
  1116. }
  1117. new mute[MAX_PLAYERS];
  1118.  
  1119. public OnPlayerText(playerid, text[])
  1120. {
  1121.  
  1122. //  printf("OnPlayerText %d %s",playerid, text);
  1123.     if(mute[playerid] == 1)
  1124.         return 0;
  1125.     if(!PlayerSpawned[playerid])
  1126.         return 0;
  1127.     if(text[0] == '@')
  1128.     {
  1129.         for(new i = 0;i < MAX_PLAYERS;i++)
  1130.         {
  1131.             if(IsPlayerConnected(i))
  1132.                 if(!IsPlayerNPC(i))
  1133.                     if(isadmin(i))
  1134.                         if(PlayerSpawned[i])
  1135.                             SendPlayerMessageToPlayer(i,playerid,text);
  1136.         }
  1137.         return 0;
  1138.     }
  1139.    
  1140.        
  1141.     for(new i = 0;i < MAX_PLAYERS;i++)
  1142.     {
  1143.         if(IsPlayerConnected(i))
  1144.             if(!IsPlayerNPC(i))
  1145.                 if(strcmp(Channel[playerid],Channel[i],true)==0)
  1146.                         if(PlayerSpawned[i])
  1147.                             SendPlayerMessageToPlayer(i,playerid,text);
  1148.     }
  1149.     return 0;
  1150. }
  1151.  
  1152. stock GetXYInfrontOfMe(v,Float:distance, &Float:x, &Float:y)
  1153. {
  1154.     new Float:z, Float:angle;
  1155.     GetVehiclePos(v,x,y,z);
  1156.     GetVehicleZAngle(v,angle);
  1157.     x += (distance * floatsin(-angle, degrees));
  1158.     y += (distance * floatcos(-angle, degrees));
  1159. }
  1160.  
  1161. stock GetXYbehindPlayer(v,Float:distance, &Float:x, &Float:y)
  1162. {
  1163.     new Float:z, Float:angle;
  1164.     GetVehiclePos(v,x,y,z);
  1165.     GetVehicleZAngle(v,angle);
  1166.     angle = angle + 180;
  1167.     x += (distance * floatsin(-angle, degrees));
  1168.     y += (distance * floatcos(-angle, degrees));
  1169. }
  1170.  
  1171. enum DiskTypes
  1172. {
  1173.     blind,
  1174.     skid,
  1175.     snail,
  1176.     reverse,
  1177.     bounce,
  1178.     blast,
  1179.     drunk,
  1180.     storm,
  1181.     rain,
  1182.     jump,
  1183.     fog,
  1184.  
  1185. };
  1186.  
  1187. new DiskTypes:DiskT[MAX_PLAYERS];
  1188. forward DeleteDisk(playerid);
  1189. public DeleteDisk( playerid )
  1190. {
  1191.     if(Disk[playerid])
  1192.         Delete3DTextLabel( Disk[playerid] );
  1193.     if(DiskP[playerid])
  1194.         DestroyPickup( DiskP[playerid] );
  1195.     DiskP[playerid] = -1;
  1196. }
  1197.  
  1198. stock CreateDisk( playerid )
  1199. {
  1200.     new Float:x,Float:y,Float:z;
  1201.     new v = GetPlayerVehicleID(playerid);
  1202.     GetVehiclePos(v,x,y,z);
  1203.     GetXYInfrontOfMe( v , 30 , x , y );
  1204.     x = x + float(random(5));
  1205.     y = y + float(random(5));
  1206.     new r = random(11);
  1207. //  DeleteDisk(playerid);
  1208.  
  1209.  
  1210.     if(r == 0) // here
  1211.     {
  1212.         DiskT[playerid] = blind;
  1213.         Disk[playerid] = Create3DTextLabel("+ blind",0xFFFFFFAA,x,y,z,30,0);
  1214.     }
  1215.     else if(r == 1)
  1216.     {
  1217.         DiskT[playerid] = skid;
  1218.         Disk[playerid] = Create3DTextLabel("+ skid",0xFFFFFFAA,x,y,z,30,0);
  1219.     }
  1220.     else if(r == 2)
  1221.     {
  1222.         DiskT[playerid] = snail;
  1223.         Disk[playerid] = Create3DTextLabel("+ snail",0xFFFFFFAA,x,y,z,30,0);
  1224.     }
  1225.     else if(r == 3)
  1226.     {
  1227.         DiskT[playerid] = reverse;
  1228.         Disk[playerid] = Create3DTextLabel("+ reverse",0xFFFFFFAA,x,y,z,30,0);
  1229.     }
  1230.     else if(r == 4)
  1231.     {
  1232.         DiskT[playerid] = bounce;
  1233.         Disk[playerid] = Create3DTextLabel("+ bounce",0xFFFFFFAA,x,y,z,30,0);
  1234.     }
  1235.     else if(r == 5)
  1236.     {
  1237.         DiskT[playerid] = blast;
  1238.         Disk[playerid] = Create3DTextLabel("+ blast",0xFFFFFFAA,x,y,z,30,0);
  1239.     }
  1240.     else if(r == 6)
  1241.     {
  1242.         DiskT[playerid] = drunk;
  1243.         Disk[playerid] = Create3DTextLabel("+ drunk",0xFFFFFFAA,x,y,z,30,0);
  1244.     }
  1245.     else if(r == 7)
  1246.     {
  1247.         DiskT[playerid] = storm;
  1248.         Disk[playerid] = Create3DTextLabel("+ storm",0xFFFFFFAA,x,y,z,30,0);
  1249.     }
  1250.     else if(r == 8)
  1251.     {
  1252.         DiskT[playerid] = jump;
  1253.         Disk[playerid] = Create3DTextLabel("+ jump",0xFFFFFFAA,x,y,z,30,0);
  1254.     }
  1255.     else if(r == 9)
  1256.     {
  1257.         DiskT[playerid] = fog;
  1258.         Disk[playerid] = Create3DTextLabel("+ fog",0xFFFFFFAA,x,y,z,30,0);
  1259.     }
  1260.     else if(r == 10)
  1261.     {
  1262.         DiskT[playerid] = rain;
  1263.         Disk[playerid] = Create3DTextLabel("+ rain",0xFFFFFFAA,x,y,z,30,0);
  1264.     }
  1265.     DiskP[playerid] = CreatePickup(0,14,x,y,z);
  1266.     SetTimerEx("DeleteDisk",4000,0,"i",playerid);
  1267. }
  1268.  
  1269. new Make[MAX_PLAYERS];
  1270. new timerforcp;
  1271.  
  1272.  
  1273.  
  1274.  
  1275. public OnPlayerCommandText(playerid, cmdtext[])
  1276. {
  1277. //      printf("OnPlayerCommandText %d %s",playerid,cmdtext);
  1278.     if(!PlayerSpawned[playerid])
  1279.         return 0;
  1280.     if(strcmp("/help",cmdtext,true,5)==0)
  1281.         Message(playerid,"There arn't any commands available. Press 2.");
  1282.  
  1283.     new cmd[25];
  1284.     new indx;
  1285.     cmd = strtok(cmdtext, indx);
  1286.     if(isadmin(playerid))
  1287.     {
  1288.         if(com("/newrace",cmd,true)==0)
  1289.         {
  1290.             if(ignordisk[playerid] == 1)
  1291.                 return 1;
  1292.             ignordisk[playerid] = 1;
  1293.             cmd = strtok(cmdtext,indx);
  1294.             if(strlen(cmd))
  1295.             {
  1296.                 new File:h = fopen( "races.txt" , io_append);
  1297.                 new string[256];
  1298.                 new Float:x,Float:y,Float:z;
  1299.                 GetPlayerPos(playerid,x,y,z);
  1300.  
  1301.                 format(string,256,"\r\n%s , 411 , 0 , %f , %f , %f , ",cmd,x,y,z);
  1302.                 fwrite(h,string);
  1303.                 fclose(h);
  1304.                 Make[playerid] = 1;
  1305.                 timerforcp = SetTimerEx("RecordRaceCheckpoint",4000,1,"is",playerid,cmd);
  1306.                 StartRecordingPlayerData(playerid,1,cmd);
  1307.  
  1308.                 Message(playerid,"Recording Started.");
  1309.                 PlayerPlaySound(playerid,RECORD_SOUND,0,0,0);
  1310.             }
  1311.  
  1312.             return 1;
  1313.         }
  1314.         if(com("/kick",cmd,true)==0)
  1315.         {
  1316.             cmd = strtok(cmdtext, indx);
  1317.             if(strlen(cmd))
  1318.             {
  1319.                 if(!isadmin(strval(cmd)))
  1320.                     if(!IsPlayerNPC(strval(cmd)))
  1321.                         Kick(strval(cmd));
  1322.             }
  1323.             return 1;
  1324.         }
  1325.         if(com("/ban",cmd,true)==0)
  1326.         {
  1327.             cmd = strtok(cmdtext, indx);
  1328.             if(strlen(cmd))
  1329.             {
  1330.                 if(!isadmin(strval(cmd)))
  1331.                     if(!IsPlayerNPC(strval(cmd)))
  1332.                         Ban(strval(cmd));
  1333.             }
  1334.             return 1;
  1335.         }
  1336.         if(com("/freeze",cmd,true)==0)
  1337.         {
  1338.             cmd = strtok(cmdtext, indx);
  1339.             if(strlen(cmd))
  1340.             {
  1341.                 if(!isadmin(strval(cmd)))
  1342.                     if(!IsPlayerNPC(strval(cmd)))
  1343.                         TogglePlayerControllable(strval(cmd),0);
  1344.             }
  1345.             return 1;
  1346.         }
  1347.         if(com("/unfreeze",cmd,true)==0)
  1348.         {
  1349.             cmd = strtok(cmdtext, indx);
  1350.             if(strlen(cmd))
  1351.             {
  1352.                 if(!isadmin(strval(cmd)))
  1353.                     if(!IsPlayerNPC(strval(cmd)))
  1354.                         TogglePlayerControllable(strval(cmd),1);
  1355.             }
  1356.             return 1;
  1357.         }
  1358.  
  1359.         if(com("/mute",cmd,true)==0)
  1360.         {
  1361.             cmd = strtok(cmdtext, indx);
  1362.             if(strlen(cmd))
  1363.             {
  1364.                 if(!isadmin(strval(cmd)))
  1365.                     if(!IsPlayerNPC(strval(cmd)))
  1366.                         mute[strval(cmd)] = 1;
  1367.             }
  1368.             return 1;
  1369.         }
  1370.         if(com("/unmute",cmd,true)==0)
  1371.         {
  1372.             cmd = strtok(cmdtext, indx);
  1373.             if(strlen(cmd))
  1374.             {
  1375.                 if(!isadmin(strval(cmd)))
  1376.                     if(!IsPlayerNPC(strval(cmd)))
  1377.                         mute[strval(cmd)] = 0;
  1378.             }
  1379.             return 1;
  1380.         }
  1381.        
  1382.         if(com("/alerts",cmd,true)==0)
  1383.         {
  1384.             cmd = strtok(cmdtext, indx);
  1385.             if(strlen(cmd))
  1386.             {
  1387.                 alerts[playerid] = strval(cmd);
  1388.             }
  1389.             return 1;
  1390.         }
  1391.  
  1392.         if(com("/list",cmd,true)==0)
  1393.         {
  1394.             SendClientMessage(playerid,0xFFFFFFAA,"@<chat>/kick/ban/mute/unmute/freeze/unfreeze/alerts <0/1>");
  1395.             return 1;
  1396.         }
  1397.        
  1398.  
  1399.         if(!IsPlayerAdmin(playerid))
  1400.             return 1;
  1401.     }
  1402.     if(!IsPlayerAdmin(playerid))
  1403.     {
  1404.         //SetPlayerChatBubble(playerid,cmdtext[1],GetPlayerColor(playerid),10,6 * 1000);
  1405.         return 1;
  1406.     }
  1407.    
  1408.  
  1409.     if(com("/addadmin",cmd)==0)
  1410.     {
  1411.         if(IsPlayerAdmin(playerid))
  1412.         {
  1413.             cmd = strtok(cmdtext,indx);
  1414.             addadmin( cmd );
  1415.         }
  1416.     }
  1417.     if(com("/deladmin",cmd)==0)
  1418.     {
  1419.         if(IsPlayerAdmin(playerid))
  1420.         {
  1421.             cmd = strtok(cmdtext,indx);
  1422.             deladmin( cmd );
  1423.         }
  1424.     }
  1425.     if(com("/mp",cmdtext)==0)
  1426.         MultiplayerRaceManagement();
  1427.    
  1428.     if (com("/shop", cmdtext) == 0)
  1429.     {
  1430.         if((GetPlayerVirtualWorld(playerid)==0) && (Race[playerid] == -1) && (mpRace[playerid] != 1))
  1431.             Shop( playerid );
  1432.         return 1;
  1433.     }
  1434.    
  1435.  
  1436.     if(com("/respawn",cmdtext,true)==0)
  1437.     {
  1438.         if((GetPlayerVirtualWorld(playerid)==0) && (Race[playerid] == -1) && (mpRace[playerid] != 1))
  1439.             SpawnCar( playerid );
  1440.         return 1;
  1441.     }
  1442.    
  1443.     if(com("/ignore",cmd,true)==0)
  1444.     {
  1445.         if(IsPlayerAdmin(playerid))
  1446.         {
  1447.             cmd = strtok(cmdtext,indx);
  1448.             if(strlen(cmd))
  1449.             {
  1450.                 ignoreNPC( cmd );
  1451.             }
  1452.         }
  1453.         return 1;
  1454.     }
  1455.  
  1456.  
  1457.     if(com("/weather",cmd,true)==0)
  1458.     {
  1459.         cmd = strtok(cmdtext,indx);
  1460.         SetPlayerWeather(playerid,strval(cmd));
  1461.     }
  1462.     if(com("/goto",cmd,true)==0)
  1463.     {
  1464.         cmd = strtok(cmdtext,indx);
  1465.  
  1466.         new i = strval(cmd);
  1467.         SetVehiclePos(pCar[playerid],Checkpoints[i][ex1],Checkpoints[i][ey1],Checkpoints[i][ez1]);
  1468.  
  1469.  
  1470.     }
  1471.  
  1472.     if(com("/xplod",cmd,true)==0)
  1473.     {
  1474.         new Float:x,Float:y,Float:z;
  1475.         GetVehiclePos(GetPlayerVehicleID(playerid),x,y,z);
  1476.         new t = strval(strtok(cmdtext,indx));
  1477.         new Float:a = floatstr(strtok(cmdtext,indx));
  1478.         CreateExplosion(x,y,z,t,a);
  1479.     }
  1480.  
  1481.  
  1482.     if(com("/disk",cmdtext,true)==0)
  1483.         CreateDisk( playerid);
  1484.        
  1485.     if(com("/draw",cmd,true)==0)
  1486.     {
  1487.         Message(playerid,cmdtext);
  1488.     }
  1489.     if(com("/drunk",cmd,true)==0)
  1490.     {
  1491.         cmd = strtok(cmdtext,indx);
  1492.         SetPlayerDrunkLevel(playerid,strval(cmd));
  1493.     }
  1494.     if(com("/record",cmd,true)==0)
  1495.     {
  1496.         cmd = strtok(cmdtext,indx);
  1497.         if(strlen(cmd))
  1498.         {
  1499.             new string[256];
  1500.             format(string,256,"%s\n%s\n%s\n%s\n%s",cGet( playerid , 1 ),cGet( playerid , 2 ),cGet( playerid , 3 ),cGet( playerid , 4 ),cGet( playerid , 5 ));
  1501.             format(Rc[ playerid ],30,"%s",cmd);
  1502.             ShowDialog( playerid , dRec , 2 ,"Record", string,"Ok","Cancel");
  1503.         }
  1504.         else
  1505.         {
  1506.             ShowDialog( playerid , dCant , 0 ,"Record", "You have to enter a name for the record.\nUsage: /record <record name>.","Ok","Cancel");
  1507.         }
  1508.         return 1;
  1509.     }
  1510.     if(com("/play",cmd,true)==0)
  1511.     {
  1512.         new string[256];
  1513.         format(string,256,"%s\n%s\n%s\n%s\n%s",cGet( playerid , 1 ),cGet( playerid , 2 ),cGet( playerid , 3 ),cGet( playerid , 4 ),cGet( playerid , 5 ));
  1514.         ShowDialog( playerid , dPlay , 2 ,"Playback", string,"Ok","Cancel");
  1515.         return 1;
  1516.     }
  1517.     if(com("/stop",cmd,true)==0)
  1518.     {
  1519.         if(GetPlayerVirtualWorld(playerid) == 0)
  1520.             stoprecord( playerid );
  1521.         if(GetPlayerVirtualWorld(playerid) > 1)
  1522.         {
  1523.             stopspectate( playerid );
  1524.         }
  1525.         return 1;
  1526.     }
  1527.    
  1528.     if(com("/flip",cmdtext,true)==0)
  1529.     {
  1530.         new v = GetPlayerVehicleID(playerid);
  1531.         new Float:Z;
  1532.         GetVehicleZAngle(v,Z);
  1533.         SetVehicleZAngle( v,Z);
  1534.         return 1;
  1535.     }
  1536.    
  1537.  
  1538.  
  1539.     return 0;
  1540. }
  1541.  
  1542. stock play( playerid, rec[] )
  1543. {
  1544.     new id = guesswhosnext();
  1545.     SetPlayerVirtualWorld(id,0);
  1546.     if(id == -1)
  1547.     {
  1548.         ShowDialog( playerid , dCant , 0 , "Error" , "Unable to load playback mode. Try again after some time.","Ok","Cancel");
  1549.     }
  1550.     else
  1551.     {
  1552.         new r[30];
  1553.         new name[23];
  1554.         GetPlayerName(playerid,name,23);
  1555.         new f; // check if f lies between 1 - 5
  1556.         for(f = 1;f <= 5;f++)
  1557.             if(com(cGet(playerid,f),rec)==0)
  1558.                 break;
  1559.         format(r,30,"%sx%d.rec",name,f);
  1560.  
  1561.         if(fexist(r))
  1562.         {
  1563.             format(r,30,"%sx%d",name,f);
  1564.             SpecMod[playerid] = 1;
  1565.  
  1566.             //printf("guessed id %d",id);
  1567.             new v = CreateVehicle( strval(rGet( playerid , f , 4 )) ,100000,100000,100000,0,strval(rGet( playerid , f , 5 )),strval(rGet( playerid , f , 6)),-1);
  1568.  
  1569.             new Float:x = floatstr(rGet( playerid , f , 1 ));
  1570.             new Float:y = floatstr(rGet( playerid , f , 2 ));
  1571.             new Float:z = floatstr(rGet( playerid , f , 3 ));
  1572.             SetVehiclePos(v,x,y,z);
  1573.             TogglePlayerSpectating( playerid , 1 );
  1574.             Message(playerid,"Loading please wait...");
  1575.             SetTimerEx("play2",2000,0,"iiis",playerid,id,v,r);
  1576.             //tick180(playerid,180);
  1577.             PlayerPlaySound(playerid,PLAY_SOUND,0,0,0);
  1578.         }
  1579.         else
  1580.         {
  1581.             ShowDialog( playerid , dCant , 0 , "Error" , "File not found.","Ok","Cancel");
  1582.         }
  1583.     }
  1584. }
  1585.  
  1586. forward play2(playerid,id,v,r[]);
  1587. public play2(playerid,id,v,r[])
  1588. {
  1589.     SetPlayerSkin(id,   GetPlayerSkin(playerid));
  1590.     PutPlayerInVehicle(id,v,0);
  1591.     SetPlayerVirtualWorld(id,1+id);
  1592.     SetVehicleVirtualWorld(v,1+id);
  1593.     SetPlayerVirtualWorld(playerid,1+id);
  1594. //    TogglePlayerControllable(playerid,0);
  1595.     PlayerSpectatePlayer( playerid , id  );
  1596. //  PutPlayerInVehicle(playerid,v,1);
  1597.     new string[64];
  1598.     format(string,64,"play %s",r);
  1599.     Message(playerid,"Press ENTER to stop.");
  1600.     SendClientMessage(id,0,string);
  1601. }
  1602.  
  1603. stock stopspectate( playerid )
  1604. {
  1605. //  TogglePlayerControllable(playerid,1);
  1606.     new s = GetPlayerSkin(playerid);
  1607.     TogglePlayerSpectating(playerid,0);
  1608.     SendClientMessage(GetPlayerVirtualWorld(playerid)-1,0,"stop");
  1609.     SetPlayerVirtualWorld(playerid,0);
  1610.     DestroyVehicle( GetPlayerVirtualWorld(playerid)-1 );
  1611.     RemovePlayerFromVehicle( GetPlayerVirtualWorld(playerid)-1 );
  1612.     SetPlayerSkin(playerid,s);
  1613. //  DestroyVehicle( pCar[playerid] );
  1614. }
  1615.  
  1616. forward stoprecord( playerid );
  1617. public stoprecord( playerid )
  1618. {
  1619.     Message(playerid , "Recording Saved.");
  1620.     PlayerPlaySound(playerid,STOP_SOUND,0,0,0);
  1621.     StopRecordingPlayerData( playerid );
  1622.     Recording[playerid] = 0;
  1623.  
  1624. }
  1625.  
  1626. stock record( playerid , index , cmd[] )// cmd is record name
  1627. {
  1628.         cSet( playerid , index , cmd );
  1629.         new f = index;
  1630.         rRegister( playerid , f );
  1631.         new string[32];
  1632.  
  1633.         new v = GetPlayerVehicleID(playerid);
  1634.         new Float:x,Float:y,Float:z;
  1635.         GetVehiclePos(v,x,y,z);
  1636.         format(string,32,"%f",x);
  1637.         rSet( playerid ,  f ,1,  string );
  1638.         format(string,32,"%f",y);
  1639.         rSet( playerid ,  f ,2,  string );
  1640.         format(string,32,"%f",z);
  1641.         rSet( playerid ,  f ,3,  string );
  1642.         format(string,32,"%d",GetVehicleModel(v));
  1643.         rSet( playerid ,  f ,4,  string );
  1644.         new c = strval(pGet(playerid,5));
  1645.         format(string,32,"%d",c );
  1646.         rSet( playerid ,  f ,5, string );
  1647.         c = strval(pGet(playerid,6));
  1648.         format(string,32,"%d",c);
  1649.         rSet( playerid ,  f ,6,  string );
  1650.         new name[23];
  1651.         GetPlayerName(playerid,name,23);
  1652.         format(string,32,"%sx%d",name,f);
  1653.         StartRecordingPlayerData( playerid , 1 , string);
  1654.         Message(playerid ,  "Recording Started. Press ENTER to stop.");
  1655.         Recording[playerid] = 1;
  1656.         SetTimerEx("stoprecord",3 * 60 * 1000,0,"i",playerid);
  1657.         //tick180(playerid,180);
  1658. }
  1659.  
  1660. forward tick180(i,time);
  1661. public tick180(i,time)
  1662. {
  1663.     if(time <= 180)
  1664.     {
  1665.         new st[10];
  1666.         new s,m;
  1667.         s = time % 60;
  1668.         m = time / 60;
  1669.         format(st,10,"%d:%d",m,s);
  1670.         GameTextForPlayer(i,st,1000,5);
  1671.         SetTimerEx("tick180",1000,0,"ii",i,--time);
  1672.     }
  1673. }
  1674.  
  1675. stock guesswhosnext()
  1676. {
  1677.     for(new i = 0;i < MAX_PLAYERS;i++)
  1678.     {
  1679.         new name[15];
  1680.         GetPlayerName(i,name,15);
  1681.         new str[15];
  1682.         for(new j = 0;j < MAX_PLAYBACK_BOTS;j++)
  1683.         {
  1684.             format(str,15,"BotBotBot%d",j);
  1685.             if(com(name,str)==0)
  1686.             {
  1687.                 if(!IsPlayerInAnyVehicle(i))
  1688.                     return i;
  1689.             }
  1690.         }
  1691.     }
  1692.     return -1;
  1693. }
  1694.  
  1695. strtok(const string[], &index , delimiter = ' ')
  1696. {
  1697.     new length = strlen(string);
  1698.     while ((index < length) && (string[index] <= delimiter))
  1699.     {
  1700.         index++;
  1701.     }
  1702.  
  1703.     new offset = index;
  1704.     new result[20];
  1705.     while ((index < length) && (string[index] > delimiter) && ((index - offset) < (sizeof(result) - 1)))
  1706.     {
  1707.         result[index - offset] = string[index];
  1708.         index++;
  1709.     }
  1710.     result[index - offset] = EOS;
  1711.     return result;
  1712. }
  1713.  
  1714. public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
  1715. {
  1716. //      printf("OnPlayerEnterVehicle %d %d %d ",playerid , vehicleid , ispassenger);
  1717.     return 1;
  1718. }
  1719.  
  1720. public OnPlayerExitVehicle(playerid, vehicleid)
  1721. {
  1722. //  printf("OnPlayerExitVehicle %d %d ",playerid ,vehicleid);
  1723.    
  1724.     if(isadmin( playerid ))
  1725.         if(Make[playerid])
  1726.         {
  1727.             new File:h = fopen( "races.txt" , io_append);
  1728.             new string[256];
  1729.             new Float:x,Float:y,Float:z;
  1730.             GetPlayerPos(playerid,x,y,z);
  1731.             format(string,256,"%f , %f , %f , 10000 , 2 , -1 , -1",x,y,z);
  1732.             fwrite(h,string);
  1733.             fclose(h);
  1734.             fclose(hbot);
  1735.             if(timerforcp)
  1736.             {
  1737.                 KillTimer(timerforcp);
  1738.                
  1739.                 //hbot = File:0;
  1740.             }
  1741.  
  1742.             StopRecordingPlayerData(playerid);
  1743.             Make[playerid] = 0;
  1744.             timetaken = 0;
  1745.             ignordisk[playerid] =0;
  1746.             Message(playerid,"Recoding Stopped.");
  1747.         }
  1748.     return 1;
  1749. }
  1750.  
  1751. new timerint[MAX_PLAYERS] = 0;
  1752. forward ResetTimerInt( playerid );
  1753. public ResetTimerInt( playerid )
  1754. {
  1755.     timerint[playerid] = 0;
  1756.     if(!IsPlayerInAnyVehicle(playerid))
  1757.     {
  1758.         SpawnCar( playerid );
  1759.         if(Race[playerid] != -1)
  1760.         {
  1761.             PlayerLost(playerid,Race[playerid]);
  1762.         }
  1763.         if(mpRace[playerid] == 1)
  1764.         {
  1765.             DisablePlayerRaceCheckpoint(playerid);
  1766.             mpRace[playerid] = 0;
  1767.             Message(playerid,"You quit the race.");
  1768.         }
  1769.  
  1770.     }
  1771. }
  1772.  
  1773. public OnPlayerStateChange(playerid, newstate, oldstate)
  1774. {
  1775. //  printf("OnPlayerStateChange %d %d %d ",playerid , newstate, oldstate);
  1776.  
  1777.     if(oldstate == PLAYER_STATE_DRIVER)
  1778.     {
  1779.         if(timerint[playerid] <= 5)
  1780.         {
  1781.             PutPlayerInVehicle( playerid , pCar[playerid] , 0 );
  1782.             timerint[playerid]++;
  1783.             SetTimerEx("ResetTimerInt",1000,0,"i",playerid);
  1784.         }
  1785.         else
  1786.         {
  1787.             SpawnCar( playerid );
  1788.             if(Race[playerid] != -1)
  1789.             {
  1790.                 PlayerLost(playerid,Race[playerid]);
  1791.             }
  1792.             if(mpRace[playerid] == 1)
  1793.             {
  1794.                 DisablePlayerRaceCheckpoint(playerid);
  1795.                 mpRace[playerid] = 0;
  1796.                 Message(playerid,"You quit the race.");
  1797.             }
  1798.         }
  1799.     }
  1800.     return 1;
  1801. }
  1802.  
  1803. public OnPlayerEnterCheckpoint(playerid)
  1804. {
  1805. //  printf("OnPlayerEnterCheckpoint %d " , playerid );
  1806.     return 1;
  1807. }
  1808.  
  1809. public OnPlayerLeaveCheckpoint(playerid)
  1810. {
  1811.     return 1;
  1812. }
  1813.  
  1814. stock NextCP( playerid )
  1815. {
  1816.     DisablePlayerCheckpoint( playerid );
  1817.     if(Race[playerid] != -1)
  1818.     {
  1819.         new string[128];
  1820.         format(string,128,"checkpoints/%s.cp",Checkpoints[GetCheckpointId(DidUask[playerid])][ename]);
  1821.         printf("%s",string);
  1822.         if(fexist(string))
  1823.         {
  1824.             new File:h = fopen(string,io_read);
  1825.             fseek(h,0);
  1826.             new c = ++CPid[playerid];
  1827.             new l = -1;
  1828.             new pstring[128];
  1829.             do
  1830.             {
  1831.                 new eof = fread(h,string);
  1832.                 l++;
  1833.                 if(eof == 0)
  1834.                     l = 9999;
  1835.             }
  1836.             while(l < c);
  1837.             fread(h,pstring);
  1838.             fclose(h);
  1839.             if(l != 9999)
  1840.             {
  1841.                 new str[128];
  1842.                 new indx = 0;
  1843.                 new Float:x,Float:y,Float:z;
  1844.                 new Float:px,Float:py,Float:pz;
  1845.                 str = strtok( string , indx , ',' );
  1846.                 x = floatstr(str);
  1847.                 str = strtok( string , indx , ',' );
  1848.                 y = floatstr(str);
  1849.                 str= strtok( string , indx , ',' );
  1850.                 z = floatstr( str );
  1851.                 indx = 0;
  1852.                 str = strtok( pstring , indx , ',' );
  1853.                 px = floatstr(str);
  1854.                 str = strtok( pstring , indx , ',' );
  1855.                 py = floatstr(str);
  1856.                 str= strtok( pstring , indx , ',' );
  1857.                 pz = floatstr( str );
  1858.  
  1859.                 if(px == 0.0)
  1860.                 {
  1861.                     str = strtok( pstring , indx , ',' );
  1862.                     py = floatstr(str);
  1863.                     str= strtok( pstring , indx , ',' );
  1864.                     pz = floatstr( str );
  1865.                     c = Checkpoints[Race[playerid]][eid];
  1866.                     px = Checkpoints[c][ex2];
  1867.                     py = Checkpoints[c][ey2];
  1868.                     pz = Checkpoints[c][ez2];
  1869.  
  1870.                 }
  1871.                 SetPlayerRaceCheckpoint(playerid,0,x,y,z-cpbelow,px,py,pz,10);
  1872.             }
  1873.             else
  1874.             {
  1875.                 c = Checkpoints[Race[playerid]][eid];
  1876.                 CPid[playerid] = -1;
  1877.                 SetPlayerRaceCheckpoint( playerid , 2 , Checkpoints[c][ex2],Checkpoints[c][ey2],Checkpoints[c][ez2]-cpbelow,0,0,0,5);
  1878.             }
  1879.         }
  1880.     }
  1881. }
  1882.  
  1883.  
  1884. public OnPlayerEnterRaceCheckpoint(playerid)
  1885. {
  1886. //  printf("OnPlayerEnterRaceCheckpoint %d",playerid);
  1887.     PlayerPlaySound( playerid , CHECKPOINT_ENTER_SOUND , 0 , 0, 0 );
  1888.     if(mpRace[playerid] == 1)
  1889.     {
  1890.         if(MPCounter != max_counts)
  1891.         {
  1892.             return 1;
  1893.         }
  1894.         if(CPid[playerid] != 999)
  1895.             nextMPcp(playerid);
  1896.         else
  1897.         {
  1898.  
  1899.             // finish
  1900.             Finishmp++;
  1901. //          MultiplayerRaceManagement();
  1902.  
  1903.             switch(Finishmp)
  1904.             {
  1905.                 case 1:
  1906.                 {
  1907.                     GameTextForPlayer(playerid,"1st!",4000,4);
  1908.                     GivePlayerMoney(playerid,Prizemp[0]);
  1909.                     new string[256];
  1910.                     new name[23];
  1911.                     GetPlayerName(playerid,name,23);
  1912.                     format(string,256,"%s finished 1st.",name);
  1913.                     for(new i  = 0; i< MAX_PLAYERS;i++)
  1914.                         if(mpRace[i] == 1)
  1915.                             Message(i,string);
  1916.                     format(string,256,"- Won a multiplayer race for $%d. [ Balance: $%d ]",Prizemp[0],GetPlayerMoney(playerid));
  1917.                     writeracelog( playerid , string );
  1918.  
  1919.                     new str[5];
  1920.                     new v = strval(pGet(playerid,10));
  1921.                     valstr(str,v+1);
  1922.                     pSet(playerid,10,str);
  1923.                     PlayerPlaySound(playerid,WON_RACE_SOUND,0,0,0);
  1924.                 }
  1925.                 case 2:
  1926.                 {
  1927.                     new temp = 0;
  1928.                    
  1929.                     for(new i = 0;i < MAX_PLAYERS;i++)
  1930.                     {
  1931.                         if(mpRace[i] == 1)
  1932.                             temp++;
  1933.                     }
  1934.                     if(temp >= 5)
  1935.                     {
  1936.                         GameTextForPlayer(playerid,"2nd!",4000,4);
  1937.                         GivePlayerMoney(playerid,Prizemp[1]);
  1938.                         new string[256];
  1939.                         new name[23];
  1940.                         GetPlayerName(playerid,name,23);
  1941.                         format(string,256,"%s finished 2nd.",name);
  1942.                         for(new i  = 0; i< MAX_PLAYERS;i++)
  1943.                             if(mpRace[i] == 1)
  1944.                                 Message(i,string);
  1945.                         format(string,256,"- Won a multiplayer race for $%d. [ Balance: $%d ]",Prizemp[1],GetPlayerMoney(playerid));
  1946.                         writeracelog( playerid , string );
  1947.                     }
  1948.                 }
  1949.                 case 3:
  1950.                 {
  1951.                     new temp = 0;
  1952.                     for(new i = 0;i < MAX_PLAYERS;i++)
  1953.                     {
  1954.                         if(mpRace[i] == 1)
  1955.                             temp++;
  1956.                     }
  1957.                     if(temp >= 7)
  1958.                     {
  1959.                         GameTextForPlayer(playerid,"3rd!",4000,4);
  1960.                         GivePlayerMoney(playerid,Prizemp[2]);
  1961.                         new string[256];
  1962.                         new name[23];
  1963.                         GetPlayerName(playerid,name,23);
  1964.                         format(string,256,"%s finished 3rd.",name);
  1965.                         for(new i  = 0; i< MAX_PLAYERS;i++)
  1966.                             if(mpRace[i] == 1)
  1967.                                 Message(i,string);
  1968.                         format(string,256,"- Won a multiplayer race for $%d. [ Balance: $%d ]",Prizemp[2],GetPlayerMoney(playerid));
  1969.                         writeracelog( playerid , string );
  1970.                     }
  1971.                 }
  1972.                 default:
  1973.                 {
  1974.                     new string[25];
  1975.                     format(string,25,"%dth!",Finishmp);
  1976.                     new name[23];
  1977.                     GetPlayerName(playerid,name,23);
  1978.                     format(string,256,"%s finished dth.",name,Finishmp);
  1979.                     for(new i  = 0; i< MAX_PLAYERS;i++)
  1980.                         if(mpRace[i] == 1)
  1981.                             Message(i,string);
  1982.                     GameTextForPlayer(playerid,string,4000,4);
  1983.                 }
  1984.             }
  1985.             mpRace[playerid] = 0;
  1986.             new temp = 0;
  1987.             for(new i = 0;i < MAX_PLAYERS;i++)
  1988.             {
  1989.                 if(mpRace[i] == 1)
  1990.                     temp++;
  1991.             }
  1992.             if(temp < 1)
  1993.             {
  1994.                 mp = -1;
  1995.                 MultiplayerRaceManagement();
  1996.             }
  1997.            
  1998.             CPid[playerid] = -1;
  1999.             DisablePlayerRaceCheckpoint(playerid);
  2000.         }
  2001.         return 1;
  2002.     }
  2003.     if(IsPlayerNPC(playerid))
  2004.     {
  2005.         if(playerid < max_checkpoints)
  2006.         {
  2007.             new i;
  2008.             for(i = 0;i < MAX_PLAYERS;i++)
  2009.             {
  2010.                 if(IsPlayerConnected(i))
  2011.                 {
  2012.                     if(Race[i] == playerid)
  2013.                     {
  2014.                         if(!IsPlayerNPC(i))
  2015.                         {
  2016.  
  2017.                             DisablePlayerRaceCheckpoint( playerid );
  2018.                             DisablePlayerRaceCheckpoint( i );
  2019.                             new string[30],name[23];
  2020.                             GetPlayerName(playerid,name,23);
  2021.                             PlayerLost( i , GetCheckpoint(name));
  2022.                             format(string,30,"finish %s",name);
  2023.                             SendClientMessage(playerid,0,string);
  2024.                             break;
  2025.                         }
  2026.                     }
  2027.                 }
  2028.             }
  2029.         }
  2030.     }
  2031.     else
  2032.     {
  2033.         if(CPid[playerid] == -1)
  2034.         {
  2035.             DisablePlayerRaceCheckpoint( playerid );
  2036.             DisablePlayerRaceCheckpoint( Race[playerid] );
  2037.             new string[30],name[23];
  2038.             GetPlayerName(Race[playerid],name,23);
  2039.             format(string,30,"finish %s",name);
  2040.             SendClientMessage(Race[playerid],0,string);
  2041.             PlayerWon( playerid , GetCheckpoint(name));
  2042.             PlayerPlaySound(playerid, WON_RACE_SOUND,0,0,0);
  2043.         }
  2044.         else
  2045.         {
  2046.             NextCP( playerid );
  2047.         }
  2048.  
  2049.     }
  2050.     return 1;
  2051. }
  2052.  
  2053. stock PlayerLost( playerid , with )
  2054. {
  2055.     printf("playerlost");
  2056.     with = GetCheckpointId(with);
  2057.     new amount = Checkpoints[with][emoney]/Checkpoints[with][eratio];
  2058.     if(GetPlayerMoney(playerid) > amount)
  2059.     {
  2060.         GivePlayerMoney( playerid , -amount);
  2061.         new string[256];
  2062.         format(string,256,"- Lost a race with %s for $%d. [ Balance: $%d ]",Checkpoints[with][ename],amount,GetPlayerMoney(playerid));
  2063.         writeracelog( playerid , string );
  2064.     }
  2065.     else
  2066.     {
  2067.         GivePlayerMoney(playerid,-GetPlayerMoney(playerid));
  2068.         new string[256];
  2069.         format(string,256,"- Lost a race with %s for $%d. [ Balance: $%d ]",Checkpoints[with][ename],GetPlayerMoney(playerid),GetPlayerMoney(playerid));
  2070.         writeracelog( playerid , string );
  2071.     }
  2072.     new name[23];
  2073.     GetPlayerName(Race[playerid],name,23);
  2074.     new string[128];
  2075.     format(string,30,"finish %s",name);
  2076.     SendClientMessage(with,0,string);
  2077.     DidUask[playerid] = -1;
  2078.     format(string,128,"You lost $%d to %s.",amount,name);
  2079.     ShowDialog( playerid , dLost, 0 ,"You lost the race !",string,"Ok","Cancel");
  2080.     Race[with] = -1;
  2081.     Race[playerid] = -1;
  2082.     CPid[playerid] = -1;
  2083.     PlayerPlaySound(playerid,LOST_RACE_SOUND,0,0,0);
  2084.     DisablePlayerRaceCheckpoint( playerid );
  2085. }
  2086.  
  2087. stock PlayerWon( playerid , with )
  2088. {
  2089.     GivePlayerMoney(playerid,Checkpoints[with][emoney]);
  2090.     new string[256];
  2091.     format(string,256,"+ Won a race with %s for $%d. [ Balance: $%d ]",Checkpoints[with][ename],Checkpoints[with][emoney],GetPlayerMoney(playerid));
  2092.     writeracelog( playerid , string );
  2093.     new name[23];
  2094.     GetPlayerName(Race[playerid],name,23);
  2095.     format(string,128,"You won $%d from %s.",Checkpoints[with][emoney],name);
  2096.     ShowDialog( playerid , dWon, 0 ,"You won the race !",string,"Ok","Cancel");
  2097.     DidUask[playerid] = -1;
  2098.     Race[playerid] = -1;
  2099.     Race[with] = -1;
  2100.     bSet( playerid , with , 1 );
  2101.     PlayerPlaySound(playerid,WON_RACE_SOUND+1,0,0,0);
  2102. }
  2103.  
  2104. public OnPlayerLeaveRaceCheckpoint(playerid)
  2105. {
  2106.     return 1;
  2107. }
  2108.  
  2109. public OnRconCommand(cmd[])
  2110. {
  2111.     return 1;
  2112. }
  2113.  
  2114. public OnPlayerRequestSpawn(playerid)
  2115. {
  2116.     return 1;
  2117. }
  2118.  
  2119. public OnObjectMoved(objectid)
  2120. {
  2121.     return 1;
  2122. }
  2123.  
  2124. public OnPlayerObjectMoved(playerid, objectid)
  2125. {
  2126.     return 1;
  2127. }
  2128. new Blind[MAX_PLAYERS];
  2129. new UnBlind[MAX_PLAYERS];
  2130.  
  2131. forward BlindPlayer(playerid);
  2132. public BlindPlayer(playerid)
  2133. {
  2134.     SetPlayerWeather(playerid,499);
  2135.     SetTimerEx("UnBlindPlayer",500,0,"i",playerid);
  2136.     UnBlind[playerid]++;
  2137.     if(UnBlind[playerid] == 10)
  2138.     {
  2139.         KillTimer(Blind[playerid]);
  2140.         UnBlind[playerid]= 0;
  2141.     }
  2142. }
  2143. forward UnDrunk(playerid,i);
  2144. public UnDrunk(playerid,i)
  2145. {
  2146.     SetPlayerDrunkLevel(playerid,0);
  2147. }
  2148.  
  2149. forward UnBlindPlayer(playerid,i);
  2150. public UnBlindPlayer(playerid,i)
  2151. {
  2152.     SetPlayerWeather(playerid,default_weather);
  2153. }
  2154. public OnPlayerPickUpPickup(playerid, pickupid)
  2155. {
  2156.     if(DiskP[playerid] != -1) // disk
  2157.     {
  2158.         if(!IsPlayerNPC(playerid) && GetPlayerWantedLevel(playerid)!=6)
  2159.         switch(DiskT[playerid])
  2160.         {
  2161.             case skid:
  2162.             {
  2163.                 new v = GetPlayerVehicleID(playerid);
  2164.                 new Float:x,Float:y,Float:z,Float:a;
  2165.                 GetVehiclePos( v , x,y,z);
  2166.                 GetVehicleZAngle( v, a);
  2167.                 new Float:x1,Float:y1;
  2168.                 if(random(1)==0)
  2169.                     a = a + 90;
  2170.                 else
  2171.                     a = a -90;
  2172.                
  2173.                 x1 = getXfromDistance( x , 1000 , a );
  2174.                 y1 = getYfromDistance( y , 1000 , a );
  2175.                 SetVehicleVelocity(v,(x-x1)/(2000),(y1-y)/(2000),0);
  2176.  
  2177.                 GameTextForPlayer(playerid,"+ skid",2000,1);
  2178.                 SetPlayerChatBubble(playerid,"skid!",GetPlayerColor(playerid),10,10*1000);
  2179.             }
  2180.             case jump:
  2181.             {
  2182.                 new Float:x,Float:y,Float:z;
  2183.                 new v = GetPlayerVehicleID(playerid);
  2184.                 GetVehicleVelocity(v,x,y,z);
  2185.                 SetVehicleVelocity(v,x*1.5,y*1.5,z+0.3);
  2186.                 GameTextForPlayer(playerid,"+ jump",2000,1);
  2187.                 SetPlayerChatBubble(playerid,"jump!",GetPlayerColor(playerid),10,10*1000);
  2188.             }
  2189.             case snail:
  2190.             {
  2191.                 new Float:x,Float:y,Float:z;
  2192.                 new v = GetPlayerVehicleID(playerid);
  2193.                 GetVehicleVelocity(v,x,y,z);
  2194.                 SetVehicleVelocity(v,0,0,0);
  2195.                 GameTextForPlayer(playerid,"+ snail",2000,1);
  2196.                 SetPlayerChatBubble(playerid,"snail!",GetPlayerColor(playerid),10,10*1000);
  2197.             }
  2198.             case blind:
  2199.             {
  2200.                 KillTimer(Blind[playerid]);
  2201.                 Blind[playerid] = SetTimerEx("BlindPlayer",1000,1,"i",playerid);
  2202.                 GameTextForPlayer(playerid,"+ blind",2000,1);
  2203.                 SetPlayerChatBubble(playerid,"blind!",GetPlayerColor(playerid),10,10*1000);
  2204.             }
  2205.             case drunk:
  2206.             {
  2207.                 SetPlayerDrunkLevel(playerid,500000);
  2208.                 SetTimerEx("UnDrunk",30*1000,0,"i",playerid);
  2209.                 GameTextForPlayer(playerid,"+ drunk",2000,1);
  2210.                 SetPlayerChatBubble(playerid,"drunk!",GetPlayerColor(playerid),10,10*1000);
  2211.             }
  2212.             case rain:
  2213.             {
  2214.                 SetPlayerWeather(playerid,8);
  2215.                 SetTimerEx("UnBlindPlayer",30*1000,0,"i",playerid);
  2216.                 GameTextForPlayer(playerid,"+ rain",2000,1);
  2217.                 SetPlayerChatBubble(playerid,"rain!",GetPlayerColor(playerid),10,10*1000);
  2218.             }
  2219.             case storm:
  2220.             {
  2221.                 SetPlayerWeather(playerid,19);
  2222.                 SetTimerEx("UnBlindPlayer",30*1000,0,"i",playerid);
  2223.                 GameTextForPlayer(playerid,"+ storm",2000,1);
  2224.                 SetPlayerChatBubble(playerid,"storm!",GetPlayerColor(playerid),10,10*1000);
  2225.             }
  2226.             case fog:
  2227.             {
  2228.                 SetPlayerWeather(playerid,9);
  2229.                 SetTimerEx("UnBlindPlayer",30*1000,0,"i",playerid);
  2230.                 GameTextForPlayer(playerid,"+ fog",2000,1);
  2231.                 SetPlayerChatBubble(playerid,"fog!",GetPlayerColor(playerid),10,10*1000);
  2232.             }
  2233.             case blast:
  2234.             {
  2235.                 new Float:x,Float:y,Float:z;
  2236.                 new v = GetPlayerVehicleID(playerid);
  2237.                 GetVehiclePos(v,x,y,z);
  2238.                 CreateExplosion(x,y,z,3,20);
  2239.                 GameTextForPlayer(playerid,"+ blast",2000,1);
  2240.                 SetPlayerChatBubble(playerid,"blast!",GetPlayerColor(playerid),10,10*1000);
  2241.             }
  2242.             case reverse:
  2243.             {
  2244.                 new v = GetPlayerVehicleID(playerid);
  2245.                 new Float:z;
  2246.                 new Float:x,Float:y;
  2247.                 GetVehicleVelocity(v,x,y,z);
  2248.                 SetVehicleVelocity(v,-x,-y,z);
  2249.                 GetVehicleZAngle(v,z);
  2250.                 SetVehicleZAngle(v,z+180);
  2251.                 GameTextForPlayer(playerid,"+ reverse",2000,1);
  2252.                 SetPlayerChatBubble(playerid,"reverse!",GetPlayerColor(playerid),10,10*1000);
  2253.             }
  2254.             case bounce:
  2255.             {
  2256.                 new v = GetPlayerVehicleID(playerid);
  2257.                 new Float:z;
  2258.                 new Float:x,Float:y;
  2259.                 GetVehicleVelocity(v,x,y,z);
  2260.                 SetVehicleVelocity(v,-x,-y,z);
  2261.                 GameTextForPlayer(playerid,"+ bounce",2000,1);
  2262.                 SetPlayerChatBubble(playerid,"bounce!",GetPlayerColor(playerid),10,10*1000);
  2263.             }
  2264.         }
  2265.    
  2266.         DeleteDisk(playerid);
  2267.         PlayerPlaySound(playerid,DISK_PICK_SOUND,0,0,0);
  2268.     }
  2269.     else
  2270.     {
  2271.  
  2272.     }
  2273.     return 1;
  2274. }
  2275.  
  2276.  
  2277. forward RemoveComponent( playerid , componentid);
  2278. public RemoveComponent( playerid , componentid)
  2279. {
  2280.     new v = GetPlayerVehicleID(playerid);
  2281.     RemoveVehicleComponent( v,componentid);
  2282.     if(componentid == 1008)
  2283.     {
  2284.         GivePlayerMoney(playerid,500);
  2285.         AddVehicleComponent(v , 1008 );
  2286.     }
  2287.     if(componentid == 1009)
  2288.     {
  2289.         GivePlayerMoney(playerid,200);
  2290.         AddVehicleComponent(v , 1008 );
  2291.     }
  2292.     if(componentid == 1010)
  2293.     {
  2294.         AddVehicleComponent(v , 1008 );
  2295.         GivePlayerMoney(playerid,1000);
  2296.     }
  2297. }
  2298. public OnVehicleMod(playerid, vehicleid, componentid)
  2299. {
  2300. //  printf("OnVehicleMod %d %d ", vehicleid,componentid);
  2301.     new slot = GetVehicleComponentType(componentid)+1;
  2302.     if((componentid == 1010 ) || (componentid == 1009 ) || (componentid == 1008))
  2303.         return SetTimerEx("RemoveComponent",2000,0,"ii",playerid,componentid);
  2304.  
  2305.     new str[30];
  2306.     valstr(str,componentid);
  2307.     cSet( playerid , slot , str );
  2308.     return 1;
  2309. }
  2310.  
  2311. public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
  2312. {
  2313. //  printf("OnVehiclePaintJob %d %d %d",playerid, vehicleid,paintjobid);
  2314.     new str[30];
  2315.     valstr(str,paintjobid+1);
  2316.     cSet(playerid,15,str);
  2317. //  printf("%s",str);
  2318.     SetPlayerColor(playerid,COLOR_WHITE);
  2319.     return 1;
  2320. }
  2321.  
  2322. public OnVehicleRespray(playerid, vehicleid, color1, color2)
  2323. {
  2324. //  printf("OnVehicleRespray %d %d %d %d ", playerid,vehicleid,color1,color2);
  2325.     new str[30];
  2326.     valstr(str,color1);
  2327.     pSet( playerid , 5 , str );
  2328.     valstr(str,color2);
  2329.     pSet( playerid , 6 , str );
  2330.     SetPlayerColor(playerid,GetPlayerColorFromCarColor( color1 ));
  2331.     return 1;
  2332. }
  2333.  
  2334. public OnPlayerSelectedMenuRow(playerid, row)
  2335. {
  2336.     return 1;
  2337. }
  2338.  
  2339. public OnPlayerExitedMenu(playerid)
  2340. {
  2341.     return 1;
  2342. }
  2343.  
  2344. public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
  2345. {
  2346.     return 1;
  2347. }
  2348. new twiceU[MAX_PLAYERS];
  2349. forward TwiceU(playerid);
  2350. public TwiceU(playerid)
  2351. {
  2352.     twiceU[playerid] = 0;
  2353. }
  2354.  
  2355. new mpTimer;
  2356.  
  2357.  
  2358.  
  2359. SetRace( playerid )
  2360. {
  2361.     new Float:rot;
  2362.    
  2363.     new v = GetPlayerVehicleID(playerid);
  2364.     GetVehicleZAngle(Checkpoints[mp][ev],rot);
  2365.     SetVehiclePos(v,Checkpoints[mp][ex1],Checkpoints[mp][ey1],Checkpoints[mp][ez1]);
  2366.     SetPlayerRaceCheckpoint(playerid,0, Checkpoints[mp][ex1],Checkpoints[mp][ey1],Checkpoints[mp][ez1],Checkpoints[mp][ex1],Checkpoints[mp][ey1],Checkpoints[mp][ez1]-10000,25);
  2367.     SetVehicleZAngle(v,rot);
  2368.     SetVehicleVelocity( v , 0,0,0.3);
  2369.     mpRace[playerid] = 1;
  2370.     new totalplayers = 0;
  2371.     for(new i = 0;i < MAX_PLAYERS;i++)
  2372.     {
  2373.         if(mpRace[i] == 1)
  2374.         {
  2375.             totalplayers++;
  2376.         }
  2377.     }
  2378.    
  2379.     if(totalplayers == min_players)
  2380.     {
  2381.         mpTimer = SetTimerEx("CountMP",2000,1,"");
  2382.     }
  2383.  
  2384.     if(totalplayers >= min_players)
  2385.     {
  2386.         MPCounter = 0;
  2387.     }
  2388.     else
  2389.     {
  2390.         Message(playerid,"Waiting for more players...");
  2391.     }
  2392. }
  2393.  
  2394. forward CountMP();
  2395. public CountMP()
  2396. {
  2397.     MPCounter++;
  2398.  
  2399.     if(MPCounter == max_counts)
  2400.     {
  2401.         KillTimer(mpTimer);
  2402.         StartMPRace();
  2403.         for(new i = 0;i < MAX_PLAYERS;i++)
  2404.         {
  2405.             if(mpRace[i] == 1)
  2406.             {
  2407.                 GameTextForPlayer(i,"GO!",1000,5);
  2408.                 //SetTimer("MultiplayerRaceManagement",10*60*1000,0);
  2409.                 PlayerPlaySound( i , GO_SOUND , 0 , 0, 0 );
  2410.             }
  2411.         }
  2412.     }
  2413.     else
  2414.     {
  2415.         new str[25];
  2416.         valstr(str,max_counts-MPCounter);
  2417.         for(new i = 0;i < MAX_PLAYERS;i++)
  2418.         {
  2419.             if(mpRace[i] == 1)
  2420.             {
  2421.                 GameTextForPlayer(i,str,1000,5);
  2422.                 PlayerPlaySound( i , COUNTDOWN_SOUND , 0 , 0, 0 );
  2423.             }
  2424.         }
  2425.     }
  2426. }
  2427.  
  2428. StartMPRace( )
  2429. {
  2430.     for(new i = 0;i < MAX_PLAYERS;i++)
  2431.     {
  2432.         if(mpRace[i] == 1)
  2433.         {
  2434.             nextMPcp( i );
  2435.             CPid[i] = -1; //check
  2436.         }
  2437.     }
  2438. }
  2439.  
  2440. nextMPcp( playerid )
  2441. {
  2442.     if(mpRace[playerid] != -1)
  2443.     {
  2444.         new string[128];
  2445.         format(string,128,"checkpoints/%s.cp",Checkpoints[mp][ename]);
  2446.  
  2447.         if(fexist(string))
  2448.         {
  2449.             new File:h = fopen(string,io_read);
  2450.             fseek(h,0);
  2451.             new c = ++CPid[playerid];
  2452.             new l = -1;
  2453.             new pstring[128];
  2454.             do
  2455.             {
  2456.                 fread(h,string);
  2457.                 l++;
  2458.  
  2459.             }
  2460.             while(l < c);
  2461.             new eof = fread(h,pstring);
  2462.             if(eof == 0)
  2463.                 l = 9999;
  2464.             fclose(h);
  2465.             if(l != 9999)
  2466.             {
  2467.                 new str[128];
  2468.                 new indx = 0;
  2469.                 new Float:x,Float:y,Float:z;
  2470.                 new Float:px,Float:py,Float:pz;
  2471.                 str = strtok( string , indx , ',' );
  2472.                 x = floatstr(str);
  2473.                 str = strtok( string , indx , ',' );
  2474.                 y = floatstr(str);
  2475.                 str= strtok( string , indx , ',' );
  2476.                 z = floatstr( str );
  2477.                 indx = 0;
  2478.                 str = strtok( pstring , indx , ',' );
  2479.                 px = floatstr(str);
  2480.                 str = strtok( pstring , indx , ',' );
  2481.                 py = floatstr(str);
  2482.                 str= strtok( pstring , indx , ',' );
  2483.                 pz = floatstr( str );
  2484.  
  2485.                 if(px == 0.0)
  2486.                 {
  2487.                     str = strtok( pstring , indx , ',' );
  2488.                     py = floatstr(str);
  2489.                     str= strtok( pstring , indx , ',' );
  2490.                     pz = floatstr( str );
  2491.                     c = Checkpoints[Race[playerid]][eid];
  2492.                     px = Checkpoints[c][ex2];
  2493.                     py = Checkpoints[c][ey2];
  2494.                     pz = Checkpoints[c][ez2];
  2495.  
  2496.                 }
  2497.                 SetPlayerRaceCheckpoint(playerid,0,x,y,z-cpbelow,px,py,pz,10);
  2498.             }
  2499.             else
  2500.             {
  2501.                 c = mp;
  2502.                 CPid[playerid] = 999;
  2503.                 SetPlayerRaceCheckpoint( playerid , 2 , Checkpoints[c][ex2],Checkpoints[c][ey2],Checkpoints[c][ez2]-cpbelow,0,0,0,5);
  2504.             }
  2505.         }
  2506.     }
  2507. }
  2508.  
  2509. forward UpdateNitrox( playerid );
  2510. public UpdateNitrox( playerid )
  2511. {
  2512.  
  2513.                                
  2514.     if((GetNitrox( playerid )>0) && (GetKeys(playerid) == 12))
  2515.     {
  2516.         SetNitrox( playerid , GetNitrox( playerid ) - 1);
  2517.         SetTimerEx("UpdateNitrox",100,0,"i",playerid);
  2518. //      printf("his key %d and now ?",GetKeys(playerid));
  2519.     }
  2520.     else
  2521.     {
  2522.         RemoveVehicleComponent( GetPlayerVehicleID(playerid ) , 1008);
  2523.     }
  2524. }
  2525.  
  2526. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  2527. {
  2528.     pKey[playerid] = newkeys;
  2529. //  printf("OnPlayerKeyStateChange %d %d %d", playerid , newkeys , oldkeys );
  2530.     if(newkeys == 12) // NITROX
  2531.     {
  2532.         if(GetNitrox(playerid)>0)
  2533.         {
  2534.             SetNitrox(playerid,GetNitrox(playerid)-1);
  2535.             AddVehicleComponent(GetPlayerVehicleID(playerid),1008);
  2536.             SetTimerEx("UpdateNitrox",100,0,"i",playerid);
  2537.         }
  2538.     }
  2539.     if(oldkeys == 4)
  2540.     {
  2541.         RemoveVehicleComponent(GetPlayerVehicleID(playerid),1008);
  2542.         AddVehicleComponent(GetPlayerVehicleID(playerid),1008);
  2543.     }
  2544.     if(oldkeys == 16)
  2545.     {
  2546.         if(GetPlayerVirtualWorld(playerid)>1)
  2547.             stopspectate(playerid);
  2548.         if(Recording[playerid] == 1)
  2549.         {
  2550.             if(GetPlayerVirtualWorld(playerid) == 0)
  2551.                 stoprecord(playerid);
  2552.         }
  2553.     }
  2554.    
  2555.     if(oldkeys == 512)
  2556.     {
  2557.         if(GetPlayerVirtualWorld(playerid)==0)
  2558.             ShowDialog( playerid , dGoto , 2 , "GOTO" , "Change Spawn\nCar Shop\nMultiplayer Race\nRace Log\nAdmins Online\nChange Chat Channel\nHelp" , "Ok" , "Cancel" );
  2559.     }
  2560.     if(oldkeys == 2)
  2561.     {
  2562.  
  2563.         if(Race[playerid] != -1)
  2564.         {
  2565.             PlayerLost( playerid , Race[playerid] );
  2566.         }
  2567.  
  2568.         else if(mpRace[playerid] == 1)
  2569.         {
  2570.             mpRace[playerid] = 0;
  2571.             DisablePlayerRaceCheckpoint( playerid );
  2572.             Message(playerid,"You left the race.");
  2573.            
  2574.             if(MPCounter == max_counts)
  2575.             {
  2576.                 // between a race
  2577.                 new totalplayers = 0;
  2578.                 for(new i = 0;i < MAX_PLAYERS;i++)
  2579.                 {
  2580.                     if(mpRace[i] == 1)
  2581.                     {
  2582.                         totalplayers++;
  2583.                     }
  2584.                 }
  2585.                 if(totalplayers == 0)
  2586.                 {
  2587.                     MultiplayerRaceManagement();
  2588.                 }
  2589.             }
  2590.             else if(MPCounter > 0)
  2591.             {
  2592.                 // at counter
  2593.                 new totalplayers = 0;
  2594.                 for(new i = 0;i < MAX_PLAYERS;i++)
  2595.                 {
  2596.                     if(mpRace[i] == 1)
  2597.                     {
  2598.                         totalplayers++;
  2599.                     }
  2600.                 }
  2601.  
  2602.                 if(totalplayers < min_players)
  2603.                 {
  2604.                     KillTimer(mpTimer);
  2605.                 }
  2606.                 MPCounter = 0;
  2607.             }
  2608.         }
  2609.     }
  2610. /*
  2611.     if((Finishmp == 0) && (Race[playerid] == -1))
  2612.     {
  2613.         if((oldkeys == 1) && (MPCounter == 0))
  2614.         {
  2615.             if(mpRace[playerid] == 0)
  2616.             {
  2617.                 new str[5];
  2618.                 new v = strval(pGet(playerid,9));
  2619.                 valstr(str,v+1);
  2620.                 pSet(playerid,9,str);
  2621.                 SetRace( playerid );
  2622.             }
  2623.         }
  2624.  
  2625.     }
  2626. */
  2627.     if(DidUask[playerid] != -1)
  2628.     if(oldkeys == 2)
  2629.     {
  2630.         new bot = DidUask[playerid];
  2631.         if(GetDistanceBetweenPlayers(playerid,bot) <= 15)
  2632.         {
  2633.             new string[512];
  2634.             //printf("hm");
  2635.  
  2636.             GetPlayerName(bot,string,23);
  2637. //          printf("hm");
  2638.             new c = GetCheckpoint(string);
  2639.             new Float:rot;
  2640.             printf("fuck %d %s",c,string);
  2641.             GetVehicleZAngle(GetPlayerVehicleID(bot),rot);
  2642.             new v = GetPlayerVehicleID(playerid);
  2643.             SetVehicleZAngle(v,rot);
  2644.             SetVehicleVelocity(v,0,0,0);
  2645.             //printf("c %d",c);
  2646.             new Float:d = GetDistance(Checkpoints[c][ex1],Checkpoints[c][ey1],Checkpoints[c][ez1],Checkpoints[c][ex2],Checkpoints[c][ey2],Checkpoints[c][ez2]);
  2647.  
  2648.             //printf("hm");
  2649.             format(string,512,"Description: Bot races are simple, the person who reaches the \
  2650.            red marker first wins. The price the challenger gets and the challenge acceptor gets\
  2651.             can vary in these types of races.\n\n\n\
  2652.             Name:%s\nDistance:%f\nYou win:$%d\nI win:$%d\n\n",Checkpoints[c][ename],d,Checkpoints[c][emoney],Checkpoints[c][emoney]/Checkpoints[c][eratio]);
  2653.     //      printf("hm");
  2654.             ShowDialog(playerid,dRace,0,"Bot Race !",string,"Accept","Reject");
  2655.     //      printf("hm");
  2656.         }
  2657.     }
  2658.    
  2659.     if(newkeys == 8)
  2660.     {
  2661.         if(twiceU[playerid] == 1)
  2662.         {
  2663.             if(GetPlayerWantedLevel(playerid) > 0 )
  2664.             {
  2665.                 new Float:a;
  2666.                 SetPlayerWantedLevel(playerid,GetPlayerWantedLevel(playerid)-1);
  2667.                 new Float:x,Float:y,Float:z;
  2668.                 new v = GetPlayerVehicleID(playerid);
  2669.                 GetVehiclePos( v , x,y,z);
  2670.                 GetVehicleZAngle( v, a);
  2671.                 new Float:x1,Float:y1;
  2672.                 x1 = getXfromDistance( x , 1000 , a );
  2673.                 y1 = getYfromDistance( y , 1000 , a );
  2674.                 new Float:x2,Float:y2,Float:z2;
  2675.                 GetVehicleVelocity(v,x2,y2,z2);
  2676.                 SetVehicleVelocity(v,x2+(x-x1)/(1000),y2+(y1-y)/(1000),0);
  2677.                 GetXYbehindPlayer( v, 0.5, x , y  );
  2678.                 CreateExplosion( x  , y , z , 4 , 10 );
  2679.                 //SetPlayerArmour(playerid, 100);
  2680.                 PlayerPlaySound(playerid,DISK_SOUND,0,0,0);
  2681.             }
  2682.         }
  2683.         else
  2684.         {
  2685.             twiceU[playerid] = 1;
  2686.             SetTimerEx("TwiceU",200,0,"i",playerid);
  2687.         }
  2688.     }
  2689.     // down key is 32
  2690.     if(GetPlayerVirtualWorld( playerid ) > 1000 )
  2691.     {
  2692.         if(newkeys == KEY_LOOK_LEFT)
  2693.         {
  2694.             new id = GetPlayerVirtualWorld( playerid ) - 1000;
  2695.             if(id == 1)
  2696.                 id = sizeof(cars);
  2697.             ShowCar( playerid ,id - 1 );
  2698.         }
  2699.         else if(newkeys == KEY_LOOK_RIGHT)
  2700.         {
  2701.             new id = GetPlayerVirtualWorld( playerid ) - 1000;
  2702.             if(id == sizeof(cars)-1)
  2703.                 id = 0;
  2704.             ShowCar( playerid ,id + 1 );
  2705.         }
  2706.         else if(newkeys == KEY_SECONDARY_ATTACK)
  2707.         {
  2708.             if(pCar[playerid])
  2709.                 ShowDialog( playerid , dExit , 0 ,"Car Shop" , "Are you sure you to leave ?", "Ok","Cancel");
  2710.         }
  2711.         else if(newkeys == KEY_SPRINT)
  2712.         {
  2713.             new level = GetPlayerLevel(playerid);
  2714.             new id = GetPlayerVirtualWorld( playerid ) - 1000;
  2715.             new pcar = GetModelCost( strval( pGet( playerid , 4 ) ) );
  2716.             new got = GetPlayerMoney( playerid ) + pcar;
  2717.             if(level < cars[id][elevel])
  2718.             {
  2719.                 ShowDialog( playerid , dCant , 0 , "Car Shop" , "The car is locked.", "Ok" , "Cancel" );
  2720.             }
  2721.             else
  2722.             if(cars[id][ecost] < got)
  2723.             {
  2724.                 new cash;
  2725.                 if(pcar > cars[id][ecost])
  2726.                 {
  2727.                     cash = 0;
  2728.                 }
  2729.                 else
  2730.                 {
  2731.                     cash = cars[id][ecost] - pcar;
  2732.                 }
  2733.                 new string[256];
  2734.                 format(string,256,"Are you sure you want to exchange this car for $%d.",cash);
  2735.                 ShowDialog( playerid , dPurchase , 0 , "Car Shop" , string , "Ok" , "Cancel" );
  2736.                 Purchase[playerid] = cash;
  2737.             }
  2738.             else
  2739.             {
  2740.                 new string[256];
  2741.                 new cash = cars[id][ecost] - pcar - GetPlayerMoney( playerid );
  2742.                 format(string,256,"You will need more $%d to exchange this car.",cash);
  2743.                 ShowDialog( playerid , dCant , 0 , "Car Shop" , string , "Ok" , "Cancel" );
  2744.             }
  2745.         }
  2746.     }
  2747.     return 1;
  2748. }
  2749. stock GetPlayerLevel(playerid)
  2750. {
  2751.     new win = strval(pGet( playerid, 3));
  2752.     new level = 1;
  2753.     if(win >= 20)
  2754.         level = 4;
  2755.     else if(win >= 10)
  2756.         level = 3;
  2757.     else if(win >= 5)
  2758.         level = 2;
  2759.     return level;
  2760. }
  2761.  
  2762. public OnRconLoginAttempt(ip[], password[], success)
  2763. {
  2764.     return 1;
  2765. }
  2766.  
  2767. new Money[MAX_PLAYERS];
  2768. public OnPlayerUpdate(playerid)
  2769. {
  2770.     new str[64];
  2771.     new Float:v,Float:x,Float:y,Float:z;
  2772.     GetVehicleVelocity(GetPlayerVehicleID(playerid),x,y,z);
  2773.     if(x < 0) x = x + -x + -x;
  2774.     if(y < 0) y = y + -y + -y;
  2775.     if(z < 0) z = z + -z + -z;
  2776.     v = ((x * 1) + (y * 1) + (z * 1))*70;
  2777.     format(str,20,"\n\n%.2fkmph",v);
  2778.     Update3DTextLabelText(DDD[playerid],GetPlayerColor(playerid),str);
  2779.     SetSpeed(playerid,floatround(v));
  2780.  
  2781. //  SetPlayerHealth( playerid , 1000 ); // manage health
  2782.  
  2783.  
  2784.     new name[23];
  2785.     GetPlayerName(playerid,name,23);
  2786.     format(str,64,"\n\n\n\n\n\n\n\nName: %s\nCash: $%d",name,GetPlayerMoney(playerid));
  2787.     Update3DTextLabelText(DDD2[playerid],GetPlayerColor(playerid),str);
  2788.  
  2789.     if(IsPlayerNPC(playerid))
  2790.      return 1;
  2791.  
  2792.     new money = Money[playerid] - GetPlayerMoney(playerid);
  2793.     Money[playerid] = GetPlayerMoney(playerid);
  2794.  
  2795.     GetVehicleVelocity(GetPlayerVehicleID(playerid),x,y,z);
  2796.  
  2797.     new speed = floatround(v);
  2798.     if((speed > 120) || (money > 1000))
  2799.     {
  2800.         new pickup[20];
  2801.         GetPlayerName(playerid,name,23);
  2802.         format(str,128,"%s[%d] money: %d speed: %d last-pickup: %s.",name,playerid,money,speed,pickup);
  2803.         for(new i = 0;i < MAX_PLAYERS;i++)
  2804.         {
  2805.             if(IsPlayerConnected(i))
  2806.             {
  2807.                 if(!IsPlayerNPC(i))
  2808.                 {
  2809.                     if(isadmin(i))
  2810.                     {
  2811.                         if(alerts[i] != 0)
  2812.                             SendClientMessage(i,0xFFFFFFAA,str);
  2813.                     }
  2814.                 }
  2815.             }
  2816.         }
  2817.     }
  2818.     return 1;
  2819. }
  2820.  
  2821. public OnPlayerStreamIn(playerid, forplayerid)
  2822. {
  2823.     return 1;
  2824. }
  2825.  
  2826. public OnPlayerStreamOut(playerid, forplayerid)
  2827. {
  2828.     return 1;
  2829. }
  2830.  
  2831. new StreamedFor[MAX_PLAYERS];
  2832.  
  2833. stock GetVehicleDriver(vehicleid)
  2834. {
  2835.     for(new i = 0;i < MAX_PLAYERS;i++)
  2836.     {
  2837.         if(IsPlayerConnected(i))
  2838.         if(IsPlayerInVehicle(i,vehicleid))
  2839.         {
  2840.             return i;
  2841.         }
  2842.     }
  2843.     return -1;
  2844. }
  2845.  
  2846. stock IsVehicleStreamedInForAny(v)
  2847. {
  2848.     for(new i = 0;i < MAX_PLAYERS;i++)
  2849.     {
  2850.         if(IsPlayerConnected(i))
  2851.         {
  2852.             if(IsVehicleStreamedIn(v,i))
  2853.                 if(GetVehicleDriver(v)!=i)
  2854.                 {
  2855.                     printf("this guy %d",i);
  2856.                     return 1;
  2857.                 }
  2858.         }
  2859.     }
  2860.     return 0;
  2861. }
  2862. stock GetFreeNPC()
  2863. {
  2864.     for(new i = 0;i < MAX_PLAYERS; i++)
  2865.     {
  2866.         if(IsPlayerConnected(i))
  2867.         if(IsPlayerNPC(i))
  2868.         if(FreeNPC[i] == 1)
  2869.         {
  2870.             printf("Free Bot: %d",i);
  2871.             return i;
  2872.         }
  2873.     }
  2874.     for(new i = 0;i < MAX_PLAYERS;i++)
  2875.     {
  2876.         if(IsPlayerConnected(i))
  2877.         if(IsPlayerNPC(i))
  2878.         if(IsPlayerInAnyVehicle(i))
  2879.         if(!IsVehicleStreamedInForAny(GetPlayerVehicleID(i)))
  2880.         {
  2881.             RemovePlayerFromVehicle(i);
  2882.             SetPlayerVirtualWorld(i,3434);
  2883.             FreeNPC[i] = 1;
  2884.             return i;
  2885.         }
  2886.         else
  2887.         {
  2888.             RemovePlayerFromVehicle(i);
  2889.             SetPlayerVirtualWorld(i,3434);
  2890.             FreeNPC[i]= 1;
  2891.             return i;
  2892.         }
  2893.     }
  2894.     printf("Free Npc not therE?");
  2895.     return -1;
  2896. }
  2897.  
  2898.  
  2899.  
  2900. public OnVehicleStreamIn(vehicleid, forplayerid)
  2901. {
  2902.     if(vehicleid< sizeof(cars))
  2903.     {
  2904.         SetVehicleVirtualWorld( vehicleid  , 1000 + vehicleid );
  2905.         return 1;
  2906.     }
  2907. /*  if(IsPlayerNPC(forplayerid))
  2908.         return 1;
  2909.     if(GetPlayerVirtualWorld(forplayerid)!=0)
  2910.         return 1;
  2911.     if(Race[forplayerid] != -1)
  2912.         return 1;
  2913.     if(mpRace[forplayerid] != 0)
  2914.         return 1;
  2915.     for(new i = 0;i < max_checkpoints;i++)
  2916.     {
  2917.         if(Checkpoints[i][ev] == vehicleid)
  2918.         {
  2919.             if(GetVehicleDriver(vehicleid) == -1)
  2920.             {
  2921.                 new n = GetFreeNPC();
  2922.                 if(n != -1)
  2923.                 {
  2924.                     FreeNPC[n] = 0;
  2925.                     SetPlayerVirtualWorld(n,0);
  2926.                     PutPlayerInVehicle(n,vehicleid,0);
  2927.                     new string[30];
  2928.                     SetPlayerName(n,Checkpoints[i][ename]);
  2929.                     format(string,30,"finish %s",Checkpoints[i][ename]);
  2930.                     printf(string);
  2931.                     SendClientMessage(n,0,string);
  2932.                     StreamedFor[forplayerid] = n;
  2933.                     Checkpoints[i][eid] = n;
  2934.                     return 1;
  2935.                 }
  2936.             }
  2937.         }
  2938.     }
  2939. */
  2940. /*
  2941.  
  2942.     for(new i = 0;i < max_checkpoints;i++)
  2943.     {
  2944.         if(Checkpoints[i][ev] == vehicleid)
  2945.         {
  2946.             if(!IsPlayerInAnyVehicle( i ))
  2947.             {
  2948.                 SetPlayerVirtualWorld(Checkpoints[i][eid],0);
  2949.                 PutPlayerInVehicle(Checkpoints[i][eid],vehicleid,0);
  2950.                 new string[30];
  2951.                 format(string,30,"finish %s",Checkpoints[GetCheckpointId(i)][ename]);
  2952.                 SendClientMessage(Checkpoints[i][eid],0,string);
  2953.             }
  2954.         }
  2955.     }
  2956. */
  2957. /*  new load = 1;
  2958.     for(new i = 0;i < MAX_PLAYERS;i++)
  2959.     {
  2960.         if(IsPlayerInVehicle(i,vehicleid))
  2961.             load = 0;
  2962.     }
  2963.     if(load == 1)
  2964.     for(new i = 0;i < max_checkpoints;i++)
  2965.     {
  2966.         if(Checkpoints[i][ev] == vehicleid)
  2967.         {
  2968.             for(new j = 0;j <MAX_PLAYERS;j++)
  2969.             {
  2970.                 if(IsPlayerNPC(j))
  2971.                 {
  2972.                     if(!IsPlayerInAnyVehicle(j))
  2973.                     {
  2974.                         PutPlayerInVehicle(j,vehicleid,0);
  2975.                         new string[30],name[23];
  2976.                         GetPlayerName(j,name,23);
  2977.                         format(string,30,"finish %s",name);
  2978.                         Message(j,0,string);
  2979.                         break;
  2980.                     }
  2981.                 }
  2982.             }
  2983.         }
  2984.     }
  2985.  
  2986. */
  2987.  
  2988.     return 1;
  2989. }
  2990.  
  2991. public OnVehicleStreamOut(vehicleid, forplayerid)
  2992. {
  2993. /*
  2994.     if(IsPlayerNPC(forplayerid))
  2995.         return 1;
  2996.     if(GetPlayerVirtualWorld(forplayerid)!=0)
  2997.         return 1;
  2998.     if(Race[forplayerid] != -1)
  2999.         return 1;
  3000.     if(mpRace[forplayerid] != 0)
  3001.         return 1;
  3002.  
  3003.     if(StreamedFor[forplayerid] != -1)
  3004.     {
  3005.         for(new i = 0;i < MAX_PLAYERS;i++)
  3006.         {
  3007.             if(IsPlayerConnected(i))
  3008.                 if(forplayerid != i)
  3009.                     if(StreamedFor[i] == StreamedFor[forplayerid])
  3010.                     {
  3011.                         StreamedFor[forplayerid] = -1;
  3012.                         return 1;
  3013.                     }
  3014.         }
  3015.  
  3016.         if(IsPlayerNPC(GetVehicleDriver(vehicleid)))
  3017.         {
  3018.             new n = StreamedFor[forplayerid];
  3019.             RemovePlayerFromVehicle(n);
  3020.             SetPlayerVirtualWorld(n,3434);
  3021.             FreeNPC[n] = 1;
  3022.             StreamedFor[forplayerid] = -1;
  3023.         }
  3024.  
  3025.     }
  3026. */
  3027.     return 1;
  3028. }
  3029. forward Countdown(playerid,count);
  3030. public Countdown(playerid,count)
  3031. {
  3032.  
  3033.     new Float:x,Float:y,Float:z;
  3034.     GetVehicleVelocity(GetPlayerVehicleID(playerid),x,y,z);
  3035.     if((x < 0.1) && (y < 0.1))
  3036.     {
  3037.         count--;
  3038.         if(count == 0)
  3039.         {
  3040.             PlayerPlaySound( playerid , GO_SOUND , 0 , 0, 0 );
  3041.             GameTextForPlayer(playerid,"~g~GO !",1000,5);
  3042.             //Dist[playerid] =CreatePlayer3DTextLabel(playerid,"Distance",0xFFFFFFAA,Checkpoints[Race[playerid]][ex2],Checkpoints[Race[playerid]][ey2],Checkpoints[Race[playerid]][ez2],9999.9999 ,0 );
  3043.             //UpdateCheckpoints(playerid);
  3044.             StartRace( playerid);
  3045.             new r = strval(pGet( playerid , 8 ))+1;
  3046.             new rs[10];
  3047.             valstr(rs,r);
  3048.             pSet( playerid , 22 , rs );
  3049.         }
  3050.         else
  3051.         {
  3052.             if(count == 3)
  3053.             {
  3054.                 GameTextForPlayer(playerid,"~r~3",1000,5);
  3055.                 PlayerPlaySound( playerid , COUNTDOWN_SOUND , 0 , 0, 0 );
  3056.             }
  3057.             if(count == 2)
  3058.             {
  3059.                 GameTextForPlayer(playerid,"~r~2",1000,5);
  3060.                 NextCP( playerid );
  3061.                 PlayerPlaySound( playerid , COUNTDOWN_SOUND , 0 , 0, 0 );
  3062.             }
  3063.             if(count == 1)
  3064.             {
  3065.                 GameTextForPlayer(playerid,"~r~1",1000,5);
  3066.                 PlayerPlaySound( playerid , COUNTDOWN_SOUND , 0 , 0, 0 );
  3067.             }
  3068.             SetTimerEx("Countdown", 1000,0,"ii",playerid,count);
  3069.         }
  3070.     }
  3071.     else
  3072.     {
  3073.         ShowDialog( playerid , dLost, 0 ,"Race !","You left the race","Ok","Cancel");
  3074.         DidUask[playerid] = -1;
  3075.         Race[Race[playerid]] = -1;
  3076.         DisablePlayerRaceCheckpoint(playerid);
  3077.         Race[playerid] = -1;
  3078.         PlayerPlaySound(playerid,QUIT_RACE_SOUND,0,0,0);
  3079.     }
  3080. }
  3081. new Password[MAX_PLAYERS][30];
  3082. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  3083. {
  3084.     PlayerPlaySound(playerid,DIALOG_CLICK_SOUND,0,0,0);
  3085.     dialogid = CurrentDialog[playerid];
  3086. //  printf( "OnDialogResponse %d %d %d %d %s",playerid,dialogid,response,listitem,inputtext);
  3087.     if(response == 1)
  3088.     {
  3089.         if(dialogid == dTeleport)
  3090.         {
  3091.             for(new i = 0;i < MAX_PLAYERS;i++)
  3092.             {
  3093.                 if(IsPlayerConnected(i))
  3094.                 {
  3095.                     if(!IsPlayerNPC(i))
  3096.                     {
  3097.                         new name[15];
  3098.                         GetPlayerName(i,name,15);
  3099.                         if(com(name,inputtext)==0)
  3100.                         {
  3101.                             if(GetPlayerVirtualWorld(i)==0)
  3102.                             {
  3103.                                 new Float:x,Float:y,Float:z;
  3104.                                 GetVehiclePos(GetPlayerVehicleID(i),x,y,z);
  3105.                                 SetVehiclePos(GetPlayerVehicleID(playerid),x,y,z+2);
  3106.                             }
  3107.                             else
  3108.                                 Message(playerid,"You can't teleport to there right now.");
  3109.                         }
  3110.                     }
  3111.                 }
  3112.             }
  3113.         }
  3114.         else if(dialogid == dColorize)
  3115.         {
  3116.             switch(listitem)
  3117.             {
  3118.                 case 0: // white
  3119.                 {
  3120.                     ShowDialog( playerid , dWhite , 2 , "Choose a color" , "Milk White" , "Ok" , "Cancel" );
  3121.                 }
  3122.                 case 1: // yellow
  3123.                 {
  3124.                     ShowDialog( playerid , dYellow , 2  , "Choose a color" , "Light Yellow\nDark Yellow\nYellow" , "Ok" , "Cancel" );
  3125.                 }
  3126.                 case 2: // green
  3127.                 {
  3128.                     ShowDialog( playerid , dGreen , 2  , "Choose a color" , "Light Green\nDark Green\nYellow Green" , "Ok" , "Cancel" );
  3129.                 }
  3130.                 case 3: // blue
  3131.                 {
  3132.                     ShowDialog( playerid , dBlue , 2  , "Choose a color" , "Yellow Blue\nSky Blue\nDark Blue\nLight Blue\nGreen Blue" , "Ok" , "Cancel" );
  3133.                 }
  3134.                 case 4: // pink
  3135.                 {
  3136.                     ShowDialog( playerid , dPink , 2  , "Choose a color" , "Yellow Pink\nDark Pink" , "Ok" , "Cancel" );
  3137.                 }
  3138.                 case 5: // red
  3139.                 {
  3140.                     ShowDialog( playerid , dRed , 2 , "Choose a color"  , "Dark Red\nLight Red\nMaroon\nBrown" , "Ok" , "Cancel" );
  3141.                 }
  3142.                 case 6: // black
  3143.                 {
  3144.                     ShowDialog( playerid , dBlack , 2  , "Choose a color" , "Grey\nBlack" , "Ok" , "Cancel" );
  3145.                 }
  3146.             }
  3147.         }
  3148.         else if(dialogid == dWhite)
  3149.         {
  3150.             if(listitem == 0)
  3151.             {
  3152.                 ChangeVehicleColor(GetPlayerVehicleID(playerid),1,1);
  3153.                 pSet(playerid,5,"1");
  3154.                 pSet(playerid,6,"1");
  3155.             }
  3156.         }
  3157.         else if(dialogid == dYellow)
  3158.         {
  3159.             if(listitem == 0)
  3160.             {
  3161.                 ChangeVehicleColor(GetPlayerVehicleID(playerid),65,65);
  3162.                 pSet(playerid,5,"65");
  3163.                 pSet(playerid,6,"65");
  3164.             }
  3165.             if(listitem == 1)
  3166.             {
  3167.                 ChangeVehicleColor(GetPlayerVehicleID(playerid),6,6);
  3168.                 pSet(playerid,5,"6");
  3169.                 pSet(playerid,6,"6");
  3170.             }
  3171.             if(listitem == 2)
  3172.             {
  3173.                 ChangeVehicleColor(GetPlayerVehicleID(playerid),128,128);
  3174.                 pSet(playerid,5,"128");
  3175.                 pSet(playerid,6,"128");
  3176.             }
  3177.  
  3178.         }
  3179.         else if(dialogid == dGreen)
  3180.         {
  3181.             if(listitem == 0)
  3182.             {
  3183.                 ChangeVehicleColor(GetPlayerVehicleID(playerid),16,16);
  3184.                 pSet(playerid,5,"16");
  3185.                 pSet(playerid,6,"16");
  3186.             }
  3187.             if(listitem == 1)
  3188.             {
  3189.                 ChangeVehicleColor(GetPlayerVehicleID(playerid),44,44);
  3190.                 pSet(playerid,5,"44");
  3191.                 pSet(playerid,6,"44");
  3192.             }
  3193.             if(listitem == 2)
  3194.             {
  3195.                 ChangeVehicleColor(GetPlayerVehicleID(playerid),86,86);
  3196.                 pSet(playerid,5,"86");
  3197.                 pSet(playerid,6,"86");
  3198.             }
  3199.         }
  3200.         else if(dialogid == dBlue)
  3201.         {
  3202.             if(listitem == 0)
  3203.             {
  3204.                 ChangeVehicleColor(GetPlayerVehicleID(playerid),2,2);
  3205.                 pSet(playerid,5,"2");
  3206.                 pSet(playerid,6,"2");
  3207.             }
  3208.             if(listitem == 1)
  3209.             {
  3210.                 ChangeVehicleColor(GetPlayerVehicleID(playerid),7,7);
  3211.                 pSet(playerid,5,"7");
  3212.                 pSet(playerid,6,"7");
  3213.             }
  3214.             if(listitem == 2)
  3215.             {
  3216.                 ChangeVehicleColor(GetPlayerVehicleID(playerid),79,79);
  3217.                 pSet(playerid,5,"79");
  3218.                 pSet(playerid,6,"79");
  3219.             }
  3220.             if(listitem == 3)
  3221.             {
  3222.                 ChangeVehicleColor(GetPlayerVehicleID(playerid),100,100);
  3223.                 pSet(playerid,5,"100");
  3224.                 pSet(playerid,6,"100");
  3225.             }
  3226.             if(listitem == 4)
  3227.             {
  3228.                 ChangeVehicleColor(GetPlayerVehicleID(playerid),93,93);
  3229.                 pSet(playerid,5,"93");
  3230.                 pSet(playerid,6,"93");
  3231.             }
  3232.         }
  3233.         else if(dialogid == dPink)
  3234.         {
  3235.             if(listitem == 0)
  3236.             {
  3237.                 ChangeVehicleColor(GetPlayerVehicleID(playerid),5,5);
  3238.                 pSet(playerid,5,"5");
  3239.                 pSet(playerid,6,"5");
  3240.             }
  3241.             if(listitem == 1)
  3242.             {
  3243.                 ChangeVehicleColor(GetPlayerVehicleID(playerid),85,85);
  3244.                 pSet(playerid,5,"85");
  3245.                 pSet(playerid,6,"85");
  3246.             }
  3247.         }
  3248.         else if(dialogid == dRed)
  3249.         {
  3250.             if(listitem == 0)
  3251.             {
  3252.                 ChangeVehicleColor(GetPlayerVehicleID(playerid),3,3);
  3253.                 pSet(playerid,5,"3");
  3254.                 pSet(playerid,6,"3");
  3255.             }
  3256.             if(listitem == 1)
  3257.             {
  3258.                 ChangeVehicleColor(GetPlayerVehicleID(playerid),42,42);
  3259.                 pSet(playerid,5,"42");
  3260.                 pSet(playerid,6,"42");
  3261.             }
  3262.             if(listitem == 2)
  3263.             {
  3264.                 ChangeVehicleColor(GetPlayerVehicleID(playerid),74,74);
  3265.                 pSet(playerid,5,"74");
  3266.                 pSet(playerid,6,"74");
  3267.             }
  3268.             if(listitem == 3)
  3269.             {
  3270.                 ChangeVehicleColor(GetPlayerVehicleID(playerid),123,123);
  3271.                 pSet(playerid,5,"123");
  3272.                 pSet(playerid,6,"123");
  3273.             }
  3274.         }
  3275.         else if(dialogid == dBlack)
  3276.         {
  3277.             if(listitem == 0)
  3278.             {
  3279.                 ChangeVehicleColor(GetPlayerVehicleID(playerid),122,122);
  3280.                 pSet(playerid,5,"122");
  3281.                 pSet(playerid,6,"122");
  3282.             }
  3283.             if(listitem == 1)
  3284.             {
  3285.                 ChangeVehicleColor(GetPlayerVehicleID(playerid),0,0);
  3286.                 pSet(playerid,5,"0");
  3287.                 pSet(playerid,6,"0");
  3288.             }
  3289.         }
  3290.         if((dialogid >= dWhite) && (dialogid <= dBlack))
  3291.         {
  3292.             new c1 = strval(pGet(playerid,5));
  3293.             SetPlayerColor(playerid,GetPlayerColorFromCarColor( c1 ));
  3294.         }
  3295.     }
  3296.  
  3297.     if(dialogid == dRecord)
  3298.     {
  3299.         Message(playerid,"Temporarily disabled");
  3300.         /*
  3301.         if(strlen(inputtext) > 0)
  3302.         {
  3303.             new string[256];
  3304.             format(string,256,"%s\n%s\n%s\n%s\n%s",cGet( playerid , 1 ),cGet( playerid , 2 ),cGet( playerid , 3 ),cGet( playerid , 4 ),cGet( playerid , 5 ));
  3305.             format(Rc[ playerid ],30,"%s",inputtext);
  3306.             ShowDialog( playerid , dRec , 2 ,"Record", string,"Ok","Cancel");
  3307.         }
  3308.         else
  3309.         {
  3310.             ShowDialog( playerid , dRecord , 1 ,"Record", "Enter a name.","Ok","Cancel");
  3311.         }
  3312.         */
  3313.     }
  3314.     else if(dialogid == dGoto)
  3315.     {
  3316.         if(response)
  3317.         {
  3318.             switch(listitem)
  3319.             {
  3320.                 case 0:
  3321.                 {
  3322.                     if((GetPlayerVirtualWorld(playerid)==0) && (Race[playerid] == -1) && (mpRace[playerid] != 1))
  3323.                         SpawnCar( playerid );
  3324.                 }
  3325.                 case 1:
  3326.                 {
  3327.                     if((GetPlayerVirtualWorld(playerid)==0) && (Race[playerid] == -1) && (mpRace[playerid] != 1))
  3328.                         Shop( playerid );
  3329.                 }
  3330.                 case 2:
  3331.                 {
  3332.                     if((Finishmp == 0) && (Race[playerid] == -1))
  3333.                     {
  3334.                         if((MPCounter == 0))
  3335.                         {
  3336.                             if(mpRace[playerid] == 0)
  3337.                             {
  3338.                                 new str[5];
  3339.                                 new v = strval(pGet(playerid,9));
  3340.                                 valstr(str,v+1);
  3341.                                 pSet(playerid,9,str);
  3342.                                 SetRace( playerid );
  3343.                             }
  3344.                         }
  3345.                     }
  3346.                 }
  3347. /*              case 4:
  3348.                 {
  3349.                     if(Recording[playerid] == 0)
  3350.                         ShowDialog( playerid , dRecord , 1 , "Record" , "Enter a name.","Ok","Cancel");
  3351.                     else
  3352.                         Message(playerid,"You are already recording, Press H to stop it.");
  3353.                 }
  3354.                 case 5:
  3355.                 {
  3356.                     new string[256];
  3357.                     format(string,256,"%s\n%s\n%s\n%s\n%s",cGet( playerid , 1 ),cGet( playerid , 2 ),cGet( playerid , 3 ),cGet( playerid , 4 ),cGet( playerid , 5 ));
  3358.                     ShowDialog( playerid , dPlay , 2 ,"Playback", string,"Ok","Cancel");
  3359.                 }
  3360.                 case 3:
  3361.                 {
  3362.                     if(IsPlayerInAnyVehicle(playerid))
  3363.                     {
  3364.                         ShowDialog( playerid , dColorize , 2 , "Colorize" , "White\nYellow\nGreen\nBlue\nPink\nRed\nBlack", "Ok", "Cancel");
  3365.                     }
  3366.                 }
  3367. */              case 3:
  3368.                 {
  3369.                     const lin = 32;
  3370.                     new sub[lin],str[40*lin];
  3371.                     new name[23];
  3372.                     GetPlayerName(playerid,name,23);
  3373.                     format(sub,lin,"racelog/%s.log",name);
  3374.                     if(fexist(sub))
  3375.                     {
  3376.                         new File:h = fopen( sub , io_read );
  3377.                         for(new i = 0;i < 40;i++)
  3378.                         {
  3379.                             fread(h,sub);
  3380.                             strins(str,sub,strlen(str));
  3381.                         }
  3382.  
  3383.                         fclose(h);
  3384.                     }
  3385.                     else
  3386.                     {
  3387.                         format(str,lin,"<empty>");
  3388.                     }
  3389.                     ShowDialog( playerid , dCant , 2 ,"Race Log", str , "Ok", "Cancel");
  3390.                 }
  3391.                 case 4:
  3392.                 {
  3393.                     new string[1024];
  3394.                     new bing =0;
  3395.                     for(new i = 0;i < MAX_PLAYERS;i++)
  3396.                     {
  3397.                         if(IsPlayerConnected(i))
  3398.                         {
  3399.                             if(!IsPlayerNPC(i))
  3400.                             {
  3401.                                 if(isadmin(i))
  3402.                                 {
  3403.                                     bing = 1;
  3404.                                     new name[23];
  3405.                                     GetPlayerName(i,name,23);
  3406.                                     strins(string,name,strlen(string));
  3407.                                     strins(string,"\n",strlen(string));
  3408.                                 }
  3409.                             }
  3410.                         }
  3411.                     }
  3412.                     if(bing == 0)
  3413.                         strins(string,"none",0);
  3414.                     ShowDialog( playerid , dOk ,  2 , "Admins Online", string , "Ok" , "Cancel" );
  3415.                     Message(playerid,"Use @<message> to send admins a message.");
  3416.                 }
  3417.                 case 5:
  3418.                 {
  3419.                     ShowDialog( playerid , dChannel , 1 , "Change Chat Channel" , "Enter a channel name:", "Ok" , "Cancel");
  3420.                 }
  3421.                 case 6:
  3422.                 {
  3423.                     PlayerPlaySound(playerid,1185,0,0,0);
  3424.                     ShowDialog( playerid , dHelp , 2 , "Help" , "Multiplayer Race\nBot Race\nRespawn\nRecord Playback\nStar\nCar Shop\nLevels\nKey Controls\nChat Channels" , "Ok" , "Cancel" );
  3425.                 }
  3426.             }
  3427.         }
  3428.     }
  3429.     else if(dialogid == dChannel)
  3430.     {
  3431.         if(response)
  3432.         {
  3433.             if(!strlen(inputtext))
  3434.             {
  3435.                 format(Channel[playerid],128,"Global");
  3436.                 new string[256];
  3437.                 format(string,256,"You have changed your chat channel to: Global");
  3438.                 Message(playerid,string);
  3439.                 CLS(playerid);
  3440.             }
  3441.             else if(strlen(inputtext)<10)
  3442.             {
  3443.                 format(Channel[playerid],128,"%s",inputtext);
  3444.                 new string[256];
  3445.                 format(string,256,"You have changed your chat channel to: %s",inputtext);
  3446.                 Message(playerid,string);
  3447.                 CLS(playerid);
  3448.             }
  3449.         }
  3450.     }
  3451.     else if(dialogid == dHelp)
  3452.     {
  3453.         if(response)
  3454.         {
  3455.             if(listitem == 0)
  3456.             {
  3457.  
  3458.                 ShowDialog( playerid , dSubHelp , 0 , "Multiplayer Race" , \
  3459. "These races start every 15 minutes at different spots. You need not bother about reaching there, \
  3460. just by hitting 'CTRL' you will join the race immedietly. The race allots 2nd and 3rd prizes too \
  3461. if there are more then 5 and 7 players in the race respectively. Race can be left simply by using 'H' key." \
  3462.                  , "Ok" , "Cancel" );
  3463.             }
  3464.             if(listitem == 1)
  3465.             {
  3466.                 ShowDialog( playerid , dSubHelp , 0 , "Bot Race" , \
  3467. "These are races which you play with bots, you can beat them with ease if you got enough skills. \
  3468. Bots don't use pickups, by which you can take a lot of advantage. In these races if you lost \
  3469. the race you loose money, vice versa. You can leave the race by using 'H' key though it will \
  3470. mean that you gave up, i.e you lost the race and the money too."\
  3471.                  , "Ok" , "Cancel" );
  3472.             }
  3473.             if(listitem == 2)
  3474.             {
  3475.                 ShowDialog( playerid , dSubHelp , 0 , "Respawn" , \
  3476. "You use the H key when not in a race, to change where your car spawned. There are \
  3477. many different places, where you can get respawned."\
  3478.                  , "Ok" , "Cancel" );
  3479.             }
  3480.  
  3481.             if(listitem == 3)
  3482.             {
  3483.                 ShowDialog( playerid , dSubHelp , 0 , "Record Playback" , \
  3484. "You can record yourself for 3 minutes(maximum) using /record command. To stop recoding once you \
  3485. started it use /stop command. Recordings will be stoped automatically once it reaches 3 minutes \
  3486. though. Later on you can again view the reply using /play command. You can also record while \
  3487. on a race. NOTE: This is temperarily out of service."\
  3488.                  , "Ok" , "Cancel" );
  3489.             }
  3490.             if(listitem == 4)
  3491.             {
  3492.                 ShowDialog( playerid , dSubHelp , 0 , "Star" , \
  3493. "Star is one of the pickups you find on the roads. A star is the most beneficial pickup. You can \
  3494. use a star like a nitrox to your car. To use a star you will need to Double Click your 'W' key. \
  3495. And also if you collect all 6 stars, then you will be in a stage where you wont affected by any \
  3496. other pickup like blind, bounce, reverse etc."\
  3497.                  , "Ok" , "Cancel" );
  3498.             }
  3499.             if(listitem == 5)
  3500.             {
  3501.                 ShowDialog( playerid , dSubHelp , 0 , "Car Shop" , \
  3502. "At anytime in the game, you could reach the car shop using /shop command. There you can exchange \
  3503. your old car with any of those cars over there, if you have enough money and level. You shall \
  3504. use 'Q' and 'E' keys to scroll the cars and 'SPACEBAR' to select a car. You can leave the shop \
  3505. using 'ENTER' key."\
  3506.                  , "Ok" , "Cancel" );
  3507.             }
  3508.             if(listitem == 6)
  3509.             {
  3510.                 ShowDialog( playerid , dSubHelp , 0 , "Levels" , \
  3511. "Currently the system supports 4 levels. Everyone who join the server starts with level 1. Later \
  3512. when you finish, i.e win 5 bot races, you go to level 2. Win 10 bot races, you go to level 3. \
  3513. Win 20 bot races, you reach level 4. Leveling up will unlock the cars at the car shop."\
  3514.                  , "Ok" , "Cancel" );
  3515.             }
  3516.  
  3517.             if(listitem == 7)
  3518.             {
  3519.                 ShowDialog( playerid , dSubHelp , 2 , "Key Controls" , "\
  3520. Server Used Names           Game Used Names\n\
  3521. Q                   Look Left\n\
  3522. E                   Look Right\n\
  3523. W                   Accelerate\n\
  3524. ALT                 Walk\n\
  3525. ENTER                   Secoundary Attak\n\
  3526. SPACEBAR                Sprint\n\
  3527. 2                   Accept Mission\n\
  3528. H                   Horn\n"\
  3529.                  , "Ok" , "Cancel" );
  3530.  
  3531.             }
  3532.             if(listitem == 8)
  3533.             {
  3534.                 ShowDialog( playerid , dSubHelp , 0 , "Chat Channels" , \
  3535. "You can create your own chat channel and ask your friends to join in that channel, players of \
  3536. one channel can not hear what players of other channel are speaking. By default everyones \
  3537. chat channel is 'Global'." \
  3538.                  , "Ok" , "Cancel" );
  3539.             }
  3540.         }
  3541.         else
  3542.         {
  3543.             PlayerPlaySound(playerid,1186,0,0,0);
  3544.         }
  3545.     }
  3546.  
  3547.     else if(dialogid == dSubHelp)
  3548.     {
  3549.         PlayerPlaySound(playerid,1186,0,0,0);
  3550.     }
  3551.     else if(dialogid == dRec)
  3552.     {
  3553.         if(response)
  3554.         {
  3555.             record( playerid , listitem+1 , Rc[playerid ] );
  3556.         }
  3557.     }
  3558.     else if(dialogid == dPlay)
  3559.     {
  3560.         if(response)
  3561.         {
  3562.             if(strcmp("Empty",inputtext)!=0)
  3563.                 play( playerid , inputtext);
  3564.         }
  3565.     }
  3566.     else if(dialogid == dWon)
  3567.     {
  3568.         new string[30];
  3569.        
  3570.         new races = strval(pGet( playerid , 3 ));
  3571.         valstr(string,races+1);
  3572.         PlayerPlaySound(playerid,LEVEL_UP_SOUND,0,0,0);
  3573.         pSet( playerid , 3 , string );
  3574.         if(races+1 == 5)
  3575.             ShowDialog( playerid , dCant , 0 ,"Level Up !","Congrats !, you are now level 2.", "Ok" , "Cancel" );
  3576.         if(races+1 == 10)
  3577.             ShowDialog( playerid , dCant , 0 ,"Level Up !","Congrats !, you are now level 3.", "Ok" , "Cancel" );
  3578.         if(races+1 == 20)
  3579.             ShowDialog( playerid , dCant , 0 ,"Level Up !","Congrats !, you are now level 4.", "Ok" , "Cancel" );
  3580.     }
  3581.    
  3582.     else if(dialogid == dRace)
  3583.     {
  3584.         if(response == 1)
  3585.         {
  3586.             SetTimerEx("Countdown", 1000,0,"ii",playerid,4);
  3587.             Race[playerid] = DidUask[playerid];
  3588.             Race[Race[playerid]] = playerid;
  3589.             new str[5];
  3590.             new v = strval(pGet(playerid,8));
  3591.             valstr(str,v+1);
  3592.             pSet(playerid,8,str);
  3593.             SendPlayerMessageToPlayer(playerid,playerid,"yea..");
  3594.             Message(playerid,"Press H to quit the race.");
  3595.         }
  3596.     }
  3597.     else if(dialogid == dExit)
  3598.     {
  3599.         if(response)
  3600.         {
  3601.             HideTextDraws( playerid );
  3602.             StopCameraRot( playerid );
  3603.             SetPlayerVirtualWorld( playerid, 0);
  3604.             SpawnCar( playerid );
  3605.             TogglePlayerControllable( playerid , 1);
  3606.         }
  3607.     }
  3608.     else if(dialogid == dPurchase)
  3609.     {
  3610.         if(response == 1)
  3611.         {
  3612.             GivePlayerMoney(playerid,-Purchase[playerid]);
  3613.             new string[256];
  3614.             format(string,256,"- Purchased a car for $%d. [ Balance: $%d ]",Purchase[playerid],GetPlayerMoney(playerid));
  3615.             writeracelog( playerid , string );
  3616.             new First = 0;
  3617.             if(com("0",pGet(playerid,4))==0)
  3618.                 First = 1;
  3619.             PurchaseCar( playerid );
  3620.             if(First == 1)
  3621.                 Message(playerid,"At any time in the server, press the '2' key for Help.");
  3622.             HideTextDraws( playerid );
  3623.         }
  3624.     }
  3625.     else if(dialogid == dLogin)
  3626.     {
  3627.         if(response == 0)
  3628.             Kick( playerid );
  3629.         else
  3630.         {
  3631.             //printf(" %s %s ",pGet( playerid , 1 ) , inputtext );
  3632.             new string[256];
  3633.             format(string,30,"%s",inputtext);
  3634.  
  3635.             if(com(string,pGet(playerid,1),true)==0)
  3636.             {
  3637.                 TogglePlayerControllable(playerid ,1);
  3638.                 LoadPlayerCar( playerid );
  3639.                 SpawnCar( playerid );
  3640.                 // login
  3641.                 TextDrawShowForPlayer( playerid , WWW );
  3642.                 SetPlayerScore(playerid,GetPlayerLevel(playerid));
  3643.                 GivePlayerMoney( playerid , strval( pGet( playerid , 2 ) ) );
  3644.                 TextDrawShowForPlayer(playerid, VertiDraw[playerid]);
  3645.  
  3646.             }
  3647.             else
  3648.             {
  3649.                 ShowDialog( playerid , dLogin , 1 , "Authentication Required" , "You have entered a wrong password, Try again", "Login" , "Quit" );
  3650.             }
  3651.         }
  3652.     }
  3653.     else if(dialogid == dRegister1)
  3654.     {
  3655.         if(response == 0)
  3656.           Kick( playerid );
  3657.         else
  3658.         {
  3659.             ShowDialog( playerid , dRegister2 , 1 , "Welcome To Ride" , "You will have to register an account in\
  3660.             our server in order to continue, Type in a password to register with us." , "Register" , "Back" );
  3661.             TextDrawShowForPlayer(playerid, VertiDraw[playerid]);
  3662.         }
  3663.     }
  3664.  
  3665.     else if(dialogid == dRegister2)
  3666.     {
  3667.         if(response == 0)
  3668.             ShowDialog( playerid, dRegister1 , 0 , "Welcome To Ride" , "This server might contain elements which \
  3669.             are not suitable for children below 13. By pressing 'continue' you mean that you are above or equal to 13\
  3670.             years old." , "Continue" , "Quit");
  3671.         else
  3672.         {
  3673.             if((strlen(inputtext) < 15) && (strlen(inputtext) > 3 ))
  3674.             {
  3675.                 format(Password[playerid], 30 , "%s" ,  inputtext );
  3676.                 ShowDialog( playerid , dRegister3 , 1 , "Welcome To Ride" , "Confirm your password.", "Confirm" , \
  3677.                 "Back" );
  3678.             }
  3679.             else
  3680.             {
  3681.                 ShowDialog( playerid , dRegister2 , 1 , "Welcome To Ride" , "Your password must be greater\
  3682.                  than 3 characters and less than 15 characters.", "Register" , "Back" );
  3683.             }
  3684.            
  3685.         }
  3686.     }
  3687.     else if(dialogid == dRegister3)
  3688.     {
  3689.         if(response == 0)
  3690.             ShowDialog( playerid , dRegister2 , 1 , "Welcome To Ride" , "You will have to register an account in\
  3691.             our server in order to continue, Type in a password to register with us." , "Register" , "Back" );
  3692.         else
  3693.         {
  3694.        
  3695.             if((com(Password[playerid],inputtext)==0) && (strlen(inputtext)))
  3696.             {
  3697.                 ShowDialog( playerid , dRegistered , 0 , "Welcome To Ride" , "Congrats, your account has been \
  3698.                 successfully created." , "Ok" , "Cancel" );
  3699.                 pRegister( playerid , inputtext );
  3700.                 GivePlayerMoney( playerid , 4000 );
  3701.                 writeracelog(playerid,"+ Career started with $4000. [ Balance: $4000 ]");
  3702.             }
  3703.             else
  3704.             {
  3705.                 ShowDialog( playerid , dRegister2 , 1 , "Welcome To Ride" , "Your passwords did not match type \
  3706.                 in your password again." , "Register" , "Back" );
  3707.             }
  3708.         }
  3709.     }
  3710.     else if(dialogid == dRegistered)
  3711.     {
  3712.         Shop( playerid );
  3713.     }
  3714.     return 1;
  3715. }
  3716.  
  3717. forward OnPlayerJoin( playerid , registered );
  3718. public OnPlayerJoin( playerid , registered )
  3719. {
  3720.     if(registered)
  3721.     {
  3722.         ShowDialog( playerid, dLogin , 1 , "Authentication Required" , "Password:" , "Login" , "Quit");
  3723.     }
  3724.     else
  3725.     {
  3726.         ShowDialog( playerid, dRegister1 , 0 , "Welcome To Ride" , "This server might contain elements which \
  3727.         are not suitable for children below 13. By pressing 'continue' you mean that you are above or equal to 13\
  3728.         years old." , "Continue" , "Quit");
  3729.     }
  3730. }
  3731.  
  3732. stock len(string1[])
  3733. {
  3734.     new c;
  3735.     new i = 0;
  3736.     do
  3737.     {
  3738.         c = string1[i];
  3739.         //printf("'%d'",c);
  3740.         if(c == '\0')
  3741.             break;
  3742.         if(c == '\r')
  3743.             break;
  3744.         if(c == '\n')
  3745.             break;
  3746.         i = i + 1;
  3747.     }
  3748.     while(i > -1);
  3749.     return i;
  3750. }
  3751.  
  3752. stock com( string1[] , string2[] , b = 1 , l = 1 )
  3753. {
  3754.     //printf("com '%s' '%s' %d %d ",string1,string2,strlen(string1),strlen(string2));
  3755.     new i = len(string1);
  3756.     new j = len(string2);
  3757.     if(i != j)
  3758.         return 1;
  3759.     b = l;
  3760.     l = b;
  3761.     for(i = 0;i < j;i++)
  3762.     {
  3763.         if(string1[i] != string2[i])
  3764.             return 1;
  3765.     }
  3766.     //printf("equal");
  3767.     return 0;
  3768. }
  3769. forward pRegister( playerid , password[] );
  3770. public pRegister( playerid , password[] )
  3771. {
  3772.     if(!IsPlayerNPC(playerid))
  3773.     {
  3774.         new name[23],file[30];
  3775.         GetPlayerName( playerid , name ,23 );
  3776.         format( file , 30 , "players/%s.ini" , name );
  3777.         new File:h = fopen( file , io_write );
  3778.         format( file , 30 , "%s\r\n" , password );
  3779.         fwrite(h , file );
  3780.         fwrite(h, "0\r\n");
  3781.         fwrite(h , "1\r\n" );
  3782.         fwrite(h , "0\r\n" );
  3783.         fwrite(h , "0\r\n" );
  3784.         fwrite(h , "0\r\n" );
  3785.         format( file , 30 , "%d\r\n" , GetPlayerSkin(playerid) );
  3786.         fwrite(h , file );// 7
  3787.         fwrite(h , "0\r\n" ); // 8
  3788.         fwrite(h , "0\r\n" ); // 9
  3789.         fwrite(h , "0\r\n" ); // 10
  3790.         fclose( h );
  3791.         bRegister( playerid );
  3792.         cRegister( playerid );
  3793.     }
  3794. }
  3795.  
  3796. stock pGet( playerid , index  )
  3797. {
  3798.     new key[30];
  3799.     if(!IsPlayerNPC(playerid))
  3800.     {
  3801.         new name[23],file[30];
  3802.         GetPlayerName( playerid , name ,23 );
  3803.         format( file , 30 , "players/%s.ini" , name );
  3804.         new File:h = fopen( file , io_read );
  3805.         for(new i = 0;i < index; i++)
  3806.         {
  3807.             fread( h , key , 30 );
  3808.         }
  3809.         fclose( h );
  3810.     }
  3811.     return key;
  3812. }
  3813.  
  3814. forward pSet( playerid , index , key[] );
  3815. public pSet( playerid , index , key[] )
  3816. {
  3817.     if(!IsPlayerNPC(playerid))
  3818.     {
  3819.         new name[23],file[30];
  3820.         GetPlayerName( playerid , name ,23 );
  3821.         format( file , 30 , "players/%s.ini" , name );
  3822.         new File:h1 = fopen( file , io_read );
  3823.         format( file , 30 , "%s.ini.tmp" , name );
  3824.         new File:h2 = fopen( file , io_write );
  3825.         for(new i = 1;i <= 10;i++)
  3826.         {
  3827.             if(i != index)
  3828.             {
  3829.                 fread(h1,file);
  3830.                 fwrite(h2,file);
  3831.             }
  3832.             else
  3833.             {
  3834.                 fread(h1,file);
  3835.                 format(file,30,"%s\r\n",key);
  3836.                 fwrite(h2,file);
  3837.             }
  3838.         }
  3839.         fclose( h1 );
  3840.         fclose( h2 );
  3841.         format( file , 30 , "%s.ini.tmp" , name );
  3842.         h1 = fopen( file , io_read);
  3843.         format( file , 30 , "players/%s.ini" , name );
  3844.         h2 = fopen( file , io_write );
  3845.         while(fread(h1,file))
  3846.             fwrite(h2,file);
  3847.         fclose(h1);
  3848.         fclose(h2);
  3849.         format( file , 30 , "%s.ini.tmp" , name );
  3850.         fremove(file);
  3851.     }
  3852. }
  3853.  
  3854.  
  3855. forward pRemove( playerid );
  3856. public pRemove( playerid )
  3857. {
  3858.     if(!IsPlayerNPC(playerid))
  3859.     {
  3860.         new name[23],file[30];
  3861.         GetPlayerName( playerid , name ,23 );
  3862.         format( file , 30 , "players/%s.ini" , name );
  3863.         if (fexist(file))
  3864.             fremove(file);
  3865.     }
  3866. }
  3867. forward pExist( playerid );
  3868. public pExist( playerid )
  3869. {
  3870.     if(!IsPlayerNPC(playerid))
  3871.     {
  3872.         new name[23],file[30];
  3873.         GetPlayerName( playerid , name ,23 );
  3874.         format( file , 30 , "players/%s.ini" , name );
  3875.         if (fexist(file))
  3876.             return 1;
  3877.     }
  3878.     return 0;
  3879. }
  3880.  
  3881. forward cRegister( playerid  );
  3882. public cRegister( playerid  )
  3883. {
  3884.  
  3885.     new name[23],file[30];
  3886.     GetPlayerName( playerid , name ,23 );
  3887.     format( file , 30 , "players/%s.mods" , name );
  3888.     new File:h = fopen( file , io_write );
  3889.     fwrite(h , "0\r\n" );
  3890.     fwrite(h , "0\r\n" );
  3891.     fwrite(h , "0\r\n" );
  3892.     fwrite(h , "0\r\n" );
  3893.     fwrite(h , "0\r\n" );
  3894.    
  3895.     fwrite(h , "0\r\n" );
  3896.     fwrite(h , "0\r\n" );
  3897.     fwrite(h , "0\r\n" );
  3898.     fwrite(h , "0\r\n" );
  3899.     fwrite(h , "0\r\n" );
  3900.    
  3901.     fwrite(h , "0\r\n" );
  3902.     fwrite(h , "0\r\n" );
  3903.     fwrite(h , "0\r\n" );
  3904.     fwrite(h , "0\r\n" );
  3905.     fwrite(h , "0\r\n" );
  3906.     fclose( h );
  3907. }
  3908.  
  3909. stock cGet( playerid , index  )
  3910. {
  3911.     new name[23],file[30],key[30];
  3912.     GetPlayerName( playerid , name ,23 );
  3913.     format( file , 30 , "players/%s.mods" , name );
  3914.     new File:h = fopen( file , io_read );
  3915.     for(new i = 0;i < index; i++)
  3916.     {
  3917.         fread( h , key , 30 );
  3918.     }
  3919.     fclose( h );
  3920.     return key;
  3921. }
  3922.  
  3923. stock cbGet( playerid , index  )
  3924. {
  3925.     new file[30],key[30];
  3926.     format( file , 30 , "players/%s.mods" , Checkpoints[playerid][ename] );
  3927.     if(!fexist(file))
  3928.         return key;
  3929.     new File:h = fopen( file , io_read );
  3930.     for(new i = 0;i < index; i++)
  3931.     {
  3932.         fread( h , key , 30 );
  3933.     }
  3934.     fclose( h );
  3935.     return key;
  3936. }
  3937.  
  3938. forward cSet( playerid , index , key[] );
  3939. public cSet( playerid , index , key[] )
  3940. {
  3941.     new name[23],file[30];
  3942.     GetPlayerName( playerid , name ,23 );
  3943.     format( file , 30 , "players/%s.mods" , name );
  3944.     new File:h1 = fopen( file , io_read );
  3945.     format( file , 30 , "players/%s.mods.tmp" , name );
  3946.     new File:h2 = fopen( file , io_write );
  3947.     for(new i = 1;i <= 15;i++)
  3948.     {
  3949.         if(i != index)
  3950.         {
  3951.             fread(h1,file);
  3952.             fwrite(h2,file);
  3953.         }
  3954.         else
  3955.         {
  3956.             fread(h1,file);
  3957.             format(file,30,"%s\r\n",key);
  3958.             fwrite(h2,file);
  3959.         }
  3960.     }
  3961.     fclose( h1 );
  3962.     fclose( h2 );
  3963.     format( file , 30 , "players/%s.mods.tmp" , name );
  3964.     h1 = fopen( file , io_read);
  3965.     format( file , 30 , "players/%s.mods" , name );
  3966.     h2 = fopen( file , io_write );
  3967.     while(fread(h1,file))
  3968.         fwrite(h2,file);
  3969.     fclose(h1);
  3970.     fclose(h2);
  3971.     format( file , 30 , "players/%s.mods.tmp" , name );
  3972.     fremove(file);
  3973. }
  3974.  
  3975.  
  3976.  
  3977. forward rRegister( playerid , r );
  3978. public rRegister( playerid , r )
  3979. {
  3980.     new name[23],file[30];
  3981.     GetPlayerName( playerid , name ,23 );
  3982.     format( file , 30 , "%sx%d.r" , name ,r );
  3983.     new File:h = fopen( file , io_write );
  3984.     fwrite(h , "0\r\n" );
  3985.     fwrite(h , "0\r\n" );
  3986.     fwrite(h , "0\r\n" );
  3987.     fwrite(h , "0\r\n" );
  3988.     fwrite(h , "0\r\n" );
  3989.     fwrite(h , "0\r\n" );
  3990.     fclose( h );
  3991. }
  3992.  
  3993. stock rGet( playerid , r ,index  )
  3994. {
  3995.     new name[23],file[30],key[30];
  3996.     GetPlayerName( playerid , name ,23 );
  3997.     format( file , 30 , "%sx%d.r" , name , r );
  3998.     new File:h = fopen( file , io_read );
  3999.     for(new i = 0;i < index; i++)
  4000.     {
  4001.         fread( h , key , 30 );
  4002.     }
  4003.     fclose( h );
  4004.     return key;
  4005. }
  4006.  
  4007. forward rSet( playerid , r , index , key[] );
  4008. public rSet( playerid , r , index , key[] )
  4009. {
  4010.     new name[23],file[30];
  4011.     GetPlayerName( playerid , name ,23 );
  4012.     format( file , 30 , "%sx%d.r" , name ,r);
  4013.     new File:h1 = fopen( file , io_read );
  4014.     format( file , 30 , "%sx%d.r.tmp" , name , r);
  4015.     new File:h2 = fopen( file , io_write );
  4016.     for(new i = 1;i <= 18;i++)
  4017.     {
  4018.         if(i != index)
  4019.         {
  4020.             fread(h1,file);
  4021.             fwrite(h2,file);
  4022.         }
  4023.         else
  4024.         {
  4025.             fread(h1,file);
  4026.             format(file,30,"%s\r\n",key);
  4027.             fwrite(h2,file);
  4028.         }
  4029.     }
  4030.     fclose( h1 );
  4031.     fclose( h2 );
  4032.     format( file , 30 , "%sx%d.r.tmp" , name,r  );
  4033.     h1 = fopen( file , io_read);
  4034.     format( file , 30 , "%sx%d.r" , name,r );
  4035.     h2 = fopen( file , io_write );
  4036.     while(fread(h1,file))
  4037.         fwrite(h2,file);
  4038.     fclose(h1);
  4039.     fclose(h2);
  4040.     format( file , 30 , "%sx%d.r.tmp" , name,r );
  4041.     fremove(file);
  4042. }
  4043. forward bRegister( playerid);
  4044. public bRegister( playerid )
  4045. {
  4046.     new name[23],file[30];
  4047.     GetPlayerName( playerid , name ,23 );
  4048.     format( file , 30 , "players/%s.bot" , name );
  4049.     new File:h = fopen( file , io_write );
  4050.     fwrite(h , "0\r\n" );
  4051.     fwrite(h , "0\r\n" );
  4052.     fwrite(h , "0\r\n" );
  4053.     fwrite(h , "0\r\n" );
  4054.     fwrite(h , "0\r\n" );
  4055.     fwrite(h , "0\r\n" );
  4056.     fwrite(h , "0\r\n" );
  4057.     fwrite(h , "0\r\n" );
  4058.     fwrite(h , "0\r\n" );
  4059.     fwrite(h , "0\r\n" );
  4060.     fwrite(h , "0\r\n" );
  4061.     fwrite(h , "0\r\n" );
  4062.     fwrite(h , "0\r\n" );
  4063.     fwrite(h , "0\r\n" );
  4064.     fwrite(h , "0\r\n" );
  4065.     fwrite(h , "0\r\n" );
  4066.     fwrite(h , "0\r\n" );
  4067.     fwrite(h , "0\r\n" );
  4068.     fwrite(h , "0\r\n" );
  4069.     fwrite(h , "0\r\n" );
  4070.     fwrite(h , "0\r\n" );
  4071.     fwrite(h , "0\r\n" );
  4072.     fwrite(h , "0\r\n" );
  4073.     fwrite(h , "0\r\n" );
  4074.     fwrite(h , "0\r\n" );
  4075.     fwrite(h , "0\r\n" );
  4076.     fwrite(h , "0\r\n" );
  4077.     fwrite(h , "0\r\n" );
  4078.     fwrite(h , "0\r\n" );
  4079.     fwrite(h , "0\r\n" );
  4080.     fwrite(h , "0\r\n" );
  4081.     fwrite(h , "0\r\n" );
  4082.     fwrite(h , "0\r\n" );
  4083.     fwrite(h , "0\r\n" );
  4084.     fwrite(h , "0\r\n" );
  4085.     fwrite(h , "0\r\n" );
  4086.     fwrite(h , "0\r\n" );
  4087.     fwrite(h , "0\r\n" );
  4088.     fwrite(h , "0\r\n" );
  4089.     fwrite(h , "0\r\n" );
  4090.     fwrite(h , "0\r\n" );
  4091.     fwrite(h , "0\r\n" );
  4092.     fwrite(h , "0\r\n" );
  4093.     fwrite(h , "0\r\n" );
  4094.     fwrite(h , "0\r\n" );
  4095.     fwrite(h , "0\r\n" );
  4096.     fwrite(h , "0\r\n" );
  4097.     fwrite(h , "0\r\n" );
  4098.     fwrite(h , "0\r\n" );
  4099.     fclose( h );
  4100. }
  4101.  
  4102. stock bGet( playerid , index  )
  4103. {
  4104.     new name[23],file[30],key[30];
  4105.     GetPlayerName( playerid , name ,23 );
  4106.     format( file , 30 , "players/%s.bot" , name );
  4107.     new File:h = fopen( file , io_read );
  4108.     for(new i = 0;i <= index; i++)
  4109.     {
  4110.         fread( h , key , 30 );
  4111.     }
  4112.     fclose( h );
  4113.     strdel(key, strlen(key)-1,strlen(key));
  4114.     return strval(key);
  4115. }
  4116.  
  4117. forward bSet( playerid , index , key );
  4118. public bSet( playerid , index , key )
  4119. {
  4120.     new name[23],file[30];
  4121.     GetPlayerName( playerid , name ,23 );
  4122.     format( file , 30 , "players/%s.bot" , name );
  4123.     new File:h1 = fopen( file , io_read );
  4124.     format( file , 30 , "%s.bot.tmp" , name );
  4125.     new File:h2 = fopen( file , io_write );
  4126.     for(new i = 0;i < 50;i++)
  4127.     {
  4128.         if(i != index)
  4129.         {
  4130.             fread(h1,file);
  4131.             fwrite(h2,file);
  4132.         }
  4133.         else
  4134.         {
  4135.             fread(h1,file);
  4136.             format(file,30,"%d\r\n",key);
  4137.             fwrite(h2,file);
  4138.         }
  4139.     }
  4140.     fclose( h1 );
  4141.     fclose( h2 );
  4142.     format( file , 30 , "%s.bot.tmp" , name );
  4143.     h1 = fopen( file , io_read);
  4144.     format( file , 30 , "players/%s.bot" , name );
  4145.     h2 = fopen( file , io_write );
  4146.     while(fread(h1,file))
  4147.         fwrite(h2,file);
  4148.     fclose(h1);
  4149.     fclose(h2);
  4150.     format( file , 30 , "%s.bot.tmp" , name );
  4151.     fremove(file);
  4152. }
  4153.  
  4154.  
  4155. forward ShowDialog( playerid , dialogid , style , caption[] , info[] , button1[] , button2[] );
  4156. public ShowDialog( playerid , dialogid , style , caption[] , info[] , button1[] , button2[] )
  4157. {
  4158.     static dialogs = 0;
  4159.     if(style != 2)
  4160.     {
  4161.         for(new i = 0;i <= strlen(info);i++)
  4162.             if(info[i] == '\n')
  4163.                 info[i] = ' ';
  4164.  
  4165.         new n = 0,max_len = 50;
  4166.         for(new i = max_len;strlen(info) > i;i+=50)
  4167.             n++;
  4168.         for(new i = 0;i < n;i++)
  4169.         {
  4170.             new pos = 0;
  4171.             for(new j = max_len*(i+1);j > max_len*(i);j--)
  4172.                 if(info[j] == ' ')
  4173.                 {
  4174.                     pos = j;
  4175.                     break;
  4176.                 }
  4177.             info[pos] = '\n';
  4178.         }
  4179.     }
  4180.     ShowPlayerDialog(  playerid , dialogs++ , style , caption , info , button1, button2 );
  4181.     CurrentDialog[playerid]  = dialogid;
  4182. }
  4183.  
  4184. new shouldCameraRotate[ MAX_PLAYERS ] = 0;
  4185.  
  4186. forward StartCameraRot( playerid , Float:x , Float:y , Float:z, Float:distance );
  4187. public StartCameraRot( playerid , Float:x , Float:y , Float:z, Float:distance )
  4188. {
  4189.     shouldCameraRotate[ playerid] = 1;
  4190.     RotateCamera( playerid , x , y ,z, distance );
  4191. }
  4192.  
  4193. forward StopCameraRot( playerid );
  4194. public StopCameraRot( playerid )
  4195. {
  4196.     shouldCameraRotate[playerid] = 0;
  4197. }
  4198.  
  4199.  
  4200. new playerAngle[MAX_PLAYERS];
  4201. forward RotateCamera( playerid , Float:x , Float:y ,Float:z, Float:distance );
  4202. public RotateCamera( playerid , Float:x , Float:y ,Float:z, Float:distance )
  4203. {
  4204.     if(IsPlayerConnected( playerid ))
  4205.     if( shouldCameraRotate[playerid] == 1)
  4206.     {
  4207.         SetPlayerCameraPos( playerid , getXfromDistance( x , distance , playerAngle[playerid]+=1 ) , getYfromDistance( y , distance , playerAngle[playerid]+=1) ,z );
  4208.         SetPlayerCameraLookAt( playerid , x , y , z );
  4209.         SetTimerEx("RotateCamera", 50,0,"iffff",playerid,x,y,z,distance);
  4210.     }
  4211.     else
  4212.         SetCameraBehindPlayer(playerid);
  4213. }
  4214.  
  4215. forward Shop( playerid );
  4216. public Shop( playerid )
  4217. {
  4218.     Message(playerid,"Use Q and E to switch between cars. SPACEBAR to choose.");
  4219.     TogglePlayerControllable( playerid , 0 );
  4220.     StartCameraRot( playerid , 404.0320,2450.8276,16.0675 , 8 );
  4221.     ShowCar( playerid , 1 );
  4222. }
  4223.  
  4224. forward ShowCar( playerid , car );
  4225. public ShowCar( playerid , car )
  4226. {
  4227.     SetPlayerVirtualWorld( playerid , 1000 + car );
  4228. //  new str[24];
  4229. //  valstr(str,GetPlayerVirtualWorld(playerid));
  4230. //  SendClientMessage(playerid,0xFFFFFFAA,str);
  4231.     PutPlayerInVehicle( playerid , car , 0 );
  4232.     HideTextDraws( playerid );
  4233.     TextDrawShowForPlayer( playerid , CarStats[car-1] );
  4234. }
  4235.  
  4236. stock HideTextDraws( playerid )
  4237. {
  4238.     for(new i = 0;i < sizeof(CarStats);i++)
  4239.     {
  4240.         TextDrawHideForPlayer( playerid , CarStats[i] );
  4241.     }
  4242. }
  4243.  
  4244. stock GetModelCost( model )
  4245. {
  4246.     for(new i = 1;i < sizeof( cars );i++)
  4247.     {
  4248.         if(cars[i][emodel] == model )
  4249.         {
  4250.             return cars[i][ecost]*80/100;
  4251.         }
  4252.     }
  4253.     return 0;
  4254. }
  4255.  
  4256. stock PurchaseCar( playerid )
  4257. {
  4258.     if(pCar[playerid])
  4259.         DestroyVehicle(pCar[playerid]);
  4260.     cRegister(playerid);
  4261.     TogglePlayerControllable( playerid , 1 );
  4262.     StopCameraRot( playerid );
  4263.     SetPlayerVirtualWorld( playerid , 0 );
  4264.     SetVehicleVirtualWorld( GetPlayerVehicleID(playerid) , 0 );
  4265.     new str[30];
  4266.     new prcar = strval(pGet(playerid,4));
  4267.     valstr( str , GetVehicleModel( GetPlayerVehicleID( playerid ) ));
  4268.     pSet( playerid , 4 , str );
  4269.     new colors[] = { 85 ,0, 5, 2, 16,100,122,7 };
  4270.     new r = colors[random(sizeof(colors))];
  4271.     valstr(str,r);
  4272.     pSet( playerid , 5 , str );
  4273.     valstr(str,random(128));
  4274.     pSet( playerid , 6 , str );
  4275.     LoadPlayerCar( playerid );
  4276.     SpawnCar( playerid );
  4277.     PlayerPlaySound(playerid,BIKE_BOUGHT_SOUND,0,0,0);
  4278.     Message(playerid,"You have successfully bought your car.");
  4279.     SetPlayerScore(playerid,GetPlayerLevel(playerid));
  4280.     if(prcar == 0)
  4281.     {
  4282.         // registered
  4283.         TextDrawShowForPlayer( playerid , WWW );
  4284.     }
  4285. }
  4286.  
  4287. new Float:Spawns[][] =
  4288. {
  4289. {1350.2006,389.9850,19.2378,157.5106}, // HEY
  4290. {607.5723,355.6186,18.7613,32.0628}, //
  4291. {925.3957,-177.6983,10.3762,87.0313}, //
  4292. {-2631.2341,812.2899,49.6650,88.9850}, //
  4293. {-2810.6567,210.1268,6.8628,181.7626}, //
  4294. {-2623.9294,-210.3415,4.0132,269.3256}, //
  4295. {-2705.7175,181.3133,4.0113,357.6360}, //
  4296. {-1699.6893,354.3882,6.8630,133.2885}, //
  4297. {-2921.9678,-1831.8700,29.3273,6.2612}, //
  4298. {-2177.2043,-346.2129,35.5333,268.5878}, //
  4299. {-2066.9409,29.4541,35.0035,89.2554}, //
  4300. {-2146.0359,213.5417,35.0138,1.2273},
  4301. {-2006.6510,545.4361,34.7930,359.3970},
  4302. {-1629.4890,1237.2261,6.8707,43.8990},
  4303. {-2139.7600,1099.6354,79.6323,180.8249},
  4304. {-2142.6711,570.2026,34.8013,90.5770},
  4305. {-1979.2988,464.3108,28.6751,358.2176},
  4306. {-1539.7924,-2835.7673,46.7076,43.3757},
  4307. {563.4729,2657.7019,43.1600,268.8928}, // x
  4308. {1090.3818,-1710.9321,12.9541,270.9924}, // x
  4309. {-1960.4642,729.4062,44.8616,269.1235}, // x
  4310. {-1671.4374,1828.9480,25.3521,273.8797}, // y
  4311. {2723.7971,2116.9739,6.3040,353.4175}, // y
  4312. {1008.1245,2181.4863,10.2350,357.9573}, // y
  4313. {-2005.9696,346.2114,34.5748,359.9951}, // y
  4314. {-2259.7654,555.7224,34.5804,2.1286}, // y
  4315. {-323.0998,-1773.7679,16.4800,339.7993}, // y
  4316. {1710.9725,-501.8680,33.4012,12.2517}, // y
  4317. {1719.6974,438.7711,30.5329,341.3650}, // y
  4318. {1356.5258,-1353.7417,12.9459,359.2041}, // y
  4319. {2073.3894,2023.1129,10.2373,89.6916}, // -x
  4320. {1537.6943,1974.1000,10.2358,88.5552}, // -x
  4321. {1260.8429,1813.5625,11.4063,88.9063}, // -x
  4322. {-90.0562,2636.3435,63.4656,91.6635}, // -x
  4323. {-928.0897,2721.6904,45.4334,95.2190}, // -x
  4324. {1165.2596,-946.5063,42.5774,90.7340}, // -x
  4325. {-2316.0293,2674.2798,56.5460,88.6199}, // -x
  4326. {-572.0304,-2745.5669,66.0069,92.4541}, // x
  4327. {2125.8550,2073.3674,10.2350,179.3007}, // -y
  4328. {-2689.3984,1706.2052,67.1743,179.7256}, // -y
  4329. {-2004.7621,1010.9517,52.2581,179.7777}, // -y
  4330. {-1893.8807,102.3724,37.7039,175.2027}, // -y
  4331. {-2143.3687,906.7395,79.4178,179.5495}, // -y
  4332. {-1806.2354,119.8445,14.5272,183.5261}, // -y
  4333. {636.0094,-1418.0875,13.0378,179.9617}, // -y
  4334. {1047.0195,-1877.4255,12.7348,182.5248}, // -y
  4335. {-2605.2988,-474.7174,68.2396,275.8958},
  4336. {-1436.8602,-308.8750,5.5718,50.2420},
  4337. {-1941.5498,-1146.3855,14.7106,201.6289},
  4338. {-1277.7795,-1715.7827,45.4902,226.8159},
  4339. {-605.6245,-1207.3436,20.8614,154.3487},
  4340. {-463.2079,281.0801,1.6413,270.7617},
  4341. {-2004.3188,702.8160,44.8625,0.1591},
  4342. {-1672.4172,731.7435,19.3116,271.0173},
  4343. {-1699.1759,929.5253,24.3018,89.8111},
  4344. {-1712.5168,1044.5073,44.6279,358.2414},
  4345. {-2854.1238,453.5577,3.9249,183.1889},
  4346. {-2264.8030,565.5635,34.5812,269.8132},
  4347. {562.8450,2267.6921,33.9044,196.0807},
  4348. {1010.5961,1386.6401,10.2374,178.3798},
  4349. {1966.8695,39.7845,32.0774,275.4093},
  4350. {-1798.1310,-227.1539,17.7919,359.7192},
  4351. {-2256.1558,-228.3671,36.0269,176.8635},
  4352. {-2188.3320,505.4270,34.5788,86.5070},
  4353. {-2433.0920,1374.7974,6.6022,269.6667},
  4354. {682.7741,-155.1761,23.1781,82.9765},
  4355. {708.7162,317.3557,19.4460,279.2621},
  4356. {-2705.7036,262.9774,3.7452,0.0536}
  4357.  
  4358. };
  4359.  
  4360. stock SpawnCar( playerid )
  4361. {
  4362.     new v = pCar[playerid];
  4363.     PutPlayerInVehicle(playerid,v, 0);
  4364.     new r = random(sizeof(Spawns));
  4365.     SetVehiclePos( v , Spawns[r][0] , Spawns[r][1] , Spawns[r][2] );
  4366.     SetVehicleZAngle( v, Spawns[r][3]);
  4367.     new Float:x1,Float:y1;
  4368.     x1 = getXfromDistance( Spawns[r][0] , 1000 , Spawns[r][3] );
  4369.     y1 = getYfromDistance( Spawns[r][1] , 1000 , Spawns[r][3] );
  4370.     SetVehicleVelocity(v,(Spawns[r][0]-x1)/(1000),(y1-Spawns[r][1])/(1000),-0.1);
  4371.     Attach3DTextLabelToVehicle(DDD[playerid],v,0,0,0);
  4372.     printf("vehicleid %d",v);
  4373.     Attach3DTextLabelToPlayer(DDD2[playerid],playerid,0,0,0);
  4374.     SetVehicleHealth(v,9999999999);
  4375.     SetCameraBehindPlayer(playerid);
  4376.     PlayerPlaySound(playerid,RESPAWN_SOUND,0,0,0);
  4377. }
  4378.  
  4379. stock LoadPlayerCar( playerid )
  4380. {
  4381.     new v = strval(pGet( playerid , 4 ));
  4382.     new c1 = strval(pGet( playerid , 5 ));
  4383.     new c2 = strval(pGet( playerid , 6 ));
  4384.  
  4385.     new c = CreateVehicle( v , 0 , 0 , 0 , 0 , c1 , c2 , -1 );
  4386.     SetPlayerColor(playerid,GetPlayerColorFromCarColor( c1 ));
  4387. //  printf("carid %d model %d",c,v);
  4388.     for(new i = 0;i <= 13;i++)
  4389.     {
  4390.         new t = strval(cGet( playerid , i+1 ));
  4391.         if(t)
  4392.             AddVehicleComponent(c,t);
  4393.     }
  4394.     new paintjob = strval(cGet(playerid,15));
  4395.     if(paintjob != 0)
  4396.     {
  4397.         ChangeVehiclePaintjob( c , paintjob-1 );
  4398.         SetPlayerColor(playerid,COLOR_WHITE);
  4399.     }
  4400.     PutPlayerInVehicle( playerid , c , 0 );
  4401.     pCar[playerid] = c;
  4402.     SetNitrox( playerid , 100 );
  4403.     TextDrawShowForPlayer( playerid , HUD );
  4404.     TextDrawShowForPlayer( playerid , NitroBar[playerid] );
  4405.     TextDrawShowForPlayer( playerid , SpeedBar[playerid] );
  4406.  
  4407. }
  4408.  
  4409. forward ManageVehicle();
  4410. public ManageVehicle()
  4411. {
  4412.     for(new i = 0;i < MAX_PLAYERS;i++)
  4413.     {
  4414.         if(IsPlayerInAnyVehicle(i))
  4415.         if(IsPlayerConnected(i))
  4416.         {
  4417.             if(!IsPlayerNPC(i))
  4418.             {
  4419.                 if(GetKeys(i) != 12)
  4420.                 {
  4421.                     new n = GetNitrox(i);
  4422.                     SetNitrox(i,n+1);
  4423.                 }
  4424.             }
  4425.             if(GetPlayerState(i)==PLAYER_STATE_DRIVER)
  4426.             {
  4427.                 new Float:h;
  4428.                 GetVehicleHealth(GetPlayerVehicleID(i),h);
  4429.                 if(h < 1000)
  4430.                 {
  4431.                     new Float:Z;
  4432.                     new v = GetPlayerVehicleID(i);
  4433.                     GetVehicleZAngle(v,Z);
  4434.                     SetVehicleZAngle( v,Z);
  4435. //                  printf("Z %f",Z);
  4436.                     SetVehicleHealth(v,9999999999);
  4437.                 }
  4438.                    
  4439.                 //SetPlayerArmour(i,(2*(h-500))/10);
  4440.             }
  4441.             else
  4442.             {
  4443.                 //SetPlayerArmour(i,0);
  4444.             }
  4445.         }
  4446.     }
  4447. }
  4448.  
  4449. forward HeatPause(playerid);
  4450. public HeatPause(playerid)
  4451. {
  4452.     GameTextForPlayer(playerid,"~n~~n~~n~~n~~r~NO FUEl!" , 10000 , 5);
  4453.     TogglePlayerControllable( playerid , 0);
  4454.     FixPlayerHeat(playerid);
  4455. }
  4456.  
  4457. forward FixPlayerHeat(playerid);
  4458. public FixPlayerHeat( playerid )
  4459. {
  4460.     if((GetPlayerState(playerid)==PLAYER_STATE_DRIVER))
  4461.     {
  4462.         new Float:h;
  4463.         GetPlayerArmour(playerid,h);
  4464.         if(h < 5)
  4465.             SetPlayerArmour(playerid,5);
  4466.         else
  4467.             SetPlayerArmour(playerid,h+2);
  4468.         if(h < 48)
  4469.             SetTimerEx("FixPlayerHeat",500,0,"i",playerid);
  4470.         else
  4471.         {
  4472.             TogglePlayerControllable(playerid,1);
  4473.             SetPlayerArmour(playerid,50);
  4474.         }
  4475.     }
  4476.     else
  4477.         TogglePlayerControllable(playerid,1);
  4478. }
  4479. stock Push(v,speed)
  4480. {
  4481.     new Float:x,Float:y,Float:z,Float:a;
  4482.     GetVehiclePos( v , x,y,z);
  4483.     GetVehicleZAngle( v, a);
  4484.     new Float:x1,Float:y1;
  4485.     x1 = getXfromDistance( x , 1000 , a );
  4486.     y1 = getYfromDistance( y , 1000 , a );
  4487.     SetVehicleVelocity(v,(x-x1)/(1000*speed),(y1-y)/(1000*speed),0);
  4488. }
  4489.  
  4490. new toldU[MAX_PLAYERS][sizeof Checkpoints];
  4491. forward RaceManager();
  4492. public RaceManager()
  4493. {
  4494.     for(new i = 0;i < MAX_PLAYERS;i++)
  4495.     {
  4496.         if(IsPlayerInAnyVehicle(i))
  4497.         if(IsPlayerConnected(i))
  4498.         {
  4499.             if(!IsPlayerNPC(i))
  4500.             {
  4501.             /*
  4502.                 for(new j = 0; j < MAX_PLAYERS;j++)
  4503.                 {
  4504.                     if(j < max_checkpoints)
  4505.                     if(IsPlayerNPC(j))
  4506.                     {
  4507.                         if(bGet(i,j)==0)
  4508.                         if(GetDistanceBetweenPlayers(i,j) < 15)
  4509.                         {
  4510.                             if((Race[i] == -1) && (Race[j] == -1))
  4511.                             {
  4512.                                 if(DidUask[i] == j)
  4513.                                 {
  4514.                                     DidUask[i] = -1;
  4515.                                     continue;
  4516.                                 }
  4517.  
  4518.                                 DidUask[i] = j;
  4519.                                 SendPlayerMessageToPlayer(i,j,WannaRace[random(sizeof(WannaRace))]);
  4520.                                 break;
  4521.                             }
  4522.                         }
  4523.                     }
  4524.                 }
  4525.             */
  4526.                 new j = GetClosestBot(i);
  4527.                 printf("closest bot %d",j);
  4528.                 if(j != -1)
  4529.                 {
  4530.                     if(GetPlayerVirtualWorld(j) == 0)
  4531.                     if(bGet(i,j)==1)
  4532.                     {
  4533.                         if(toldU[i][j] != 1)
  4534.                         {
  4535.                             SendPlayerMessageToPlayer(i,j,"You already won me out :(.");
  4536.                             toldU[i][j] = 1;
  4537.                         }
  4538.                     }
  4539.                     else
  4540.                     if(GetDistanceBetweenPlayers(i,j) < 15)
  4541.                     {
  4542.                         if((Race[i] == -1) && (Race[j] == -1))
  4543.                         {
  4544.                             if(GetPlayerVirtualWorld(i) == GetPlayerVirtualWorld(j))
  4545.                             {
  4546.                                 if(DidUask[i] == j)
  4547.                                 {
  4548.                                    // DidUask[i] = -1;
  4549.                                     continue;
  4550.                                 }
  4551.                                 DidUask[i] = j;
  4552.                                 SendPlayerMessageToPlayer(i,j,WannaRace[random(sizeof(WannaRace))]);
  4553.                                 Message(i,"Press 'H' to accept.");
  4554.                             }
  4555.                         }
  4556.                     }
  4557.                 }
  4558.             }
  4559.         }
  4560.     }
  4561. }
  4562.  
  4563. public OnPlayerClickPlayer(playerid, clickedplayerid, source)
  4564. {
  4565.     new i = clickedplayerid;
  4566.     if(GetPlayerVirtualWorld(playerid))
  4567.         return Message(playerid,"You can't teleport to there right now.");
  4568.     if(GetPlayerVirtualWorld(i))
  4569.         return Message(playerid,"You can't teleport to there right now.");
  4570.     if(Race[playerid] != -1)
  4571.         return Message(playerid,"You can't teleport to there right now.");
  4572.     if(Race[i] != -1)
  4573.         return Message(playerid,"You can't teleport to there right now.");
  4574.     if(mpRace[playerid] == 1)
  4575.         return Message(playerid,"You can't teleport to there right now.");
  4576.     if(mpRace[i] == 1)
  4577.         return Message(playerid,"You can't teleport to there right now.");
  4578.     if(playerid == clickedplayerid)
  4579.         return Message(playerid,"You can't teleport to yourself.");
  4580.  
  4581.     new Float:x,Float:y,Float:z;
  4582.     new v1,v2;
  4583.     v1 = GetPlayerVehicleID(i);
  4584.     v2 = GetPlayerVehicleID(playerid);
  4585.     GetVehiclePos(v1,x,y,z);
  4586.     SetVehiclePos(v2,x,y,z+5);
  4587.     GetVehicleZAngle(v1,z);
  4588.     SetVehicleZAngle(v2,z);
  4589.     GetVehicleVelocity(v1,x,y,z);
  4590.     SetVehicleVelocity(v2,x/2,y/2,z/2);
  4591.     return 1;
  4592. }
  4593.  
  4594.  
  4595. forward UpdateDisks();
  4596. public UpdateDisks()
  4597. {
  4598.     for(new i = 0;i < MAX_PLAYERS;i++)
  4599.     {
  4600.         if(IsPlayerInAnyVehicle(i))
  4601.         if(IsPlayerConnected(i))
  4602.         {
  4603.             if(!IsPlayerNPC(i))
  4604.             {
  4605.                 if(ignordisk[i] == 0)
  4606.                 if(random(2)==1)
  4607.                     CreateDisk( i );
  4608.             }
  4609.         }
  4610.     }
  4611. }
  4612.  
  4613. forward UpdateVelocity();
  4614. public UpdateVelocity()
  4615. {
  4616.     new str[20];
  4617.     for(new i = 0;i < MAX_PLAYERS;i++)
  4618.     {
  4619.         if(IsPlayerConnected(i))
  4620.         {
  4621.             if(IsPlayerInAnyVehicle(i))
  4622.             {
  4623.                 new Float:v,Float:x,Float:y,Float:z;
  4624.                 GetVehicleVelocity(GetPlayerVehicleID(i),x,y,z);
  4625.                 if(x < 0) x = x + -x + -x;
  4626.                 if(y < 0) y = y + -y + -y;
  4627.                 if(z < 0) z = z + -z + -z;
  4628.                 v = ((x * 1) + (y * 1) + (z * 1))*70;
  4629.                 format(str,20,"\n\n%.2fkmph",v);
  4630.                 Update3DTextLabelText(DDD[i],GetPlayerColor(i),str);
  4631.                 SetSpeed(i,floatround(v));
  4632.                 SetPlayerHealth( i , 1000 ); // manage health
  4633.             }
  4634.         }
  4635.     }
  4636. }
  4637.  
  4638.  
  4639.  
  4640. forward UpdateCheckpoints(i);
  4641. public UpdateCheckpoints(i)
  4642. {
  4643.     if(Race[i] != -1)
  4644.     {
  4645.         new r = GetCheckpointId(Race[i]);
  4646.         new Float:x,Float:y,Float:z;
  4647.         GetPlayerPos(i,x,y,z);
  4648.         new Float:d = GetDistance( x, y,z, Checkpoints[r][ex2], Checkpoints[r][ey2], Checkpoints[r][ez2]);
  4649.         new str[10];
  4650.         format(str,10,"%.2f",d);
  4651. //      UpdatePlayer3DTextLabelText(i,Dist[i],0xAA3333AA,str);
  4652.         SetTimerEx("UpdateCheckpoints",100,0,"i",i);
  4653.         //printf(" 3d for %d ",i );
  4654.     }
  4655.     else
  4656.     {
  4657. //      DeletePlayer3DTextLabel( i , Dist[i] );
  4658.     }
  4659. }
  4660.  
  4661.  
  4662. forward RecordRaceCheckpoint( playerid, bot[] );
  4663. public RecordRaceCheckpoint( playerid,bot[] )
  4664. {
  4665.     if(IsPlayerConnected(playerid))
  4666.     {
  4667.         new Float:x,Float:y, Float:z;
  4668.         GetPlayerPos( playerid , x, y , z);
  4669.         CreatePickup( 1239,2,x,y,z,0);
  4670.         new string[128];
  4671.         format(string,128,"%s.cp",bot);
  4672.         if(timetaken == 0)
  4673.         {
  4674.             hbot = fopen( string , io_write);
  4675.             SendClientMessage( playerid , 0xFFFFFFAA , string );
  4676.         }
  4677.         format(string,128,"%f , %f , %f\r\n",x,y,z);
  4678.         fwrite(hbot,string);
  4679.         timetaken+=4;
  4680.         format(string,128,"~n~~n~~n~~n~%d:%d",timetaken / 60,timetaken % 60 );
  4681.         GameTextForPlayer( playerid , string , 4000 , 5 );
  4682.     }
  4683.     else
  4684.     {
  4685.         KillTimer(timerforcp);
  4686.         OnPlayerExitVehicle(playerid,0);
  4687.     }
  4688. }
  4689.  
  4690. forward MultiplayerRaceManagement();
  4691. public MultiplayerRaceManagement()
  4692. {
  4693.     new r;
  4694.     new Float:v;
  4695.     do
  4696.     {
  4697.         r = random(max_checkpoints);
  4698.         new Float:x,Float:y,Float:z;
  4699.         GetVehicleVelocity(Checkpoints[GetCheckpointId(r)][ev],x,y,z);
  4700.         if(x < 0) x = x + -x + -x;
  4701.         if(y < 0) y = y + -y + -y;
  4702.         if(z < 0) z = z + -z + -z;
  4703.         v = ((x * 1) + (y * 1) + (z * 1))*70;
  4704.        
  4705.     }
  4706.     while(v != 0);
  4707.     MPCounter = 0;
  4708.     Ride_mp( r );
  4709. //  CallRemoteFunction("Ride_mp","s",Checkpoints[r][ename]);
  4710. }
  4711.  
  4712. forward Ride_mp(r);
  4713. public Ride_mp(r)
  4714. {
  4715.     if(IsPlayerConnected(mp))
  4716.     {
  4717.         SetPlayerVirtualWorld( mp , 0 );
  4718.         SetVehicleVirtualWorld( Checkpoints[GetCheckpointId(r)][ev] , 0 );
  4719.     }
  4720.     mp = Checkpoints[r][eid];
  4721.     Finishmp = 0;
  4722.     SetPlayerVirtualWorld( (r) , 2099 ); // get him back after race
  4723.     SetVehicleVirtualWorld( Checkpoints[GetCheckpointId(r)][ev] , 2099 ); // get him back after race
  4724.     new m = random(24) + 1;
  4725.     Prizemp[0] = m * 100;
  4726.     Prizemp[1] = (m * 100)/2;
  4727.     Prizemp[2] = (m * 100)/4;
  4728.     for(new i = 0;i < MAX_PLAYERS; i++)
  4729.     {
  4730.         if(IsPlayerConnected( i ))
  4731.         {
  4732.             if(!IsPlayerNPC( i ))
  4733.             {
  4734.                 if(Race[i] == -1)
  4735.                 {
  4736.  
  4737.                     new string[256];
  4738.                     format(string,256,"A Multiplayer race is going to start shortly. Cash Prize: $%d. Press 2 to join.",m*1000);
  4739.                     Message( i , string);
  4740.                 }
  4741.             }
  4742.         }
  4743.     }
  4744. }
  4745.  
  4746. forward UpdateFuel();
  4747. public UpdateFuel()
  4748. {
  4749.     for(new i = 0;i < MAX_PLAYERS;i++)
  4750.     {
  4751.         if(IsPlayerConnected(i))
  4752.         if(!IsPlayerNPC(i))
  4753.         {
  4754.             if(IsPlayerInAnyVehicle(i))
  4755.             {
  4756.                 new Float:v;
  4757.                 GetPlayerArmour(i,v);
  4758.                 SetPlayerArmour(i,v - 1);
  4759.                 if(v == 0)
  4760.                 {
  4761.                     HeatPause( i );
  4762.                 }
  4763.                 if(IsPlayerInFuelStation(i))
  4764.                 {
  4765.                     new ud,lr,k;
  4766.                     GetPlayerKeys(i,k,ud,lr);
  4767.                     if((k == 0) && (ud == 0) && (lr == 0))
  4768.                     {
  4769.                         GetPlayerArmour(i,v);
  4770.                         SetPlayerArmour(i,v + 10);
  4771.                     }
  4772.                 }
  4773.             }
  4774.         }
  4775.     }
  4776. }
  4777.  
  4778. stock IsPlayerInFuelStation(playerid)
  4779. {
  4780.     for(new i = 0;i < sizeof(FuelStations);i++)
  4781.     {
  4782.         if(IsPlayerInRangeOfPoint(playerid,6,FuelStations[i][0],FuelStations[i][1],FuelStations[i][2]))
  4783.             return 1;
  4784.     }
  4785.     return 0;
  4786. }
  4787.  
  4788. stock Message( playerid , info[])
  4789. {
  4790. //  static tim[MAX_PLAYERS];
  4791. //  KillTimer(tim[playerid]);
  4792.     TextDrawSetString( VertiDraw[playerid] , info );
  4793.     PlayerPlaySound(playerid,1055,0,0,0);
  4794. //  TextDrawShowForPlayer( playerid,VertiDraw[playerid]);
  4795. //  tim[playerid] = SetTimerEx("HideMessage",60 * 1000 , 0,"i",playerid);
  4796.     return 1;
  4797. }
  4798.  
  4799. forward HideMessage(playerid);
  4800. public HideMessage(playerid)
  4801. {
  4802.     TextDrawHideForPlayer( playerid,VertiDraw[playerid]);
  4803. }
  4804.  
  4805. stock writeracelog( playerid , line[] )
  4806. {
  4807.     if(IsPlayerNPC(playerid))
  4808.         return 0;
  4809.     new string[256];
  4810.     new name[23];
  4811.     GetPlayerName(playerid,name,23);
  4812.     format(string,256,"racelog/%s.log",name);
  4813.     if(!fexist(string))
  4814.         fclose(fopen(string,io_write));
  4815.     new File:h = fopen(string,io_read);
  4816.     format(string,256,"racelog/%s.tmp.log",name);
  4817.     new File:h2 = fopen(string,io_write);
  4818.     while(fread(h,string))
  4819.         fwrite(h2,string);
  4820.     fclose(h);
  4821.     fclose(h2);
  4822.     format(string,256,"racelog/%s.log",name);
  4823.     h = fopen(string,io_write);
  4824.     format(string,256,"racelog/%s.tmp.log",name);
  4825.     h2 = fopen(string,io_read);
  4826.     format(string,256,"%s\r\n",line);
  4827.     fwrite(h,string);
  4828.     while(fread(h2,string))
  4829.         fwrite(h,string);
  4830.     fclose(h);
  4831.     fclose(h2);
  4832.     format(string,256,"racelog/%s.tmp.log",name);
  4833.     fremove(string);
  4834.     return 1;
  4835. }
  4836.  
  4837.  
  4838. stock GetPlayerColorFromCarColor( color )
  4839. {
  4840.     switch(color)
  4841.     {
  4842.         case 0: return COLOR_BLACK;
  4843.         case 1: return COLOR_WHITE;
  4844.         case 2: return COLOR_BLUE;
  4845.         case 3: return COLOR_RED;
  4846.         case 4: return COLOR_GREY;
  4847.         case 5: return COLOR_LPINK;
  4848.         case 6: return COLOR_YELLOW;
  4849.         case 7: return COLOR_LBLUE;
  4850.         case 8: return COLOR_GREY;
  4851.         case 9: return COLOR_GREY;
  4852.         case 10: return COLOR_DBLUE;
  4853.         case 11: return COLOR_GREY;
  4854.         case 12: return COLOR_GREY;
  4855.         case 13: return COLOR_GREY;
  4856.         case 14: return COLOR_WHITE;
  4857.         case 15: return COLOR_GREY;
  4858.         case 16: return COLOR_LGREEN;
  4859.         case 17: return COLOR_LRED;
  4860.         case 18: return COLOR_LRED;
  4861.         case 19: return COLOR_GREY;
  4862.         case 20: return COLOR_DBLUE;
  4863.         case 21: return COLOR_MAROON;
  4864.         case 22: return COLOR_MAROON;
  4865.         case 23: return COLOR_GREY;
  4866.         case 24: return COLOR_GREY;
  4867.         case 25: return COLOR_GREY;
  4868.         case 26: return COLOR_GREY;
  4869.         case 27: return COLOR_GREY;
  4870.         case 28: return COLOR_DBLUE;
  4871.         case 29: return COLOR_GREY;
  4872.         case 30: return COLOR_BROWN;
  4873.         case 31: return COLOR_BROWN;
  4874.         case 32: return COLOR_LBLUE;
  4875.         case 33: return COLOR_GREY;
  4876.         case 34: return COLOR_GREY;
  4877.         case 35: return COLOR_GREY;
  4878.         case 36: return COLOR_BLACK;
  4879.         case 37: return COLOR_GREY;
  4880.         case 38: return COLOR_WHITE;
  4881.         case 39: return COLOR_LBLUE;
  4882.         case 40: return COLOR_BLACK;
  4883.         case 41: return COLOR_GREY;
  4884.         case 42: return COLOR_LRED;
  4885.         case 43: return COLOR_MAROON;
  4886.         case 44: return COLOR_DGREEN;
  4887.         case 45: return COLOR_MAROON;
  4888.         case 46: return COLOR_LYELLOW;
  4889.         case 47: return COLOR_GREY;
  4890.         case 48: return COLOR_GREY;
  4891.         case 49: return COLOR_WHITE;
  4892.         case 50: return COLOR_GREY;
  4893.         case 51: return COLOR_LGREEN;
  4894.         case 52: return COLOR_LBLUE;
  4895.         case 53: return COLOR_DBLUE;
  4896.         case 54: return COLOR_DBLUE;
  4897.         case 55: return COLOR_LRED;
  4898.         case 56: return COLOR_WHITE;
  4899.         case 57: return COLOR_LRED;
  4900.         case 58: return COLOR_RED;
  4901.         case 59: return COLOR_LBLUE;
  4902.         case 60: return COLOR_GREY;
  4903.         case 61: return COLOR_BROWN;
  4904.         case 62: return COLOR_RED;
  4905.         case 63: return COLOR_GREY;
  4906.         case 64: return COLOR_GREY;
  4907.         case 65: return COLOR_LYELLOW;
  4908.         case 66: return COLOR_BROWN;
  4909.         case 67: return COLOR_LBLUE;
  4910.         case 68: return COLOR_WHITE;
  4911.         case 69: return COLOR_WHITE;
  4912.         case 70: return COLOR_LRED;
  4913.         case 71: return COLOR_LBLUE;
  4914.         case 72: return COLOR_GREY;
  4915.         case 73: return COLOR_WHITE;
  4916.         case 74: return COLOR_MAROON;
  4917.         case 75: return COLOR_DGREEN;
  4918.         case 76: return COLOR_WHITE;
  4919.         case 77: return COLOR_WHITE;
  4920.         case 78: return COLOR_RED;
  4921.         case 79: return COLOR_DBLUE;
  4922.         case 80: return COLOR_LRED;
  4923.         case 81: return COLOR_GREY;
  4924.         case 82: return COLOR_LRED;
  4925.         case 83: return COLOR_DGREEN;
  4926.         case 85: return COLOR_PINK;
  4927.         case 86: return COLOR_GREEN;
  4928.         case 87: return COLOR_BLUE;
  4929.         case 88: return COLOR_LRED;
  4930.         case 89: return COLOR_WHITE;
  4931.         case 90: return COLOR_WHITE;
  4932.         case 91: return COLOR_DBLUE;
  4933.         case 92: return COLOR_GREY;
  4934.         case 93: return COLOR_BLUE;
  4935.         case 94: return COLOR_DBLUE;
  4936.         case 95: return COLOR_DBLUE;
  4937.         case 96: return COLOR_WHITE;
  4938.         case 97: return COLOR_LBLUE;
  4939.         case 98: return COLOR_GREY;
  4940.         case 99: return COLOR_WHITE;
  4941.         case 100: return COLOR_BLUE;
  4942.         case 101: return COLOR_BLACK;
  4943.         case 102: return COLOR_LYELLOW;
  4944.         case 103: return COLOR_DBLUE;
  4945.         case 104: return COLOR_LRED;
  4946.         case 105: return COLOR_GREY;
  4947.         case 106: return COLOR_BLUE;
  4948.         case 107: return COLOR_WHITE;
  4949.         case 108: return COLOR_BLUE;
  4950.         case 109: return COLOR_GREY;
  4951.         case 110: return COLOR_WHITE;
  4952.         case 111: return COLOR_GREY;
  4953.         case 112: return COLOR_LBLUE;
  4954.         case 113: return COLOR_GREY;
  4955.         case 114: return COLOR_LGREEN;
  4956.         case 115: return COLOR_LRED;
  4957.         case 116: return COLOR_DBLUE;
  4958.         case 117: return COLOR_RED;
  4959.         case 118: return COLOR_WHITE;
  4960.         case 119: return COLOR_GREY;
  4961.         case 120: return COLOR_GREY;
  4962.         case 121: return COLOR_RED;
  4963.         case 122: return COLOR_GREY;
  4964.         case 123: return COLOR_BROWN;
  4965.         case 124: return COLOR_LRED;
  4966.         case 125: return COLOR_DBLUE;
  4967.         case 126: return COLOR_PINK;
  4968.         case -1: return COLOR_BOT;
  4969.     }
  4970.     return  COLOR_WHITE;
  4971. }
  4972.  
  4973. stock addadmin( name[] )
  4974. {
  4975.     if(!fexist("admins.txt"))
  4976.         fclose(fopen("admins.txt",io_write));
  4977.     new File:h = fopen("admins.txt",io_append);
  4978.     new string[256];
  4979.     format(string,256,"%s\r\n",name);
  4980.     fwrite(h,string);
  4981.     fclose(h);
  4982. }
  4983.  
  4984. stock deladmin( name[] )
  4985. {
  4986.     if(!fexist("admins.txt"))
  4987.         fclose(fopen("admins.txt",io_write));
  4988.     new File:h = fopen("admins.txt",io_read);
  4989.     new File:h2 = fopen("admins.tmp.txt",io_write);
  4990.     new string[256];
  4991.     while(fread(h,string))
  4992.     {
  4993.         if(strcmp(string,name,true,strlen(name))!=0)
  4994.             fwrite(h2,string);
  4995.     }
  4996.     fclose(h);
  4997.     fclose(h2);
  4998.     h = fopen("admins.txt",io_write);
  4999.     h2 = fopen("admins.tmp.txt",io_read);
  5000.     while(fread(h2,string))
  5001.         fwrite(h,string);
  5002.     fclose(h);
  5003.     fclose(h2);
  5004.     fremove("admins.tmp.txt");
  5005. }
  5006.  
  5007. stock isadmin( playerid )
  5008. {
  5009.     new name[23];
  5010.     GetPlayerName(playerid,name,23);
  5011.     if(!fexist("admins.txt"))
  5012.         fclose(fopen("admins.txt",io_write));
  5013.     new File:h = fopen("admins.txt",io_read);
  5014.     new string[256];
  5015.     while(fread(h,string))
  5016.     {
  5017.         if(strcmp(string,name,true,strlen(name))==0)
  5018.         {
  5019.             fclose(h);
  5020.             return 1;
  5021.         }
  5022.     }
  5023.     fclose(h);
  5024.     return 0;
  5025. }
  5026.  
  5027. stock SetNitrox( playerid  , amount )
  5028. {
  5029.     if(amount < 0)
  5030.         amount = 0;
  5031.     if(amount > 100)
  5032.         amount = 100;
  5033.     Nitrox[playerid ]  = amount;
  5034.     SetNitroBar( playerid , amount );
  5035. }
  5036.  
  5037. stock SetSpeed( playerid  , amount )
  5038. {
  5039.     if(amount < 0)
  5040.         amount = 0;
  5041.     if(amount > 100)
  5042.         amount = 100;
  5043.     SetSpeedBar( playerid , amount );
  5044. }
  5045.  
  5046. stock SetSpeedBar( playerid , progress)
  5047. {
  5048.     new string[128];
  5049.     for(new i = 0;i < progress+3;i++)
  5050.     {
  5051.         if(progress > 0)
  5052.         if(i == 0)
  5053.             strins(string,"~",i);
  5054.         else if(i == 1)
  5055.         {
  5056.             if(progress > 95)
  5057.                 strins(string,"r",i);
  5058.             else if(progress > 80)
  5059.                 strins(string,"y",i);
  5060.             else
  5061.                 strins(string,"g",i);
  5062.                
  5063.  
  5064.         }
  5065.         else if(i == 2)
  5066.             strins(string,"~",i);
  5067.         else
  5068.             strins(string,"l",i);
  5069.  
  5070.     }
  5071.     TextDrawSetString( SpeedBar[playerid] , string );
  5072. }
  5073.  
  5074. stock SetNitroBar( playerid , progress)
  5075. {
  5076.     new string[128];
  5077.     for(new i = 0;i < progress+3;i++)
  5078.     {
  5079.         if(progress > 0)
  5080.         if(i == 0)
  5081.             strins(string,"~",i);
  5082.         else if(i == 1)
  5083.         {
  5084.             if(progress > 60)
  5085.                 strins(string,"g",i);
  5086.             else if(progress > 20)
  5087.                 strins(string,"y",i);
  5088.             else if(progress > 0)
  5089.                 strins(string,"r",i);
  5090.  
  5091.         }
  5092.         else if(i == 2)
  5093.             strins(string,"~",i);
  5094.         else
  5095.             strins(string,"l",i);
  5096.  
  5097.     }
  5098.     TextDrawSetString( NitroBar[playerid] , string );
  5099. }
  5100. stock GetNitrox( playerid )
  5101. {
  5102.     return Nitrox[playerid ];
  5103. }
  5104.  
  5105. stock GetKeys( playerid )
  5106. {
  5107.     return pKey[playerid];
  5108. }
  5109.  
  5110. forward UpdateVehicleBots();
  5111. public UpdateVehicleBots()
  5112. {
  5113.     for(new i = 0;i < MAX_PLAYERS;i++)
  5114.     {
  5115.         if(IsPlayerConnected(i))
  5116.         if(!IsPlayerNPC(i))
  5117.         {
  5118.             if(IsPlayerInAnyVehicle(i))
  5119.             {
  5120.                 if(Race[i] == -1)
  5121.                 {
  5122.                     if(mpRace[i] == 0)
  5123.                     {
  5124.                         if(GetPlayerVirtualWorld(i) == 0)
  5125.                         {
  5126.                             for(new j = 0;j <MAX_VEHICLES;j++)
  5127.                             {
  5128.                                 if(IsVehicleStreamedIn(j,i))
  5129.                                 {
  5130.                                     if(GetVehicleDriver(j) == -1)
  5131.                                     {
  5132.                                         new vehicleid = j;
  5133.                                         new forplayerid = i;
  5134.                                         for(new k = 0;k < max_checkpoints;k++)
  5135.                                         {
  5136.                                             if(Checkpoints[k][ev] == vehicleid)
  5137.                                             {
  5138.                                                 if(GetVehicleDriver(vehicleid) == -1)
  5139.                                                 {
  5140.                                                     new n = GetFreeNPC();
  5141.                                                     if(n != -1)
  5142.                                                     {
  5143.                                                         FreeNPC[n] = 0;
  5144.                                                         SetPlayerVirtualWorld(n,0);
  5145.                                                         PutPlayerInVehicle(n,vehicleid,0);
  5146.                                                         new string[30];
  5147.                                                         SetPlayerName(n,Checkpoints[k][ename]);
  5148.                                                         SetPlayerSkin(n,Checkpoints[k][eskin]);
  5149.                                                         GivePlayerMoney(n,100000+random(9023480));
  5150.                                                         format(string,30,"finish %s",Checkpoints[k][ename]);
  5151.                                                         printf(string);
  5152.                                                         SendClientMessage(n,0,string);
  5153.                                                         Checkpoints[k][eid] = n;
  5154.                                                     }
  5155.                                                 }
  5156.                                             }
  5157.                                         }
  5158.                                     }
  5159.  
  5160.                                 }
  5161.                             }
  5162.                         }
  5163.                     }
  5164.                 }
  5165.             }
  5166.         }
  5167.     }
  5168. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement