All pastes #106180 Raw Edit

SA-MP gamemode

public text v1 · immutable
#106180 ·published 2006-07-30 04:44 UTC
rendered paste body
#include <a_samp>
#include <core>
#include <float>

#define COLOR_GREY 0xAFAFAFAA
#define COLOR_GREEN 0x33AA33AA
#define COLOR_RED 0xAA3333AA
#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_WHITE 0xFFFFFFAA
#define COLOR_BLUE 0x0000BBAA
#define COLOR_LIGHTBLUE 0x33CCFFAA
#define COLOR_ORANGE 0xFF9900AA
#define COLOR_SHINERED 0xFF0000AA
#define COLOR_SHINEGREEN 0x00FF00AA
#define COLOR_LIGHTRED  0xFF9999AA
#define COLOR_LIGHTGREEN  0x66FFCCAA


#define VCOLOR_WHITE      1
#define VCOLOR_BLACK      0
#define VCOLOR_PINK       126
#define VCOLOR_GREEN      86
#define VCOLOR_RED        3
#define VCOLOR_BLUE       79
#define VCOLOR_ORANGE     6
#define VCOLOR_LIGHTBLUE  7

#define ASS_TEAM 1
#define DEF_TEAM 2

#define DRAW       0
#define ASS_ELIM   1
#define DEF_ELIM   2
#define ASS_OBJ    3
#define DEF_OBJ    4

#define START_LIMIT    1   //players needed to start round
#define SECURE_SECONDS 15  //secure van seconds
#define FOREPLAY       10  //time before round begins (Seconds)
#define ROUND_TIME     360  //round time (Seconds)

forward AlmostEndRound(reason);
forward EndRound(reason);
forward StartRound();
forward CounterRound();
forward UpdateSpectator();
forward SpecPlayer(playerid, sr);
forward mSpawnPlayer(playerid);
forward GetTeamSize(&ass, &def);

new round_timer;
new round_counter = ROUND_TIME;

new Teami[MAX_PLAYERS];

new gamestarted; //0 - waiting for players to spawn 1 - game in prograss
new Spec[MAX_PLAYERS]; // 0 - player is playing, 1 - player is dead and spectating

new PlayerSecure[2] = {INVALID_PLAYER_ID , SECURE_SECONDS}; //the player who's securing the van

new wins[3];

new vehicles; //number of vehicles

new modeint = 1;

#define SPAWNS 6

new Float:TeamSpawn[2][SPAWNS][4] = {
{
// assault
	{-1342.701293, 38.243682, 7.420363, 125.0},  // 1
	{-1340.428100, 37.821029, 7.420362, 125.0},  // 2
	{-1345.163452, 41.631584, 7.442305, 125.0},  // 3
	{-1338.756347, 42.017547, 7.442304, 125.0},  // 4
	{-1334.628295, 33.347896, 7.442304, 125.0},  // 5
	{-1338.359375, 32.330387, 7.420361, 125.0}  // 6
//{-1347.062377, 38.692985, 7.420361},  // 7
},
{
// defense
	{-1416.242309, -315.753997, 7.099882, 340.0},  // 1
	{-1414.046752, -314.942993, 7.099884, 340.0},  // 2
	{-1415.452636, -311.143432, 7.099884, 340.0},  // 3
	{-1407.177612, -314.950805, 7.099882, 340.0},  // 4
	{-1407.210937, -321.185729, 7.099879, 340.0},  // 5
	{-1405.987304, -318.525573, 7.099879, 340.0}  // 6
}
};
#define SKINS 4
new TeamSkins[2][SKINS] = {
{124, 120, 113, 112},
{163, 164, 165, 166}
};

//gg
//{-1459.521728, -105.610702, 6.790548},  // 7?
//{-1462.035888, -104.870208, 6.768606},  // 8?
//{-1463.539306, -101.593833, 6.768606},  // 9?
#define SPEC_NUM    5
#define SPEC_HIGHT  200

