#include <sourcemod>
#include <cstrike>
#include <sdktools>
int g_nSpawns_CT;
int g_nSpawns_T;
//#include <Rostu/core>
public void OnClientPutInServer( int client )
{
CreateTimer( 1.0, T_Spawn, GetClientUserId( client ), TIMER_FLAG_NO_MAPCHANGE );
}
public Action T_Spawn( Handle hTimer, int client )
{
if ( (client = GetClientOfUserId( client )) )
{
if ( IsFakeClient(client) )
{
SpawnPlayer( client );
}
}
}
stock void SpawnPlayer( int client )
{
if ( IsPlayerAlive( client ) ) return;
int team = GetPreferredTeam();
if ( GetClientTeam( client ) != team )
{
ChangeClientTeam( client, team );
}
if ( !IsPlayerAlive( client ) )
{
CS_RespawnPlayer( client );
}
}
stock void GetSpawnCounts()
{
g_nSpawns_CT = 0;
g_nSpawns_T = 0;
int ent = -1;
while ( (ent = FindEntityByClassname( ent, "info_player_counterterrorist" )) != -1 ) g_nSpawns_CT++;
ent = -1;
while ( (ent = FindEntityByClassname( ent, "info_player_terrorist" )) != -1 ) g_nSpawns_T++;
}
stock int GetPreferredTeam()
{
if ( g_nSpawns_CT <= 0 && g_nSpawns_T <= 0 )
{
GetSpawnCounts();
}
if ( GetTeamClientCount( CS_TEAM_CT ) < g_nSpawns_CT )
{
return CS_TEAM_CT;
}
else if ( GetTeamClientCount( CS_TEAM_T ) < g_nSpawns_T )
{
return CS_TEAM_T;
}
else
{
for ( int i = 1; i <= MaxClients; i++ )
{
if ( IsClientInGame( i ) && GetClientTeam( i ) > CS_TEAM_SPECTATOR && !IsFakeClient( i ) )
{
return GetClientTeam( i );
}
}
}
return CS_TEAM_CT;
}