All pastes #834944 Raw Edit

Anonymous

public text v1 · immutable
#834944 ·published 2007-12-28 16:26 UTC
rendered paste body
#include <a_samp>
#include <dini>

#define function
#define COLOR_GREEN 0x00FF00FF
#define COLOR_WHITE 0xFFFFFFFF
#define COLOR_GREY 0xC6BEBDFF
#define HYDRA_TEAM 0
#define TRAIN_TEAM 1
#define KOLOR_RAMKA 0x00770000
#define KOLOR_SRODEK 0x00000088
#define ADMIN_SPEC_TYPE_NONE 0
#define ADMIN_SPEC_TYPE_PLAYER 1
#define ADMIN_SPEC_TYPE_VEHICLE 2
#define STR 100
#define FileName "R.T.v.H.1.4.-Config.cfg"

new HydraScore, RoadScore;
new Text:idin[200];
new SpectateID[20];
new SpectateType[200];
new cofa[200];
new PlColor[200];
new Entering[200];
new Spawned[200];
new IsPlayerSpec[200];
new IsPlayerSpec2[200];
enum OldPosEnum
{
	Float:oX,
	Float:oY,
	Float:oZ
};
new OldPos[200][OldPosEnum];
new PlayerObjects[200][6];
new Timer[150];
new PlayerLoading[200];
new AddLife[200];
new ObjIco[150][200];
new Menu:ChatID;
new Menu:PlayerMenu[200];
new IsSpec[200];
new Gangzones[2];
new ForceSpawn2;

main()
{
	print("\n ----------------------------------");
	print("    \"RoadTrain vs. Hydra TDM\"    ");
	print("            >>By Luby<<            ");
	print("Wersja 1.4 Beta #1 z dnia 10 Listopada 2oo7");
	print(" ----------------------------------\n");
}

public OnGameModeInit()
{
	SetGameModeText("R.T.v.H.1.4 by Luby");

	AddPlayerClassEx(HYDRA_TEAM, 2,1342.079102 ,1698.567627 ,10.480688, 270.0, 34, 100, 43, 1, 44, 1);
	AddPlayerClassEx(TRAIN_TEAM, 1,1604.073730 ,307.328888 ,20.453587, 270.0, 34, 100, 43, 1, 44, 1);

	Gangzones[0] = GangZoneCreate(floatsub(1302.079102, 50.0), floatsub(1658.567627, 50.0), floatadd(1382.079102, 50.0), floatadd(1738.567627, 50.0));
	Gangzones[1] = GangZoneCreate(floatsub(1564.073730, 50.0), floatsub(267.328888, 50.0) , floatadd(1644.073730, 50.0), floatadd(347.328888, 50.0) );

	AddStaticVehicle(515,1601.111938 ,301.369354 ,20.327288, 0.0      , 2, 4);
	AddStaticVehicle(515,1611.111938 ,301.369354 ,20.327288, 0.0      , 2, 4);
	AddStaticVehicle(515,1621.111938 ,301.369354 ,20.327288, 0.0      , 2, 4);
	AddStaticVehicle(515,1631.111938 ,301.369354 ,20.327288, 0.0      , 2, 4);
	AddStaticVehicle(515,1641.111938 ,301.369354 ,20.327288, 0.0      , 2, 4);
	AddStaticVehicle(520,1369.3843   ,1621.0599  ,11.1914  , 269.3976 , 2, 4);
	AddStaticVehicle(520,1369.3843   ,1631.0599  ,11.1914  , 269.3976 , 2, 4);
	AddStaticVehicle(520,1369.3843   ,1641.0599  ,11.1914  , 269.3976 , 2, 4);
	AddStaticVehicle(520,1369.3843   ,1651.0599  ,11.1914  , 269.3976 , 2, 4);
	AddStaticVehicle(520,1369.3843   ,1661.0599  ,11.1914  , 269.3976 , 2, 4);

	SetWorldTime(0);
	SetWeather(9);

	CreateObject(18449, 1684.991455, 565.249817, 12.891274, 2.5783, 355.7028, 268.0403);
	CreateObject(18449, 1681.982666, 486.726501, 14.258919, 357.4217, 357.4217, 87.6625);
	CreateObject(18449, 1682.188354, 460.868652, 11.355900, 356.5623, 7.7349, 81.6465);

	SetTimer("ForceSpawn", 1000, true);
	SetTimer("ScoreUpdate", 1000, true);
	SetTimer("AddLifeTimer", 100, true);
	SetTimer("SpeedUpdate",  100, true);

	SetDisabledWeapons(43,44,45);
	SetTeamCount(2);
	UsePlayerPedAnims();

	if(dini_Exists(FileName))
	{

	}
	else
	{

		print("\n Najprawdopodobniej uruchamiasz mape pierwszy raz. Plik konfiguracyjny zostal utworzony.\n");
		dini_Create(FileName);

	}

	ChatID = CreateMenu(" ", 1, 5.0, 3.0, 350.0, 0.0);
	AddMenuItem(ChatID, 0, " ");
	AddMenuItem(ChatID, 0, " ");
	AddMenuItem(ChatID, 0, " ");
	AddMenuItem(ChatID, 0, " ");
	DisableMenu(ChatID);

	return 1;
}

public OnGameModeExit()
{
	return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
	Spawned[playerid] = false;
	switch(classid)
	{
		case 0:GameTextForPlayer(playerid,"~g~Hydra ~b~Team",1000,4);
		case 1:GameTextForPlayer(playerid,"~r~RoadTrain ~b~Team",1000,4);
	}

	new Float:X, Float:Y, Float:Z;
	GetPlayerPos(playerid, X, Y, Z);
	PlayerPlaySound(playerid, 9200, X, Y, Z);
	SetPlayerPos(playerid,1679.210205 ,1447.770752 ,47.438412);
	SetPlayerFacingAngle(playerid, 0.0);
	SetPlayerCameraPos(playerid,1679.210205 ,1457.770752 ,49.438412);
	SetPlayerCameraLookAt(playerid,1679.210205 ,1447.770752 ,47.438412);
	return 1;
}

