// Grishracetemplate // This is a template for making race modes in samp // // Alter the code marked with ***** to suit your mode // all the code that needs altering is near the top of this script // so you don't need to hunt around for what to change // // [DRuG]Grish // 27/6/2006 #include // ***** // Set the filename for storing best times here. // Make sure you have got the \scriptfiles folder // in your samp server folder. // Make it unique to your mode. #define RECORDFILE "grishracetemplatefile.txt" // ***** // Set the numper of entries in the checkpoints array here. // The number of race checkpoints will show up as 1 less than this number. #define MAXCP 37 // ***** // Put your starting grid locations here. // Format is {x,y,z,angle} // Same amount as you have starting vehicles. // Be sure to change the [8] to the number of grid locations you have. new Float:racestart[8][4] = { {2031.9198,847.7925,7.1002,90.0}, {2031.9198,857.7925,7.1002,90.0}, {2041.9198,847.7925,7.1002,90.0}, {2041.9198,857.7925,7.1002,90.0}, {2051.9198,847.7925,7.1002,90.0}, {2051.9198,857.7925,7.1002,90.0}, {2061.9198,847.7925,7.1002,90.0}, {2061.9198,857.7925,7.1002,90.0} }; // ***** // Put your checkpoint locations here. // Same amount as you defied MAXCP as. // Format is {x,y,z} // Make the final checkpoint {0.0,0.0,0.0} after the finish checkpoint. new Float:checkpoints[MAXCP][3] = { {1769.4868,851.7225,10.0452}, {1314.9775,882.4576,6.4374}, {1225.8315,1286.3774,6.3629}, {1224.6378,2215.3162,6.3589}, {1616.2266,2455.3342,6.4663}, {2239.5613,2600.9739,6.3867}, {2686.1184,2399.5120,6.3594}, {2709.6755,1876.6189,6.3592}, {2636.7515,917.0633,6.3591}, {2407.0552,851.8081,6.3631}, {2030.4202,834.5757,6.3632}, {1449.7327,834.2547,6.4409}, {1208.7852,1172.1589,6.4374}, {1225.8546,1292.6505,6.3630}, {1209.3243,1474.1068,6.3609}, {1226.8951,1712.4558,6.3592}, {1209.7170,1889.8855,6.3594}, {1225.5254,2010.1133,6.3595}, {1210.3157,2135.2490,6.3589}, {1369.8258,2466.9639,6.3589}, {1621.3256,2458.7861,6.4651}, {1972.4384,2550.2344,6.4216}, {2231.7883,2599.7429,6.3866}, {2539.1138,2592.1216,4.4841}, {2690.5945,2395.5029,6.3590}, {2726.4358,2250.4768,6.3688}, {2707.7854,2120.5283,6.3667}, {2724.2791,2042.9327,6.3629}, {2709.8926,1872.7764,6.3590}, {2726.1953,1596.2194,6.3629}, {2709.2205,1312.4891,6.3592}, {2725.3789,1220.3663,6.3645}, {2631.1663,928.4933,6.3631}, {2431.0984,855.8843,6.3590}, {2340.5420,974.2465,10.2954}, {2388.1653,992.1713,10.4452}, {0.0,0.0,0.0} }; new playercp[MAXCP]; new msg[250]; new playerdriving[100]; new playerinrace[100]; new playercheck[100]; new playerposition[100]; new timestart[100]; new timeend[100]; new Float:timetotal[100]; new minutes[100]; new seconds[100]; new mseconds[100]; new ready = 0; new rcount = 0; new raceon = 0; new trig = 0; new trigg = 0; new triggg = 0; new racers = 0; new finished = 0; new File:fileh; main() { // ***** // Change this to the name of your mode. print("\n----------------------------------"); print(" Grishracetemplate"); print("----------------------------------\n"); } public OnGameModeInit() { // ***** // Change this to the name of your mode. SetGameModeText("grishracetemplate"); // ***** // Put the player spawn location here. // Make sure it's near the vehicle spawns. AddPlayerClass(0,2035.8396,1085.9219,10.8203,180.1034, 0, 0, 0, 0, 0, 0); // ***** // Put the race vehicles here. // Same amount as the grid locations. AddStaticVehicle(541,2040.0690,1078.7656,10.8493,176.9732,0,16); AddStaticVehicle(541,2040.3000,1068.1735,10.8502,178.3624,0,16); AddStaticVehicle(541,2039.5710,1058.5510,10.8478,178.7766,0,16); AddStaticVehicle(541,2039.9451,1048.6780,10.8483,177.4517,0,16); AddStaticVehicle(541,2039.7129,1038.7970,10.8417,179.8434,0,16); AddStaticVehicle(541,2039.9021,1028.7639,10.8488,180.7464,0,16); AddStaticVehicle(541,2039.6238,1018.7139,10.8475,176.8509,0,16); AddStaticVehicle(541,2040.3035,1007.9570,10.8538,178.2659,0,16); for (new i=0; i= 1 && playercheck[playerid] <=MAXCP-2) { DisablePlayerCheckpoint(playerid); SetPlayerCheckpoint(playerid,checkpoints[playercheck[playerid]][0],checkpoints[playercheck[playerid]][1],checkpoints[playercheck[playerid]][2],7.0); PlayerPlaySound(playerid,1053,checkpoints[playercheck[playerid]][0],checkpoints[playercheck[playerid]][1],checkpoints[playercheck[playerid]][2]); format(msg,sizeof(msg),"cp %d of %d",playercheck[playerid],MAXCP-1); GameTextForPlayer(playerid,msg,2000,6); if (playercp[playercheck[playerid]] == 999) { playercp[playercheck[playerid]] = playerid; } } if (playercheck[playerid] == MAXCP-1) { DisablePlayerCheckpoint(playerid); timeend[playerid] = tickcount(); timetotal[playerid] = timeend[playerid] - timestart[playerid]; timeconvert(playerid); PlayerPlaySound(playerid,1132,checkpoints[playercheck[playerid]][0],checkpoints[playercheck[playerid]][1],checkpoints[playercheck[playerid]][2]); finished = finished + 1; playerposition[playerid] = finished; new pname[MAX_PLAYER_NAME]; GetPlayerName(playerid, pname, MAX_PLAYER_NAME); new pos[] = "th"; if (playerposition[playerid] == 1 || playerposition[playerid] == 21 || playerposition[playerid] == 31 || playerposition[playerid] == 41 || playerposition[playerid] == 51 || playerposition[playerid] == 61 || playerposition[playerid] == 71 || playerposition[playerid] == 81 || playerposition[playerid] == 91) { pos = "st"; } if (playerposition[playerid] == 2 || playerposition[playerid] == 22 || playerposition[playerid] == 32 || playerposition[playerid] == 42 || playerposition[playerid] == 52 || playerposition[playerid] == 62 || playerposition[playerid] == 72 || playerposition[playerid] == 82 || playerposition[playerid] == 92) { pos = "nd"; } if (playerposition[playerid] == 3 || playerposition[playerid] == 23 || playerposition[playerid] == 33 || playerposition[playerid] == 43 || playerposition[playerid] == 53 || playerposition[playerid] == 63 || playerposition[playerid] == 73 || playerposition[playerid] == 83 || playerposition[playerid] == 93) { pos = "rd"; } format(msg,sizeof(msg),"you finished %d%s in %dmin %d.%dsec",playerposition[playerid],pos,minutes[playerid],seconds[playerid],mseconds[playerid]); GameTextForPlayer(playerid,msg,3000,3); format(msg,sizeof(msg),"%s finished %d%s in %dmin %d.%dsec",pname,playerposition[playerid],pos,minutes[playerid],seconds[playerid],mseconds[playerid]); SendClientMessageToAll(0x00FF00FF,msg); if (fexist(RECORDFILE)) { new dataname[50]; new dataminutes[10]; new dataseconds[10]; new datamseconds[10]; fileh = fopen(RECORDFILE); new filedata[100]; new n[] = " "; new j; new k; fread(fileh,filedata,100); for (new i=0; i<100; i++) { j=i; if (filedata[i] == n[0]) { break; } dataname[i] = filedata[i]; } k=j+1; for (new i=k; i<100; i++) { j=i; if (filedata[i] == n[0]) { break; } dataminutes[i-k] = filedata[i]; } k=j+1; for (new i=k; i<100; i++) { j=i; if (filedata[i] == n[0]) { break; } dataseconds[i-k] = filedata[i]; } k=j+1; for (new i=k; i<100; i++) { j=i; if (filedata[i] == n[0]) { break; } datamseconds[i-k] = filedata[i]; } fclose(fileh); new old = 1; if (minutes[playerid] < strval(dataminutes)) { old = 0; } else if (minutes[playerid] == strval(dataminutes) && seconds[playerid] < strval(dataseconds)) { old = 0; } else if (minutes[playerid] == strval(dataminutes) && seconds[playerid] == strval(dataseconds) && mseconds[playerid] < strval(datamseconds)) { old = 0; } if (old == 0) { fileh = fopen(RECORDFILE); format(msg,sizeof(msg),"%s %d %d %d ",pname,minutes[playerid],seconds[playerid],mseconds[playerid]); fwrite(fileh,msg); fclose(fileh); format(msg,sizeof(msg),"new best time"); SendClientMessageToAll(0x00FF00FF,msg); } else if (old == 1) { format(msg,sizeof(msg),"%s holds the best time of %smin and %s:%ssec ",dataname,dataminutes,dataseconds,datamseconds); SendClientMessageToAll(0x00FF00FF,msg); } } else { fileh = fopen(RECORDFILE); format(msg,sizeof(msg),"%s %d %d %d ",pname,minutes[playerid],seconds[playerid],mseconds[playerid]); fwrite(fileh,msg); fclose(fileh); format(msg,sizeof(msg),"new best time"); SendClientMessageToAll(0x00FF00FF,msg); } playerinrace[playerid] = 0; if (trigg == 0) { trigg = 1; // GameTextForAll("Race will begin in 20 seconds",3000,3); // SendClientMessageToAll(0x00FF00FF,"you have 20 seconds to get a car"); // SendClientMessageToAll(0x00FF00FF,"and type /joinrace"); SetTimer("WaitBeforeRaceEnd",20000,0); } // raceon = 0; // racers = 0; // rcount = 0; } printf("OnPlayerEnterCheckpoint(%d)", playerid); return 1; } public OnPlayerLeaveCheckpoint(playerid) { printf("OnPlayerLeaveCheckpoint(%d)", playerid); return 1; } public WaitBeforeRace() { ready = 1; return 1; } public WaitBeforeRaceEnd() { raceon = 0; rcount = 0; SendClientMessageToAll(0x00FF00FF,"you may now start a new race"); SendClientMessageToAll(0x00FF00FF,"by typing /joinrace"); return 1; } public BeginRace() { if (ready == 1) { for (new i=0; i<100; i++) { if (playerinrace[i] == 1 && rcount == 0) { GameTextForPlayer(i,"race will begin in",1000,3); } if (playerinrace[i] == 1 && rcount == 1) { GameTextForPlayer(i,"3",1000,3); } if (playerinrace[i] == 1 && rcount == 2) { GameTextForPlayer(i,"2",1000,3); } if (playerinrace[i] == 1 && rcount == 3) { GameTextForPlayer(i,"1",1000,3); } if (playerinrace[i] == 1 && rcount == 4) { GameTextForAll("The race has started",1000,3); TogglePlayerControllable(i,1); timestart[i] = tickcount(); SetPlayerCheckpoint(i,checkpoints[0][0],checkpoints[0][1],checkpoints[0][2],7.0); ready = 0; trig = 0; trigg = 0; triggg = 0; raceon = 1; racers = 0; finished = 0; playercheck[i] = 0; } } rcount = rcount + 1; for (new i=0; i