new Float:SpecSpawns[SPEC_NUM][2][3] = {
{
{-1475.081176, -118.927009, 10.007267},  // Camera 1a
{-1457.487426, -108.798439, 6.789279}  // Camera 1b
},{
{-1467.455200, 35.397129, 6.000000},  // 2a
{-1466.501953, -213.556167, 6.000000}  // 2b
},{
{-1428.425537, -322.532531, 10.940030},  // 3a
{-1417.312377, -292.465881, 6.000000}  // 3b
},{
{-1336.512939, 40.696838, 9.743233},  // 4a
{-1356.759521, 13.635001, 6.000000}  // 4b
},{
{-1423.224853, -145.871856, 10.175897},  // 5a
{-1474.123046, -102.267585, 7.432641}  // 5b
}
};

main()
{
	print("\n----------------------------------");
	print("        Van Assault ");
	print("              By Yellowblood");
	print("----------------------------------\n");
}


#define SPEC_SECONDS 20
//new spec_timer;

new vanid;
public OnGameModeInit()
{
	print("GameModeInit( Van Assault )");
	SetGameModeText("Van Assault");
	AddPlayerClass(TeamSkins[0][0], -1364.424072, -249.121627, 16.406250, 269.1425, 0, 0, 0, 0, 0, 0);
	AddPlayerClass(TeamSkins[1][0], -1364.424072, -249.121627, 16.406250, 269.1425, 0, 0, 0, 0, 0, 0);
	AddPlayerClass(0, -1364.424072, -249.121627, 16.406250, 269.1425, 0, 0, 0, 0, 0, 0);

	//vehicles
	vanid = AddStaticVehicle(413,-1459.0176,-111.8537,6.0844,87.0118,VCOLOR_BLACK,VCOLOR_BLACK); // van?

	AddStaticVehicle(404,-1442.5953,-200.3978,5.7338,81.4238,123,92); //
	AddStaticVehicle(404,-1397.2808,-131.0975,5.7321,306.3851,123,92); //
	AddStaticVehicle(426,-1474.4688,-81.5275,5.7431,283.7412,62,62); //
	AddStaticVehicle(426,-1338.1917,-37.2883,5.7430,101.3431,62,62); //
	AddStaticVehicle(426,-1387.2928,-233.9768,5.7424,100.6595,62,62); //
	AddStaticVehicle(431,-1392.1422,-31.3672,6.0994,315.8300,55,83); // bus
	AddStaticVehicle(479,-1385.7233,-20.9471,5.7934,259.3298,55,41); //
	AddStaticVehicle(490,-1416.1698,-328.2638,6.2680,270.6664,0,0); //1
	AddStaticVehicle(490,-1427.8296,-315.3505,6.1454,79.0003,0,0); //2
	AddStaticVehicle(490,-1428.9440,-298.9905,6.1273,246.3253,0,0); //3
	AddStaticVehicle(490,-1440.9354,-302.3441,6.1290,356.8027,0,0); // black van 4
	AddStaticVehicle(507,-1401.7369,-299.0592,5.9133,19.7786,62,62); //
	AddStaticVehicle(507,-1458.8735,-200.3237,5.8255,288.5834,62,62); //
	AddStaticVehicle(514,-1412.5598,-259.0888,6.5857,337.4743,36,1); // truck
	AddStaticVehicle(543,-1442.5507,-9.0936,5.8160,260.9279,43,8); //
	AddStaticVehicle(589,-1352.3855,-108.4896,5.6581,91.8413,23,23); //
	AddStaticVehicle(420,-1441.7850,-108.8201,5.7789,76.6086,6,1); //
	AddStaticVehicle(420,-1337.3711,-205.4834,5.7795,279.6441,6,1); //
	AddStaticVehicle(456,-1339.0012,19.4241,6.1734,170.1838,12,95); // enemy spawn
	AddStaticVehicle(462,-1452.9492,-88.5416,5.9329,154.9849,1,3); // bike
	AddStaticVehicle(499,-1448.7606,42.0297,5.9917,6.7231,84,66); // pickup truck1
	AddStaticVehicle(499,-1425.7772,-171.0195,5.9917,281.9906,84,66); // pickup 2
	AddStaticVehicle(533,-1370.1367,-200.5490,5.7091,279.1694,83,1); // showoff car
	AddStaticVehicle(552,-1414.0909,-132.4787,5.6786,56.6505,49,49); // crashed roads constructing vehicle
	vehicles = AddStaticVehicle(578,-1473.4608,-63.2072,6.6223,89.6307,1,1); // truck

	printf("Van: %d  vehicles: %d",vanid, vehicles);
	
	ShowNameTags(0);
	ShowPlayerMarkers(0);
	
	return 1;
}


