Raised This Month: $12 Target: $400
 3% 

Help with plugin


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
valascus
New Member
Join Date: Aug 2011
Old 05-06-2012 , 04:59   Help with plugin
Reply With Quote #1

Fixed, thanks


Last edited by valascus; 05-07-2012 at 15:08. Reason: Fixed
valascus is offline
quark
Veteran Member
Join Date: Oct 2011
Location: Your mind.
Old 05-06-2012 , 05:30   Re: Help with plugin
Reply With Quote #2

p1mp and valascus?!

What? *O*
__________________

Check out My Plugins:
qServerInfo ; ASKTAG
quark is offline
kiki33hun
Veteran Member
Join Date: Jul 2011
Location: Magyarország
Old 05-06-2012 , 05:40   Re: Help with plugin
Reply With Quote #3

+1 error:

Invalid author
__________________
kiki33hun is offline
valascus
New Member
Join Date: Aug 2011
Old 05-06-2012 , 05:55   Re: Help with plugin
Reply With Quote #4

and valascus because i edited very things
valascus is offline
dreamiing
Junior Member
Join Date: Nov 2011
Old 05-07-2012 , 06:58   Re: Help with plugin
Reply With Quote #5

What I laughed to see this plugin ...

Valascus add me on steam: hgdreamiing
dreamiing is offline
mottzi
Veteran Member
Join Date: May 2010
Location: Switzerland
Old 05-07-2012 , 07:41   Re: Help with plugin
Reply With Quote #6

This should fix the Indention-Errors:
Code:
//* Plugin generated by AMXX-Studio */ 

#include <amxmodx> 
#include <amxmisc> 
#include <fun> 
#include <cstrike> 
#include <hamsandwich> 
#include <fakemeta> 
#include <csx> 
#include <nvault> 


#define PLUGIN "Auto-Mix" 
#define VERSION "1.0" 
#define AUTHOR "p1mp" 

#pragma dynamic 20480 
#define PREFIX "[Route-Games]" 
#define MAXSLOTS 32 

enum Color { 
	YELLOW = 1, 
	GREEN, 
	TEAM_COLOR, 
	GREY, 
	RED, 
	BLUE 
} 
new TeamName[][] = { 
	
	"", 
	"TERRORIST", 
	"CT", 
	"SPECTATOR" 
	
} 
#define TASK_TUT 1111 

enum 
{ 
RED = 1, 
BLUE, 
YELLOW, 
GREEN 
} 

new g_MsgTutor,g_MsgTutClose 
new authid[33][32] 

//New Cvars 
new g_CvarCName,g_CvarMsg,g_CvarMsg2,g_MsgTime,g_MsgTime2 

new kill_points, death_points, time_points; 
new def_points, boom_points; 
new head_points, knife_points, nade_points, tk_points, skill_points; 
new TeamInfo,SayText,MaxSlots; 
new points[32], vote_choices[3] 
new bool:IsConnected[MAXSLOTS + 1]; 

new gPlayersLeft 
new gMaxPlayers 
new gPug_ini_file[64] 
new gCptT 
new gCptCT 
new g_iScore[2] 
new g_iLastTeamScore[2] 
new gNotRdy[400] = "Nao esta pronto:^n" 
new bool:g_bIsReady[33] 
new Float:gTypedCommand[33] 
new g_LeftKills[33] 
new g_LeftVotes[33] 
new g_iTimeLeft[33] 
new g_KillsAce[33] 
new bool:g_IsStarted 
new bool:g_AfterRdy 
new bool:g_ToDisplay 
new bool:g_KnifeRound 
new bool:g_MapChanged 
new bool:g_Twon 
new bool:g_VoteProg 
new bool:g_bStop 
new bool:g_bStop2 
new bool:g_Restart 
new g_pVote 
new g_AppBind 
new g_MsgSync 
new g_MsgSync3 
new g_MsgSync2 
new g_MsgSync4 
new g_MsgSync5 
new g_MsgSync6 
new g_MsgSync7 
new g_MsgSync8 
new g_szTeamName[2] 
new g_iTeam 
new g_iAltScore 
new g_iScoreOffset 
new g_CustomGame 
new g_bVotes[2] 
new g_Menu 
new g_PlayersMenu 
new g_abMenu 
new g_switchmenu 
new g_switchVotes[2] 
new bool:g_bDidScore 
new bool:g_bFFoff 
new bool:g_bFFTKStop 
new bool:g_bDidVoteFF 
new bool:g_bSecondHalf 
new bool:g_bCpt 
new g_NotBalanced 
new g_DidWaitEnough 

/* Cvars */ 

new cvar_FFvote 
new cvar_KnifeRound 
new cvar_pLeft 
new cvar_DetectTK 
new cvar_mp_friendlyfire 
new cvar_mp_freezetime 
new cvar_mp_roundtime 
new cvar_mp_buytime 
new cvar_sv_restart 
new cvar_sv_password 
new cvar_humans_join_team 

/* Cvars */ 

/* Mute menu */ 

#define MAX_PLAYERS 32 

new bool:g_mute[MAX_PLAYERS+1][MAX_PLAYERS+1] 
new g_menuposition[MAX_PLAYERS+1] 
new g_menuplayers[MAX_PLAYERS+1][32] 
new g_playersnum[MAX_PLAYERS+1] 
new cvar_alltalk 
new g_maxclients 

/* Mute menu */ 

/* AFK Kicker */ 

#define MIN_AFK_TIME 30 // I use this incase stupid admins accidentally set mp_afktime to something silly. 
#define WARNING_TIME 15 // Start warning the user this many seconds before they are about to be kicked. 
#define CHECK_FREQ 5 // This is also the warning message frequency. 

new g_oldangles[33][3] 
new g_afktime[33] 
new bool:g_spawned[33] = {true, ...} 

/* AFK Kicker */ 

/* Map & Votes variables */ 
new g_gVoteMenu; 
new g_gVotes[5]; 
new g_rVoteMenu; 
new g_rVotes[3]; 
new g_fVoteMenu; 
new g_fVotes[2]; 
new g_Maps_Ini_File[64] 
new g_MapsCounter 
new g_MapsAvailable[30][20] 
new g_MapsChosen[4][20] 
new g_DoneMaps 
new g_ChangeMapTo 
new g_LeftBans[24][124] 
new g_LeftBansIPs[24][64] 
new g_RoundsLeft[24] = {-1, ...} 
/* Map & Votes variables */ 

enum { 
T_WIN = 0, 
CT_WIN = 1 
} 


public plugin_init() { 
register_plugin(PLUGIN, VERSION, AUTHOR) 

cvar_FFvote = register_cvar("pug_ffvote", "1", FCVAR_ARCHIVE|FCVAR_SERVER) 
cvar_KnifeRound = register_cvar("pug_kniferound", "1", FCVAR_ARCHIVE|FCVAR_SERVER) 
cvar_pLeft = register_cvar("pug_players", "10", FCVAR_ARCHIVE|FCVAR_SERVER) 
cvar_DetectTK = register_cvar("pug_detecttk", "1", FCVAR_ARCHIVE|FCVAR_SERVER) 
register_cvar("mutemenu", "1", FCVAR_SPONLY|FCVAR_SERVER) 

register_forward(FM_Voice_SetClientListening, "fwd_voice_setclientlistening") 
register_menucmd(register_menuid("mute menu"), 1023, "action_mutemenu") 

cvar_alltalk = get_cvar_pointer("sv_alltalk") 
g_maxclients = global_get(glb_maxClients) 
register_cvar("afk_version", "1.0b", FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_SPONLY) 

register_cvar("mp_afktime", "40") // Kick people AFK longer than this time 
register_cvar("mp_afkminplayers", "0") // Only kick AFKs when there is atleast this many players on the server 
set_task(float(CHECK_FREQ),"checkPlayers",_,_,_,"b") 
register_event("ResetHUD", "playerSpawned", "be") 

g_MsgSync = CreateHudSyncObj() 
g_MsgSync3 = CreateHudSyncObj() 
g_MsgSync4 = CreateHudSyncObj() 
g_MsgSync5 = CreateHudSyncObj() 
g_MsgSync6 = CreateHudSyncObj() 
g_MsgSync7 = CreateHudSyncObj() 
g_MsgSync8 = CreateHudSyncObj() 
g_MsgSync2 = CreateHudSyncObj() 

cvar_mp_friendlyfire = get_cvar_pointer("mp_friendlyfire") 
cvar_mp_freezetime = get_cvar_pointer("mp_freezetime") 
cvar_mp_roundtime = get_cvar_pointer("mp_roundtime") 
cvar_mp_buytime = get_cvar_pointer("mp_buytime") 
cvar_sv_restart = get_cvar_pointer("sv_restart") 
cvar_sv_password = get_cvar_pointer("sv_password") 
cvar_humans_join_team = get_cvar_pointer("humans_join_team") 

gPlayersLeft = get_pcvar_num(cvar_pLeft) 

get_configsdir(gPug_ini_file, 63); 
format(gPug_ini_file, 63, "%s/pug.ini", gPug_ini_file); 
gMaxPlayers = get_maxplayers() 

kill_points = register_cvar("PS_kill_points", "3"); 
death_points = register_cvar("PS_death_points", "1"); 

def_points = register_cvar("PS_defusion_points", "4"); 
boom_points = register_cvar("PS_boom_points", "4"); 

time_points = register_cvar("PS_time_points", "10"); 
head_points = register_cvar("PS_head_points", "4"); 

knife_points = register_cvar("PS_knife_points", "4"); 
nade_points = register_cvar("PS_nade_points", "4"); 

tk_points = register_cvar("PS_tk_points", "5"); 

register_clcmd("say !pontos", "show_points"); 
register_clcmd("say .pontos", "show_points"); 
register_clcmd("say pontos", "show_points"); 
register_clcmd("say /skill", "show_points"); 

register_clcmd("say_team !skill", "show_points"); 
register_clcmd("say_team skill", "show_points"); 
register_clcmd("say_team .skill", "show_points"); 
register_clcmd("say_team /skill", "show_points"); 

TeamInfo = get_user_msgid("TeamInfo"); 
SayText = get_user_msgid("SayText"); 
MaxSlots = get_maxplayers(); 

register_clcmd("say !rr", "Restart") 
register_clcmd("say !restart", "RestartS") 
register_clcmd("say !add", "Prepare") 
register_clcmd("say add", "Prepare") 
register_clcmd("say .add", "Prepare") 
register_clcmd("say !sair", "unPrepare") 
register_clcmd("say !credito", "credits") 
register_clcmd("say !creditos", "credits") 
register_clcmd("say !cmd", "cmds") 
register_clcmd("say !cmds", "cmds") 
register_clcmd("say !comandos", "cmds") 
register_clcmd("say !menu", "player") 
register_clcmd("pmenu", "player") 
register_clcmd("chooseteam", "handled") 
register_clcmd("jointeam", "handled") 
register_clcmd("say !voteban", "voteban") 
register_clcmd("say_team !voteban", "voteban") 
register_clcmd("say !score", "showscore") 
register_clcmd("say_team !score", "showscore") 
register_clcmd("buy", "blockbuy") 
register_clcmd("say", "clcmd_say") 
register_clcmd("say_team", "clcmd_say") 
register_logevent("round_end", 2, "1=Round_End") 
register_event("TeamScore", "Event_TeamScore", "a") 
register_event("DeathMsg", "Event_DeathMsg_Knife", "a", "1>0") 
register_event("CurWeapon", "Event_CurWeapon_NotKnife", "be", "1=1", "2!29") 
register_forward(FM_ClientUserInfoChanged, "infochanged") 
register_forward(FM_GetGameDescription, "Change" ); 
g_MsgTutor = get_user_msgid("TutorText"); 
g_MsgTutClose = get_user_msgid("TutorClose"); 

//Cvars 
g_CvarMsg = register_cvar("amx_notice_1","Vai ja a: www.Route-Games.com"); 
g_CvarMsg2 = register_cvar("amx_notice_2","Inovaçăo , Simplicidade , Qualidade."); 

//Cvar Community Name 
g_CvarCName = register_cvar("amx_n_cname","Route-Games"); 

//Cvar Time 
g_MsgTime = register_cvar("amx_n_time_1","150.0"); 
g_MsgTime2 = register_cvar("amx_n_time_2","250.0"); 

//Task 
set_task(get_pcvar_float(g_MsgTime),"CmdMsg"); 
set_task(get_pcvar_float(g_MsgTime2),"CmdMsg2"); 
} 
public CmdWelcomeMessage(id) 
{ 

new Cname[200],targetname[32],authid[33] 
get_user_name(id,targetname,31) 
get_user_authid(id,authid,32) 
get_pcvar_string(g_CvarCName, Cname, charsmax(Cname)) 

new Text[192] 

formatex(Text,191,"Juntou-se %s (%s)^nBem-Vindo ŕ Comunidade %s^nTu tens: %d Pontos^n^n Servidor configurado por Valascus ",targetname, authid, Cname ,points[id]) 

MsgWelcome(id,Text,BLUE,12.0) 

} 
public Change() { 
forward_return(FMV_STRING, "[Route-Games] Auto-Mix"); 
return FMRES_SUPERCEDE; 
} 


public blockbuy(id) 
{ 
	if (g_bCpt)
	{
		client_print(id, print_chat, "%s Tu nao podes comprar armas durante a escolha da equipa.", PREFIX) 
	}	
	else if (g_KnifeRound) 
	{
		client_print(id, print_chat, "%s Tu nao podes comprar armas durante a ronda de faca.", PREFIX) 
	}
	
	return PLUGIN_CONTINUE 
} 

public Event_CurWeapon_NotKnife(id) { 
	if ( g_Restart || !g_KnifeRound ) 
		return 
	
	if( !user_has_weapon(id, CSW_KNIFE ) ) 
		give_item(id, "weapon_knife") 
	engclient_cmd(id, "weapon_knife") 
} 

public Restart(id) { 
	
	if (is_user_admin(id)) 
		server_cmd("sv_restart 1") 
	else 
		client_print(id, print_chat, "%s Tu nao es um admin!", PREFIX) 
} 

public RestartS(id) { 
	
	if (is_user_admin(id)) 
		server_cmd("restart") 
	
	else 
		client_print(id, print_chat, "%s Tu nao es um admin!", PREFIX) 
} 

public showscore(id) { 
	
	if (g_IsStarted) 
	{ 
		CrashAttempt(id) 
		
		if (g_Twon) 
		{ 
			if (g_bSecondHalf) 
				client_print(0, print_chat, "Score: (Equipa-A) %d - %d (Equipa-B)", g_iScore[0], g_iScore[1]) 
			
			else 
				client_print(0, print_chat, "Score: (Equipa-A) %d - %d (Equipa-B)", g_iScore[1], g_iScore[0]) 
		} 
		
		else 
		{ 
			if (g_bSecondHalf) 
				client_print(0, print_chat, "Score: (Team-A) %d - %d (Team-B)", g_iScore[1], g_iScore[0]) 
			else 
				client_print(0, print_chat, "Score: (Team-A) %d - %d (Team-B)", g_iScore[0], g_iScore[1]) 
		} 
	} 
	
	else 
	{ 
		client_print(id, print_chat, "%s Ainda nao comecou um jogo!", PREFIX) 
	} 
	return PLUGIN_CONTINUE 
} 

public Event_DeathMsg_Knife() 
{ 
	if ( g_Restart || !g_IsStarted ) 
		return 
	
	new attacker = read_data(1) 
	
	if( attacker > gMaxPlayers ) 
		return 
	
	new victim = read_data(2) 
	
	if( victim != attacker && cs_get_user_team(attacker) != cs_get_user_team(victim)) 
	{ 
		new weap[7] 
		
		if( read_data(4, weap, charsmax(weap)) == 5 && equal(weap, "knife") ) 
		{ 
			new nameA[32] 
			new nameV[32] 
			
			get_user_name(attacker, nameA, 31) 
			get_user_name(victim, nameV, 31) 
			
			set_hudmessage(255, 255, 255, 0.04, 0.63, 0, 6.0, 12.0) 
			ShowSyncHudMsg(0, g_MsgSync5, "%s Ronda da FACA %s!", nameA, nameV) 
		} 
		g_KillsAce[attacker]++ 
	} 
} 



