All pastes #75932 Raw Edit

Race

public text v1 · immutable
#75932 ·published 2006-06-30 19:24 UTC
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;
}