public OnPlayerRequestClass(playerid, classid)
{
	if(modeint == 1)
	{
		SetTimer("UpdateSpectator", SPEC_SECONDS * 1000, 1);
		SetTimer("StartRound", 30000, 0);
		modeint = 0;
	}
	printf("OnPlayerRequestClass");
	// printf("OnPlayerRequestClass(%d, %d)", playerid, classid);
	SetPlayerPos(playerid, -1364.424072, -249.121627, 16.406250);
	SetPlayerFacingAngle(playerid, 315);
	SetPlayerCameraPos(playerid, -1355.627197, -240.417694, 21.987598);
	SetPlayerCameraLookAt(playerid, -1364.424072, -249.121627, 16.406250);

	printf("OnPlayerRequestClass Camera done");

	SetPlayerColor(playerid, COLOR_BLUE);
	printf("Colors");
	Spec[playerid] = 0;

	if(classid == 0)
	{
	    Teami[playerid] = - ASS_TEAM;
	    GameTextForPlayer(playerid, "~r~ASSAULT", 10000, 6);
		printf("classid == 0");
	}
	else if(classid == 1)
	{
		Teami[playerid] = - DEF_TEAM;
	    GameTextForPlayer(playerid, "~b~defense", 10000, 6);
		printf("classid == 1");
	}
	else
	{
	    Teami[playerid] = 0;
	    GameTextForPlayer(playerid, "~w~SPECTATORS", 10000, 6);
    	printf("classid == else");
	}
	printf("return");
	return 1;
}

public OnGameModeExit()
{
	print("GameModeExit()");
	return 1;
}

public OnPlayerConnect(playerid)
{
    Spec[playerid] = 0;
        
    Teami[playerid] = 0;

	SendClientMessage(playerid, COLOR_YELLOW, "Welcome to Yellowblood's Van Assault mode!");
	SendClientMessage(playerid, COLOR_YELLOW, "There are two teamns: Defense and Assault. If you die, you will have to wait until next round.");
	SendClientMessage(playerid, COLOR_LIGHTBLUE, "Type /help for more info.");
	// printf("OnPlayerConnect(%d)", playerid);
	return 1;
}

public OnPlayerDisconnect(playerid)
{
    Teami[playerid] = 0;

   	if(gamestarted == 1)
	{
		new ass,def;
		GetTeamSize(ass,def);
		if(ass == 0 || def == 0)
		{
			if(def > 0)
				AlmostEndRound(ASS_ELIM);
			else if(ass > 0)
				AlmostEndRound(DEF_ELIM);
			else
			    AlmostEndRound(DRAW);
		}
	}
	// printf("OnPlayerDisconnect(%d)", playerid);
	return 1;
}