public client_damage(attacker, victim, damage, wpnindex, hitplace, TA) { 
	if (!get_pcvar_num(cvar_DetectTK)) 
		return PLUGIN_CONTINUE 
	
	if (attacker == victim) 
	{ 
		damage = 0 
	} 
	
	if (g_IsStarted) 
	{ 
		if (TA == 1) 
		{ 
			g_LeftKills[attacker] += damage 
			
			
			if (g_LeftKills[attacker] >= 100) 
			{ 
				new nameofp[50] 
				
				get_user_name(attacker, nameofp, 49) 
				
				server_cmd("amx_banip #%d 10 ^"%s Tu foste avisado! (Team-Kill)^"", get_user_userid(attacker), PREFIX) 
				set_hudmessage(255, 0, 0, 0.32, 0.70, 0, 6.0, 12.0) 
				show_hudmessage(0, "%s is Banido por TK!", nameofp) 
				client_print(0, print_chat, "%s Friendlyfire foi desativado temporariamente. Se atacares a tua equipa podes levar ban!", PREFIX) 
				set_pcvar_num(cvar_mp_friendlyfire, 0) 
				
				new players[32], pnum, tempid; 
				
				get_players(players, pnum, "ch") 
				
				for (new i ; i<pnum ; i++) 
				{ 
					tempid = players[i] 
					g_LeftKills[tempid] = 0 
				} 
				
				new taskId = scanForTaskID() 
				
				set_task(100.0, "TurnItBackOn", taskId) 
				return PLUGIN_HANDLED 
			} 
			
			
			if (g_LeftKills[attacker] - damage > 40) 
				return PLUGIN_HANDLED 
			
			else 
			{ 
				
				if (g_LeftKills[attacker] < 40) 
				{ 
					client_print(attacker, print_chat, "%s Atencao! Atacar os teus companheiros de equipa pode dar te ban.", PREFIX) 
				} 
				
				if (g_LeftKills[attacker] >= 40) 
				{ 
					new nameofp[50] 
					
					get_user_name(attacker, nameofp, 49) 
					
					new pplayers[32], ppnum, ptempid; 
					
					get_players(pplayers, ppnum, "ch"); 
					
					for( new i; i<ppnum; i++ ) 
					{ 
						ptempid = pplayers[i] 
						
						if (ptempid != attacker) 
						{ 
							client_print(ptempid, print_chat ,"%s Se %s atacou um jogador da propria equipa faz !voteban", PREFIX, nameofp) 
							set_hudmessage(255, 0, 0, 0.32, 0.70, 0, 6.0, 12.0) 
							show_hudmessage(ptempid, "E %s irritante?! Escreve !voteban", nameofp) 
							client_print(ptempid, print_chat, "%s Friendlyfire agora estara DESLIGADO ate a proxima ronda.", PREFIX) 
							
						} 
					} 
					
					set_pcvar_num(cvar_mp_friendlyfire, 0) 
					g_bFFTKStop = true 
				} 
			} 
		} 
	} 
	
	return PLUGIN_CONTINUE 
} 

public save_points(id) 
{ 
	new valut = nvault_open("points") 
	
	if(valut == INVALID_HANDLE) 
		set_fail_state("nValut returned invalid handle") 
	
	new key[62], value[10], ip[33] 
	
	//get_user_ip(id, ip, 32, 1); 
	get_user_authid(id, ip, 32); 
	
	format(key, 61,"%s-points", ip) 
	format(value, 9,"%d", points[id]) 
	
	nvault_set(valut, key, value) 
	nvault_close(valut) 
	
	return PLUGIN_CONTINUE; 
} 
public load_points(id) 
{ 
	new valut = nvault_open("points") 
	
	if(valut == INVALID_HANDLE) 
		set_fail_state("nValut returned invalid handle") 
	
	new key[100], ip[33] 
	
	//get_user_ip(id, ip, 32, 1); 
	get_user_authid(id, ip, 32); 
	
	formatex(key, 99,"%s-points", ip) 
	
	points[id] = nvault_get(valut, key) 
	nvault_close(valut) 
	
	points_in_name(id) 
	
	return PLUGIN_CONTINUE; 
} 
public show_points(id) 
{ 
	client_printc(id, "!g[Route-Games] !nTu tens %d skillpoints!", points[id]) 
} 
public give_time_points(id) 
{ 
	if(cs_get_user_team(id) != CS_TEAM_SPECTATOR) 
	{ 
		points[id] += get_pcvar_num(time_points) 
	} 
} 

public infochanged(id, buffer) { 
	if (g_IsStarted || g_KnifeRound) 
	{ 
		if( is_user_connected(id) ) 
		{ 
			new name[32] 
			new val[32] 
			
			get_user_name(id, name, 31) 
			engfunc(EngFunc_InfoKeyValue, buffer, "name", val, 31) 
			
			new posA = contain(name, "(Equipa-A)") 
			new posB = contain(name, "(Equipa-B)") 
			
			if (g_bSecondHalf) 
			{ 
				if (cs_get_user_team(id) == CS_TEAM_T) 
				{ 
					if (posB == 0) 
					{ 
						engfunc(EngFunc_SetClientKeyValue, id, buffer, "name", name) 
						return FMRES_SUPERCEDE 
					} 
				} 
				
				else if (cs_get_user_team(id) == CS_TEAM_CT) 
				{ 
					if (posA == 0) 
					{ 
						engfunc(EngFunc_SetClientKeyValue, id, buffer, "name", name) 
						return FMRES_SUPERCEDE 
					} 
				} 
			} 
			
			else 
			{ 
				if (cs_get_user_team(id) == CS_TEAM_T) 
				{ 
					if (posA == 0) 
					{ 
						engfunc(EngFunc_SetClientKeyValue, id, buffer, "name", name) 
						return FMRES_SUPERCEDE 
					} 
					
				} 
				
				else if (cs_get_user_team(id) == CS_TEAM_CT) 
				{ 
					if (posB == 0) 
					{ 
						engfunc(EngFunc_SetClientKeyValue, id, buffer, "name", name) 
						return FMRES_SUPERCEDE 
					} 
					
				} 
			} 
			
			if (((contain(val, "(Equipa-A)") == 0) && (contain(name, "(Equipa-A") == -1)) || ((contain(val, "(Equipa-B)") == 0) && (contain(name, "(Equipa-B") == -1))) 
			{ 
				return FMRES_IGNORED 
			} 
			
			if (((contain(val, "(Equipa-B)") == 0) && (contain(name, "(Equipa-A") == 0)) || ((contain(val, "(Equipa-A)") == 0) && (contain(name, "(Equipa-B") == 0))) 
			{ 
				return FMRES_IGNORED 
			} 
			
			if (equal(val, name)) 
			{ 
				return FMRES_IGNORED 
			} 
			
			engfunc(EngFunc_SetClientKeyValue, id, buffer, "name", name) 
			return FMRES_SUPERCEDE 
		} 
	} 
	
	return FMRES_IGNORED 
} 


public TurnItBackOn() { 
	set_pcvar_num(cvar_mp_friendlyfire, 1) 
	client_print(0, print_chat, "%s Friendlyfire esta ligado novamente! AVISO: TK pode dar BAN!!!", PREFIX) 
	return PLUGIN_HANDLED 
} 

public voteban(id) { 
	
	if (g_LeftVotes[id] >= 1) 
	{ 
		client_print(id, print_chat, "%s Tu nao podes votar mais neste jogo", PREFIX) 
		return PLUGIN_HANDLED 
	} 
	
	else if (g_VoteProg) 
	{ 
		client_print(id, print_chat, "%s Já existe uma votacao em curso!", PREFIX) 
		return PLUGIN_HANDLED 
	} 
	
	g_Menu = menu_create("Escolha um jogador para votar para banir: ", "voteban_menu"); 
	new players[32], pnum, tempid; 
	new szName[32], szTempid[10]; 
	new added 
	
	get_players(players, pnum, "ch"); 
	
	for( new i; i<pnum; i++ ) 
	{ 
		tempid = players[i]; 
		
		if (g_LeftKills[tempid] >= 40) 
		{ 
			get_user_name(tempid, szName, 31); 
			num_to_str(tempid, szTempid, 9); 
			menu_additem(g_Menu, szName, szTempid, 0); 
			added++ 
		} 
	} 
	
	for ( new i ; i < sizeof(g_LeftBans) ; i++ ) 
	{ 
		if ( g_LeftBans[i][0] && g_RoundsLeft[i] != -1 ) 
		{ 
			num_to_str(i+32, szTempid, 9) 
			menu_additem(g_Menu, g_LeftBans[i], szTempid, 0) 
			added++ 
		} 
	} 
	
	if ( !added ) 
	{ 
		client_print(id, print_chat, "%s Sem jogadores detectados como desrespeitador!", PREFIX) 
		return PLUGIN_HANDLED 
	} 
	
	menu_display(id, g_Menu); 
	return PLUGIN_HANDLED; 
} 

public voteban_menu(id, menu, item) { 
	if( item == MENU_EXIT ) 
	{ 
		menu_destroy(menu); 
		return PLUGIN_HANDLED; 
	} 
	
	else if (g_VoteProg) 
	{ 
		client_print(id, print_chat, "%s Já existe uma votacao em curso!", PREFIX) 
		return PLUGIN_HANDLED 
	} 
	
	g_LeftVotes[id]++ 
	new data[6], iName[64]; 
	new access, callback; 
	menu_item_getinfo(menu, item, access, data,5, iName, 63, callback); 
	
	new tempid = str_to_num(data); 
	new name[50] 
	
	if ( tempid < 32 && !is_user_connected(tempid) ) 
		return PLUGIN_HANDLED 
	
	get_user_name(tempid, name, 49) 
	
	votebanonplayer(tempid) 
	
	menu_destroy(menu); 
	return PLUGIN_HANDLED 
} 

public votebanonplayer(id) { 
	g_VoteProg = true 
	new nameofplayer[52] 
	new banline[128] = "Ban " 
	
	if ( id >= 32 ) 
	{ 
		id -= 32 
		add(banline, 127, g_LeftBans[id]) 
		id += 32 
	} 
	
	else 
	{ 
		get_user_name(id, nameofplayer, 51) 
		add(banline, 127, nameofplayer) 
	} 
	add(banline, 127, "?") 
	
	g_abMenu = menu_create(banline, "votebanonplayer_menu"); 
	menu_additem(g_abMenu, "Sim", "0", 0) 
	menu_additem(g_abMenu, "Nao", "1", 0) 
	
	new pplayers[32], ppnum, ptempid; 
	
	if ( id < 32 ) 
	{ 
		switch( cs_get_user_team(id) ) 
		{ 
			case CS_TEAM_CT: get_players(pplayers, ppnum, "che", "CT"); 
				case CS_TEAM_T: get_players(pplayers, ppnum, "che", "TERRORIST"); 
			} 
	} 
	
	else 
		get_players(pplayers, ppnum, "ch"); 
	
	
	for( new i; i<ppnum; i++ ) 
	{ 
		ptempid = pplayers[i] 
		
		if (ptempid != id) 
		{ 
			
			menu_display(ptempid, g_abMenu, 0) 
		} 
	} 
	
	
	set_task(7.0, "EndBanVote", id) 
	
	return PLUGIN_HANDLED 
} 

public EndBanVote(id) { 
	g_VoteProg = false 
	show_menu(0, 0, "^n", 1); 
	if(g_bVotes[0] >= g_bVotes[1]) 
	{ 
		client_print(0, print_chat, "%s Voto de ban realizado com sucesso.", PREFIX) 
		set_hudmessage(255, 0, 0, 0.32, 0.70, 0, 6.0, 12.0) 
		
		if ( id < 32 ) 
		{ 
			server_cmd("amx_banip #%d 5 ^"%s Votado para ser banido por abuso.^"", get_user_userid(id), PREFIX)
			
			new nameofp[50] 
			
			get_user_name(id, nameofp, 49) 
			ShowSyncHudMsg(0, g_MsgSync6, "%s foi votado para ser Banido!", nameofp) 
		} 
		
		else 
		{ 
			server_cmd("amx_banip ^"%s^" 15", g_LeftBansIPs[id-32]) 
			ShowSyncHudMsg(0, g_MsgSync6, "%s foi votado para ser Banido!", g_LeftBans[id-32]) 
			copy(g_LeftBans[id-32], charsmax(g_LeftBans[][]), "") 
			copy(g_LeftBansIPs[id-32], charsmax(g_LeftBansIPs[][]), "") 
			g_RoundsLeft[id-32] = -1 
		} 
		
		
		
		g_bVotes[0] = 0 
		g_bVotes[1] = 0 
		return PLUGIN_HANDLED 
	} 
	
	else 
	{ 
		client_print(0, print_chat, "%s Voto de ban falhado.", PREFIX) 
		
		if ( id >= 32 ) 
		{ 
			copy(g_LeftBans[id-32], charsmax(g_LeftBans[][]), "") 
			copy(g_LeftBansIPs[id-32], charsmax(g_LeftBansIPs[][]), "") 
			g_RoundsLeft[id-32] = -1 
		} 
		
		else 
		{ 
			g_bVotes[0] = 0 
			g_bVotes[1] = 0 
			g_LeftKills[id] = 0 
		} 
		return PLUGIN_HANDLED 
	} 
	
	return PLUGIN_HANDLED 
} 

public votebanonplayer_menu(id, menu, item) { 
	if( item == MENU_EXIT ) 
	{ 
		menu_display(id, g_abMenu); 
		return PLUGIN_HANDLED; 
	} 
	
	new data[6], szName[64]; 
	new access, callback; 
	menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback); 
	
	new voteid = str_to_num(data); 
	g_bVotes[voteid]++; 
	return PLUGIN_HANDLED; 
} 

public handled(id) { 
	if (g_IsStarted || g_AfterRdy || g_KnifeRound) 
	{ 
		client_print(id, print_console, "%s Tu nao podes mudar as equipas!", PREFIX) 
		client_print(id, print_chat, "%s Tu nao podes mudar as equipas!", PREFIX) 
		return PLUGIN_HANDLED 
	} 
	return PLUGIN_CONTINUE 
} 

public plugin_cfg() { 
	SetCheckFilled() 
	server_cmd("exec practice.cfg") 
	DisplayCommands() 
	set_pcvar_string(cvar_humans_join_team, "") 
	get_configsdir(gPug_ini_file, 63); 
	format(gPug_ini_file, 63, "%s/pug.ini", gPug_ini_file); 
	
	if (!file_exists(gPug_ini_file)) 
	{ 
		client_print(0, print_chat, "%s ERRO! Pug.ini ficheiro nao encontrado.", PREFIX) 
		return PLUGIN_HANDLED 
	} 
	
	if (get_pug_state() == 0) 
	{ 
		new taskId = scanForTaskID() 
		set_task(10.0, "ShowLeft", taskId) 
		return PLUGIN_HANDLED 
	} 
	
	else if (get_pug_state() == 1) 
	{ 
		g_ToDisplay = true 
		g_MapChanged = true 
		new taskId = scanForTaskID() 
		set_task(20.0, "TeamsVote", taskId) 
	} 
	
	return PLUGIN_CONTINUE 
} 

public SetCheckFilled() { 
	new taskId = scanForTaskID() 
	set_task(5.0, "CheckFilled", taskId) 
} 

public CheckFilled() { 
	if (get_playersnum() >= get_pcvar_num(cvar_pLeft)) 
	{ 
		new rnd = random_num(99, 9999) 
		new pass[10] 
		
		num_to_str(rnd, pass, 9) 
		
		set_pcvar_string(cvar_sv_password, pass) 
		client_print(0, print_chat, "%s O Server esta agora com password [Protegido]", PREFIX) 
		
		new tokick = get_playersnum() - get_pcvar_num(cvar_pLeft) 
		
		for (new kick; kick<tokick ; kick++) 
		{ 
			new playeract = random(get_pcvar_num(cvar_pLeft)) 
			
			while (!is_user_connected(playeract)) 
			{ 
				playeract = random(get_pcvar_num(cvar_pLeft)) 
			} 
			
			server_cmd("kick %d %s O Server esta cheio!", get_user_userid(playeract), PREFIX) 
		} 
		
	} 
	
	return PLUGIN_CONTINUE 
} 


