#include <sourcemod>
#include <sdktools>
#include <cstrike>

#define FADE_IN 0x0001

public Plugin:myinfo =
{
	name = "Team-Balancer",
	author = "FreeZ",
	version = "1.0",
	description = "Simple Team-Balancer",
	url = "http://gts-fun.de"
};

public OnPluginStart()
{
	HookEvent("round_end", Event_RoundEnd)
	PrintToChatAll("[TB] Team-Balancer is loaded")
}

public Event_RoundEnd(Handle:event, const String:name[], bool:dontBroadcast)
{
	new teamT = GetTeamClientCount(2);
	new teamCT = GetTeamClientCount(3);
	new diff = teamT - teamCT;
	new i;
	
	if (diff < 0)
	{
		diff = -diff;
	}
	
	for (i=1; i<diff; i++)
	{
		Balance(teamT, teamCT)
	}
}

Balance(teamT, teamCT)
{
	new client;
	
	if (teamT > (teamCT + 1))
	{
		if(GetTeamClientCount(2) > 0)
		{
			do
			{
				client = GetRandomInt(1, MaxClients);
			}
			while(!IsClientInGame(client) || GetClientTeam(client) != 2);
		}
		CS_SwitchTeam(client, 3);
		ScreenFade(client, 0, 0, 255, 255, FADE_IN)
		PrintToChatAll("[TB] %N hat das Team gewechselt", client);
	}
	
	if (teamCT > (teamT + 1))
	{
		if(GetTeamClientCount(3) > 0)
		{
			do
			{
				client = GetRandomInt(1, MaxClients);
			}
			while(!IsClientInGame(client) || GetClientTeam(client) != 3);
		}
		CS_SwitchTeam(client, 2);
		ScreenFade(client, 255, 0, 0, 255, FADE_IN)
		PrintToChatAll("[TB] %N hat das Team gewechselt", client);
	}
}

public ScreenFade(client, red, green, blue, alpha, type)
{
	new Handle:msg;
	new duration = 0;
	
	msg = StartMessageOne("Fade", client);
	BfWriteShort(msg, 500);
	BfWriteShort(msg, duration);
	BfWriteShort(msg, type);
	BfWriteByte(msg, red);
	BfWriteByte(msg, green);
	BfWriteByte(msg, blue);
	BfWriteByte(msg, alpha);
	EndMessage();
}