public OnPlayerSpawn(playerid)
{
    GameTextForPlayer(playerid, " ", 100, 6);
	new ass,def;
	GetTeamSize(ass, def);

	if(gamestarted == 1 || Teami[playerid] == 0) Spec[playerid] = 1;

	if(Spec[playerid] != 0)
	{
		new sr = random(SPEC_NUM);
        SetPlayerColor(playerid, COLOR_WHITE);
		SpecPlayer(playerid, sr);
		if(Teami[playerid] == 0)
		    SendClientMessage(playerid, COLOR_YELLOW, "You are now on spectator mode. Hit F4 and type /getout to start playing.");
		return 1;
	}
	else
	{
	    if(Teami[playerid] > 0)
			Teami[playerid] = - Teami[playerid];
	
		printf("ass: %d def: %d", ass,def);
		for(new i=1; i <= vehicles; i++)
		    SetVehicleParamsForPlayer(i, playerid, 0, 1);

//		TogglePlayerControllable(playerid,1);
		
		if((Teami[playerid] == - DEF_TEAM && ass+1 >= def) || ass > def + 1)
		{//defense
	    	if(Teami[playerid] != - DEF_TEAM)
	        	SendClientMessage(playerid, COLOR_WHITE, "You were forced to change teams to Defense.");
		    Teami[playerid] = DEF_TEAM;
	    	DisablePlayerCheckpoint(playerid);

	        SetVehicleParamsForPlayer(1, playerid, 1, 1);
	        SetPlayerColor(playerid, COLOR_SHINEGREEN);
	        
			SendClientMessage(playerid, COLOR_YELLOW, "You are on defense team. Your objective is to protect the black van.");
		}
		else
		{//assault
		    if(Teami[playerid] != - ASS_TEAM)
		        SendClientMessage(playerid, COLOR_WHITE, "You were forced to change teams to Assault.");
		    Teami[playerid] = ASS_TEAM;
	        SetPlayerColor(playerid, COLOR_SHINERED);
		    SetPlayerCheckpoint(playerid, -1462.83, -112.57, 6.0,2);
			SendClientMessage(playerid, COLOR_YELLOW, "You are on assault team. Your objective is to secure the black van.");
		}

		mSpawnPlayer(playerid);

//		new string[256];
//		format(string, sizeof(string), "Game starts in a few seconds");
		SendClientMessage(playerid, COLOR_RED, "Game starts in a few seconds.");

		if(gamestarted == 0)
			TogglePlayerControllable(playerid,0);

		return 1;
	}
	return 0;
}

public OnPlayerDeath(playerid, killerid, reason)
{

	SendDeathMessage(killerid, playerid, reason);

	if(IsPlayerConnected(killerid) && Teami[killerid] == Teami[playerid])
	{
		SetPlayerScore(killerid, GetPlayerScore(playerid) - 1);
		GameTextForPlayer(killerid, "~r~do not ~w~teamkill", 6000, 3);

		new Float:health;  //hurt tk noob
		GetPlayerHealth(killerid, health);
		SetPlayerHealth(killerid, health - 40.0);
	}
	else
	{
		SetPlayerScore(killerid, GetPlayerScore(playerid) + 1);
		if(Teami[playerid] > 0)
			Teami[playerid] = -	Teami[playerid];
	}

	DisablePlayerCheckpoint(playerid);

	SetVehicleParamsForPlayer(1, playerid, 0, 1);
    
	if(gamestarted == 1)
	{
		new ass,def;
		GetTeamSize(ass,def);
		if(ass == 0 || def == 0)
		{
			for(new i = 0; i < MAX_PLAYERS; i++)
				if(IsPlayerConnected(i))
				    TogglePlayerControllable(i, 0);
			if(def > 0)
				AlmostEndRound(ASS_ELIM);
			else if(ass > 0)
				AlmostEndRound(DEF_ELIM);
			else
			    AlmostEndRound(DRAW);
		}
		else
			Spec[playerid] = 1;
	}

	return 1;
}

public OnVehicleSpawn(vehicleid)
{
	// printf("OnVehicleSpawn(%d)", vehicleid);
	return 1;
}

public OnVehicleDeath(vehicleid, killerid)
{
	// printf("OnVehicleDeath(%d, %d)", vehicleid, killerid);
	return 1;
}