public DisplayCommands() { 
	client_printc(0, "!g%s !nFaz !t!Cmds !npara os comandos, ou carrega !tN !npara mostrar o menu do jogador.", PREFIX) 
	client_printc(0, "!g%s !nTu tambem podes escrever !mute para silenciar um jogador.", PREFIX) 
	new taskId = scanForTaskID() 
	set_task(50.0, "DisplayCommands", taskId) 
} 

public round_end() { 
	if ( g_Restart ) 
		return PLUGIN_HANDLED 
	
	TKRoundsLeft() 
	
	if ( g_bFFTKStop ) 
	{ 
		g_bFFTKStop = false 
		set_pcvar_num(cvar_mp_friendlyfire, 1) 
		client_printc(0, "!g%s !nFriendlyfire esta agora activado.", PREFIX) 
	} 
	
	if (g_KnifeRound) 
	{ 
		new Players[32], pNum, ptn, pctn; 
		get_players(Players, pNum, "ch") 
		for ( new i ; i < pNum ; i++ ) { 
			new tempid = Players[i] 
			if ( !is_user_alive(tempid) ) 
				continue; 
			else if ( cs_get_user_team(tempid) == CS_TEAM_T ) 
				ptn++; 
			else if ( cs_get_user_team(tempid) == CS_TEAM_CT ) 
				pctn++; 
		} 
		
		new WinningTeam 
		
		if (ptn > pctn) 
		{ 
			client_printc(0, "!g%s !nA Equipa A venceu a ronda de faca!", PREFIX) 
			set_hudmessage(255, 0, 0, 0.40, 0.71, 0, 6.0, 12.0) 
			ShowSyncHudMsg(0, g_MsgSync6, "Equipa A - Vencedores da ronda de faca.") 
			g_Twon = true 
			WinningTeam = T_WIN 
		} 
		
		else if (pctn > ptn) 
		{ 
			client_printc(0, "!g%s !nA Equipa B venceu a ronda de faca!", PREFIX) 
			set_hudmessage(255, 0, 0, 0.40, 0.71, 0, 6.0, 12.0) 
			ShowSyncHudMsg(0, g_MsgSync6, "Equipa B - Vencedores da ronda de faca.") 
			WinningTeam = CT_WIN 
		} 
		
		else 
		{ 
			client_printc(0, "!g%s !nA ronda de faca acabou! Nenhuma equipa ganhou.", PREFIX) 
			set_hudmessage(255, 0, 0, 0.40, 0.71, 0, 6.0, 12.0) 
			ShowSyncHudMsg(0, g_MsgSync6, "O Jogo continua.") 
			new taskId = scanForTaskID() 
			set_task(3.0, "SettingsAfter", taskId) 
			return PLUGIN_CONTINUE 
		} 
		KnifeSwitch(WinningTeam) 
		return PLUGIN_CONTINUE 
	} 
	
	if (g_IsStarted) 
	{ 
		new players[32], pnum, tempid; 
		
		new playersT[32], playersCt[32], numTt, numCtt; 
		
		get_players( playersT , numTt , "che" , "TERRORIST" ) 
		get_players( playersCt , numCtt , "che" , "CT" ) 
		
		get_players(players, pnum, "ch") 
		
		if ((get_playersnum() != get_pcvar_num(cvar_pLeft)) || (get_pcvar_num(cvar_pLeft) != 10)) { 
			
		} 
		
		else 
		{ 
			for (new i ; i<pnum ; i++) 
			{ 
				tempid = players[i] 
				g_LeftKills[tempid] = (g_LeftKills[tempid]/3)*2 
				
				if (g_KillsAce[tempid] == 0) 
					continue; 
				
				if (cs_get_user_team(tempid) == CS_TEAM_CT) 
				{ 
					if (g_KillsAce[tempid] == numTt-1) 
					{ 
						new name[32] 
						get_user_name(tempid, name, 31) 
						
						set_hudmessage(255, 255, 255, 0.07, 0.69, 0, 6.0, 12.0) 
						show_hudmessage(0, "%s Fez um ALMOST!", name) 
					} 
					
					else if (g_KillsAce[tempid] == numTt) 
					{ 
						new name[32] 
						get_user_name(tempid, name, 31) 
						
						set_hudmessage(255, 255, 255, 0.07, 0.69, 0, 6.0, 12.0) 
						show_hudmessage(0, "%s Fez um ACE!", name) 
					} 
					
					g_KillsAce[tempid] = 0 
				} 
				
				else if (cs_get_user_team(tempid) == CS_TEAM_T) 
				{ 
					if (g_KillsAce[tempid] == numCtt-1) 
					{ 
						new name[32] 
						get_user_name(tempid, name, 31) 
						
						set_hudmessage(255, 255, 255, 0.07, 0.69, 0, 6.0, 12.0) 
						show_hudmessage(0, "%s Fez um ALMOST!", name) 
					} 
					
					else if (g_KillsAce[tempid] == numCtt) 
					{ 
						new name[32] 
						get_user_name(tempid, name, 31) 
						
						set_hudmessage(255, 255, 255, 0.07, 0.69, 0, 6.0, 12.0) 
						show_hudmessage(0, "%s Fez um ACE!", name) 
					} 
					
					g_KillsAce[tempid] = 0 
				} 
			} 
		} 
	} 
	
	if (g_CustomGame) 
		return PLUGIN_HANDLED 
	
	else 
	{ 
		if (g_IsStarted) 
		{ 
			new playersT[32], playersCt[32], numT, numCt; 
			
			get_players( playersT , numT , "che" , "TERRORIST" ) 
			get_players( playersCt , numCt , "che" , "CT" ) 
			
			if (numT <= 3 || numCt <= 3) 
			{ 
				switch (g_NotBalanced) 
				{ 
					case 0: 
					{ 
						client_printc(0, "!g%s !nUma das equipas tem apenas 3 jogadores na equipa ou MENOS!", PREFIX) 
						client_printc(0, "!g%s !nSe a equipa nao receber novamente os seus jogadores de volta dentro de 2 rondas, a outra equipa ganhara automaticamente.", PREFIX) 
						g_NotBalanced++ 
					} 
					
					case 1: 
					{ 
						client_printc(0, "!g%s !nUma das equipas tem apenas 3 jogadores na equipa ou MENOS!", PREFIX) 
						client_printc(0, "!g%s !nSe a equipa nao receber novamente os seus jogadores de volta dentro de 2 rondas, a outra equipa ganhara automaticamente.", PREFIX) 
						g_NotBalanced++ 
					} 
					
					case 2: 
					{ 
						if (numT > numCt) 
							client_print(0, print_chat, "%s A Equipa terrorista foi a vencedora escolhida automaticamente devido a falta de jogadores na equipa rival.", PREFIX) 
						
						else if (numCt > numT) 
							client_print(0, print_chat, "%s A Equipa Contra-terrorista foi a vencedora escolhida automaticamente devido a falta de jogadores na equipa rival.", PREFIX) 
						
						else if (numCt == numT) 
							client_print(0, print_chat, "%s As equipas sao iguais.", PREFIX) 
						
						client_print(0, print_chat, "%s A terminar jogo em 5 segundos...", PREFIX) 
						new taskId = scanForTaskID() 
						set_task(5.0, "EndMatch", taskId) 
						g_NotBalanced = 0 
					} 
					
				} 
			} 
			
			else 
			{ 
				g_NotBalanced = 0; 
				return PLUGIN_HANDLED 
			} 
		} 
	} 
	
	return PLUGIN_HANDLED 
	
} 

public TKRoundsLeft() 
{ 
	for ( new i ; i < sizeof(g_RoundsLeft) ; i++ ) 
	{ 
		if ( g_RoundsLeft[i] != -1 ) 
			g_RoundsLeft[i]-- 
	} 
} 

public LR() { 
	set_hudmessage(255, 255, 255, 0.07, 0.69, 0, 6.0, 12.0) 
	ShowSyncHudMsg(0, g_MsgSync6, "A Ultima ronda foi iniciada.") 
} 

public scndhalf() { 
	server_cmd("sv_restart 1") 
	new taskId = scanForTaskID() 
	set_task(3.0, "showscnd", taskId) 
} 

public showscnd() { 
	set_hudmessage(255, 255, 255, 0.07, 0.69, 0, 6.0, 18.0) 
	ShowSyncHudMsg(0, g_MsgSync3, "Comecou a 2a parte. O jogo esta agora em live...") 
	return PLUGIN_HANDLED 
} 



public Event_TeamScore() { 
	if ( g_Restart ) return PLUGIN_HANDLED 
	
	if (g_IsStarted) 
	{ 
		read_data(1, g_szTeamName, 1) 
		
		g_iTeam = (g_szTeamName[0] == 'T') ? 0 : 1 
		g_iAltScore = read_data(2) 
		g_iScoreOffset = g_iAltScore - g_iLastTeamScore[g_iTeam] 
		
		if(g_iScoreOffset > 0) 
		{ 
			g_iScore[g_iTeam] += g_iScoreOffset 
		} 
		
		g_iLastTeamScore[g_iTeam] = g_iAltScore 
		
		if (g_iScore[0] + g_iScore[1] == 14) 
		{ 
			new taskId = scanForTaskID() 
			set_task(10.0, "LR", taskId) 
		} 
		
		else if (g_iScore[0] + g_iScore[1] == 15) 
		{ 
			if (g_bStop2) 
			{ 
				return PLUGIN_HANDLED; 
			} 
			
			g_bStop2 = true 
			SwitchTeams() 
			client_print(0, print_chat, "%s Ja passou 15 rondas, e agora a mudanca das equipas!", PREFIX) 
			new taskId = scanForTaskID() 
			set_task(10.0, "scndhalf", taskId) 
		} 
		
		else if ((g_iScore[0] == 16) || (g_iScore[1] == 16)) 
		{ 
			if (g_bStop) 
			{ 
				return PLUGIN_HANDLED 
			} 
			
			g_bStop = true 
			EndMatch() 
			return PLUGIN_HANDLED 
		} 
		
		else if ((g_iScore[0] == 15) || (g_iScore[1] == 15)) 
		{ 
			new taskId = scanForTaskID() 
			set_task(10.0, "LRFif", taskId) 
			return PLUGIN_HANDLED 
		} 
		
		
		ClientCommand_SayScore() 
	} 
	
	return PLUGIN_HANDLED 
} 

public LRFif() { 
	if ((g_iScore[1] == 16) || (g_iScore[0] == 16)) 
		return PLUGIN_HANDLED 
	
	set_hudmessage(255, 255, 255, 0.06, 0.62, 0, 6.0, 12.0) 
	ShowSyncHudMsg(0, g_MsgSync6, "A ultima ronda foi iniciada. (Equipa-A) %d - %d (Equipa-B)", g_iScore[1], g_iScore[0]) 
	return PLUGIN_HANDLED 
} 

public ClientCommand_SayScore() { 
	if (g_Twon) 
	{ 
		if (g_bSecondHalf) 
		{ 
			if (g_bDidScore) 
			{ 
				client_print(0, print_chat, "Score: (Equipa-A) %d - %d (Equipa-B)", g_iScore[0], g_iScore[1]) 
				g_bDidScore = false 
			} 
			
			else 
			{ 
				g_bDidScore = true 
			} 
		} 
		
		else 
		{ 
			if (g_bDidScore) 
			{ 
				client_print(0, print_chat, "Score: (Equipa-A) %d - %d (Equipa-B)", g_iScore[1], g_iScore[0]) 
				g_bDidScore = false 
			} 
			
			else 
			{ 
				g_bDidScore = true 
			} 
		} 
	} 
	
	else 
	{ 
		
		if (g_bSecondHalf) 
		{ 
			if (g_bDidScore) 
			{ 
				client_print(0, print_chat, "Score: (Equipa-A) %d - %d (Equipa-B)", g_iScore[1], g_iScore[0]) 
				g_bDidScore = false 
			} 
			
			else 
			{ 
				g_bDidScore = true 
			} 
		} 
		
		else 
		{ 
			if (g_bDidScore) 
			{ 
				client_print(0, print_chat, "Score: (Equipa-A) %d - %d (Equipa-B)", g_iScore[0], g_iScore[1]) 
				g_bDidScore = false 
			} 
			
			else 
			{ 
				g_bDidScore = true 
			} 
		} 
	} 
	
	return PLUGIN_HANDLED 
	
} 

public client_disconnect(id) { 
	CheckEmpty() 
	DidTK(id) 
	clear_list(id) 
	g_LeftVotes[id] = 0 
	
	if (g_bIsReady[id]) 
	{ 
		gPlayersLeft++ 
	} 
	
	g_bIsReady[id] = false 
	remove_task(id) 
	save_points(id) 
	
	return PLUGIN_HANDLED 
} 

public client_connect(id) { 
	if ( is_user_bot(id) || is_user_hltv(id) || (!is_user_connected(id) && !is_user_connecting(id)) ) 
		return PLUGIN_HANDLED; 
	
	g_afktime[id] = 0 
	g_LeftVotes[id] = 0 
	gTypedCommand[id] = 0.0 
	
	if (!file_exists(gPug_ini_file)) 
	{ 
		client_print(0, print_chat, "%s ERRO! Pug.ini ficheiro nao encontrado.", PREFIX) 
		return PLUGIN_HANDLED 
	} 
	
	if (get_pug_state() == 1) 
	{ 
		g_LeftKills[id] = 0 
		return PLUGIN_HANDLED 
	} 
	
	if (g_bCpt) 
	{ 
		if (cs_get_user_team(id) != CS_TEAM_UNASSIGNED) 
		{ 
			cs_set_user_team(id, CS_TEAM_SPECTATOR) 
			return PLUGIN_HANDLED 
		} 
		
		else 
		{ 
			set_task(1.0, "client_connect", id) 
		} 
		return PLUGIN_HANDLED 
	} 
	
	if (g_AfterRdy || g_IsStarted) 
	{ 
		return PLUGIN_HANDLED 
	} 
	
	else 
	{ 
		g_KillsAce[id] = 0 
		g_bIsReady[id] = false 
		remove_task(id) 
		g_iTimeLeft[id] = 130 
		g_LeftKills[id] = 0 
		set_task(1.0, "Continue", id, .flags="a", .repeat=130) 
	} 
	
	return PLUGIN_HANDLED 
} 

public DidTK(id) 
{ 
	if ( g_LeftKills[id] >= 40 ) 
	{ 
		new ip[64], name[64], szAdd[128] 
		get_user_ip(id, ip, charsmax(ip), 1) 
		get_user_name(id, name, charsmax(name)) 
		
		for ( new i ; i < sizeof(g_LeftBans) ; i++ ) 
		{ 
			if ( equali(g_LeftBansIPs[i], ip) ) 
				break; 
			
			else if ( !g_LeftBans[i][0] && !g_LeftBansIPs[i][0] ) 
			{ 
				format(szAdd, charsmax(szAdd), "%s - [Disconectou se]", name) 
				copy(g_LeftBans[i], charsmax(g_LeftBans[][]), szAdd) 
				copy(g_LeftBansIPs[i], charsmax(g_LeftBansIPs[][]), ip) 
				g_RoundsLeft[id] = 3 
			} 
		} 
	} 
} 

public BindApprove(id) { 
	if (!is_user_connecting(id) && !is_user_connected(id)) 
		return PLUGIN_HANDLED 
	
	if (cs_get_user_team(id) != CS_TEAM_UNASSIGNED && is_user_alive(id)) 
	{ 
		g_AppBind = menu_create("\rQueres a tecla \y'N' \rpara abrir o menu de jogador?", "bind_menu"); 
		
		menu_additem(g_AppBind, "Sim", "1", 0) 
		menu_additem(g_AppBind, "Nao", "2", 0) 
		
		menu_display(id, g_AppBind) 
	} 
	
	else 
		set_task(0.1, "BindApprove", id) 
	
	return PLUGIN_HANDLED 
} 

