#include #define MIN_RACERS 2 #define MSG(%1) SendClientMessage(playerid, 0x0000FFFF, %1); //new curcheck[MAX_PLAYERS]; //new curlap[MAX_PLAYERS]; new racers[MAX_PLAYERS] = {0, ...}; new finishers[2] = {0, 0}; new declared = 0; new locks[MAX_VEHICLES] = {0, ...}; main() { print("FateTrip's race mode"); } public OnGameModeInit() { SetGameModeText("FateTrip's race mode"); AddPlayerClass(61,-1687.1342,-163.5719,17.0703,213.5342,0,0,0,0,0,0); // AddPlayerClass(98,-1718.4669,-223.6852,14.1484,259.1318,0,0,0,0,0,0); // AddPlayerClass(164,-2026.7831,156.4211,29.0391,273.1591,0,0,0,0,0,0); // AddPlayerClass(171,-1959.9529,286.3724,35.4688,90.2130,0,0,0,0,0,0); // AddPlayerClass(246,-2061.3430,239.7029,35.7056,267.3751,0,0,0,0,0,0); // AddStaticVehicle(603,-1258.4742,30.1130,13.9445,315.1123,66,66); // AddStaticVehicle(467,-1212.3464,-13.3431,13.9445,74.6971,66,66); // AddStaticVehicle(461,-1185.0192,24.2986,13.9446,42.1532,66,66); // AddStaticVehicle(470,-1407.1104,-156.9201,13.9445,42.8360,66,66); // AddStaticVehicle(494,-1538.1313,-79.9663,13.9446,99.6206,66,66); // AddStaticVehicle(545,-1060.8024,431.5561,14.3394,135.2693,66,66); // AddStaticVehicle(565,-1257.1504,201.8663,13.9446,111.8809,66,66); // AddStaticVehicle(541,-1515.4133,-229.8373,13.9445,12.1453,66,66); // AddStaticVehicle(429,-1528.9789,-235.8525,13.9446,13.0029,66,66); // AddStaticVehicle(451,-1690.8923,-175.9998,13.9446,228.8384,66,66); // AddStaticVehicle(555,-1703.4509,-192.8785,13.9423,242.2688,66,66); // AddStaticVehicle(409,-1710.1000,-203.5794,13.9509,244.0138,66,66); // AddStaticVehicle(471,-1716.5684,-217.7263,13.9848,248.0821,66,66); // AddStaticVehicle(443,-1720.0350,-231.8305,13.9441,253.6376,66,66); // AddStaticVehicle(565,-1723.5823,-254.6289,13.9596,268.1960,66,66); // AddStaticVehicle(494,-1723.5760,-280.4365,13.9436,273.1997,66,66); // AddStaticVehicle(409,-1373.8534,-191.9064,13.9422,331.4240,66,66); // AddStaticVehicle(603,-1307.1102,-261.6313,13.9445,315.7162,66,66); // AddStaticVehicle(461,-1345.1174,-560.2582,13.9400,310.7830,66,66); // AddStaticVehicle(555,-1244.4509,-557.3058,13.9401,46.7610,66,66); // AddStaticVehicle(470,-1261.3239,-584.9424,13.9444,52.1569,66,66); // AddStaticVehicle(443,-1160.9092,-335.0927,13.9445,35.7547,66,66); // AddStaticVehicle(545,-1987.4851,307.7213,34.9718,270.2129,66,66); // AddStaticVehicle(471,-1987.6079,301.0556,34.9717,271.4749,66,66); // AddStaticVehicle(429,-1991.5953,249.2899,34.9680,262.9434,66,66); // AddStaticVehicle(602,-1989.2794,271.2251,34.9718,265.5174,66,66); // AddStaticVehicle(603,-1947.9399,268.1299,35.2697,53.0871,66,66); // AddStaticVehicle(475,-2050.8398,230.5170,35.2472,186.4121,66,66); // AddStaticVehicle(580,-2058.3428,278.3568,34.9955,265.9572,66,66); // AddStaticVehicle(566,-2034.7400,169.7318,28.6321,268.4847,66,66); // AddStaticVehicle(470,-2032.1105,179.3118,28.6356,271.1226,66,66); // AddStaticVehicle(545,-2021.6896,83.8978,27.8099,270.0594,66,66); // AddStaticVehicle(565,-1999.0454,-43.0561,35.1164,180.0979,66,66); // AddStaticVehicle(494,-2034.7605,179.2044,28.6440,271.0967,17,1); // AddStaticVehicle(475,-2035.4001,170.0338,28.6407,271.0148,17,1); // return 1; } public OnPlayerRequestClass(playerid, classid) { SetPlayerPos(playerid, -2026.7433, 156.6661, 29.0391); SetPlayerFacingAngle(playerid, 90.0); SetPlayerCameraPos(playerid, -2030.0, 156.6661, 29.0391); SetPlayerCameraLookAt(playerid, -2026.7433, 156.6661, 29.0391); return 1; } public OnPlayerConnect(playerid) { MSG("Welcome to FateTrip's race mode") MSG("Type /info for more info and commands") for (new i = 0; i < MAX_VEHICLES; i++) { if (locks[i]) { SetVehicleParamsForPlayer(i, playerid, 0, 1); } } } public OnPlayerDisconnect(playerid) { if (racers[playerid] == 1) { EndPlayer(playerid); } return 1; } public startrace() { //#pragma unused startrace //print("called"); if (finishers[0] >= MIN_RACERS) { for (new i = 0; i < MAX_PLAYERS; i++) { if (racers[i] == 1) { if (IsPlayerInAnyVehicle(i)) { new car = GetPlayerVehicleID(i); SetVehiclePos(car, -1677.6074, -185.2978, 14.1484); SetVehicleZAngle(car, 318.4963); } else { SetPlayerPos(i, -1677.6074, -185.2978, 14.1484); SetPlayerFacingAngle(i, 318.4963); } GameTextForPlayer(i, "Go Go Go!!!", 5000, 3); SetPlayerCheckpoint(i, -1082.7610, 409.8723, 14.1484, 5.0); } } } else { GameTextForAll("Race cancelled due to insufficient racers", 5000, 3); for (new i = 0; i < MAX_PLAYERS; i++) { if (racers[i] == 1) { EndPlayer(i, false); } } } } public OnPlayerCommandText(playerid, cmdtext[]) { if (strcmp(cmdtext, "/race", true) == 0) { // Join the race if (declared == 1) { if (!racers[playerid]) { racers[playerid] = 1; finishers[0]++; GameTextForPlayer(playerid, "You joined the race", 5000, 3); } else { GameTextForPlayer(playerid, "You are already in the race", 5000, 3); } } else { GameTextForPlayer(playerid, "You can't join the race atm", 5000, 3); } return 1; } if (strcmp(cmdtext, "/declare", true) == 0) { // Join the race if (declared == 0) { declared = 1; GameTextForAll("A race has been declared, type /race to join~n~The race will start 1 minute from now!", 5000, 3); new timer = SetTimer("startrace", 60000, 0); //printf("%d", timer); #pragma unused timer } else { GameTextForPlayer(playerid, "Sorry, race already in progress", 5000, 3); } return 1; } if (strcmp(cmdtext, "/lock", true) == 0) { if (IsPlayerInAnyVehicle(playerid)) { new car; car = GetPlayerVehicleID(playerid); if (!locks[car]) { locks[car] = 1; for (new i = 0; i < MAX_PLAYERS; i++) { if (i != playerid && IsPlayerConnected(i)) { SetVehicleParamsForPlayer(car, i, 0, 1); } } GameTextForPlayer(playerid, "Vehicle locked", 5000, 3); } else { GameTextForPlayer(playerid, "Vehicle already locked", 5000, 3); } } else { GameTextForPlayer(playerid, "You are not in a vehicle", 5000, 3); } return 1; } if (strcmp(cmdtext, "/unlock", true) == 0) { if (IsPlayerInAnyVehicle(playerid)) { new car; car = GetPlayerVehicleID(playerid); if (locks[car]) { locks[car] = 0; for (new i = 0; i < MAX_PLAYERS; i++) { if (i != playerid && IsPlayerConnected(i)) { SetVehicleParamsForPlayer(car, i, 0, 0); } } GameTextForPlayer(playerid, "Vehicle unlocked", 5000, 3); } else { GameTextForPlayer(playerid, "Vehicle not locked", 5000, 3); } } else { GameTextForPlayer(playerid, "You are not in a vehicle", 5000, 3); } return 1; } if (strcmp(cmdtext, "/fix", true) == 0) { if (IsPlayerInAnyVehicle(playerid)) { new car = GetPlayerVehicleID(playerid); SetVehiclePos(car, -2425.9600, 1033.1719, 50.3906); SetVehicleZAngle(car, 183.2797); } else { GameTextForPlayer(playerid, "You are not in a vehicle", 5000, 3); } return 1; } if (strcmp(cmdtext, "/info", true) == 0) { MSG("FateTrips race mode, coded by Y_Less") MSG("Commands: /declare - declare a race, /race - join it") MSG("/lock /unlock - lock or unlock the car youre in") MSG("/givecash - same use as and very based on LVDMs") MSG("/fix - send you to a Pay n Spray /ino - this") MSG("Win money by winning races") } new idx, tmp[256]; tmp = strtok(cmdtext, idx); if(strcmp(tmp, "/givecash", true) == 0) { new giveplayerid, moneys; tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { MSG("USAGE: /givecash [playerid] [amount]") return 1; } giveplayerid = strval(tmp); tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { MSG("USAGE: /givecash [playerid] [amount]") return 1; } moneys = strval(tmp); if (IsPlayerConnected(giveplayerid)) { new giveplayer[256], sendername[256], string[256], playermoney; GetPlayerName(giveplayerid, giveplayer, sizeof (giveplayer)); GetPlayerName(playerid, sendername, sizeof (sendername)); playermoney = GetPlayerMoney(playerid); if (moneys > 0 && playermoney >= moneys) { GivePlayerMoney(playerid, (0 - moneys)); GivePlayerMoney(giveplayerid, moneys); format(string, sizeof (string), "You have sent %s (player: %d), $%d.", giveplayer, giveplayerid, moneys); MSG(string) format(string, sizeof (string), "You have recieved $%d from %s (player: %d).", moneys, sendername, playerid); MSG(string) } else { MSG("Invalid transaction amount.") } } else { new string[256]; format(string, sizeof (string), "%d is not an active player.", giveplayerid); MSG(string) } return 1; } if (strcmp(tmp, "/announce", true) == 0) { if (IsPlayerAdmin(playerid)) { if (cmdtext[9] == 32 && cmdtext[10] != 0) { strmid(tmp, cmdtext, 10, strlen(cmdtext)); format(tmp, sizeof (tmp), "~r~Announcement: %s", tmp); GameTextForAll(tmp, 5000, 3); } else { SendClientMessage(playerid, 0xFF0000FF, "You must enter some announce text"); } return 1; } } return 0; } public OnVehicleSpawn(vehicleid) { for (new i = 0; i < MAX_PLAYERS; i++) { if (IsPlayerConnected(i)) { SetVehicleParamsForPlayer(vehicleid, i, 0, 0); } } locks[vehicleid] = 0; return 1; } public OnPlayerExitVehicle(playerid, vehicleid) { if (racers[playerid] == 1) { GameTextForPlayer(playerid, "You left your vehicle, race forfited", 5000, 3); EndPlayer(playerid); } for (new i = 0; i < MAX_PLAYERS; i++) { if (IsPlayerConnected(i)) { SetVehicleParamsForPlayer(vehicleid, i, 0, 0); } } locks[vehicleid] = 0; return 1; } EndPlayer(playerid, a = true) { DisablePlayerCheckpoint(playerid); finishers[1]++; racers[playerid] = 0; if (finishers[0] == finishers[1]) { if (a) { SendClientMessageToAll(0x00FF00FF, "Race completed"); } finishers[0] = 0; finishers[1] = 0; declared = 0; } } public OnPlayerStateChange(playerid, newstate, oldstate) { if (newstate == PLAYER_STATE_WASTED && racers[playerid] == 1) { GameTextForPlayer(playerid, "You died, race forfited", 5000, 3); EndPlayer(playerid); } return 1; } public OnPlayerEnterCheckpoint(playerid) { if (finishers[1] == 0) { GameTextForPlayer(playerid, "You came 1st - prize $5000", 5000, 3); GivePlayerMoney(playerid, 5000); } else if (finishers[1] == 1) { GameTextForPlayer(playerid, "You came 2nd - prize $2000", 5000, 3); GivePlayerMoney(playerid, 2000); } else if (finishers[1] == 2) { GameTextForPlayer(playerid, "You came 3rd - prize $1000", 5000, 3); GivePlayerMoney(playerid, 1000); } else { GameTextForPlayer(playerid, "Sorry, you didn't win, try again some time", 5000, 3); } EndPlayer(playerid); return 1; } strtok(const string[], &index) { new length = strlen(string); while ((index < length) && (string[index] <= ' ')) { index++; } new offset = index; new result[20]; while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof (result) - 1))) { result[index - offset] = string[index]; index++; } result[index - offset] = EOS; return result; }