public OnPlayerText(playerid,text[])
{
	if (text[0] == '@') return 0;

	new pteam = Teami[playerid];

	new pname[256];
	GetPlayerName(playerid,pname,sizeof pname);

	if (text[0]=='!' && pteam != 0)
	{
	   		for (new i=0 ; i<MAX_PLAYERS ; i++)
				if (IsPlayerConnected(i) && (Teami[i] == pteam || IsPlayerAdmin(i)))
				{
					new msgtext[256], string[256];
					strmid(msgtext, text, 1, strlen(text));
					format(string,sizeof(string), "%s: %s", pname, msgtext);
					if(pteam == DEF_TEAM)
						SendClientMessage(i,COLOR_LIGHTGREEN,string);
					else if(pteam == ASS_TEAM)
						SendClientMessage(i,COLOR_LIGHTRED,string);
				}
		return 0;
	}
	else
	{
	    if(pteam <= 0)
	    {
	   		for (new i=0 ; i<MAX_PLAYERS ; i++)
				if (IsPlayerConnected(i) && (Teami[i] <= 0 || IsPlayerAdmin(i)))
				{
					new string[256];
					format(string,sizeof(string), "%s: %s", pname, text);
					SendClientMessage(i,COLOR_WHITE,string);
				}
  			return 0;
  		}
 	}
 	return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
	if (strcmp(cmdtext, "/help", true)==0)
	{
		SendClientMessage(playerid, COLOR_YELLOW, "Welcome to Yellowblood's Van Assault mode!");
		SendClientMessage(playerid, COLOR_LIGHTBLUE, "There are two teamns: Defense and Assault.");
		SendClientMessage(playerid, COLOR_LIGHTBLUE, "Assault team needs to secure the van, while the defense team needs to prevent this.");
		SendClientMessage(playerid, COLOR_LIGHTBLUE, "If you die, you will have to wait until next round.");
		SendClientMessage(playerid, COLOR_LIGHTBLUE, "You can also be a Spactetor and watch the game. On spectator mode, hit F4 and type /getout to kill yourself.");
		return 1;
	}
	if (strcmp(cmdtext, "/inf", true)==0)
	{
	    new string[256];
	    new ass,def,not;
	    not = GetTeamSize(ass,def);
	    
	    format(string, sizeof(string), "Ass: %d, Def: %d, No Team:%d",ass,def,not);
		SendClientMessage(playerid, COLOR_WHITE, string);
	    format(string, sizeof(string), "Your Team: %d, WinsAss: %d, WinsDef: %d,",Teami[playerid], wins[ASS_TEAM], wins[DEF_TEAM]);
		SendClientMessage(playerid, COLOR_WHITE, string);
	    format(string, sizeof(string), "Gamestarted: %d, PlayerSecure[0]: %d, PlayerSecure[1]: %d",gamestarted, PlayerSecure[0], PlayerSecure[1]);
		SendClientMessage(playerid, COLOR_WHITE, string);
	    return 1;
	}
	if (strcmp(cmdtext, "/getout", true)==0)
	{
	    if(Spec[playerid] != 0)
	    {
	        TogglePlayerControllable(playerid, 1);
	        SetPlayerHealth(playerid, 0.0);
			if(Teami[playerid] == 0)
				SendClientMessage(playerid, COLOR_WHITE, "You're in Spectators team, hit F4 and change it.");
	        else if(gamestarted == 1)
	            SendClientMessage(playerid, COLOR_WHITE, "You will be spectating until the round ends.");
	    }
	    else
	        SendClientMessage(playerid, COLOR_RED, "Error: You are not spectating.");
		return 1;
	}
	return 0;
}

public OnPlayerInfoChange(playerid)
{
	// printf("OnPlayerInfoChange(%d)");
	return 1;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
	// printf("OnPlayerEnterVehicle(%d, %d, %d)", playerid, vehicleid, ispassenger);
	return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
	// printf("OnPlayerExitVehicle(%d, %d)", playerid, vehicleid);
	return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
	// printf("OnPlayerStateChange(%d, %d, %d)", playerid, newstate, oldstate);
	return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
	if(Teami[playerid] == ASS_TEAM && PlayerSecure[0] == INVALID_PLAYER_ID)
	{
	    PlayerSecure[0] = playerid;
	    PlayerSecure[1] = SECURE_SECONDS;
	    SendClientMessage(playerid, COLOR_RED, "You are securing the van.");
	}
	else if(Teami[playerid] != ASS_TEAM)
	    SendClientMessageToAll(COLOR_RED, "ERROR! ERROR! ERROR!");

	// printf("OnPlayerEnterCheckpoint(%d)", playerid);
	return 1;
}