public bind_menu(id, menu, item) { 
	if ( !g_ToDisplay && !g_IsStarted && !g_AfterRdy && !g_KnifeRound) 
		ToSetTaskToInfo(id) 
	
	if( item == MENU_EXIT ) 
	{ 
		menu_destroy(g_AppBind) 
		return PLUGIN_HANDLED; 
	} 
	
	new data[6], iName[64]; 
	new access, callback; 
	menu_item_getinfo(menu, item, access, data,5, iName, 63, callback); 
	new key = str_to_num(data) 
	
	if (key == 1) 
		client_cmd(id, "bind n pmenu"); 
	
	return PLUGIN_HANDLED 
} 

public CheckEmpty() { 
	if (get_maxplayers() == get_pcvar_num(cvar_pLeft)) 
		return PLUGIN_HANDLED 
	
	
	if (get_playersnum() == get_pcvar_num(cvar_pLeft)) 
	{ 
		set_pcvar_string(cvar_sv_password, "") 
		client_print(0, print_chat, "%s A password do server foi removida [Aberto]", PREFIX) 
	} 
	
	return PLUGIN_CONTINUE 
} 

public CheckFull(id) { 
	if (get_maxplayers() == get_pcvar_num(cvar_pLeft)) 
		return PLUGIN_HANDLED 
	
	if (get_playersnum() == get_pcvar_num(cvar_pLeft)) 
	{ 
		new rnd = random_num(99, 9999) 
		new pass[10] 
		
		num_to_str(rnd, pass, 9) 
		
		set_pcvar_string(cvar_sv_password, pass) 
		client_print(0, print_chat, "%s O Server esta agora com password [Protegido]", PREFIX) 
		
		new players[32], pnum, tempid; 
		
		get_players(players, pnum, "ch") 
		
		for (new full; full<pnum ; full++) 
		{ 
			players[full] = tempid 
			
			if (is_user_connecting(tempid)) 
				server_cmd("kick # %d %s O Server esta cheio!", get_user_userid(tempid), PREFIX) 
			
		} 
		
	} 
	
	else if (get_playersnum() > get_pcvar_num(cvar_pLeft)) 
	{ 
		server_cmd("kick # %d %s O Server esta cheio!", get_user_userid(id), PREFIX) 
	} 
	
	return PLUGIN_HANDLED 
} 

public CheckNow() { 
	client_print(0, print_console, "get_playersnum() == %d", get_playersnum()) 
	if (get_playersnum() < get_pcvar_num(cvar_pLeft)) 
	{ 
		set_pcvar_string(cvar_sv_password, "") 
		return PLUGIN_HANDLED 
	} 
	
	else if (get_playersnum() > get_pcvar_num(cvar_pLeft)) 
	{ 
		new tokick = get_playersnum() - get_pcvar_num(cvar_pLeft) 
		
		for (new kick; kick<tokick ; kick++) 
		{ 
			new playeract = random(get_pcvar_num(cvar_pLeft)) 
			
			while (!is_user_connected(playeract)) 
			{ 
				playeract = random(get_pcvar_num(cvar_pLeft)) 
			} 
			
			server_cmd("kick %d %s O Server esta cheio!", get_user_userid(playeract), PREFIX) 
		} 
	} 
	
	new rnd = random_num(99, 9999) 
	new pass[10] 
	
	num_to_str(rnd, pass, 9) 
	
	set_pcvar_string(cvar_sv_password, pass) 
	return PLUGIN_CONTINUE 
} 

public DoAgain(id) { 
	if (!file_exists(gPug_ini_file)) 
	{ 
		client_print(0, print_chat, "%s ERROR! Pug.ini ficheiro nao encontrado.", PREFIX) 
		return PLUGIN_HANDLED 
	} 
	
	if (get_pug_state() == 1) 
	{ 
		g_LeftKills[id] = 0 
		return PLUGIN_HANDLED 
	} 
	
	if ( !g_AfterRdy && !g_IsStarted) 
	{ 
		g_KillsAce[id] = 0 
		g_bIsReady[id] = false 
		remove_task(id) 
		g_iTimeLeft[id] = 130 
		g_LeftKills[id] = 0 
		set_task(1.0, "Continue", id, .flags="a", .repeat=130) 
	} 
	
	return PLUGIN_HANDLED 
} 

public client_putinserver(id) { 
	set_task(4.0,"CmdWelcomeMessage",id) 
	g_afktime[id] = 0 
	
	if (is_user_bot(id) || is_user_hltv(id)) 
		return PLUGIN_HANDLED; 
	
	BindApprove(id) 
	CheckFull(id) 
	clear_list(id) 
	
	if (g_IsStarted || g_AfterRdy || g_KnifeRound) 
	{ 
		g_LeftKills[id] = 0 
		MoveFromSpec(id) 
		return PLUGIN_HANDLED 
	} 
	
	set_task(30.0, "CheckUnAssigned", id) 
	load_points(id) 
	points_in_name(id) 
	return PLUGIN_HANDLED 
} 

public CheckUnAssigned(id) { 
	if ( !is_user_connected(id) ) 
		return PLUGIN_HANDLED 
	
	if (cs_get_user_team(id) == CS_TEAM_UNASSIGNED) 
	{ 
		new name[50] 
		
		get_user_name(id, name, 49) 
		
		server_cmd("kick # %d %s AFK no login.", get_user_userid(id), PREFIX) 
		client_print(0, print_chat, "%s %s foi kickado do servidor por afk no login.", PREFIX, name) 
	} 
	
	return PLUGIN_HANDLED 
} 

public ShowInfo(id) { 
	new hostname[64] 
	
	get_cvar_string("hostname", hostname, 63) 
	
	if (g_bIsReady[id] || g_IsStarted || g_AfterRdy) 
	{ 
		remove_task(id) 
		return PLUGIN_HANDLED 
	} 
	
	set_hudmessage(70, 130, 180, 0.28, 0.265, 0, 6.0, 1.0) 
	ShowSyncHudMsg(id, g_MsgSync4, "------------------------------------------^nBem Vindo a %s^nPara iniciar um jogo, escreve !add^nCarrega no botao 'N' para abrir o menu.^nTu tens %d segundos restantes para escrever !add^n------------------------------------------", hostname, g_iTimeLeft[id]) 
	return PLUGIN_CONTINUE 
} 

public Continue(id) { 
	if (g_IsStarted || g_AfterRdy) 
	{ 
		return PLUGIN_HANDLED 
	} 
	
	if (g_bIsReady[id]) 
	{ 
		return PLUGIN_HANDLED 
	} 
	g_iTimeLeft[id] -= 1 
	
	
	switch(g_iTimeLeft[id]) { 
		case 120: client_printc(id, "!g%s !nPor favor escreve !add para estares pronto! Tu vais ser kickado se tu nao o escreveres.", PREFIX, g_iTimeLeft[id]) 
			case 90: client_printc(id, "!g%s !nPor favor escreve !add para estares pronto! Tu vais ser kickado se tu nao o escreveres.", PREFIX, g_iTimeLeft[id]) 
			case 60: client_printc(id, "Por !nfavor escreve !add para estares pronto!! Tu vais ser kickado se tu nao o escreveres.", PREFIX, g_iTimeLeft[id]) 
			case 30: { 
			client_printc(id, "Por favor escreve !add para estares pronto! Tu vais ser kickado se tu nao o escreveres.", PREFIX, g_iTimeLeft[id]) 
			set_hudmessage(42, 127, 255, 0.07, 0.70, 0, 6.0, 12.0) 
			ShowSyncHudMsg(id, g_MsgSync, "30 Segundos restantes!!! Escreve !add") 
		} 
		case 10: { 
			client_print(id, print_chat, "Por favor escreve !add para estares pronto! Tu vais ser kickado se tu nao o escreveres..", PREFIX, g_iTimeLeft[id]) 
			set_hudmessage(42, 127, 255, 0.07, 0.70, 0, 6.0, 12.0) 
			ShowSyncHudMsg(id, g_MsgSync, "10 Segundos restantes!!! Escreve !add") 
		} 
		case 0: { 
			if (is_user_connecting(id)) 
				DoAgain(id) 
			else { 
				new playername[32] 
				get_user_name(id, playername, 31) 
				server_cmd("amx_banip #%d 1 ^"%s Foste expulso por nao escrever !add em 2 minutos.^"", get_user_userid(id), PREFIX) 
				client_printc(0, "!g%s !n%s foi expulso por nao escrever !add em 2 minutos.", PREFIX, playername) 
			} 
		} 
	} 
	
	return PLUGIN_HANDLED 
} 

public CrashAttempt(id) { 
	
	if ( get_gametime() - gTypedCommand[id] <= 1.0 ) { 
		gTypedCommand[id] = get_gametime() 
		return 
	} 
	
	gTypedCommand[id] = get_gametime() 
} 

public Prepare(id) { 
	if (g_AfterRdy || g_IsStarted || g_MapChanged) { 
		client_printc(id, "!g%s !nA jogo ja comecou!", PREFIX) 
		return PLUGIN_HANDLED 
	} 
	if( g_bIsReady[id] ) { 
		client_printc(id, "!g%s !nTu ja escreveste !add", PREFIX) 
		return PLUGIN_HANDLED 
	} 
	else { 
		CrashAttempt(id) 
		
		new playername[32] 
		get_user_name(id, playername, 31) 
		g_bIsReady[id] = true 
		client_printc(id, "!g%s !nTu estas agora pronto!", PREFIX) 
		client_printc(0, "!g%s !n%s esta agora pronto!", PREFIX, playername) 
		gPlayersLeft-- 
		remove_task(id) 
	} 
	if (gPlayersLeft != 0) 
		client_printc(0, "!g%s !n%d Jogadores restantes para comecar o jogo!", PREFIX, gPlayersLeft) 
	else { 
		g_AfterRdy = true 
		g_ToDisplay = true 
		removeAllTasks() 
		client_printc(0, "!g%s !nVotacao para o mapa vai comecar em breve...", PREFIX) 
		client_printc(0, "!g%s !nVotacao para o mapa vai comecar em breve...", PREFIX) 
		client_printc(0, "!g%s !nVotacao para o mapa vai comecar em breve...", PREFIX) 
		new taskId = scanForTaskID() 
		set_task(10.0, "StartVote", taskId) 
	} 
	
	
	return PLUGIN_HANDLED 
} 

public ToSetAllToInfo() { 
	new players[32], pnum, tempid; 
	get_players(players, pnum, "ch"); 
	for( new i; i<pnum; i++ ) 
	{ 
		tempid = players[i] 
		set_task(1.0, "ShowInfo", tempid, .flags="a", .repeat=130) 
	} 
	return PLUGIN_CONTINUE 
} 

public ToSetTaskToInfo(id) 
	set_task(1.0, "ShowInfo", id, .flags="a", .repeat=130) 

public unPrepare(id) { 
	if (g_AfterRdy || g_IsStarted || g_MapChanged) { 
		client_print(id, print_chat, "%s O jogo ja comecou!", PREFIX) 
		return PLUGIN_HANDLED 
	} 
	
	if (g_bIsReady[id]) { 
		CrashAttempt(id) 
		
		gPlayersLeft++ 
		g_bIsReady[id] = false 
		client_printc(id, "!g%s !nTu nao podes estar mais pronto!", PREFIX) 
		g_iTimeLeft[id] = 130 
		client_printc(0, "!g%s !t%d !nJogadores restantes para comecar o jogo!", PREFIX, gPlayersLeft) 
		ToSetTaskToInfo(id) 
		set_task(1.0, "Continue", id, .flags="a", .repeat=130) 
	} 
	
	else { 
		client_printc(id, "!g%s !nTu nem sequer escreveste !add", PREFIX) 
	} 
	
	return PLUGIN_HANDLED 
} 

public ShowLeft() { 
	if (gPlayersLeft != 0) 
	{ 
		new players[32], pnum, tempid; 
		get_players(players, pnum, "ch"); 
		
		for( new i; i<pnum; i++ ) { 
			tempid = players[i]; 
			if (g_bIsReady[tempid] == false) { 
				new playername[32] 
				get_user_name(tempid, playername, 31) 
				add( gNotRdy, charsmax( gNotRdy ), "^n" ); 
				add( gNotRdy, charsmax( gNotRdy ), playername ); 
			} 
		} 
		
	} 
	
	else 
		return PLUGIN_HANDLED 
	
	new playersl[2] 
	num_to_str(gPlayersLeft, playersl, 2) 
	trim(playersl) 
	add(gNotRdy, charsmax(gNotRdy), "^n^n") 
	add(gNotRdy, charsmax(gNotRdy), playersl) 
	add(gNotRdy, charsmax(gNotRdy), " Jogadores restantes.^nQuem estiver nesta lista, escreva add ou !add^nServidor Configurado por Valascus") 
	set_hudmessage(0, 135, 0, 0.02, 0.19, 0, 6.0, 12.0) 
	show_hudmessage(0, gNotRdy) 
	gNotRdy = "[Route-Games Auto-Mix] Nao esta pronto:^n" 
	new taskId = scanForTaskID() 
	set_task(1.0, "ShowLeft", taskId) 
	return PLUGIN_HANDLED 
} 

public credits(id) { 
	client_printc(id, "!gCreditos: !tServidor Configurado por Valascus") 
	client_printc(id, "!gContacto: !tSteam:vascodiogo") 
	return PLUGIN_CONTINUE 
} 

public cmds(id) { 
	client_printc(id, "!g%s !nComandos: !add, add, .add, !sair, !creditos, ! top15, !rank", PREFIX) 
	client_printc(id, "!g%s !nComandos: !cmds, !menu, !dmg, !score, !voteban", PREFIX) 
	client_printc(id, "!g%s !nComandos: !stats, !statsme, !hp, !mute", PREFIX) 
	return PLUGIN_CONTINUE 
} 

public StartVote() { 
	getmaps() 
	new rnd 
	while (g_DoneMaps != 4 && g_MapsCounter > 0) { 
		rnd = random(g_MapsCounter) 
		copy(g_MapsChosen[g_DoneMaps++], 19, g_MapsAvailable[rnd]) 
		g_MapsAvailable[rnd] = g_MapsAvailable[--g_MapsCounter] 
	} 
	
	g_gVoteMenu = menu_create("Mudar mapa?", "votemap"); 
	
	new num[11] 
	for(new i = 0; i < g_DoneMaps; i++) { 
		num_to_str(i, num, 10) 
		menu_additem(g_gVoteMenu, g_MapsChosen[i], num, 0) 
	} 
	menu_additem(g_gVoteMenu, "Continuar com o mapa actual", "4", 0) 
	new players[32], pnum, tempid; 
	get_players(players, pnum, "ch"); 
	for( new i; i<pnum; i++ ) { 
		tempid = players[i]; 
		client_printc(tempid, "!g%s !nPor favor, votem para o mapa que gostariam de jogar.", PREFIX) 
		menu_display(tempid, g_gVoteMenu); 
	} 
	client_cmd(0, "spk ^"get red(e80) ninety(s45) to check(e20) use bay(s18) mass(e42) cap(s50)^"") 
	new taskId = scanForTaskID() 
	set_task(10.0, "EndVote", taskId); 
	return PLUGIN_HANDLED; 
} 


public votemap(id, menu, item) { 
	if( item == MENU_EXIT ) { 
		menu_display(id, g_gVoteMenu) 
		return PLUGIN_HANDLED; 
	} 
	
	new data[6], szName[64]; 
	new access, callback; 
	menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback); 
	new voteid = str_to_num(data); 
	new playerna[32] 
	get_user_name(id, playerna, 31) 
	
	if (voteid != 4) 
		client_print(0, print_chat, "%s %s votaram a favor do mapa %s", PREFIX, playerna, g_MapsChosen[voteid]) 
	else 
		client_print(0, print_chat, "%s %s votaram a favor de continual com o mapa actual.", PREFIX, playerna) 
	
	g_gVotes[voteid]++; 
	return PLUGIN_HANDLED; 
} 