forward ForceSpawn();
public ForceSpawn()
{
	ForceSpawn2++;
	if(ForceSpawn2 == 15)
	{
		ForceSpawn2=0;
		for(new g=0;g<200;g++)if(IsPlayerConnected(g))
		{
			if(IsPlayerSpec[g])
			{
				GameTextForPlayer(g,"~n~~n~~n~~n~~r~R~w~espawn",1005,5);
				IsPlayerSpec[g] = false;
				StopSpectate(g);
				SpawnPlayer(g);
			}
		}
	}
	else for(new g=0;g<200;g++)if(IsPlayerConnected(g))
	{
		new str[256];
		format(str, 256, "~n~Ogladasz %s~n~~r~D~w~o ~r~r~w~espawnu ~r~p~w~ozostalo ~b~: ~n~~w~%d ~g~sekund",PlayerName(SpectateID[g]) , 14-ForceSpawn2);
		if(IsPlayerSpec[g])
		{
			GameTextForPlayer(g,str,1005,5);
		}
	}
}


public OnPlayerRequestSpawn(playerid)
{
	new count[2];
	count[0] = GetTeamMembers(0);
	count[1] = GetTeamMembers(1);
	new sup;
	if(count[1] > count[0])sup = 1; else if(count[1] < count[0])sup = 0; else return 1;
	sup++;
	if(GetPlayerSkin(playerid) != sup)
	{
		GameTextForPlayer(playerid,"~w~Ta druzyna ma za duzo graczy.~n~~g~Wybierz inna.",1000,5);
		return 0;
	}
	return 1;
}

GetTeamMembers(teamid)
{
	new count;
	for(new g=0;g<200;g++)if(IsPlayerConnected(g) && GetPlayerTeam(g) == teamid && Spawned[g])count++;
	return count;
}

public OnPlayerConnect(playerid)
{
	new pName[30], string[256];
	GetPlayerName(playerid, pName, 30);
	format(string, 256, "*** %s dołączył do gry.", pName);
	SendClientMessageToAll(COLOR_GREY,string);
	GangZoneShowForPlayer(playerid, Gangzones[1], 0xFF000077);
	GangZoneShowForPlayer(playerid, Gangzones[0], 0x00FF0077);
	IsPlayerSpec[playerid] = false;
	cofa[playerid] = false;
	Entering[playerid] = false;
	SendClientMessage(playerid, 0x0088FFAA, "R.T.v.H.1.4 by Luby.");
	SendClientMessage(playerid, 0x0088FFAA, "Wpisz /pomoc aby uzyskać więcej informacji.");
	IsSpec[playerid] = -2;
	for(new v=0;v<4;v++)
	{
		if(IsVehicleInUse(v) && GetVehicleModel(v) == 515)
		{
			new Float:X, Float:Z, Float:Y, Float:A;
			GetVehiclePos(v, X, Y, Z);
			GetVehicleZAngle(v, A);
			X -= (floatmul(1.0 , floatsin(-A, degrees)));
			Y -= (floatmul(1.0 , floatcos(-A, degrees)));
			PlayerObjects[playerid][v] = CreatePlayerObject(playerid, 3267, X, Y, floatadd(Z, 1.2), 0.0, 0.0, A);
			AttachPlayerObjectToPlayer(playerid, PlayerObjects[playerid][v], GetVehicleDriver(v), 0.5, -3.9, -0.5, 0.0, 0.0, 0.0);
		}
	}
	return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
 	GangZoneHideForPlayer(playerid, Gangzones[1]);
 	GangZoneHideForPlayer(playerid, Gangzones[0]);
    switch(reason)
    {
        case 0:
        {
             new pName[30], string[256];
             GetPlayerName(playerid, pName, 30);
             format(string, 256, "*** %s opuścił gre. (Timeout)", pName);
             SendClientMessageToAll(COLOR_GREY, string);
        }
        case 1:
        {
             new pName[30], string[256];
             GetPlayerName(playerid, pName, 30);
             format(string, 256, "*** %s opuścił gre. (Wyszedł)", pName);
             SendClientMessageToAll(COLOR_GREY, string);
        }
        case 2:
        {
             new pName[30], string[256];
             GetPlayerName(playerid, pName, 30);
             format(string, 256, "*** %s opuścił gre. (Wyrzucony)", pName);
             SendClientMessageToAll(COLOR_GREY, string);
        }
    }
	for(new x=0; x<MAX_PLAYERS; x++)
	{
  		if(GetPlayerState(x) == PLAYER_STATE_SPECTATING && SpectateID[x] == playerid)
		  {
   			AdvanceSpectate(x);
  		}
 	}
	return 1;
}

public OnPlayerSpawn(playerid)
{
	if(!Spawned[playerid])
	{
		new pName[30], string[256];
		GetPlayerName(playerid, pName, 30);
		switch(GetPlayerTeam(playerid))
		{
			case 1:format(string, 256, "*** %s dołączył do drużyny RoadTrain.", pName);
			case 0:format(string, 256, "*** %s dołączył do drużyny Hydra.", pName);
		}
		SendClientMessageToAll(COLOR_GREY,string);
	}
	Spawned[playerid] = true;
	if(IsPlayerSpec2[playerid])
	{
		IsPlayerSpec[playerid] = true;
		SetTimerEx("procespec", 1, 0, "d", playerid);
	}
	return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
	if(IsPlayerInAnyVehicle(playerid) && GetVehicleModel(GetPlayerVehicleID(playerid)) == 515 && IsValidObject(PlayerObjects[playerid][GetPlayerVehicleID(playerid)]))
	{
		DestroyPlayerObject(playerid, PlayerObjects[playerid][GetPlayerVehicleID(playerid)]);
	}
	IsPlayerSpec2[playerid] = true;
	for(new x=0; x<MAX_PLAYERS; x++)
	{
		if(GetPlayerState(x) == PLAYER_STATE_SPECTATING && SpectateID[x] == playerid)
		{
			AdvanceSpectate(x);
		}
	}
	SetPlayerScore(playerid, GetPlayerScore(playerid)-1);
	switch(GetPlayerTeam(playerid))
	{
		case 1:
		{
			HydraScore++;
		}
		case 0 :
		{
			RoadScore++;
		}
	}
	return 1;
}