public OnPlayerLeaveCheckpoint(playerid)
{
	if(Teami[playerid] == ASS_TEAM && PlayerSecure[0] == playerid)
	{
	    PlayerSecure[0] = INVALID_PLAYER_ID;
   	    PlayerSecure[1] = SECURE_SECONDS;
	    SendClientMessage(playerid, COLOR_RED, "You are no longer securing the van.");
	}
	// printf("OnPlayerLeaveCheckpoint(%d)", playerid);
	return 1;
}

public GetTeamSize(&ass, &def)
{
	new noteam = 0;
	ass = 0;
	def = 0;
	for(new i = 0 ; i < MAX_PLAYERS; i++)
	    if(IsPlayerConnected(i))
			switch(Teami[i])
			{
				case ASS_TEAM: ass++;
				case DEF_TEAM: def++;
				default: noteam++;
			}

	return noteam;
}

public mSpawnPlayer(playerid)
{
	new s = Teami[playerid] - 1;

	new skin = random(SKINS);
    SetPlayerSkin(playerid, TeamSkins[s][skin]);

	new j = random(SPAWNS);
    SetPlayerPos(playerid, TeamSpawn[s][j][0], TeamSpawn[s][j][1], TeamSpawn[s][j][2]);
 	SetPlayerFacingAngle(playerid, TeamSpawn[s][j][3]);
 	SetCameraBehindPlayer(playerid);
 	GivePlayerWeapon(playerid, 29, 90000);
 	GivePlayerWeapon(playerid, 31, 90000);

	if(Teami[playerid] == ASS_TEAM)
 		GameTextForPlayer(playerid, "~r~be ready...", FOREPLAY * 1000, 3);
	else if(Teami[playerid] == DEF_TEAM)
	    GameTextForPlayer(playerid, "~g~be ready...", FOREPLAY * 1000, 3);

	return 1;
}

public SpecPlayer(playerid, sr)
{
	    TogglePlayerControllable(playerid, 0);
	    SetPlayerPos(playerid, SpecSpawns[sr][0][0], SpecSpawns[sr][0][1], SPEC_HIGHT);
	    SetPlayerCameraPos(playerid,SpecSpawns[sr][0][0], SpecSpawns[sr][0][1], SpecSpawns[sr][0][2]);
	    SetPlayerCameraLookAt(playerid, SpecSpawns[sr][1][0], SpecSpawns[sr][1][1], SpecSpawns[sr][1][2]);
	    return 1;
}

public UpdateSpectator()
{
	for(new i = 0; i < MAX_PLAYERS; i++)
		if(Spec[i] != 0 && IsPlayerConnected(i) && GetPlayerState(i) == PLAYER_STATE_SPAWNED)
		{
//			new Float:x,Float:y,Float:z;
//			GetPlayerPos(i, x, y, z);
//			if(SPEC_HIGHT  < z + 1 && SPEC_HIGHT > z-1)
//			{
				new sr = Spec[i];
				if(sr == SPEC_NUM)
				{
					sr = 0;
					Spec[i] = 1;
				}
				else
				    Spec[i]++ ;
			    
				SpecPlayer(i, sr);
//			}
		}
	return 1;
}