public getmaps() { 
	get_configsdir(g_Maps_Ini_File, 63); 
	format(g_Maps_Ini_File, 63, "%s/maps.ini", g_Maps_Ini_File); 
	
	new mapsfile = fopen(g_Maps_Ini_File, "r") 
	new linefortest[50] 
	
	while (g_MapsCounter < sizeof(g_MapsAvailable) && !feof(mapsfile)) { 
		fgets(mapsfile, linefortest, 49) 
		trim(linefortest) 
		
		new getcurrentmap[32] 
		get_mapname(getcurrentmap, 31) 
		
		if ((is_map_valid(linefortest)) && (!equali(linefortest, getcurrentmap))) 
			copy(g_MapsAvailable[g_MapsCounter++], 24, linefortest) 
	} 
	
	fclose(mapsfile) 
} 

public EndVote() { 
	show_menu(0, 0, "^n", 1); 
	new best = 0; 
	for(new i = 1; i < sizeof(g_gVotes); i++) { 
		if(g_gVotes[i] > g_gVotes[best]) 
			best = i; 
	} 
	
	g_gVotes[0] = 0 
	g_gVotes[1] = 0 
	g_gVotes[2] = 0 
	g_gVotes[3] = 0 
	g_gVotes[4] = 0 
	
	if(best == 4) { 
		client_printc(0, "!g%s !nSera utilizado o mapa actual para este jogo.", PREFIX); 
		TeamsVote() 
	} 
	else { 
		client_printc(0, "!g%s !nO mapa sera alterado dentro de 10 segundos. O mapa escolhido foi: %s.", PREFIX, g_MapsChosen[best]); 
		g_ChangeMapTo = best; 
		set_pug_state(1) 
		set_pcvar_string(cvar_sv_password, "") 
		new taskId = scanForTaskID() 
		set_task(10.0, "ChangeMap", taskId); 
	} 
	
	return PLUGIN_HANDLED 
} 

public ChangeMap() { 
	new maptochangeto[25] 
	
	copy(maptochangeto, 24, g_MapsChosen[g_ChangeMapTo]) 
	server_cmd("changelevel %s", maptochangeto) 
	return PLUGIN_CONTINUE 
} 

public FriendlyFire() { 
	g_fVoteMenu = menu_create("Como queres o Friendly Fire?", "voteFF"); 
	
	
	menu_additem(g_fVoteMenu, "Activado", "0", 0) 
	menu_additem(g_fVoteMenu, "Desativado", "1", 0) 
	
	new pplayers[32], ppnum, ptempid; 
	
	get_players(pplayers, ppnum, "ch"); 
	
	for( new i; i<ppnum; i++ ){ 
		ptempid = pplayers[i] 
		client_printc(ptempid, "!g% !nComo gostarias de ter o Friendly Fire? (Activado/Desligado)", PREFIX)
		menu_display(ptempid, g_fVoteMenu, 0) 
	} 
	new taskId = scanForTaskID() 
	set_task(10.0, "EndFFVote", taskId) 
	return PLUGIN_HANDLED 
} 

public voteFF(id, menu, item) { 
	if( item == MENU_EXIT ) { 
		menu_display(id, g_fVoteMenu) 
		return PLUGIN_HANDLED; 
	} 
	
	new data[6], szName[64]; 
	new access, callback; 
	menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback); 
	
	new voteid = str_to_num(data); 
	new playername[32] 
	get_user_name(id, playername, 31) 
	
	switch(voteid) { 
		case 0: client_print(0, print_chat, "%s %s votou para o friendlyfire estar: Activado.", PREFIX, playername) 
			case 1: client_print(0, print_chat, "%s %s votou para o friendlyfire estar: Desativado.", PREFIX, playername) 
		} 
	
	g_fVotes[voteid]++; 
	return PLUGIN_HANDLED; 
} 

public EndFFVote() { 
	show_menu(0, 0, "^n", 1); 
	new best = 0; 
	for(new i = 1; i < sizeof(g_fVotes); i++) { 
		if(g_fVotes[i] > g_fVotes[best]) 
			best = i; 
	} 
	g_fVotes[0] = 0 
	g_fVotes[1] = 0 
	
	switch(best){ 
		case 0: client_printc(0, "!g%s !nO Friendly Fire sera activado!", PREFIX) 
			case 1: { 
			client_printc(0, "!g%s !nO FriendlyFire sera desativado!", PREFIX) 
			g_bFFoff = true 
		} 
	} 
	new taskId = scanForTaskID() 
	set_task(5.0, "StartMatch", taskId) 
	return PLUGIN_HANDLED 
} 


public TeamsVote() { 
	client_printc(0, "!g%s !nA organizacao das equipas ira comecar em 10 segundos.", PREFIX) 
	new taskId = scanForTaskID() 
	set_task(10.0, "TeamsVote2", taskId) 
} 

public TeamsVote2() { 
	if ( !g_CustomGame ) { 
		if (get_playersnum() < get_pcvar_num(cvar_pLeft) - 2) { 
			if (g_DidWaitEnough == 16) { 
				client_printc(0, "!g%s !nOs jogadores nao estao a juntar se! O Jogo acabou...", PREFIX) 
				set_pug_state(0) 
				g_IsStarted = false 
				g_AfterRdy = false 
				new taskId = scanForTaskID() 
				set_task(3.0, "MatchIsOver", taskId) 
				return PLUGIN_HANDLED 
			} 
			
			new sum 
			sum = g_DidWaitEnough * 15 
			sum = 300 - sum 
			client_printc(0, "!g%s !nO voto para a organizacao das equipas sera atrasado em mais de 15 segundos ja que todos nao se juntaram ainda.", PREFIX) 
			set_hudmessage(255, 0, 0, 0.35, 0.66, 0, 6.0, 12.0) 
			ShowSyncHudMsg(0, g_MsgSync6, "Voto para as equipas Atrasou se - Reiniciando o jogo em %d Segundos", sum) 
			g_DidWaitEnough++ 
			new taskId = scanForTaskID() 
			set_task(15.0, "TeamsVote2", taskId) 
			return PLUGIN_HANDLED 
		} 
		
	} 
	
	set_pug_state(0) 
	g_MapChanged = false 
	g_AfterRdy = true 
	g_DidWaitEnough = 0 
	g_rVoteMenu = menu_create("Como tu queres as equipas organizadas?", "voteteams"); 
	menu_additem(g_rVoteMenu, "Mesmas equipas.", "0", 0) 
	menu_additem(g_rVoteMenu, "Capitaes aleatorios.", "1", 0) 
	menu_additem(g_rVoteMenu, "Equipas aleatorias.", "2", 0) 
	
	new pplayers[32], ppnum, ptempid; 
	get_players(pplayers, ppnum, "ch"); 
	
	for( new i; i<ppnum; i++ ) { 
		ptempid = pplayers[i] 
		client_printc(ptempid, "!g%s !nPor favor, escolhe a forma como tu gostarias que as equipas sejam organizadas.", PREFIX) 
		menu_display(ptempid, g_rVoteMenu, 0) 
	} 
	
	client_cmd(0, "spk Gman/Gman_Choose1") 
	new taskId = scanForTaskID() 
	set_task(10.0, "EndTeamsVote", taskId) 
	return PLUGIN_HANDLED 
} 

public voteteams(id, menu, item) { 
	if( item == MENU_EXIT ) { 
		menu_display(id, g_rVoteMenu) 
		return PLUGIN_HANDLED; 
	} 
	
	new data[6], szName[64]; 
	new access, callback; 
	menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback); 
	new voteid = str_to_num(data); 
	new playername[32] 
	get_user_name(id, playername, 31) 
	
	switch(voteid) { 
		case 0: client_print(0, print_chat, "%s %s votou a favor das: Mesmas equipas.", PREFIX, playername)
			case 1: client_print(0, print_chat, "%s %s votou a favor dos: Capitaes aleatorios.", PREFIX, playername) 
			case 2: client_print(0, print_chat, "%s %s votou a favor das: Equipas aleatorias.", PREFIX, playername) 
		} 
	g_rVotes[voteid]++; 
	return PLUGIN_HANDLED; 
} 

public EndTeamsVote() { 
	show_menu(0, 0, "^n", 1); 
	new best = 0; 
	for(new i = 1; i < sizeof(g_rVotes); i++) { 
		if(g_rVotes[i] > g_rVotes[best]) 
			best = i; 
	} 
	
	switch(best) { 
		case 0: 
		{ 
			new playersT[32] , numT , playersCt[32] , numCt 
			get_players( playersT , numT , "che" , "TERRORIST" ) 
			get_players( playersCt , numCt , "che" , "CT" ) 
			g_rVotes[0] = 0 
			g_rVotes[1] = 0 
			g_rVotes[2] = 0 
			
			if (numT != numCt) 
			{ 
				client_print(0, print_chat, "%s As equipas nao estao equilibradas! Equipas aleatorias em 10 segundos.", PREFIX) 
				new taskId = scanForTaskID() 
				set_task(10.0, "RandomTeams", taskId) 
				return PLUGIN_HANDLED 
			} 
			
			client_printc(0, "!g%s !nAs equipas permanecerao as mesmas, o jogo vai comecar em 10 segundos.", PREFIX) 
			new taskId = scanForTaskID() 
			set_task(10.0, "CurrentTeams", taskId) 
		} 
		case 1: 
		{ 
			g_rVotes[0] = 0 
			g_rVotes[1] = 0 
			g_rVotes[2] = 0 
			client_printc(0, "!g%s !nOs capitaes aleatorios serao escolhidos em 10 segundos.", PREFIX) 
			new taskId = scanForTaskID() 
			set_task(10.0, "RandomCpt", taskId) 
		} 
		case 2: 
		{ 
			g_rVotes[0] = 0 
			g_rVotes[1] = 0 
			g_rVotes[2] = 0 
			client_printc(0, "!g%s !nAs equipas aleatorias sera definidas em 10 segundos.", PREFIX) 
			new taskId = scanForTaskID() 
			set_task(10.0, "RandomTeams", taskId) 
		} 
	} 
	
	return PLUGIN_HANDLED 
} 

public CurrentTeams() { 
	new players[32], pnum, tempid; 
	get_players(players, pnum, "ch"); 
	
	for( new i; i<pnum; i++ ) { 
		tempid = players[i] 
		if (cs_get_user_team(tempid) == CS_TEAM_SPECTATOR) 
			set_task(1.0, "MoveFromSpec", tempid) 
	} 
	StartMatch() 
} 


public MoveFromSpec(id) { 
	new playersT[ 32 ] , numT , playersCt[ 32 ] , numCt 
	get_players( playersT , numT , "che" , "TERRORIST" ) 
	get_players( playersCt , numCt , "che" , "CT" ) 
	
	if (g_Twon) { 
		if (g_bSecondHalf) { 
			if( numT > numCt ) 
			{ 
				set_pcvar_string(cvar_humans_join_team, "CT") 
				client_cmd(id, "slot1") 
				ChangeTagB(id) 
			} 
			
			else 
			{ 
				set_pcvar_string(cvar_humans_join_team, "T") 
				client_cmd(id, "slot1") 
				ChangeTagA(id) 
			} 
		} 
		
		else 
		{ 
			if( numT > numCt ) 
			{ 
				set_pcvar_string(cvar_humans_join_team, "CT") 
				client_cmd(id, "slot1") 
				ChangeTagA(id) 
			} 
			
			else 
			{ 
				set_pcvar_string(cvar_humans_join_team, "T") 
				client_cmd(id, "slot1") 
				ChangeTagB(id) 
			} 
		} 
	} 
	
	else 
	{ 
		if (g_bSecondHalf) 
		{ 
			if( numT > numCt ) 
			{ 
				set_pcvar_string(cvar_humans_join_team, "CT") 
				client_cmd(id, "slot1") 
				ChangeTagA(id) 
			} 
			
			else 
			{ 
				set_pcvar_string(cvar_humans_join_team, "T") 
				client_cmd(id, "slot1") 
				ChangeTagB(id) 
			} 
		} 
		
		else 
		{ 
			if( numT > numCt ) 
			{ 
				set_pcvar_string(cvar_humans_join_team, "CT") 
				client_cmd(id, "slot1") 
				ChangeTagB(id) 
			} 
			
			else 
			{ 
				set_pcvar_string(cvar_humans_join_team, "T") 
				client_cmd(id, "slot1") 
				ChangeTagA(id) 
			} 
		} 
	} 
	
	if (g_bCpt) { 
		client_cmd(id, "kill") 
		cs_set_user_team(id, CS_TEAM_SPECTATOR) 
	} 
	
	return PLUGIN_CONTINUE 
} 

public RandomCpt() { 
	set_pcvar_num(cvar_mp_freezetime, 9999) 
	new players[32], pnum, tempid; 
	get_players(players, pnum, "ch"); 
	
	for( new i; i<pnum; i++ ) { 
		tempid = players[i]; 
		client_cmd(tempid, "kill") 
		cs_set_user_team(tempid, CS_TEAM_SPECTATOR) 
	} 
	
	if (get_playersnum() < 2) { 
		if (g_CustomGame) { 
			client_printc(0, "!g%s !nEstao menos de 2 jogadores, nao podes escolher 2 capitaes. Sera equipas aleatorias... (Jogo personalizado)", PREFIX) 
			new taskId = scanForTaskID() 
			set_task(3.0, "RandomTeams", taskId) 
		} 
		
		else { 
			client_printc(0, "!g%s !nHa menos de 2 jogadores, a reiniciar o jogo...", PREFIX) 
			new taskId = scanForTaskID() 
			set_task(5.0, "EndMatch", taskId) 
		} 
	} 
	
	new z = random(pnum) 
	while (cs_get_user_team(players[z]) == CS_TEAM_UNASSIGNED) 
		z = random(pnum) 
	cs_set_user_team(players[z], CS_TEAM_T) 
	gCptT = players[z] 
	
	new q = random(pnum) 
	while (q == z) 
		q = random(pnum) 
	cs_set_user_team(players[q], CS_TEAM_CT) 
	gCptCT = players[q] 
	client_printc(0, "!g%s !nOs Capitaes foram escolhidos ao acaso, os capitaes agora vao escolher os seus jogadores de equipa.", PREFIX) 
	client_printc(0, "!g%s !nCapitao da equipa terrorista, por favor, escolhe primeiro.", PREFIX) 
	g_bCpt = true 
	moveT() 
} 

public kickhimout(id) { 
	client_printc(0, "!g%s !nUm dos capitaes esta AFK! Sera equipas aleatorias...", PREFIX) 
	set_hudmessage(255, 0, 0, 0.40, 0.32, 0, 6.0, 12.0) 
	ShowSyncHudMsg(0, g_MsgSync2, "Um dos capitaes esta AFK!^nSera equipas aleatorias em 5 segundos...") 
	show_menu(0, 0, "^n", 1); 
	g_bCpt = false 
	new taskId = scanForTaskID() 
	set_task(5.0, "RandomTeams", taskId) 
	return PLUGIN_HANDLED 
} 