forward procespec(playerid);
public procespec(playerid)
{
	IsPlayerSpec2[playerid] = false;
	new id=0;
	new ids[200]= {-1,...};
	for(new g=0;g<200;g++)
	{
		if(IsPlayerConnected(g) && g!=playerid)
		{
			ids[id]=g;
			id++;
		}
	}
	new rand;
	if(id == 1)
	{
		rand = ids[0];
	} else if(id > 1)rand = ids[random(id)]; else
	{
		rand = playerid;
	}
	if(rand != playerid)
	{
		StartSpectate(playerid, rand);
	}
	else
	{
		switch(GetPlayerTeam(playerid))
		{
			case 1 :
			{
				SetPlayerCameraPos(playerid,1544.073730 ,337.328888 ,30.453587);
				SetPlayerCameraLookAt(playerid,1604.073730 ,307.328888 ,20.453587);
				SetPlayerPos(playerid, 0.0, 0.0, 0.0);
			}
			case 0 :
			{
				SetPlayerCameraPos(playerid,1372.079102 ,1648.567627 ,28.480688);
				SetPlayerCameraLookAt(playerid,1342.079102 ,1698.567627 ,10.480688);
				SetPlayerPos(playerid, 0.0, 0.0, 0.0);
			}
		}
	}
	return true;
}

public OnVehicleDeath(vehicleid, killerid)
{
	for(new g=0;g<200;g++)if(IsSpec[g] == vehicleid)
	{
		OnPlayerDeath(g, 255, 0);
 	}
	return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
	if(strcmp(cmdtext, "/help", true, 5) == 0 || strcmp(cmdtext, "/pomoc", true, 6) == 0 || strcmp(cmdtext, "/p", true, 2) == 0)
	{
		SendClientMessage(playerid, 0xFF7777FF, "*** Witaj. Grasz właśnie na mapie RTvH co znaczy Road Train vs Hydra.");
		SendClientMessage(playerid, 0xFF7777FF, "*** Wygrywa drużyna która pierwsza zdobędzie 30 punktów.");
		SendClientMessage(playerid, 0xFF7777FF, "*** Gdy jesteś w RoadTrainie kliknij FIRE aby wystrzelić rakiete w najblizszego przeciwnika.");
		SendClientMessage(playerid, 0xFF7777FF, "*** Aby strzelać z hydry musisz siedzieć w niej jako pasażer.");
		SendClientMessage(playerid, 0xFF7777FF, "*** Aby wejść na miejsce pasażera kliknij ENTER gdy już ktoś w niej siedzi.");
		SendClientMessage(playerid, 0xFF7777FF, "*** W prawym dolnim miejscu ekranu widzisz 3 najblizszych graczy z przeciwnej drużyny.");
		SendClientMessage(playerid, 0xFF7777FF, "*** W tych którzy są niebieskawi można strzelać.");
		SendClientMessage(playerid, 0xFF7777FF, "*** Powodzenia! Kontakt z autorem znajdziesz pod /about");
		return 1;
	}
	if(strcmp(cmdtext, "/about", true, 6) == 0)
	{
		SendClientMessage(playerid, 0xFF7777FF, "*** Ta mapa została w całości napisana przez Luby.");
		SendClientMessage(playerid, 0xFF7777FF, "*** Kontakt ze mną : GG : 6002300 : Email : AeroFly@o2.PL.");
		SendClientMessage(playerid, 0xFF7777FF, "*** Betatestrzy : Paffcio, SubZero, Kitan, Homie.PL, Mysz, Mruk_POL, Mateoma.");
		SendClientMessage(playerid, 0xFF7777FF, "*** Mape znajdziesz na GTAMScripting.lua.PL(amx) a o pwn pytaj osobiście.");
		return 1;
	}
	return SendClientMessage(playerid, 0xFF7777FF, "*** Niepoprawna komenda.");
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
	if(GetVehicleModel(vehicleid) == 520 && IsVehicleInUse(vehicleid))
	{
		TogglePlayerSpectating(playerid, 1);
		PlayerSpectateVehicle(playerid, vehicleid, SPECTATE_MODE_NORMAL);
		IsSpec[playerid] = vehicleid;
	}
	for(new x=0; x<MAX_PLAYERS; x++)
	{
		if(GetPlayerState(x) == PLAYER_STATE_SPECTATING && SpectateID[x] == playerid)
		{
			TogglePlayerSpectating(x, 1);
			PlayerSpectateVehicle(x, vehicleid);
			SpectateType[x] = ADMIN_SPEC_TYPE_VEHICLE;
		}
	}
	return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
	new Float:X, Float:Y, Float:Z, Float:A;
	GetVehiclePos(vehicleid, X, Y, Z);
	GetVehicleZAngle(vehicleid, A);
	SetVehiclePos(vehicleid, X, Y, Z);
	SetVehicleZAngle(vehicleid, A);
	if(GetVehicleModel(vehicleid) == 515)
	{
		DestroyPlayerObject(playerid, PlayerObjects[playerid][vehicleid]);
		for(new g=0;g<200;g++)if(IsPlayerConnected(g) && g != playerid)DestroyPlayerObject(g, PlayerObjects[playerid][vehicleid]);
	}
	for(new x=0; x<MAX_PLAYERS; x++)
	{
		if(GetPlayerState(x) == PLAYER_STATE_SPECTATING && SpectateID[x] == playerid && SpectateType[x] == ADMIN_SPEC_TYPE_VEHICLE) {
			TogglePlayerSpectating(x, 1);
			PlayerSpectatePlayer(x, playerid);
			SpectateType[x] = ADMIN_SPEC_TYPE_PLAYER;
		}
	}
	return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
	if(newstate == PLAYER_STATE_DRIVER && GetVehicleModel(GetPlayerVehicleID(playerid)) == 515)
	{
		new v = GetPlayerVehicleID(playerid);
		new Float:X, Float:Z, Float:Y, Float:A;
		GetVehiclePos(v, X, Y, Z);
		GetVehicleZAngle(v, A);
		X -= (floatmul(-2.0 , floatsin(-A, degrees)));
		PlayerObjects[playerid][v] = CreatePlayerObject(playerid, 3267, X, Y, floatadd(Z, -1.3), 0.0, 0.0, A);
		AttachPlayerObjectToPlayer(playerid, PlayerObjects[playerid][v], playerid, 0.5, -3.9, -0.5, 0.0, 0.0, 0.0);
		for(new g=0;g<200;g++)if(g != playerid && IsPlayerConnected(g))
		{
			PlayerObjects[g][v] = CreatePlayerObject(g, 3267, X, Y, floatadd(Z, -1.3), 0.0, 0.0, A);
			AttachPlayerObjectToPlayer(g, PlayerObjects[g][v], playerid, 0.5, -3.9, -0.5, 0.0, 0.0, 0.0);
		}
	}
	if(newstate == PLAYER_STATE_ONFOOT)
	{
		IsSpec[playerid] = -2;
	}
	if(!IsPlayerSpec[playerid])
	{
		if(newstate == PLAYER_STATE_DRIVER)
		{
			switch(GetVehicleModel(GetPlayerVehicleID(playerid)))
			{
				case 515:
					GameTextForPlayer(playerid,"~r~RoadTrain",2000,1);
				case 520:
					GameTextForPlayer(playerid,"~g~Hydra",2000,1);
			}
			Entering[playerid]=true;
			SetTimerEx("EnterClear", 2000, false, "d", playerid);
		}
	}
	return 1;
}

