rendered paste body#include <a_samp>
#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;
}