public moveT() { 
	TeamsInfo() 
	
	g_PlayersMenu = menu_create("Escolhe um jogador para ir para a tua equipa:", "moveT_menu"); 
	new players[32], pnum, tempid; 
	new Tplayers[32], Tpnum; 
	new szName[32], szTempid[10]; 
	new pickisdone, check 
	get_players(players, pnum, "ch"); 
	get_players(Tplayers, Tpnum, "che", "TERRORIST"); 
	
	for( new i; i<pnum; i++ ) 
	{ 
		tempid = players[i]; 
		
		if ((tempid == gCptT) || (tempid == gCptCT)) 
			check++ 
		
		if (cs_get_user_team(tempid) == CS_TEAM_UNASSIGNED) 
			continue; 
		
		else if (cs_get_user_team(tempid) == CS_TEAM_SPECTATOR) { 
			get_user_name(tempid, szName, 31); 
			num_to_str(tempid, szTempid, 9); 
			menu_additem(g_PlayersMenu, szName, szTempid, 0); 
			pickisdone++ 
		} 
	} 
	
	if (check != 2) { 
		client_printc(0, "!g%s !nUm dos capitaes disconectou se! Sera equipas aleatorias...", PREFIX) 
		g_bCpt = false 
		removeAllTasks() 
		new taskId = scanForTaskID() 
		set_task(3.0, "RandomTeams", taskId) 
		return PLUGIN_HANDLED 
	} 
	
	if (pickisdone == 0) { 
		client_printc(0, "!g%s !nTodas as equipas estao definidas! Jogo vai comecar em 10 segundos...", PREFIX) 
		g_bCpt = false 
		removeAllTasks() 
		new taskId = scanForTaskID() 
		set_task(10.0, "StartMatch", taskId) 
		return PLUGIN_HANDLED 
	} 
	
	if (Tpnum >= 5) { 
		client_printc(0, "!g%s !nA Equipa de terroristas está CHEIA! Voltando ao Capitao CT.", PREFIX) 
		moveCT() 
		return PLUGIN_HANDLED 
	} 
	
	menu_display(gCptT, g_PlayersMenu) 
	set_task(25.0, "kickhimout", gCptT) 
	return PLUGIN_HANDLED; 
} 

public moveT_menu(id, g_PlayersMenu, item) { 
	if( item == MENU_EXIT ) 
	{ 
		menu_display(id, g_PlayersMenu) 
		return PLUGIN_HANDLED; 
	} 
	
	remove_task(gCptT) 
	new data[6], iName[64]; 
	new access, callback; 
	menu_item_getinfo(g_PlayersMenu, item, access, data,5, iName, 63, callback); 
	new tempid = str_to_num(data); 
	new name[32] 
	new g_bCptNm[64] 
	get_user_name(gCptT, g_bCptNm, 63) 
	get_user_name(tempid, name, 31) 
	cs_set_user_team(tempid, CS_TEAM_T) 
	client_print(0, print_chat, "%s %s foi escolhido para a equipa terroristas pelo %s Capitao.", PREFIX, name, g_bCptNm) 
	menu_destroy(g_PlayersMenu); 
	remove_task(gCptT); 
	moveCT() 
	return PLUGIN_HANDLED 
} 


public moveCT() { 
	g_PlayersMenu = menu_create("Escolhe um jogador para ir para a tua equipa:", "moveCT_menu"); 
	new players[32], pnum, tempid; 
	new CTplayers[32], CTpnum; 
	new szName[32], szTempid[10]; 
	new pickisdone, check 
	get_players(players, pnum, "ch"); 
	get_players(CTplayers, CTpnum, "che", "CT"); 
	
	for( new i; i<pnum; i++ ) 
	{ 
		tempid = players[i]; 
		
		if ((tempid == gCptT) || (tempid == gCptCT)) 
			check++ 
		
		if (cs_get_user_team(tempid) == CS_TEAM_UNASSIGNED) 
			continue; 
		
		else if (cs_get_user_team(tempid) == CS_TEAM_SPECTATOR) { 
			get_user_name(tempid, szName, 31); 
			num_to_str(tempid, szTempid, 9); 
			menu_additem(g_PlayersMenu, szName, szTempid, 0); 
			pickisdone++ 
		} 
	} 
	
	if (check != 2) { 
		client_printc(0, "!g%s !nUm dos capitaes disconectou se! Equipas aleatorias...", PREFIX) 
		g_bCpt = false 
		new taskId = scanForTaskID() 
		set_task(3.0, "RandomTeams", taskId) 
		return PLUGIN_HANDLED 
	} 
	
	if (pickisdone == 0) { 
		client_printc(0, "!g%s !nTodas as equipas estao definidas! Jogo vai comecar em 10 segundos...", PREFIX) 
		g_bCpt = false 
		new taskId = scanForTaskID() 
		set_task(10.0, "StartMatch", taskId) 
		return PLUGIN_HANDLED 
	} 
	
	if (CTpnum >= 5) { 
		client_printc(0, "!g%s !nA Equipa de Contra terroristas está CHEIA! Voltando ao Capitao T.", PREFIX) 
		moveT() 
		return PLUGIN_HANDLED 
	} 
	
	menu_display(gCptCT, g_PlayersMenu) 
	set_task(20.0, "kickhimout", gCptCT) 
	return PLUGIN_HANDLED; 
} 

public moveCT_menu(id, g_PlayersMenu, item) { 
	if( item == MENU_EXIT ) { 
		menu_display(id, g_PlayersMenu) 
		return PLUGIN_HANDLED; 
	} 
	
	remove_task(gCptCT) 
	new data[6], iName[64]; 
	new access, callback; 
	menu_item_getinfo(g_PlayersMenu, item, access, data,5, iName, 63, callback); 
	new tempid = str_to_num(data); 
	new name[32] 
	new g_bCptNm[64] 
	get_user_name(gCptCT, g_bCptNm, 63) 
	get_user_name(tempid, name, 31) 
	cs_set_user_team(tempid, CS_TEAM_CT) 
	client_print(0, print_chat, "%s %s foi escolhido para a equipa Contra terrorista pelo %s Capitao.", PREFIX, name, g_bCptNm) 
	menu_destroy(g_PlayersMenu); 
	remove_task(gCptCT); 
	moveT() 
	return PLUGIN_HANDLED 
} 

public TeamsInfo() { 
	if (g_bCpt) { 
		new nameCT[70], nameT[70] 
		new infoT[500] 
		new infoCT[500] 
		new players[32], pnum, tempid; 
		new toapprove 
		
		get_players(players, pnum, "ch") 
		get_user_name(gCptT, nameT, 69) 
		get_user_name(gCptCT, nameCT, 69) 
		format(infoT, 499, "Equipa A^n-------------^nCapitao: %s^n^nOs companheiros de equipa:^n^n", nameT)
		format(infoCT, 499, "Equipa B^n-------------^nCapitao: %s^n^nOs companheiros de equipa:^n^n", nameCT) 
		
		for (new i ; i < pnum ; i++) 
		{ 
			tempid = players[i] 
			
			if ((cs_get_user_team(tempid) == CS_TEAM_T) && (tempid != gCptT)) 
			{ 
				new nameofp[70] 
				
				get_user_name(tempid, nameofp, 69) 
				add(infoT, 499, nameofp) 
				add(infoT, 499, "^n") 
			} 
			
			else if ((cs_get_user_team(tempid) == CS_TEAM_CT) && (tempid != gCptCT)) 
			{ 
				new nameofCTp[70] 
				
				get_user_name(tempid, nameofCTp, 69) 
				add(infoCT, 499, nameofCTp) 
				add(infoCT, 499, "^n") 
			} 
			
			if ((cs_get_user_team(tempid) == CS_TEAM_T) && (tempid == gCptT)) 
				toapprove++ 
			
			else if ((cs_get_user_team(tempid) == CS_TEAM_CT) && (tempid == gCptCT)) 
			{ 
				toapprove++ 
			} 
		} 
		
		if (toapprove != 2) { 
			set_hudmessage(255, 0, 0, 0.40, 0.32, 0, 6.0, 12.0) 
			ShowSyncHudMsg(0, g_MsgSync2, "Um dos capitaes saiu do jogo!^nSera equipas aleatorias em 5 segundos...") 
			new taskId = scanForTaskID() 
			set_task(5.0, "RandomTeams", taskId) 
			return PLUGIN_HANDLED 
		} 
		
		set_hudmessage(27, 162, 229, 0.28, 0.32, 0, 6.0, 1.0) 
		ShowSyncHudMsg(0, g_MsgSync8, infoT) 
		
		set_hudmessage(27, 162, 229, 0.58, 0.32, 0, 6.0, 1.0) 
		ShowSyncHudMsg(0, g_MsgSync2, infoCT) 
		new taskId = scanForTaskID() 
		set_task(1.0, "TeamsInfo", taskId) 
	} 
	
	else 
	{ 
		set_hudmessage(0, 255, 0, 0.40, 0.32, 0, 6.0, 12.0) 
		ShowSyncHudMsg(0, g_MsgSync2, "Todas as equipas sao definidas!") 
		return PLUGIN_CONTINUE 
	} 
	
	return PLUGIN_CONTINUE 
} 


public RandomTeams() 
{ 
	new players[32], pnum, tempid; 
	
	get_players(players, pnum, "ch"); 
	
	for( new i; i<pnum; i++ ) { 
		tempid = players[i]; 
		client_cmd(tempid, "kill") 
		
		if (cs_get_user_team(tempid) == CS_TEAM_UNASSIGNED) 
			continue; 
		cs_set_user_team(tempid, CS_TEAM_SPECTATOR) 
	} 
	
	new topick, idop 
	
	while (AnyoneInSpec()) { 
		if (cs_get_user_team(players[idop]) == CS_TEAM_UNASSIGNED) 
		{ 
			idop++ 
			continue; 
		} 
		
		topick = random(2) 
		
		if (topick == 1) 
		{ 
			cs_set_user_team(players[idop], CS_TEAM_T) 
		} 
		
		else 
		{ 
			cs_set_user_team(players[idop], CS_TEAM_CT) 
		} 
		
		new pplayers[32], ppnum, tempid; 
		new ppplayers[32], pppnum; 
		new temppnum 
		
		get_players(players, pnum, "ch"); 
		get_players(pplayers, ppnum, "che", "CT") 
		get_players(ppplayers, pppnum, "che", "TERRORIST") 
		
		if (ppnum == pnum/2) 
		{ 
			get_players(players, temppnum, "ch"); 
			
			for( new i; i<temppnum; i++ ) 
			{ 
				tempid = players[i]; 
				
				if (cs_get_user_team(tempid) == CS_TEAM_SPECTATOR) 
				{ 
					cs_set_user_team(tempid, CS_TEAM_T) 
				} 
			} 
		} 
		
		else if (pppnum == pnum/2) 
		{ 
			get_players(players, temppnum, "ch"); 
			
			for( new i; i<temppnum; i++ ) 
			{ 
				tempid = players[i]; 
				
				if (cs_get_user_team(tempid) == CS_TEAM_SPECTATOR) 
				{ 
					cs_set_user_team(tempid, CS_TEAM_CT) 
				} 
			} 
		} 
		
		idop++ 
	} 
	new taskId = scanForTaskID() 
	client_printc(0, "!g%s !nAs equipas foram aleatorias! A comecar o jogo em 5 segundos...", PREFIX) 
	set_task(5.0, "StartMatch", taskId) 
} 

public AnyoneInSpec() { 
	new players[32], pnum, tempid; 
	get_players(players, pnum, "ch"); 
	
	for( new i; i<pnum; i++ ) 
	{ 
		tempid = players[i]; 
		
		if (cs_get_user_team(tempid) == CS_TEAM_SPECTATOR) 
			return true 
	} 
	
	return false 
} 


public StartMatch() { 
	if(get_pcvar_num(cvar_FFvote) && (g_bDidVoteFF == false)) 
	{ 
		g_bDidVoteFF = true 
		client_printc(0, "!g%s !nO Voto para o Friendly Fire vai agora comecar...", PREFIX) 
		new taskId = scanForTaskID() 
		set_task(5.0, "FriendlyFire", taskId) 
		return PLUGIN_HANDLED 
	} 
	
	new players[32], pnum, tempid; 
	
	get_players(players, pnum, "ch") 
	
	if (pnum < get_pcvar_num(cvar_pLeft) - 2) 
	{ 
		if (g_CustomGame) 
		{ 
			
		} 
		
		else 
		{ 
			if (g_DidWaitEnough < 8) 
			{ 
				client_printc(0, "!g%s O Jogo sera atrasado em 15 segundos. (Minimo 8 Jogadores).", PREFIX) 
				g_DidWaitEnough++ 
				new taskId = scanForTaskID() 
				set_task(15.0, "StartMatch", taskId) 
				return PLUGIN_HANDLED 
			} 
			
			set_pcvar_string(cvar_humans_join_team, "") 
			g_iScore[0] = 0 
			g_iScore[1] = 0 
			g_AfterRdy = false 
			g_IsStarted = false 
			g_bDidVoteFF = false 
			g_ToDisplay = false 
			g_DidWaitEnough = 0 
			gPlayersLeft = get_maxplayers() 
			
			client_printc(0, "!g%s !nNao ha mais 10 jogadores. Jogo vai comecar de novo.", PREFIX) 
			client_printc(0, "!g%s !nPre-configuracoes do jogo estao a ser carregadas. Espera por favor...", PREFIX) 
			ShowLeft() 
			server_cmd("exec practice.cfg") 
			server_exec() 
			
			for( new i; i<pnum; i++ ) { 
				tempid = players[i]; 
				g_bIsReady[tempid] = false 
				remove_task(tempid) 
				g_iTimeLeft[tempid] = 130 
				g_LeftKills[tempid] = 0 
				g_bSecondHalf = false 
				ToSetTaskToInfo(tempid) 
				set_task(1.0, "Continue", tempid, .flags="a", .repeat=130) 
			} 
			return PLUGIN_HANDLED 
		} 
	} 
	
	for (new x ; x<pnum ; x++) 
	{ 
		tempid = players[x] 
		
		switch( cs_get_user_team(tempid) ) { 
			case CS_TEAM_UNASSIGNED: continue; 
				case CS_TEAM_SPECTATOR: server_cmd("kick # %d", get_user_userid(tempid)) 
				case CS_TEAM_T: ChangeTagA(tempid) 
				case CS_TEAM_CT: ChangeTagB(tempid) 
			} 
	} 
	
	client_printc(0, "!g%s !nConfiguracoes de Mix estao agora carregadas. Espera por favor...", PREFIX)
	client_printc(0, "!g%s !nConfiguracoes de Mix estao agora carregadas. Espera por favor...", PREFIX)
	client_printc(0, "!g%s !nConfiguracoes de Mix estao agora carregadas. Espera por favor...", PREFIX)
	new taskId = scanForTaskID() 
	set_task(4.0, "Settings", taskId) 
	
	return PLUGIN_HANDLED 
} 

public ChangeTagA(id) { 
	new pname[100] 
	new newname[70] 
	get_user_info(id, "name", pname, 49) 
	pname = RemoveOldTag(pname) 
	format(newname, 69, "(Equipa-A) %s", pname) 
	set_user_info(id, "name", newname) 
} 

public ChangeTagB(id) { 
	new pname[100] 
	new newname[70] 
	get_user_info(id, "name", pname, 49) 
	pname = RemoveOldTag(pname) 
	format(newname, 69, "(Equipa-B) %s", pname) 
	set_user_info(id, "name", newname) 
} 

public RemoveOldTag(pname[100]) { 
	replace_all(pname, 69, "(Equipa-B)", "") 
	replace_all(pname, 69, "(Equipa-A)", "") 
	replace_all(pname, 69, "(Equipa-B )", "") 
	replace_all(pname, 69, "(Equipa-A )", "") 
	replace_all(pname, 69, "( Equipa-B)", "") 
	replace_all(pname, 69, "( Equipa-A)", "") 
	replace_all(pname, 69, "( Equipa-B )", "") 
	replace_all(pname, 69, "( Equipa-A )", "") 
	replace_all(pname, 69, "(Equipa-B)", "") 
	replace_all(pname, 69, "(Equipa-A)", "") 
	replace_all(pname, 69, "(Equipa-B)", "") 
	replace_all(pname, 69, "(Equipa-A)", "") 
	replace_all(pname, 69, "(Equipa-B)", "") 
	replace_all(pname, 69, "(Equipa-A)", "") 
	replace_all(pname, 69, "[Equipa-B]", "") 
	replace_all(pname, 69, "[Equipa-A]", "") 
	replace_all(pname, 69, "[Equipa-B ]", "") 
	replace_all(pname, 69, "[Equipa-A ]", "") 
	replace_all(pname, 69, "[ Equipa-B]", "") 
	replace_all(pname, 69, "[ Equipa-A]", "") 
	replace_all(pname, 69, "[ Equipa-B ]", "") 
	replace_all(pname, 69, "[ Equipa-A ]", "") 
	replace_all(pname, 69, "(Equipa B)", "") 
	replace_all(pname, 69, "(Equipa A)", "") 
	replace_all(pname, 69, "[Equipa B]", "") 
	replace_all(pname, 69, "[Equipa A]", "") 
	replace_all(pname, 69, "(Equipa B )", "") 
	replace_all(pname, 69, "(Equipa A )", "") 
	replace_all(pname, 69, "[Equipa B ]", "") 
	replace_all(pname, 69, "[Equipa A ]", "") 
	replace_all(pname, 69, "( Equipa B)", "") 
	replace_all(pname, 69, "( Equipa A)", "") 
	replace_all(pname, 69, "[ Equipa B]", "") 
	replace_all(pname, 69, "[ Equipa A]", "") 
	replace_all(pname, 69, "( Equipa B )", "") 
	replace_all(pname, 69, "( Equipa A )", "") 
	replace_all(pname, 69, "[ Equipa B ]", "") 
	replace_all(pname, 69, "[ Equipa A ]", "") 
	replace_all(pname, 69, "{Equipa-B}", "") 
	replace_all(pname, 69, "{Equipa-A}", "") 
	replace_all(pname, 69, "{Equipa-B }", "") 
	replace_all(pname, 69, "{Equipa-A }", "") 
	replace_all(pname, 69, "{ Equipa-B}", "") 
	replace_all(pname, 69, "{ Equipa-A}", "") 
	replace_all(pname, 69, "{ Equipa-B }", "") 
	replace_all(pname, 69, "{ Equipa-A }", "") 
	trim(pname) 
	return pname 
} 

