#include #define COLOR_BLUE 0x000ecaAA #define COLOR_GREY 0xAFAFAFAA #define COLOR_YELLOW 0xFFFF00AA new gProgress1[MAX_PLAYERS]; new once[MAX_PLAYERS]; new gPosition1; new gCountdowntimer1; new gCountdown1; new gTime1; new gTimer1; new gRaceStillInProgress1; new gCheckTime1; #define MAX_CHECKPOINTS 14 new Float:gRaceCheckpoints1[MAX_CHECKPOINTS][4] = { {-2800.2744,-476.5320,6.7535,25.0}, // 1 {-2704.7192,-531.5262,11.6127,15.0}, // 2 {-2673.6926,-416.8130,31.7350,15.0}, // 3 {-2376.2341,-379.4245,76.0757,15.0}, // 4 {-2321.7109,-450.2548,79.4628,15.0}, // 5 {-2412.8970,-416.6096,84.6654,15.0}, // 6 {-2628.7920,-494.4859,69.6950,15.0}, // 7 {-2474.5840,-485.6265,100.4489,15.0},// 8 {-2376.2234,-647.8525,126.2174,15.0},// 9 {-2348.6492,-788.2272,93.7642,15.0}, // 10 {-2223.4160,-744.8737,63.8450,15.0}, // 11 {-2206.1416,-987.7772,36.7893,15.0}, // 12 {-1917.4015,-1365.4313,39.8735,15.0},// 13 {-1903.7386,-815.5905,44.5231,30.0} // 14 }; main() { print("\n----------------------------------"); print("4wD rally race By small 4"); print("-------------------------------------\n"); } public OnGameModeInit() { print("GameModeInit()"); SetGameModeText("4wD rally"); gTime1 = 0; return 1; } public OnPlayerRequestClass(playerid, classid) { printf("OnPlayerRequestClass(%d, %d)", playerid, classid); SetPlayerInterior(playerid,0); SetPlayerPos(playerid,2682.7673,-1680.1404,9.4193); SetPlayerFacingAngle(playerid, 352.2312); SetPlayerCameraPos(playerid,2683.1050,-1674.7749,9.4287); SetPlayerCameraLookAt(playerid,2682.0964,-1691.6710,9.4207); return 1; } public OnGameModeExit() { print("GameModeExit()"); return 1; } public OnPlayerConnect(playerid) { GameTextForPlayer(playerid,"4WD rally ~r~by small 4",2500,5); GivePlayerMoney(playerid, 1250); once[playerid] = 0; return 1; } public OnPlayerDisconnect(playerid) { printf("OnPlayerDisconnect(%d)", playerid); return 1; } public OnPlayerEnterCheckpoint(playerid) { DisablePlayerCheckpoint(playerid); if (gProgress1[playerid] == MAX_CHECKPOINTS-1){ gPosition1++; new playername1[MAX_PLAYER_NAME]; new finishmessage1[256]; new finishtime1[256]; new Float:fMinutes1; new Minutes1; new Seconds1; if (gTime1 != 0) { fMinutes1 = gTime1/60; Minutes1 = floatround(fMinutes1, floatround_floor); Seconds1 = gTime1-(Minutes1*60); format(finishtime1, sizeof(finishtime1),"You finished in %d min(s) %d sec(s).", Minutes1, Seconds1); SendClientMessage(playerid, COLOR_GREY, finishtime1); } GetPlayerName(playerid, playername1, MAX_PLAYER_NAME); switch (gPosition1){ case 1: { format(finishmessage1, sizeof(finishmessage1),"%s has won the race!", playername1); GameTextForAll(finishmessage1, 3000, 5); SetPlayerScore(playerid,GetPlayerScore(playerid)+5); } case 2: { format(finishmessage1, sizeof(finishmessage1),"%s finished %d nd", playername1, gPosition1); GameTextForAll(finishmessage1, 3000, 5); SetPlayerScore(playerid,GetPlayerScore(playerid)+4); } case 3: { format(finishmessage1, sizeof(finishmessage1),"%s finished %d rd", playername1, gPosition1); GameTextForAll(finishmessage1, 3000, 5); SetPlayerScore(playerid,GetPlayerScore(playerid)+3); } default: { format(finishmessage1, sizeof(finishmessage1),"%s finished %d th", playername1, gPosition1); GameTextForAll(finishmessage1, 3000, 5); SetPlayerScore(playerid,GetPlayerScore(playerid)+1); } } } if (gProgress1[playerid] == 0) { if (once[playerid] == 0){ SendClientMessage(playerid, COLOR_YELLOW, "This is the starting line. Once all race members are ready type /STARTRACE to start the countdown."); once[playerid] = 1; } gProgress1[playerid]=0; } else { gProgress1[playerid]++; SetPlayerCheckpoint(playerid,gRaceCheckpoints1[gProgress1[playerid]][0],gRaceCheckpoints1[gProgress1[playerid]][1],gRaceCheckpoints1[gProgress1[playerid]][2],gRaceCheckpoints1[gProgress1[playerid]][3]); // ml if (gCheckTime1 > 10 || gCheckTime1 == 0){ KillTimer(gRaceStillInProgress1); gCheckTime1=1; gRaceStillInProgress1=SetTimer("CheckpointTimer", 1000, 1); } } return 1; } public Gettimer() { gCountdown1--; if (gCountdown1 >= 1){ new message1[256]; format(message1, sizeof(message1),"%d", gCountdown1); GameTextForAll(message1, 750, 5); } else { KillTimer(gCountdowntimer1); for (new i = 0; i < MAX_PLAYERS; i++) { TogglePlayerControllable(i, 1); } GameTextForAll("~W~GO", 2000, 5); gTime1=0; KillTimer(gTimer1); gTimer1=SetTimer("RaceTimer", 1000, 1); } return 1; } public RaceTimer1() { gTime1++; } public CheckpointTimer1() { gCheckTime1++; } public EndGame(){ GameModeExit(); } public OnPlayerCommandText(playerid, cmdtext[]) { if (strcmp(cmdtext, "/startrace1", true)==0) { if (gCheckTime1 > 30 || gCheckTime1 == 0 || IsPlayerAdmin(playerid) == 1) { gCountdown1=6; gPosition1 = 0; gTime1 = 0; SendClientMessageToAll(COLOR_GREY, "The race is starting..."); for (new i = 0; i < MAX_PLAYERS; i++) { gProgress1[i] = 1; SetPlayerCheckpoint(i,gRaceCheckpoints1[1][0],gRaceCheckpoints1[1][1],gRaceCheckpoints1[1][2],gRaceCheckpoints1[1][3]); TogglePlayerControllable(i, 0); } KillTimer(gCountdowntimer1); gCountdowntimer1=SetTimer("Gettimer", 1000, 1); } else { //race in progress msg SendClientMessage(playerid, COLOR_YELLOW, "Sorry but a race is already in progress. Please wait for it to finish."); } return 1; } if (strcmp(cmdtext, "/rescueme1", true)==0) { gProgress1[playerid] = 1; SetPlayerCheckpoint(playerid,gRaceCheckpoints1[1][0],gRaceCheckpoints1[1][1],gRaceCheckpoints1[1][2],gRaceCheckpoints1[1][3]); SetPlayerPos(playerid,gRaceCheckpoints1[0][0],gRaceCheckpoints1[0][1],gRaceCheckpoints1[0][2]); } if (strcmp(cmdtext, "/help1", true)==0) { SendClientMessage(playerid, COLOR_YELLOW, "Type /STARTRACE to start the race. Type /RESCUEME if you become stuck/lost."); SendClientMessage(playerid, COLOR_YELLOW, "Follow the checkpoints on your minimap to finish the race."); } if(strcmp(cmdtext, "/race1", true) == 0) { gProgress1[playerid] = 0; SetPlayerCheckpoint(playerid,gRaceCheckpoints1[0][0],gRaceCheckpoints1[0][1],gRaceCheckpoints1[0][2],gRaceCheckpoints1[0][3]); return 1; } return 0; }