forward EnterClear(pl);
public EnterClear(pl)Entering[pl] = false;

public OnPlayerEnterCheckpoint(playerid)
{
	return 1;
}

public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
	new x = 0;
	while(x!=MAX_PLAYERS)
	{
		if( IsPlayerConnected(x) && GetPlayerState(x) == PLAYER_STATE_SPECTATING && SpectateID[x] == playerid && SpectateType[x] == ADMIN_SPEC_TYPE_PLAYER )
		{
			SetPlayerInterior(x,newinteriorid);
		}
		x++;
	}
	return true;
}

public OnPlayerExitedMenu(playerid)
{
 	ShowMenuForPlayer(PlayerMenu[playerid], playerid);
	return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
	if(newkeys & KEY_FIRE && !IsPlayerInSpawn(playerid) &&!PlayerLoading[playerid] && IsPlayerInAnyVehicle(playerid) && GetVehicleModel(GetPlayerVehicleID(playerid)) == 515)
	{
		new ShotObj1;
		new ShotObj2;
		new Float:X, Float:Y, Float:Z;
		GetPlayerPos(playerid, X, Y, Z);
		PlayerPlaySound(playerid, 1159, X, Y, Z);
		GetObjectPos(PlayerObjects[playerid][GetPlayerVehicleID(playerid)], X, Y, Z);
		ShotObj1 = CreateObject(354  , X, Y, Z+4.0, 0.0, 0.0, 0.0);
		new Target;
		new Targets2=0;
		new Float:x, Float:y, Float:z;
		new Targets[3];
		switch(GetPlayerTeam(playerid))
		{
			case 1:Targets = G3PCTPIT(playerid, 0);
			case 0:Targets = G3PCTPIT(playerid, 1);
		}
		if(Targets[2] != 255)Targets2++;
		if(Targets[1] != 255)Targets2++;
		if(Targets[0] != 255)Targets2++;
		if(Targets2 > 0){
			Target = Targets[random(Targets2)];
		} else Target = playerid;
		if(Target != GetVehicleDriver(GetPlayerVehicleID(playerid)) && Target != playerid && Target != GetVehiclePass(GetPlayerVehicleID(playerid)) && Target != 255){
			Timer[ShotObj1] = SetTimerEx("UpdateShot", 100, 10, "dddd",ShotObj1,  Target, playerid);
			SetTimerEx("DestroyRObject", 5000, 0, "d",ShotObj1);
		}
		else
		{
			GetVehiclePos(GetPlayerVehicleID(playerid), x, y, z);
			new Float:A;
			GetVehicleZAngle(GetPlayerVehicleID(playerid), A);
			x += (floatmul(500.0 , floatsin(-A, degrees)));
			y += (floatmul(500.0 , floatcos(-A, degrees)));
			MoveObject(ShotObj1, x, y, z+200.0, 405.55515);
			SetTimerEx("DestroyRObject", 2200, 0, "d",ShotObj1);
			SetTimerEx("DestroyRObject", 2200, 0, "d",ShotObj2);
		}
		new Text:textid;
		textid = TextDrawCreate(200.0, 400.0, "Trwa ladowanie rakiety~n~Prosze czekac...");
		TextDrawColor(textid, 0xFF0000FF);
		TextDrawShowForPlayer(playerid, textid);
		SetTimerEx("ClearShot", 2000, 0 ,"di", playerid, _:textid);
		PlayerLoading[playerid] = true;
	}
	if(newkeys & KEY_FIRE && !IsPlayerInSpawn(playerid) && !PlayerLoading[playerid] && IsSpec[playerid] != -1 && IsSpec[playerid] != -2)
	{
		new ShotObj1;
		new Float:X, Float:Y, Float:Z;
		GetVehiclePos(IsSpec[playerid], X, Y, Z);
		PlayerPlaySound(playerid, 1159, X, Y, Z);
		ShotObj1 = CreateObject(354 , X, Y, Z, 0.0, 0.0, 0.0);
		new	Target;
		new Targets2=0;
		new Float:x, Float:y, Float:z;
		new Targets[3];
		switch(GetPlayerTeam(playerid))
		{
			case 1:Targets = G3PCTPIT(playerid, 0);
			case 0:Targets = G3PCTPIT(playerid, 1);
		}
		if(Targets[2] != 255)Targets2++;
		if(Targets[1] != 255)Targets2++;
		if(Targets[0] != 255)Targets2++;
		if(Targets2 > 0){
			Target = Targets[random(Targets2)];
		} else Target = playerid;
		if(Target != GetVehicleDriver(IsSpec[playerid]) && Target != playerid && Target != GetVehiclePass(IsSpec[playerid]) && Target != 255){
			Timer[ShotObj1] = SetTimerEx("UpdateShot", 100, 10, "ddd",ShotObj1, Target, playerid);
			SetTimerEx("DestroyRObject", 2000, 0, "d",ShotObj1);
		}
		else
		{
			GetVehiclePos(IsSpec[playerid], x, y, z);
			new Float:A;
			GetVehicleZAngle(IsSpec[playerid], A);
			x += (floatmul(500.0 , floatsin(-A, degrees)));
			y += (floatmul(500.0 , floatcos(-A, degrees)));
			MoveObject(ShotObj1, x, y, z, 305.55515);
			SetTimerEx("DestroyRObject", 200, 0, "d",ShotObj1);
		}
		new Text:textid;
		textid = TextDrawCreate(200.0, 400.0, "Trwa ladowanie rakiety~n~Prosze czekac...");
		TextDrawColor(textid, 0x00FF00FF);
		TextDrawShowForPlayer(playerid, textid);
		SetTimerEx("ClearShot", 2000, 0 ,"di", playerid, _:textid);
		PlayerLoading[playerid] = true;
	}
	if(newkeys & 16 && !IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) == PLAYER_STATE_SPECTATING)
	{
		new Float:X, Float:Y, Float:Z, Float:Health, Float:Armour, Float:Angle;
		GetVehiclePos(IsSpec[playerid], X, Y, Z);
		GetVehicleZAngle(IsSpec[playerid], Angle);
		GetPlayerArmour(playerid, Armour);
		GetPlayerHealth(playerid, Health);
		TogglePlayerSpectating(playerid, false);
		SpawnPlayer(playerid);
		X += (floatmul(4.0 , floatsin(floatadd(-Angle, 90.0), degrees)));
		Y += (floatmul(4.0 , floatcos(floatadd(-Angle, 90.0), degrees)));
		SetPlayerPos(playerid, X, Y, Z);
		IsSpec[playerid] = -2;
	}
	if(newkeys & 32 && IsPlayerInAnyVehicle(playerid))
	{
		cofa[playerid] = true;
		DestroyPlayerObject(playerid, PlayerObjects[playerid][GetPlayerVehicleID(playerid)]);
		PlayerObjects[playerid][GetPlayerVehicleID(playerid)] = CreatePlayerObject(playerid, 3267, 0.0, 0.0, 0.0, 0.0, 0.0,0.0);
		AttachPlayerObjectToPlayer(playerid, PlayerObjects[playerid][GetPlayerVehicleID(playerid)], playerid, 0.5, -4.9, -0.5, 0.0, 0.0, 0.0);
	}
	if(oldkeys & 32 && IsPlayerInAnyVehicle(playerid))
	{
		cofa[playerid] = false;
		DestroyPlayerObject(playerid, PlayerObjects[playerid][GetPlayerVehicleID(playerid)]);
		PlayerObjects[playerid][GetPlayerVehicleID(playerid)] = CreatePlayerObject(playerid, 3267, 0.0, 0.0, 0.0, 0.0, 0.0,0.0);
		AttachPlayerObjectToPlayer(playerid, PlayerObjects[playerid][GetPlayerVehicleID(playerid)], playerid, 0.5, -3.9, -0.5, 0.0, 0.0, 0.0);
	}
	if(GetPlayerState(playerid) == PLAYER_STATE_SPECTATING && SpectateID[playerid] != INVALID_PLAYER_ID)
	{
		if(newkeys == KEY_JUMP)
		{
			AdvanceSpectate(playerid);
		}
		else if(newkeys == KEY_SPRINT)
		{
			ReverseSpectate(playerid);
		}
	}
	return 1;
}