public CounterRound()
{
//  	printf("CounterRound(%d)", round_counter);
	if(round_counter > 0)
	{
		new minutes, seconds;
		minutes = round_counter / 60;
		seconds = round_counter - minutes * 60;
	    new string[256];
		if(seconds > 9)
	    	format(string, sizeof(string), "~b~%d:%d",minutes, seconds);
	    else
	        format(string, sizeof(string), "~b~%d:0%d",minutes, seconds);
		GameTextForAll(string ,1500, 6);
	    round_counter --;
	}
	else
	{
	    AlmostEndRound(DEF_OBJ);
	    return 1;
	}
	
	if(PlayerSecure[0] != INVALID_PLAYER_ID)
	{
	    if(PlayerSecure[1] > 0)
	    {
			new string[256] = "~r~";
   			for(new i=PlayerSecure[1]; i < SECURE_SECONDS;i++)
   			{
		        format(string, sizeof(string),"%s|",string);
   			}
	        format(string, sizeof(string),"%s~w~",string);
			for(new i=1; i <= PlayerSecure[1];i++)
		    {
		        format(string, sizeof(string),"%s|",string);
		    }
   			GameTextForPlayer(PlayerSecure[0], string, 1500, 3);
	        PlayerSecure[1] = PlayerSecure[1] - 1;
	    }
	    else
	    {
			new string[256];
			GetPlayerName(PlayerSecure[0], string, sizeof(string));
	        format(string, sizeof(string),"%s secured the van!",string);
	        SendClientMessageToAll(COLOR_LIGHTRED, string);
	        AlmostEndRound(ASS_OBJ);
	    }

	}
	
	return 1;
}

public AlmostEndRound(reason)
{
	round_counter = ROUND_TIME;
	KillTimer(round_timer);
	for(new i = 0; i < MAX_PLAYERS; i++)
		if(IsPlayerConnected(i))
		{
			Spec[i] = 0;
		    TogglePlayerControllable(i, 0);
		}

	if(reason == DEF_ELIM || reason == ASS_OBJ)
	{
	    wins[ASS_TEAM]++;
        SendClientMessageToAll(COLOR_LIGHTRED, "Assault team has won!");
	}
	else if(reason == ASS_ELIM || reason == DEF_OBJ)
	{
	    wins[DEF_TEAM]++;
        SendClientMessageToAll(COLOR_LIGHTGREEN, "Defense team has won!");
	}
	new string[256];
	switch(reason)
	{
		case DRAW: format(string, sizeof(string), "~w~WTF? DRAW!");
	    case ASS_ELIM: format(string, sizeof(string), "~w~Assault team eliminated");
	    case DEF_ELIM: format(string, sizeof(string), "~w~Defense team eliminated");
	    case ASS_OBJ: format(string, sizeof(string), "~w~Van secured");
	    case DEF_OBJ: format(string, sizeof(string), "~w~Time is over");
	}
	GameTextForAll(string, 10000, 3);
	new temp[256];
	format(temp, sizeof(temp), "Scores: Assault  %d : %d  Defense", wins[ASS_TEAM], wins[DEF_TEAM]);
    SendClientMessageToAll(COLOR_GREEN, temp);

    PlayerSecure[0] = INVALID_PLAYER_ID;
    PlayerSecure[1] = SECURE_SECONDS;
	
	SetTimer("EndRound", 10000, 0);
	return 1;
}


public EndRound(reason)
{
	//publish scores
	//publish team wins
	gamestarted = 0;
	for(new i = 0; i < MAX_PLAYERS; i++)
		if(IsPlayerConnected(i) && Teami[i] != 0)
		{
			Spec[i] = 0;
			SpawnPlayer(i);
		    TogglePlayerControllable(i, 0);
		    SetPlayerHealth(i, 100.0);
		}
	SetTimer("StartRound", FOREPLAY * 1000, 0);
	return 1;
}

public StartRound()
{
	new ass,def;
	GetTeamSize(ass,def);

	if(ass+def >= START_LIMIT)
 	{
       	printf("Round Started!");
		gamestarted = 1;
		for(new i = 0; i < MAX_PLAYERS; i++)
			if(IsPlayerConnected(i) && Teami[i] > 0)
			{
			    TogglePlayerControllable(i, 1);
			}

		round_timer = SetTimer("CounterRound", 1000, 1);
		return 1;
	}
	else
	{
       	printf("Needs stuff");
	    new string[256];
	    format(string, sizeof(string), "Needs %d more players to start", (START_LIMIT - ass - def));
	    SendClientMessageToAll(COLOR_YELLOW,string);
		SetTimer("StartRound", FOREPLAY * 1000, 0);
	    return 1;
	}
	return 0;
}