public SwitchTeams() { 
	new supportvariable 
	
	supportvariable = g_iScore[0] 
	g_iScore[0] = g_iScore[1] 
	g_iScore[1] = supportvariable 
	
	new players[32], pnum, tempid; 
	get_players(players, pnum, "ch"); 
	
	for( new i; i<pnum; i++ ) { 
		tempid = players[i]; 
		switch( cs_get_user_team(tempid) ) { 
			case CS_TEAM_T: cs_set_user_team(tempid, CS_TEAM_CT) 
				default: cs_set_user_team(tempid, CS_TEAM_T) 
		} 
	} 
	
	g_bSecondHalf = true 
	return PLUGIN_HANDLED 
} 

public KnifeSwitch(WinningTeam) { 
	new players[32], pnum; 
	
	switch ( WinningTeam ) { 
		case T_WIN: get_players(players, pnum, "che", "TERRORIST") 
			case CT_WIN: get_players(players, pnum, "che", "CT") 
		} 
	
	g_switchmenu = menu_create("[Route-Games Auto-Mix] Tu queres mudar as equipas?", "handleSwitch") 
	menu_additem(g_switchmenu, "Ficar", "0", 0) 
	menu_additem(g_switchmenu, "Trocar", "1", 0) 
	for ( new i ; i < pnum ; i++ ) 
		menu_display(players[i], g_switchmenu) 
	new intParam[1] 
	new taskId = scanForTaskID() 
	intParam[0] = WinningTeam 
	set_task(8.0, "declareSwitch", taskId, intParam, 1) 
} 

public handleSwitch(id, menu, item) { 
	if( item == MENU_EXIT ) { 
		menu_display(id, g_switchmenu) 
		return PLUGIN_HANDLED; 
	} 
	
	new data[6], szName[64]; 
	new access, callback; 
	menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback); 
	g_switchVotes[str_to_num(data)]++ 
	switch ( str_to_num(data) ) { 
		case 0: client_print(id, 3, "%s Tu votaste para: Ficar.", PREFIX) 
			case 1: client_print(id, 3, "%s Tu votaste para: Trocar.", PREFIX) 
		} 
	return PLUGIN_CONTINUE 
} 

public declareSwitch(recvParam[], prevTaskId) { 
	new taskId = scanForTaskID() 
	
	if ( g_switchVotes[0] > g_switchVotes[1] ) { 
		client_print(0, 3, "%s O Resultado da mudanca das equipas foi ---> Ficar.", PREFIX) 
		g_Twon = false 
		set_task(3.0, "SettingsAfter", taskId) 
		return PLUGIN_HANDLED 
	} 
	else 
		client_print(0, 3, "%s O Resultado da mudanca das equipas foi ---> Trocar.", PREFIX) 
	
	g_Twon = true 
	
	new playersT[32], pnumT, playersCT[32], pnumCT; 
	
	get_players(playersT, pnumT, "che", "TERRORIST") 
	get_players(playersCT, pnumCT, "che", "CT") 
	for ( new i ; i < pnumT ; i++ ) 
		cs_set_user_team(playersT[i], CS_TEAM_CT) 
	for ( new i ; i < pnumCT ; i++ ) 
		cs_set_user_team(playersCT[i], CS_TEAM_T) 
	set_task(3.0, "SettingsAfter", taskId) 
	return PLUGIN_CONTINUE 
} 


public Settings() { 
	if (get_pcvar_num(cvar_KnifeRound)) { 
		g_KnifeRound = true 
		set_pcvar_float(cvar_mp_roundtime, 1.75) 
		set_pcvar_num(cvar_mp_freezetime, 7) 
		set_pcvar_float(cvar_mp_buytime, 0.1) 
		client_print(0, print_chat, "%s Ronda de Faca vai comecar...", PREFIX) 
		client_print(0, print_chat, "%s Ronda de Faca vai comecar...", PREFIX) 
		client_print(0, print_chat, "%s Ronda de Faca vai comecar...", PREFIX) 
		set_pcvar_num(cvar_sv_restart, 3) 
		new taskId = scanForTaskID() 
		set_task(4.0, "TSAYKnife", taskId) 
	} 
	
	else 
	{ 
		g_KnifeRound = false 
		server_cmd("exec pug.cfg") 
		client_print(0, print_chat, "%s O jogo foi iniciado...", PREFIX) 
		client_print(0, print_chat, "%s O jogo foi iniciado...", PREFIX) 
		client_print(0, print_chat, "%s O jogo foi iniciado...", PREFIX) 
		server_cmd("sv_restart 1") 
		new taskId = scanForTaskID() 
		set_task(2.0, "Started", taskId) 
	} 
	
} 

public TSAYKnife() { 
	client_cmd(0, "drop") 
	set_hudmessage(255, 255, 255, 0.10, 0.68, 0, 6.0, 15.0) 
	ShowSyncHudMsg(0, g_MsgSync7, "Atencao! Ronda de faca ja comecou.") 
} 

public SettingsAfter() { 
	g_KnifeRound = false 
	g_bCpt = false 
	server_cmd("exec pug.cfg") 
	client_print(0, print_chat, "%s O jogo foi iniciado...", PREFIX) 
	client_print(0, print_chat, "%s O jogo foi iniciado...", PREFIX) 
	client_print(0, print_chat, "%s O jogo foi iniciado...", PREFIX) 
	set_pcvar_num(cvar_sv_restart, 1) 
	new taskId = scanForTaskID() 
	set_task(5.0, "Started", taskId) 
} 

public Started() { 
	if (g_bFFoff) 
		set_pcvar_num(cvar_mp_friendlyfire, 0) 
	else 
		set_pcvar_num(cvar_mp_friendlyfire, 1) 
	set_hudmessage(255, 255, 255, 0.07, 0.69, 0, 6.0, 20.0) 
	ShowSyncHudMsg(0, g_MsgSync3, "A 1ş ronda comecou. O jogo esta agora em live...") 
	g_IsStarted = true 
	g_AfterRdy = false 
} 


public EndMatch() { 
	set_hudmessage(255, 255, 255, 0.07, 0.59, 0, 6.0, 15.0) 
	ShowSyncHudMsg(0, g_MsgSync3, "O jogo acabou! (%d - %d)", g_iScore[0], g_iScore[1]) 
	client_printc(0, "!g%s !nO Jogo acabou! Um novo jogo sera iniciada em 10 segundos.", PREFIX) 
	client_printc(0, "!g%s !nTu podes voltar a entrar no proximo jogo, basta escreveres !add novamente.", PREFIX) 
	client_printc(0, "!g%s !nO Plugin sera reiniciado em 5 segundos.", PREFIX) 
	g_Restart = true 
	new taskId = scanForTaskID() 
	set_task(5.0, "MatchIsOver", taskId) 
} 

public MatchIsOver() 
	server_cmd("restart") 

public player(id) { 
	if (g_bCpt) { 
		client_printc(id, "!g%s !nTu nao podes abrir agora o menu!", PREFIX) 
		return PLUGIN_HANDLED 
	} 
	
	g_pVote = menu_create("\yMenu de jogadores \rBy Valascus :", "pmenu") 
	
	if (g_IsStarted) { 
		menu_additem(g_pVote, "\rMostrar Comandos", "1", 0) 
		menu_additem(g_pVote, "Pronto", "2", 0) 
		menu_additem(g_pVote, "Nao estou pronto", "3", 0) 
	} 
	
	else if (g_bIsReady[id]) { 
		menu_additem(g_pVote, "\rMostrar Comandos", "1", 0) 
		menu_additem(g_pVote, "Pronto", "2", 0) 
		menu_additem(g_pVote, "Nao estou pronto", "3", 0) 
	} 
	
	else { 
		menu_additem(g_pVote, "\rMostrar Comandos", "1", 0) 
		menu_additem(g_pVote, "Pronto", "2", 0) 
		menu_additem(g_pVote, "Nao estou pronto", "3", 0) 
	} 
	
	menu_additem(g_pVote, "Silenciar um jogador", "4", 0) 
	menu_additem(g_pVote, "Sair do servidor", "5", 0) 
	menu_additem(g_pVote, "\yCreditos", "6", 0) 
	menu_display(id, g_pVote) 
	return PLUGIN_CONTINUE 
} 

public pmenu(id, menu, item) { 
	if( item == MENU_EXIT ) { 
		menu_destroy(g_pVote) 
		return PLUGIN_HANDLED; 
	} 
	
	new data[6], iName[64]; 
	new access, callback; 
	menu_item_getinfo(menu, item, access, data,5, iName, 63, callback); 
	new key = str_to_num(data) 
	new playername[32] 
	get_user_name(id, playername, 31) 
	
	switch(key) { 
		case 1: client_cmd(id, "say !cmds") 
			case 2: { 
			if (g_IsStarted || g_bIsReady[id]) { 
				client_print(id, print_chat, "%s Opcao nao esta disponivel!", PREFIX) 
				menu_display(id, g_pVote) 
				return PLUGIN_HANDLED 
			} 
			
			else { 
				Prepare(id) 
				return PLUGIN_HANDLED 
			} 
			
		} 
		
		case 3: { 
			if (g_bIsReady[id]) 
			{ 
				if (g_IsStarted) 
				{ 
					client_print(id, print_chat, "%s Opcao nao esta disponivel!", PREFIX) 
					menu_display(id, g_pVote) 
					return PLUGIN_HANDLED 
				} 
				
				unPrepare(id) 
				return PLUGIN_HANDLED 
			} 
			
			client_print(id, print_chat, "%s Opcao nao esta disponivel!", PREFIX) 
			menu_display(id, g_pVote) 
			return PLUGIN_HANDLED 
		} 
		
		case 4: { 
			display_mutemenu(id, g_menuposition[id] = 0) 
			return PLUGIN_HANDLED 
		} 
		
		case 5: { 
			client_cmd(id, "disconnect") 
			return PLUGIN_HANDLED 
			
		} 
		
		case 6: credits(id) 
		} 
	
	player(id) 
	return PLUGIN_HANDLED 
} 

public get_pug_state() { 
	new file = fopen(gPug_ini_file, "r") 
	fseek(file, -1, SEEK_END) 
	new getchar = fgetc(file) 
	fclose(file) 
	return getchar - '0' 
} 

public set_pug_state(iState) { 
	new file = fopen(gPug_ini_file, "w") 
	fseek(file, -1, SEEK_END) 
	fputc(file, iState + '0') 
	fclose(file) 
} 


stock replace_it(string[], len, const what[], const with[]) { 
	new pos = 0; 
	
	if ((pos = contain(string, what)) == -1) 
	{ 
		return 0; 
	} 
	
	new total = 0; 
	new with_len = strlen(with); 
	new diff = strlen(what) - with_len; 
	new total_len = strlen(string); 
	new temp_pos = 0; 
	
	while (replace(string[pos], len - pos, what, with) != 0) 
	{ 
		total++; 
		pos += with_len; 
		total_len -= diff; 
		
		if (pos >= total_len) 
			break; 
		temp_pos = contain(string[pos], what); 
		
		if (temp_pos == -1) 
			break; 
		pos += temp_pos; 
	} 
	return total; 
} 

clear_list(id) { 
	for(new i = 0; i <= g_maxclients; ++i) 
		g_mute[id][i] = false 
} 

public clcmd_say(id) { 
	static say_args[10] 
	read_args(say_args, 9) 
	remove_quotes(say_args) 
	
	if(say_args[0] == '!' && containi(say_args, "mute") != -1) 
	{ 
		display_mutemenu(id, g_menuposition[id] = 0) 
		return PLUGIN_HANDLED_MAIN 
	} 
	return PLUGIN_CONTINUE 
} 

public fwd_voice_setclientlistening(receiver, sender, listen) 
{ 
	if(receiver == sender) 
		return FMRES_IGNORED 
	
	if(g_mute[receiver][sender]) { 
		engfunc(EngFunc_SetClientListening, receiver, sender, 0) 
		return FMRES_SUPERCEDE 
	} 
	return FMRES_IGNORED 
} 

display_mutemenu(id, pos) { 
	if(pos < 0) 
		return 
	
	static team[11] 
	get_user_team(id, team, 10) 
	
	new at = get_pcvar_num(cvar_alltalk) 
	get_players(g_menuplayers[id], g_playersnum[id], 
	at ? "c" : "ce", at ? "" : team) 
	
	new start = pos * 8 
	if(start >= g_playersnum[id]) 
		start = pos = g_menuposition[id] 
	
	new end = start + 8 
	if(end > g_playersnum[id]) 
		end = g_playersnum[id] 
	
	static menubody[512] 
	new len = format(menubody, 511, "%s Mute menu:^n^n", PREFIX) 
	
	static name[32] 
	
	new b = 0, i 
	new keys = MENU_KEY_0 
	
	for(new a = start; a < end; ++a) 
	{ 
		i = g_menuplayers[id][a] 
		get_user_name(i, name, 31) 
		
		if(i == id) 
		{ 
			++b 
			len += format(menubody[len], 511 - len, "\d[Route-Games] \wEscolhe um jogador para calares^n") 
		} 
		else 
		{ 
			keys |= (1<<b) 
			len += format(menubody[len], 511 - len, "%s%d. %s %s^n", g_mute[id][i] ? "" : "", ++b, name, g_mute[id][i] ? "(Muted)" : "") 
		} 
	} 
	
	if(end != g_playersnum[id]) 
	{ 
		format(menubody[len], 511 - len, "^n9. %s...^n0. %s", "Mias", pos ? "Atras" : "Sair") 
		keys |= MENU_KEY_9 
	} 
	else 
		format(menubody[len], 511-len, "^n0. %s", pos ? "Atras" : "Sair") 
	
	show_menu(id, keys, menubody, -1, "mute menu") 
} 