forward ClearShot(pid, Text:text);
public ClearShot(pid, Text:text)
{
	TextDrawHideForAll(text);
	TextDrawDestroy(text);
	PlayerLoading[pid] = false;
}

forward UpdateShot(obj, tar, shooter);
public UpdateShot(obj, tar, shooter)
{
	new Float:X, Float:Y, Float:Z;
	GetPlayerPos(tar, X, Y, Z);
	PlayerPlaySound(tar, 9200, X, Y, Z);
	MoveObject(obj, X, Y, Z, 405.55515);
	GetObjectPos(obj, X, Y, Z);
	for(new g=0;g<200;g++)
	{
		RemovePlayerMapIcon(g, ObjIco[obj][g]);
		ObjIco[obj][g] = SetPlayerMapIcon(g, 0xFF, X, Y, Z, 48, 0);
	}
	new Float:x, Float:y, Float:z;
	new Float:x2, Float:y2, Float:z2;
	GetObjectPos(obj, x2, y2, z2);
	GetPlayerPos(tar, x, y, z);
	new Float:Distance = floatsqroot(floatadd(floatadd(floatpower(floatabs(floatsub(x,x2)),2),floatpower(floatabs(floatsub(y,y2)),2)),floatpower(floatabs(floatsub(z,z2)),2)));
	if(Distance < 5)
	{
		if(IsValidObject(obj))DestroyObject(obj);
		KillTimer(Timer[obj]);
		for(new g=0;g<200;g++)
		{
			RemovePlayerMapIcon(g, ObjIco[obj][g]);
		}
		new Float:H;
		new IsVeh;
		if(IsPlayerInAnyVehicle(tar)){IsVeh = 1;GetVehicleHealth(GetPlayerVehicleID(tar), H);} else GetPlayerHealth(tar, H);
		if(IsVeh)H = floatdiv(H, 10.000000);
		SetTimerEx("CheckBoom", 1000, false, "fdd", H, shooter, tar);
	 	CreateExplosion(x, y, z, 0, 7.0);
	}
}

