how about:
in Player object: Alarm 1 :
if object = -1 || global.Server_Respawntime <= 0 //prevent autobalance in server that instant respawn
{
if team = TEAM_BLUE
team = TEAM_RED
else
team = TEAM_BLUE
}
else
alarm [1] = 1
then in ServerBalanceTeams:
replace :
if(balanceplayer.team==TEAM_RED) {
balanceplayer.team = TEAM_BLUE;
} else {
balanceplayer.team = TEAM_RED;
}
if(balanceplayer.object != -1) {
with(balanceplayer.object) {
instance_destroy();
}
balanceplayer.object = -1;
balanceplayer.alarm[5] = global.Server_Respawntime;
}
with this:
with (balanceplayer)
alarm [1] = 1
just a flash idea

and im a rookie to GML
EDIT:
some fix to stop autobalance refresh
Character End Step:
with(GameServer) {
if balancing = 0
ServerBalanceTeams();
}
GameServer obj
add alarm 0 that switch balancing to 0
add balancing=0 in GameServerCreate
and fix
with (balanceplayer)
alarm [1] = 1
with (GameServer)
{
balancing = 1
alarm [0] = 200 //maybe
}