There is no problem with the plugin used by the server
I wish I could set the number of people.
and
When selecting a team, please make sure that the user can not select automatic selection. This destroys the balance.
PHP Code:
#include <sourcemod>
#include <sdktools>
#include <cstrike>
#include <sdkhooks>
#pragma semicolon 1
#define PREFIX "[\x05LANESS\x01]"
public OnPluginStart()
{
RegConsoleCmd("jointeam", Command_JoinTeam);
HookEvent("round_end", Event_RoundEnd);
}
public Action:Event_RoundEnd(Handle:event, const String:name[], bool:broadcast)
{
new Terror, Counter;
Terror = GetTeamClientCount(2);
Counter = GetTeamClientCount(3);
if(Terror + Counter >= 3)
{
if(Counter * 2 > Terror + 1)
{
new maxselect = 0;
new selects[MaxClients + 1];
for(new i = 1;i <= MAXPLAYERS; i++)
{
maxselect = 0;
for(new n = 1; n <= MaxClients; n++)
{
if(IsClientConnectedIngame(n) == true)
{
if(GetClientTeam(n) == CS_TEAM_CT && !IsFakeClient(n))
{
maxselect++;
selects[maxselect] = n;
}
}
}
if(maxselect != 0)
{
new select = selects[GetRandomInt(1, maxselect)];
CS_SwitchTeam(select, CS_TEAM_T);
PrintToChatAll("%s %N 님은 자동 팀설정에 의해 죄수팀이 되었습니다", PREFIX, select);
Terror = GetTeamClientCount(2);
Counter = GetTeamClientCount(3);
if(!(Counter * 2 > Terror + 1) || !(Terror + Counter >= 3))
{
break;
}
}
}
}
else if(Counter * 2 + 1 < Terror)
{
new maxselect = 0;
new selects[MaxClients + 1];
for(new i = 1;i <= MAXPLAYERS; i++)
{
maxselect = 0;
for(new n = 1; n <= MaxClients; n++)
{
if(IsClientConnectedIngame(n) == true)
{
if(GetClientTeam(n) == CS_TEAM_T && !IsFakeClient(n))
{
maxselect++;
selects[maxselect] = n;
}
}
}
if(maxselect != 0)
{
new select = selects[GetRandomInt(1, maxselect)];
CS_SwitchTeam(select, CS_TEAM_CT);
PrintToChatAll("%s %N 님은 자동 팀설정에 의해 간수팀이 되었습니다", PREFIX, select);
Terror = GetTeamClientCount(2);
Counter = GetTeamClientCount(3);
if(!(Counter * 2 + 1 < Terror) || !(Terror + Counter >= 3))
{
break;
}
}
}
}
}
return Plugin_Handled;
}
public Action:Command_JoinTeam(Client, args)
{
decl String:Team[8];
GetCmdArg(1, Team, sizeof(Team));
new ClientTeam = GetClientTeam(Client);
new Terror, Counter;
Terror = GetTeamClientCount(CS_TEAM_T);
Counter = GetTeamClientCount(CS_TEAM_CT);
if(StrEqual(Team, "0"))
{
if(ClientTeam == CS_TEAM_SPECTATOR || ClientTeam == CS_TEAM_NONE)
{
if(Terror + Counter < 2)
{
if(Counter == 0)
{
ChangeClientTeam(Client, CS_TEAM_CT);
PrintToChat(Client, "%s 현재 아무도 없으므로 대테러팀에 참가합니다", PREFIX);
}
else
{
ChangeClientTeam(Client, CS_TEAM_T);
PrintToChat(Client, "%s 대테러가 충분하므로 테러팀에 참가합니다", PREFIX);
}
}
else
{
if((Counter + 1) * 2 <= Terror + 1)
{
ChangeClientTeam(Client, CS_TEAM_CT);
PrintToChat(Client, "%s 테러가 충분하므로 대테러팀에 참가합니다", PREFIX);
}
else
{
ChangeClientTeam(Client, CS_TEAM_T);
PrintToChat(Client, "%s 대테러가 충분하므로 테러팀에 참가합니다", PREFIX);
}
}
}
else if(ClientTeam == CS_TEAM_CT)
{
if((Counter - 1) * 2 + 1 >= Terror + 1)
{
ChangeClientTeam(Client, CS_TEAM_T);
}
else
{
PrintToChat(Client, "%s 테러가 충분하므로 대테러팀에 참가합니다", PREFIX);
}
}
else if(ClientTeam == CS_TEAM_T)
{
if((Counter + 1) * 2 > Terror + 1 - 1)
{
ChangeClientTeam(Client, CS_TEAM_CT);
}
else
{
PrintToChat(Client, "%s 대테러가 충분하므로 테러팀에 참가합니다", PREFIX);
}
}
}
else if(StrEqual(Team, "2"))
{
if(ClientTeam == CS_TEAM_SPECTATOR || ClientTeam == CS_TEAM_NONE)
{
if(Terror + Counter < 2)
{
if(Counter == 0)
{
ChangeClientTeam(Client, CS_TEAM_CT);
}
else
{
ChangeClientTeam(Client, CS_TEAM_T);
PrintToChat(Client, "%s 대테러팀에 인원이 충분하므로 테러 팀에 참가합니다", PREFIX);
}
}
else
{
if((Counter + 1) * 2 <= Terror + 1)
{
ChangeClientTeam(Client, CS_TEAM_CT);
}
else
{
ChangeClientTeam(Client, CS_TEAM_T);
PrintToChat(Client, "%s 대테러팀에 인원이 충분하므로 테러 팀에 참가합니다", PREFIX);
}
}
}
else if(ClientTeam == CS_TEAM_CT)
{
if((Counter - 1) * 2 + 1 >= Terror + 1)
{
ChangeClientTeam(Client, CS_TEAM_T);
}
else
{
PrintToChat(Client, "%s 테러팀에 인원이 충분하므로 대테러 팀에 참가합니다", PREFIX);
}
}
}
else if(StrEqual(Team, "3"))
{
if(ClientTeam == CS_TEAM_SPECTATOR || ClientTeam == CS_TEAM_NONE)
{
if(Terror + Counter < 2)
{
if(Counter == 0)
{
ChangeClientTeam(Client, CS_TEAM_CT);
}
else
{
ChangeClientTeam(Client, CS_TEAM_T);
PrintToChat(Client, "%s 대테러팀에 인원이 충분하므로 테러 팀에 참가합니다", PREFIX);
}
}
else
{
if((Counter + 1) * 2 <= Terror + 1)
{
ChangeClientTeam(Client, CS_TEAM_CT);
}
else
{
ChangeClientTeam(Client, CS_TEAM_T);
PrintToChat(Client, "%s 대테러팀에 인원이 충분하므로 테러 팀에 참가합니다", PREFIX);
}
}
}
else if(ClientTeam == CS_TEAM_T)
{
if(Terror + Counter < 2)
{
ChangeClientTeam(Client, CS_TEAM_CT);
}
else
{
if((Counter + 1) * 2 <= Terror + 1 - 1)
{
ChangeClientTeam(Client, CS_TEAM_CT);
}
else
{
PrintToChat(Client, "%s 대테러팀에 인원이 충분하므로 테러 팀에 참가합니다", PREFIX);
}
}
}
}
else if(StrEqual(Team, "1"))
{
if(GetClientTeam(Client) != CS_TEAM_SPECTATOR)
{
ChangeClientTeam(Client, CS_TEAM_SPECTATOR);
}
}
return Plugin_Handled;
}
bool:IsClientConnectedIngame(Client)
{
if(Client > 0 && Client <= MaxClients)
{
if(IsClientInGame(Client))
{
return true;
}
else return false;
}
else return false;
}