forward CheckBoom(Float:H, s, tar);
public CheckBoom(Float:H, s, tar)
{
	new Float:H2;
	new IsVeh;
	if(IsPlayerInAnyVehicle(tar)){IsVeh = 1;GetVehicleHealth(GetPlayerVehicleID(tar), H2);} else GetPlayerHealth(tar, H2);
	if(IsVeh)H = floatdiv(H2, 10.000000);
	new Float:SUB;
	SUB = floatsub(H2, H);
	printf("SUB %f", SUB);
	if(floatround(SUB) > 10)SendDeathMessage(s,tar,51);
}

forward HideZone(z);
public HideZone(z)
{
	GangZoneHideForAll(z);
	GangZoneDestroy(z);
}

forward DestroyRObject(z);
public DestroyRObject(z)
{
	if(IsValidObject(z))DestroyObject(z);
	KillTimer(Timer[z]);
	new Float:x2, Float:y2, Float:z2;
	GetObjectPos(z, x2, y2, z2);
	CreateExplosion(x2, y2, z2, 0, 7.0);
}

function IsPlayerInArea(pid, Float:uX, Float:uY, Float:dX, Float:dY)
{
	new Float:X, Float:Y, Float:Z;
	GetPlayerPos(pid, X, Y, Z);
	if((X >= uX && X <= dX && Y >= uY && Y <= dY))return true;
	return false;
}

function IsVehicleInUse(vid)
{
	for(new g=0;g<200;g++)if(IsPlayerConnected(g) && IsPlayerInVehicle(g, vid) && GetPlayerState(g) == PLAYER_STATE_DRIVER)return true;
	return false;
}

#define TeleportPlayerToPlayer(%1,%2,%3) Tpplaytoplay(%1,%2,%3)
stock Tpplaytoplay(id1, id2, Float:dis)
{
	new Float:x, Float:y, Float:z, Float:a;
	GetPlayerPos(id1, x, y, z);
	if(IsPlayerInAnyVehicle(id1))GetVehicleZAngle(GetPlayerVehicleID(id1),a); else GetPlayerFacingAngle(id1,a);
	x += (floatmul(dis , floatsin(-a, degrees)));
	y += (floatmul(dis , floatcos(-a, degrees)));
	if(IsPlayerInAnyVehicle(id2))
	{
		SetVehiclePos(GetPlayerVehicleID(id2), x, y, z);
		SetVehicleZAngle(GetPlayerVehicleID(id2), floatadd(a, 180.0));
	}
	else
	{
		SetPlayerPos(id2, x, y, z);
		SetPlayerFacingAngle(id2, floatadd(a, 180.0));
	}
	return true;
}

function GetVehicleDriver(vid)
{
	for(new g=0;g<200;g++)if(IsPlayerConnected(g) && IsPlayerInVehicle(g, vid) && GetPlayerState(g) == PLAYER_STATE_DRIVER)return g;
	return 255;
}

function GetVehiclePass(vid)
{
	for(new g=0;g<200;g++)if(IsPlayerConnected(g) && IsPlayerInVehicle(g, vid) && GetPlayerState(g) == PLAYER_STATE_PASSENGER)return g;
	return 255;
}

forward AddLifeTimer();
public AddLifeTimer()for(new k=0;k<200;k++)
{
	if(IsPlayerConnected(k))
	{
		new Float:h;
		if(AddLife[k])
		{
			GetPlayerHealth(k, h);
			if(h<100.0)
			{
				SetPlayerHealth(k, floatadd(h, 1.0));
			} else AddLife[k]=false;
		}
		new Targets[3];
		new playerid = k;
		switch(GetPlayerTeam(playerid))
		{
			case 1:Targets = G3PCTPIT(playerid, 0);
			case 0:Targets = G3PCTPIT(playerid, 1);
		}
		if(IsValidMenu(PlayerMenu[playerid]))
		{
			HideMenuForPlayer(PlayerMenu[playerid], playerid);
			DestroyMenu(PlayerMenu[playerid]);
		}
		PlayerMenu[playerid] = CreateMenu(" " , 1, 340.0, 320.0, 200.0, 0.0);
		SetMenuColumnHeader(PlayerMenu[playerid], 0, "~z~Gracze w zasiegu~w~:");
		if(Targets[0]!=255)AddMenuItem(PlayerMenu[playerid], 0, PlayerName(Targets[0]));
		if(Targets[1]!=255)AddMenuItem(PlayerMenu[playerid], 0, PlayerName(Targets[1]));
		if(Targets[2]!=255)AddMenuItem(PlayerMenu[playerid], 0, PlayerName(Targets[2]));
		DisableMenu(PlayerMenu[playerid]);
		ShowMenuForPlayer(PlayerMenu[playerid], playerid);
	}
}

function PlayerName(p)
{
	new n[64];
	GetPlayerName(p, n, 256);
	return n;
}