public client_death(killer, victim, weapon, hitplace, TK) 
{ 
	if(g_IsStarted && TK || g_KnifeRound && TK) 
	{ 
		points[killer] -= get_pcvar_num(tk_points) 
		client_printc(killer, "!g[Route-Games] !nPerdes-te 5 Skillpoints, por Teamkill.", tk_points) 
		
		return PLUGIN_CONTINUE 
	} 
	if (g_IsStarted) 
	{ 
		points[killer] += get_pcvar_num(kill_points) 
		points[victim] -= get_pcvar_num(death_points) 
		client_printc(victim, "!g[Route-Games] !nPerdes-te 1 Skillpoints, por morreres.", kill_points) 
		client_printc(killer, "!g[Route-Games] !nGanhas-te 3 Skillpoints, por matares.", death_points) 
	} 
	
	if( g_IsStarted && hitplace == HIT_HEAD || g_KnifeRound && hitplace == HIT_HEAD) 
	{ 
		points[killer] += get_pcvar_num(head_points) 
		client_printc(killer, "!g[Route-Games] !nGanhas-te 4 Skillpoints, por headshot.", head_points) 
	} 
	
	if( g_IsStarted && weapon == CSW_KNIFE || g_KnifeRound && weapon == CSW_KNIFE) 
	{ 
		points[killer] += get_pcvar_num(knife_points) 
		client_printc(killer, "!g[Route-Games] !nGanhas-te 4 Skillpoints, por faca.", knife_points) 
	} 
	
	if( g_IsStarted && weapon == CSW_HEGRENADE) 
	{ 
		points[killer] += get_pcvar_num(nade_points) 
		client_printc(killer, "!g[Route-Games] !nGanhas-te 4 Skillpoints, por granada.", nade_points)
	} 
	
	if( g_IsStarted && weapon == CSW_KNIFE && hitplace == HIT_HEAD || g_KnifeRound && weapon == CSW_KNIFE && hitplace == HIT_HEAD) 
	{ 
		points[killer] += get_pcvar_num(skill_points) 
		client_printc(killer, "!g[Route-Games] !nGanhas-te 4 Skillpoints, por faca e headshot.", nade_points) 
	} 
	
	
	return PLUGIN_CONTINUE; 
} 
public bomb_explode(planter) 
{ 
	if ( g_IsStarted || g_KnifeRound ) 
	{ 
		points[planter] += get_pcvar_num(boom_points) 
		client_printc(planter, "!g[Route-Games] !nGanhas-te 4 Skillpoints, por plantar a bomba.", boom_points) 
	} 
} 
public bomb_defused(defuser) 
{ 
	if ( g_IsStarted || g_KnifeRound ) 
	{ 
		points[defuser] += get_pcvar_num(def_points) 
		client_printc(defuser, "!g[Route-Games] !nGanhas-te 4 Skillpoints, por defusar a bomba.", head_points) 
		g_KillsAce[defuser] -= 3 
	} 
} 
public stats_custom_compare(elem1[],elem2[]) 
{ 
	if(elem1[1] > elem2[1]) return -1; 
	else if(elem1[1] < elem2[1]) return 1; 
		
	return 0; 
} 
public advertise(id) 
{ 
	client_printc(id, "!g[Route-Games] !nBem-Vindo! Tu tens %d skillpoints!", points[id]) 
} 

stock Team_Info(id, type, team[]) 
{ 
	message_begin(type, TeamInfo, _, id); 
	write_byte(id); 
	write_string(team); 
	message_end(); 
	return 1; 
} 
stock FindPlayer() 
{ 
	new i = -1; 
	while(i <= MaxSlots) 
	{ 
		if(IsConnected[++i]) 
		{ 
			return i; 
		} 
	} 
	return -1; 
} 

stock points_in_name(id) 
{ 
	new szName[32] 
	get_user_name(id, szName, charsmax(szName)) 
	new iLen = strlen(szName) 
	
	/* Finds and removes "<####>" */ 
	new iPos = iLen - 1 
	if( szName[iPos] == '>' ) 
	{ 
		for( new i = 1; i < 6; i++) 
		{ 
			if( szName[iPos - i] == '<' ) 
			{ 
				iLen = iPos - i 
				szName[iLen] = '^0' 
				break 
			} 
		} 
	} 
	
	format(szName[iLen], charsmax(szName) - iLen, szName[iLen-1] == ' ' ? "<%d>" : " <%d>", points[id])
	set_user_info(id, "name", szName) 
} 



public action_mutemenu(id, key) 
{ 
	switch(key) 
	{ 
		case 8: display_mutemenu(id, ++g_menuposition[id]) 
		case 9: display_mutemenu(id, --g_menuposition[id]) 
		default: 
		{ 
			new player = g_menuplayers[id][g_menuposition[id] * 8 + key] 
		
			g_mute[id][player] = g_mute[id][player] ? false : true 
			display_mutemenu(id, g_menuposition[id]) 
		
			static name[32] 
			get_user_name(player, name, 31) 
			client_print(id, print_chat, "tu %s Silenciaste %s", g_mute[id][player] ? "" : "un", name) 
		} 
	} 
	return PLUGIN_HANDLED 
} 

public checkPlayers() { 
	if (!g_IsStarted) return PLUGIN_HANDLED 
	
	for (new i = 1; i <= get_maxplayers(); i++) { 
		if (is_user_alive(i) && is_user_connected(i) && !is_user_bot(i) && !is_user_hltv(i) && g_spawned[i]) { 
			new newangle[3] 
			get_user_origin(i, newangle) 
			
			if ( newangle[0] == g_oldangles[i][0] && newangle[1] == g_oldangles[i][1] && newangle[2] == g_oldangles[i][2] ) { 
				g_afktime[i] += CHECK_FREQ 
				check_afktime(i) 
				} else { 
				g_oldangles[i][0] = newangle[0] 
				g_oldangles[i][1] = newangle[1] 
				g_oldangles[i][2] = newangle[2] 
				g_afktime[i] = 0 
			} 
		} 
	} 
	return PLUGIN_HANDLED 
} 

check_afktime(id) { 
	new numplayers = get_playersnum() 
	new minplayers = get_cvar_num("mp_afkminplayers") 
	
	if (numplayers >= minplayers) { 
		new maxafktime = get_cvar_num("mp_afktime") 
		if (maxafktime < MIN_AFK_TIME) { 
			log_amx("cvar mp_afktime %i e demasiado baixo. O valor minimo e %i.", maxafktime, MIN_AFK_TIME) 
			maxafktime = MIN_AFK_TIME 
			set_cvar_num("mp_afktime", MIN_AFK_TIME) 
		} 
		
		if ( maxafktime-WARNING_TIME <= g_afktime[id] < maxafktime) { 
			new timeleft = maxafktime - g_afktime[id] 
			client_print(id, print_chat, "%s Tu tens %i segundos para mover ou tu vais ser expulso por estar AFK", PREFIX, timeleft) 
			} else if (g_afktime[id] > maxafktime) { 
			new name[32] 
			get_user_name(id, name, 31) 
			client_print(0, print_chat, "%s %s foi expulso por estar AFK mais de %i segundos", PREFIX, name, maxafktime) 
			log_amx("%s foi expulso por estar AFK mais de %i segundos", name, maxafktime) 
			server_cmd("kick #%d ^"%s Tu foste expulso por estar AFK mais de %i segundos^"", get_user_userid(id), PREFIX, maxafktime) 
		} 
	} 
} 

public playerSpawned(id) { 
	g_spawned[id] = false 
	new sid[1] 
	sid[0] = id 
	set_task(0.75, "delayedSpawn",_, sid, 1) // Give the player time to drop to the floor when spawning
	return PLUGIN_HANDLED 
} 

public delayedSpawn(sid[]) { 
	get_user_origin(sid[0], g_oldangles[sid[0]]) 
	g_spawned[sid[0]] = true 
	return PLUGIN_HANDLED 
} 
public CmdMsg(id) 
{ 
	new message[200] 
	get_pcvar_string(g_CvarMsg, message, charsmax(message)) 
	new Text1[192] 
	
	formatex(Text1,191,"%s", message) 
	
	MakeTutor(id,Text1,YELLOW,15.0) 
	
} 
public CmdMsg2(id) 
{ 
	new message[200] 
	get_pcvar_string(g_CvarMsg2, message, charsmax(message)) 
	new Text2[192] 
	
	formatex(Text2,191,"%s", message) 
	
	MakeTutor(id,Text2,YELLOW,15.0) 
	
} 
MakeTutor(id,Text[],Color,Float:Time = 0.0) { 
	
	message_begin(MSG_ALL,g_MsgTutor,_,id) 
	write_string(Text) 
	write_byte(0) 
	write_short(0) 
	write_short(0) 
	write_short(1<<Color) 
	message_end() 
	
	if(Time != 0.0) { 
		
		set_task(Time,"RemoveTutor",id + TASK_TUT) 
	} 
} 
MsgWelcome(id,Text[],Color,Float:Time = 0.0) { 
	
	message_begin(MSG_ONE_UNRELIABLE,g_MsgTutor,_,id) 
	write_string(Text) 
	write_byte(0) 
	write_short(0) 
	write_short(0) 
	write_short(1<<Color) 
	message_end() 
	
	if(Time != 0.0) { 
		
		set_task(Time,"RemoveTutor",id + TASK_TUT) 
	} 
} 
public RemoveTutor(taskID) { 
	
	new id = taskID - TASK_TUT 
	
	
	message_begin(MSG_ALL,g_MsgTutClose,_,id) 
	message_end() 
} 
scanForTaskID() 
{ 
	for ( new i = 1337 ; i < 1337*2 ; i++ ) 
	{ 
		if ( !task_exists(i) ) return i 
	} 
	
	log_amx("Auto-Mix Task ID Error! Couldn't find a TASK ID!") 
	return 0 
} 

removeAllTasks() 
{ 
	for ( new i = 1337 ; i < 1337*2 ; i++ ) 
	{ 
		if ( task_exists(i) ) remove_task(i) 
	} 
} 

/*============================================================ 
=== Color Chat Include === 
============================================================*/ 

/* ColorChat Support */ 
#define NORMAL DontChange 
#define GREEN DontChange 
#define TEAM_COLOR DontChange 
#define RED Red 
#define BLUE Blue 
#define GREY Grey 
#define ColorChat client_print_color 
/* ColorChat Support */ 

enum _:Colors { 
	DontChange, 
	Red, 
	Blue, 
	Grey 
} 

stock const g_g_szTeamName[Colors][] = 
{ 
"UNASSIGNED", 
"TERRORIST", 
"CT", 
"SPECTATOR" 
} 

stock client_print_color(id, iColor=DontChange, const szMsg[], any:...) 
{ 
// check if id is different from 0 
if( id && !is_user_connected(id) ) 
{ 
	return 0; 
} 

if( iColor > Grey ) 
{ 
	iColor = DontChange; 
} 

new szMessage[192]; 
if( iColor == DontChange ) 
{ 
	szMessage[0] = 0x04; 
} 
else 
{ 
	szMessage[0] = 0x03; 
} 

new iParams = numargs(); 
// Specific player code 
if(id) 
{ 
	if( iParams == 3 ) 
	{ 
		copy(szMessage[1], charsmax(szMessage)-1, szMsg); 
	} 
	else 
	{ 
		vformat(szMessage[1], charsmax(szMessage)-1, szMsg, 4); 
	} 
	
	if( iColor ) 
	{ 
		new szTeam[11]; // store current team so we can restore it 
		get_user_team(id, szTeam, charsmax(szTeam)); 
		
		// set id TeamInfo in consequence 
		// so SayText msg gonna show the right color 
		Send_TeamInfo(id, id, g_g_szTeamName[iColor]); 
		
		// Send the message 
		Send_SayText(id, id, szMessage); 
		
		// restore TeamInfo 
		Send_TeamInfo(id, id, szTeam); 
	} 
	else 
	{ 
		Send_SayText(id, id, szMessage); 
	} 
} 

// Send message to all players 
else 
{ 
	// Figure out if at least 1 player is connected 
	// so we don't send useless message if not 
	// and we gonna use that player as team reference (aka SayText message sender) for color change 
	new iPlayers[32], iNum; 
	get_players(iPlayers, iNum, "ch"); 
	if( !iNum ) 
	{ 
		return 0; 
	} 
	
	new iFool = iPlayers[0]; 
	
	new iMlNumber, i, j; 
	new Array:aStoreML = ArrayCreate(); 
	if( iParams >= 5 ) // ML can be used 
	{ 
		for(j=4; j<iParams; j++) 
		{ 
			// retrieve original param value and check if it's LANG_PLAYER value 
			if( getarg(j) == LANG_PLAYER ) 
			{ 
				i=0; 
				// as LANG_PLAYER == -1, check if next parm string is a registered language translation 
				while( ( szMessage[ i ] = getarg( j + 1, i++ ) ) ) {} 
				if( GetLangTransKey(szMessage) != TransKey_Bad ) 
				{ 
					// Store that arg as LANG_PLAYER so we can alter it later 
					ArrayPushCell(aStoreML, j++); 
					
					// Update ML array saire so we'll know 1st if ML is used, 
					// 2nd how many args we have to alterate 
					iMlNumber++; 
				} 
			} 
		} 
	} 
	
	// If arraysize == 0, ML is not used 
	// we can only send 1 MSG_BROADCAST message 
	if( !iMlNumber ) 
	{ 
		if( iParams == 3 ) 
		{ 
			copy(szMessage[1], charsmax(szMessage)-1, szMsg); 
		} 
		else 
		{ 
			vformat(szMessage[1], charsmax(szMessage)-1, szMsg, 4); 
		} 
		
		if( iColor ) 
		{ 
			new szTeam[11]; 
			get_user_team(iFool, szTeam, charsmax(szTeam)); 
			Send_TeamInfo(0, iFool, g_g_szTeamName[iColor]); 
			Send_SayText(0, iFool, szMessage); 
			Send_TeamInfo(0, iFool, szTeam); 
		} 
		else 
		{ 
			Send_SayText(0, iFool, szMessage); 
		} 
	} 
	
	// ML is used, we need to loop through all players, 
	// format text and send a MSG_ONE_UNRELIABLE SayText message 
	else 
	{ 
		new szTeam[11], szFakeTeam[10]; 
		
		if( iColor ) 
		{ 
			get_user_team(iFool, szTeam, charsmax(szTeam)); 
			copy(szFakeTeam, charsmax(szFakeTeam), g_g_szTeamName[iColor]); 
		} 
		
		for( i = 0; i < iNum; i++ ) 
		{ 
			id = iPlayers[i]; 
			
			for(j=0; j<iMlNumber; j++) 
			{ 
				// Set all LANG_PLAYER args to player index ( = id ) 
				// so we can format the text for that specific player 
				setarg(ArrayGetCell(aStoreML, j), _, id); 
			} 
			
			// format string for specific player 
			vformat(szMessage[1], charsmax(szMessage)-1, szMsg, 4); 
			
			if( iColor ) 
			{ 
				Send_TeamInfo(id, iFool, szFakeTeam); 
				Send_SayText(id, iFool, szMessage); 
				Send_TeamInfo(id, iFool, szTeam); 
			} 
			else 
			{ 
				Send_SayText(id, iFool, szMessage); 
			} 
		} 
		ArrayDestroy(aStoreML); 
	} 
} 
return 1; 
} 

stock Send_TeamInfo(iReceiver, iPlayerId, szTeam[]) 
{ 
static g_iTeamInfo = 0; 
if( !g_iTeamInfo ) 
{ 
	g_iTeamInfo = get_user_msgid("TeamInfo"); 
} 
message_begin(iReceiver ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, g_iTeamInfo, .player=iReceiver); 
write_byte(iPlayerId); 
write_string(szTeam); 
message_end(); 
} 

stock Send_SayText(iReceiver, iPlayerId, szMessage[]) 
{ 
static iSayText = 0; 
if( !iSayText ) 
{ 
	iSayText = get_user_msgid("SayText"); 
} 
message_begin(iReceiver ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, iSayText, .player=iReceiver); 
write_byte(iPlayerId); 
write_string(szMessage); 
message_end(); 
} 
stock client_printc(const id, const input[], any:...) 
{ 
new count = 1, players[32]; 
static msg[191]; 
vformat(msg, 190, input, 3); 

replace_all(msg, 190, "!g", "^x04"); // Green Color 
replace_all(msg, 190, "!n", "^x01"); // Default Color 
replace_all(msg, 190, "!t", "^x03"); // Team Color 

if (id) players[0] = id; else get_players(players, count, "ch"); 
{ 
for (new i = 0; i < count; i++) 
{ 
	if (is_user_connected(players[i])) 
	{ 
		message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]); 
		write_byte(players[i]); 
		write_string(msg); 
		message_end(); 
	} 
} 
} 
}
__________________
Quote:
#define true ((rand() % 2)? true: false) //Happy debugging suckers
mottzi is offline
Send a message via MSN to mottzi
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 01:42.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode