Use a boolean and set it true when the round ends and false when round starts. Check if the boolean is already true when doing ++1. It can help avoiding the twice increasement.
I've seen a lot of team swap codes, most of them are inside Furien Mod and all of them uses set_task to swap players teams. I've seen players had this issue before too, so this is what I have on mine, may help you with more efficiency instead of doing tricky ways:
PHP Code:
#include <amxmodx>
#include <cstrike>
#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"
new g_iWins[2]
new pCvarMinCTWins
new pCvarMinTWins
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
pCvarMinCTWins = register_cvar("minct_wins", "5")
pCvarMinTWins = register_cvar("mint_wins", "5")
register_logevent( "round_restart_event", 2, "0=World triggered", "1&Restart_Round_" )
register_event("SendAudio", "EVENT_TWin", "a", "2&%!MRAD_terwin")
register_event("SendAudio", "EVENT_CTWin", "a", "1=0", "2=%!MRAD_ctwin");
}
public round_restart_event()
{
g_iWins[0] = g_iWins[1] = 0
}
public EVENT_CTWin()
{
g_iWins[1]++
if(g_iWins[1] >= get_pcvar_num(pCvarMinCTWins))
{
g_iWins[1] = 0
swapTeams()
}
}
public EVENT_TWin()
{
g_iWins[0]++
if(g_iWins[0] >= get_pcvar_num(pCvarMinTWins))
{
g_iWins[0] = 0
swapTeams()
}
}
swapTeams()
{
new Players[32], PlayersNum, id;
get_players(Players, PlayersNum, "h")
if(PlayersNum)
{
for(new i; i < PlayersNum; i++)
{
id = Players[i]
BeginDelay(id)
}
}
}
public BeginDelay(id)
{
if(is_user_connected(id))
{
switch(id)
{
case 1..7: set_task(0.1, "BeginTeamSwap", id)
case 8..15: set_task(0.2, "BeginTeamSwap", id)
case 16..23: set_task(0.3, "BeginTeamSwap", id)
case 24..32: set_task(0.4, "BeginTeamSwap", id)
}
}
}
public BeginTeamSwap(id)
{
if(is_user_connected(id))
{
switch(get_user_team(id))
{
case 1: cs_set_user_team(id, CS_TEAM_CT)
case 2: cs_set_user_team(id, CS_TEAM_T)
}
}
}
__________________