forward SpeedUpdate();
public SpeedUpdate()for(new playerid=0;playerid<200;playerid++)if(IsPlayerConnected(playerid))
{
	new Float:X, Float:Y, Float:Z;
	GetPlayerPos(playerid, X, Y, Z);
	new Float:Distance;
	Distance = floatsqroot(floatadd(floatadd(floatpower(floatabs(floatsub(X,OldPos[playerid][oX])),2),floatpower(floatabs(floatsub(Y,OldPos[playerid][oY])),2)),floatpower(floatabs(floatsub(Z,OldPos[playerid][oZ])),2)));
	new Float:Speed;
	Speed = floatmul(Distance, 3.6);
	new s[256];
	if(GetPlayerInterior(playerid) == 0 && IsPlayerInAnyVehicle(playerid))
		format(s,256,"~n~~n~~n~~n~~n~~n~~n~~n~Predkosc : %.1f", Speed);
	if(!Entering[playerid] && !IsPlayerSpec[playerid] && IsPlayerInAnyVehicle(playerid))
		GameTextForPlayer(playerid,s,1011,5);
	if(Z < OldPos[playerid][oZ] && IsPlayerInAnyVehicle(playerid) && GetVehicleModel(GetPlayerVehicleID(playerid)) == 515 && !cofa[playerid])
	{
		DestroyPlayerObject(playerid, PlayerObjects[playerid][GetPlayerVehicleID(playerid)]);
		PlayerObjects[playerid][GetPlayerVehicleID(playerid)] = CreatePlayerObject(playerid, 3267, 0.0, 0.0, 0.0, 0.0, 0.0,0.0);
		AttachPlayerObjectToPlayer(playerid, PlayerObjects[playerid][GetPlayerVehicleID(playerid)], playerid, 0.5, -3.9, -floatmul(floatsub(Z , OldPos[playerid][oZ]),0.2), 0.0, 0.0, 0.0);
	} else if(IsPlayerInAnyVehicle(playerid) && GetVehicleModel(GetPlayerVehicleID(playerid)) == 515 && !cofa[playerid])
	{
		DestroyPlayerObject(playerid, PlayerObjects[playerid][GetPlayerVehicleID(playerid)]);
		PlayerObjects[playerid][GetPlayerVehicleID(playerid)] = CreatePlayerObject(playerid, 3267, 0.0, 0.0, 0.0, 0.0, 0.0,0.0);
		AttachPlayerObjectToPlayer(playerid, PlayerObjects[playerid][GetPlayerVehicleID(playerid)], playerid, 0.5, -3.9, -0.5, 0.0, 0.0, 0.0);
	}
	if(!IsPlayerInAnyVehicle(playerid))
	{
		if(IsValidPlayerObject(playerid, PlayerObjects[playerid][0]))DestroyPlayerObject(playerid, PlayerObjects[playerid][0]);
		if(IsValidPlayerObject(playerid, PlayerObjects[playerid][1]))DestroyPlayerObject(playerid, PlayerObjects[playerid][1]);
		if(IsValidPlayerObject(playerid, PlayerObjects[playerid][2]))DestroyPlayerObject(playerid, PlayerObjects[playerid][2]);
		if(IsValidPlayerObject(playerid, PlayerObjects[playerid][3]))DestroyPlayerObject(playerid, PlayerObjects[playerid][3]);
		if(IsValidPlayerObject(playerid, PlayerObjects[playerid][4]))DestroyPlayerObject(playerid, PlayerObjects[playerid][4]);
		if(IsValidPlayerObject(playerid, PlayerObjects[playerid][5]))DestroyPlayerObject(playerid, PlayerObjects[playerid][5]);
	}
	OldPos[playerid][oX]=X;
	OldPos[playerid][oY]=Y;
	OldPos[playerid][oZ]=Z;

	if(IsPlayerInAnyVehicle(playerid))
	{
		new Float:Health;
		GetVehicleHealth(GetPlayerVehicleID(playerid), Health);
		SetPlayerArmour(playerid, floatdiv(Health, 10.0));
	} else SetPlayerArmour(playerid, 0.0);

	new Float:H, iveh;
	if(IsPlayerInAnyVehicle(playerid))
	{
		GetVehicleHealth(GetPlayerVehicleID(playerid), H);
		iveh=true;
	}
	else GetPlayerHealth(playerid, H);
	if(iveh)
	{
		H = floatdiv(H, 10.0);
	}
	if(H > 0.0)
	{
	    SetPlayerColor(playerid,0xFF000077);
	    PlColor[playerid] = 1;
	}
	if(H > 10.0)
	{
	    SetPlayerColor(playerid,0xFF150077);
	    PlColor[playerid] = 2;
	}
	if(H > 20.0)
	{
	    SetPlayerColor(playerid,0xFF330077);
	    PlColor[playerid] = 3;
	}
	if(H > 30.0)
	{
	    SetPlayerColor(playerid,0xFF440077);
	    PlColor[playerid] = 4;
	}
	if(H > 40.0)
	{
	    SetPlayerColor(playerid,0xFF770077);
	    PlColor[playerid] = 5;
	}
	if(H > 50.0)
	{
	    SetPlayerColor(playerid,0xFFFF0077);
	    PlColor[playerid] = 6;
	}
	if(H > 60.0)
	{
	    SetPlayerColor(playerid,0x77FF0077);
	    PlColor[playerid] = 7;
	}
	if(H > 70.0)
	{
	    SetPlayerColor(playerid,0x44FF0077);
	    PlColor[playerid] = 8;
	}
	if(H > 80.0)
	{
	    SetPlayerColor(playerid,0x22FF0077);
	    PlColor[playerid] = 9;
	}
	if(H > 90.0)
	{
	    SetPlayerColor(playerid,0x00FF0077);
	    PlColor[playerid] = 10;
	}
}


G3PCTPIT(playerid, teamid)
{
    new Closest[3],
        Float:Distance,
        Float:TmpHighDist = 100.0,
        Float:x,
        Float:y,
        Float:z,
        Float:x2,
        Float:y2,
        Float:z2;
    Closest[0] = 255;
    Closest[1] = 255;
    Closest[2] = 255;
    for(new g = 0;g < 200; g++)
    {
        if(IsPlayerConnected(g))
        {
            if(GetPlayerTeam(g) == teamid && IsPlayerInAnyVehicle(g) && !IsPlayerInSpawn(g))
            {
                if(g != playerid)
                {
                    GetPlayerPos(g, x2, y2, z2);
                    GetPlayerPos(playerid, x, y, z);
                    Distance = floatsqroot(floatadd(floatadd(floatpower(floatabs(floatsub(x,x2)),2),floatpower(floatabs(floatsub(y,y2)),2)),floatpower(floatabs(floatsub(z,z2)),2)));
                    if(Distance < TmpHighDist){
                        Closest[0] = g;
                        TmpHighDist = Distance;
                    }
                }
            }
        }
    }
    TmpHighDist = 100.0;
    for(new g = 0;g < 200; g++)
    {
        if(IsPlayerConnected(g))
        {
            if(GetPlayerTeam(g) == teamid && IsPlayerInAnyVehicle(g) && !IsPlayerInSpawn(g))
            {
                if(g != playerid)
                {
                    if(g != Closest[0])
                    {
                        GetPlayerPos(g, x2, y2, z2);
                        GetPlayerPos(playerid, x, y, z);
                        Distance = floatsqroot(floatadd(floatadd(floatpower(floatabs(floatsub(x,x2)),2),floatpower(floatabs(floatsub(y,y2)),2)),floatpower(floatabs(floatsub(z,z2)),2)));
                        if(Distance < TmpHighDist){
                            Closest[1] = g;
                            TmpHighDist = Distance;
                        }
                    }
                }
            }
        }
    }
    TmpHighDist = 100.0;
    for(new g = 0;g < 200; g++)
    {
        if(IsPlayerConnected(g))
        {
            if(GetPlayerTeam(g) == teamid && IsPlayerInAnyVehicle(g) && !IsPlayerInSpawn(g))
            {
                if(g != playerid)
                {
                    if(g != Closest[0] && g != Closest[1])
                    {
                        GetPlayerPos(g, x2, y2, z2);
                        GetPlayerPos(playerid, x, y, z);
                        Distance = floatsqroot(floatadd(floatadd(floatpower(floatabs(floatsub(x,x2)),2),floatpower(floatabs(floatsub(y,y2)),2)),floatpower(floatabs(floatsub(z,z2)),2)));
                        if(Distance < TmpHighDist){
                            Closest[2] = g;
                            TmpHighDist = Distance;
                        }
                    }
                }
            }
        }
    }
    return Closest;
}

