#include <cstrike>
public Plugin:myinfo = 
{
	name = "Special Team Balancer",
	author = "AlmazON",
	description = "Специальный Балансировщик Команд",
	version = "0.4.1",
	url = "http://www.hlmod.ru"
}

#define CSRoundEnd_GameStart 15
new bool:bP[MAXPLAYERS+1], Float:fRD;
public OnPluginStart()
{
	if(GetEngineVersion() !=Engine_CSGO)
	{
		HookEvent("round_end",			RE);
		decl Handle:h;
		HookConVarChange(h=FindConVar("mp_round_restart_delay"),	RD);
		fRD = GetConVarFloat(h)-0.1;
	}else HookEvent("round_prestart",	RP, EventHookMode_PostNoCopy);
	OnRebuildAdminCache(AdminCache_Admins);
}

public RD(Handle:C, String:O[], String:N[]) fRD = GetConVarFloat(C)-0.1;

public OnClientPostAdminCheck(C) bP[C] = GetUserAdmin(C)==INVALID_ADMIN_ID;
public OnRebuildAdminCache(AdminCachePart:P) if(P==AdminCache_Admins) for(new i=1; i<=MaxClients; ++i) if(IsClientInGame(i)) OnClientPostAdminCheck(i);
public RE(Handle:E, String:N[], bool:B) CreateTimer(GetEventInt(E,"reason")!=CSRoundEnd_GameStart ? fRD:2.9, TB, _, TIMER_FLAG_NO_MAPCHANGE);
public RP(Handle:E, String:N[], bool:B) PTB();

public Action:TB(Handle:T)
{
	PTB();
	return Plugin_Stop;
}

PTB()
{
	new i=MaxClients, a, b;
	do if(IsClientInGame(i)) switch(GetClientTeam(i))
	{
		case CS_TEAM_T:++a;
		case CS_TEAM_CT:++b;
	}while(--i);
	if((a=(a-b)/2))
	{
		b = MaxClients;
		if(0 <a)
		{
			decl c[a];
			do if(IsClientInGame(b))
			{
				if(a) if(GetClientTeam(b)==CS_TEAM_T) if(bP[b]) if(IsPlayerAlive(b))
				{
					if(a>i) c[i++] = b;
				}else
				{
					CS_SwitchTeam(b, CS_TEAM_CT);
					--a;
				}PrintToChat(b, "\x01 \x04[Автобаланс] \x01Лишние игроки команды \x03Террористов \x05перемещены\x01.");
			}while(--b);
			while(a--) CS_SwitchTeam(c[a], CS_TEAM_CT);
		}else
		{
			decl c[a=-a];
			do if(IsClientInGame(b))
			{
				if(a) if(GetClientTeam(b)==CS_TEAM_CT) if(bP[b]) if(IsPlayerAlive(b))
				{
					if(a>i) c[i++] = b;
				}else
				{
					CS_SwitchTeam(b, CS_TEAM_T);
					--a;
				}PrintToChat(b, "\x01 \x04[Автобаланс] \x01Лишние игроки команды \x03Контр-террористов \x05перемещены\x01.");
			}while(--b);
			while(a--) CS_SwitchTeam(c[a], CS_TEAM_T);
		}
	}
} 