IsPlayerInSpawn(playerid)
{
	switch(GetPlayerTeam(playerid))
	{
		case 0:
		{
			if(IsPlayerInArea(playerid,floatsub(1302.079102, 50.0), floatsub(1658.567627, 50.0), floatadd(1382.079102, 50.0), floatadd(1738.567627, 50.0)))return true;
		}
		case 1:
		{
			if(IsPlayerInArea(playerid,floatsub(1564.073730, 50.0), floatsub(267.328888, 50.0) , floatadd(1644.073730, 50.0), floatadd(347.328888, 50.0) ))return true;
		}
	}
	return false;
}

stock StartSpectate(playerid, specid)
{
	for(new x=0; x<MAX_PLAYERS; x++)
	{
		if(GetPlayerState(x) == PLAYER_STATE_SPECTATING && SpectateID[x] == playerid)
		{
			AdvanceSpectate(x);
		}
	}
	if(IsPlayerInAnyVehicle(specid))
	{
		SetPlayerInterior(playerid,GetPlayerInterior(specid));
		TogglePlayerSpectating(playerid, 1);
		PlayerSpectateVehicle(playerid, GetPlayerVehicleID(specid));
		SpectateID[playerid] = specid;
		SpectateType[playerid] = ADMIN_SPEC_TYPE_VEHICLE;
	}
	else
	{
		SetPlayerInterior(playerid,GetPlayerInterior(specid));
		TogglePlayerSpectating(playerid, 1);
		PlayerSpectatePlayer(playerid, specid);
		SpectateID[playerid] = specid;
		SpectateType[playerid] = ADMIN_SPEC_TYPE_PLAYER;
	}
	return 1;
}

StopSpectate(playerid)
{
	TogglePlayerSpectating(playerid, 0);
	SpectateID[playerid] = INVALID_PLAYER_ID;
	SpectateType[playerid] = ADMIN_SPEC_TYPE_NONE;
	return 1;
}

stock AdvanceSpectate(playerid)
{
	if(ConnectedPlayers() == 1 || ConnectedPlayers() == 2)
	{
		return 1;
	}
	if(GetPlayerState(playerid) == PLAYER_STATE_SPECTATING && SpectateID[playerid] != INVALID_PLAYER_ID)
	{
		for(new x=SpectateID[playerid]+1; x<=MAX_PLAYERS; x++)
		{
			if(x == MAX_PLAYERS) {
				x = 0;
			}
			if(IsPlayerConnected(x) && x != playerid)
			{
				if(GetPlayerState(x) == PLAYER_STATE_SPECTATING && SpectateID[x] != INVALID_PLAYER_ID || (GetPlayerState(x) != 1 && GetPlayerState(x) != 2 && GetPlayerState(x) != 3))
				{
					continue;
				}
				else
				{
					StartSpectate(playerid, x);
					break;
				}
			}
		}
	}
	return 1;
}

stock ReverseSpectate(playerid)
{
	if(ConnectedPlayers() == 1 || ConnectedPlayers() == 2)
	{
		return 1;
	}
	if(GetPlayerState(playerid) == PLAYER_STATE_SPECTATING && SpectateID[playerid] != INVALID_PLAYER_ID)
	{
		for(new x=SpectateID[playerid]-1; x>=0; x--)
		{
			if(x == 0)
			{
				x = MAX_PLAYERS;
			}
			if(IsPlayerConnected(x) && x != playerid)
			{
				if(GetPlayerState(x) == PLAYER_STATE_SPECTATING && SpectateID[x] != INVALID_PLAYER_ID || (GetPlayerState(x) != 1 && GetPlayerState(x) != 2 && GetPlayerState(x) != 3))
				{
					continue;
				}
				else
				{
					StartSpectate(playerid, x);
					break;
				}
			}
		}
	}
	return 1;
}

stock ConnectedPlayers()
{
	new count;
	for(new x=0; x<MAX_PLAYERS; x++)
	{
		if(IsPlayerConnected(x))
		{
			count++;
		}
	}
	return count;
}

forward ScoreUpdate();
public ScoreUpdate()
{
	new s[256];
	format(s,256,"Hydra : %d vs %d : RoadTrain", HydraScore, RoadScore);
	if(idin[0])
	{
		TextDrawHideForAll(idin[0]);
		TextDrawDestroy(idin[0]);
	}
	idin[0] = TextDrawCreate(235.0, 115.0, s);
	TextDrawLetterSize(idin[0], 0.3, 0.5);
	TextDrawColor(idin[0], 0x00000088);
	TextDrawSetShadow(idin[0], 0);
	TextDrawSetOutline(idin[0], 1);
	TextDrawBackgroundColor(idin[0], 0xFFFFFF88);
	TextDrawFont(idin[0], 3);
	TextDrawShowForAll(idin[0]);
	SetGameModeText("R.T.v.H.1.4 by Luby");
}