Plugin:autobalance
From Tactical Wiki
[edit] Summary
TacticalGamer has a tricked out version of autobalance.py in place. The entirety of autobalance.py is reproduced below. (Note, not all features are implemented on the TG servers yet.)
[edit] Features
- Keep commanders and squad leaders from being autobalanced off of their teams, as this can put a serious kink in gameplay.
- Allow for a greater difference in the teams as the number of people on the server grows
- ChangeTeams' final statement chaged to default to team 2 instead of team 1.
[edit] Code
# team autobalance system
#tacticalgamer modifications by pokerface
#version 1.2
#-allow for dynamic resizing (death and changeteams)
#-do not autobalance COs or SLs
import bf2
import host
from bf2 import g_debug
def init():
if g_debug: print 'initializing autobalance script'
host.registerHandler('PlayerConnect', onPlayerConnect)
host.registerHandler('PlayerDeath', onPlayerDeath)
host.registerHandler('PlayerChangeTeams', onPlayerChangeTeams)
def onPlayerConnect(p):
# if not bf2.serverSettings.getAutoBalanceTeam(): return None
if g_debug: print 'place player on the team with least players'
team1 = 0
team2 = 0
for tp in bf2.playerManager.getPlayers():
if tp != p:
if tp.getTeam() == 1: team1 += 1
else: team2 += 1
team2 = team2 * bf2.serverSettings.getTeamRatioPercent() / 100.0
if team2 > team1:
p.setTeam(1)
else:
p.setTeam(2)
def onPlayerDeath(p, vehicle):
if not bf2.serverSettings.getAutoBalanceTeam(): return None
#COs and SLs should not be autobalanced off of their team.
if p.isCommander() or p.isSquadLeader(): return None
if g_debug: print 'handling player death autobalance'
# dont use autobalance when its suicide/changes team
if p.getSuicide():
p.setSuicide(0)
return None
aiPlayerBalance = 0
team1 = 0
team2 = 0
for tp in bf2.playerManager.getPlayers():
if tp.getTeam() == 1:
team1 += 1
else:
team2 += 1
if tp.isAIPlayer():
aiPlayerBalance += 1
else:
aiPlayerBalance -= 1
if host.sgl_getIsAIGame():
if not (aiPlayerBalance < 0):
if not p.isAIPlayer():
return None
totalplayers = team1 + team2
team2 = team2 * bf2.serverSettings.getTeamRatioPercent() / 100.0
if g_debug: print 'team1 %f team2 %f' % (team1,team2)
if totalplayers < 32:
diff = 1
elif totalplayers < 48:
diff = 2
else:
diff = 3
if (p.getTeam() == 1):
if (team2 + diff) < team1:
p.setTeam(2)
elif (p.getTeam() == 2):
if (team1 + diff) < team2:
p.setTeam(1)
def onPlayerChangeTeams(p, humanHasSpawned):
if not bf2.serverSettings.getAutoBalanceTeam(): return None
if host.sgl_getIsAIGame():
if humanHasSpawned: return None
if p.isAIPlayer(): return None
if g_debug: print 'handling aiplayer team change autobalance when round not started'
team = p.getTeam()
aiplayer = 0
for tp in bf2.playerManager.getPlayers():
if aiplayer == 0 and tp.getTeam() == team and tp.isAIPlayer():
aiplayer = tp
break
if aiplayer:
if p.getTeam() == 1: aiplayer.setTeam(2)
else: aiplayer.setTeam(1)
else:
if g_debug: print 'checking to see if player is allowed to change teams'
team1 = 0
team2 = 0
for tp in bf2.playerManager.getPlayers():
if tp.getTeam() == 1: team1 += 1
else: team2 += 1
totalplayers = team1 + team2
if totalplayers < 32:
diff = 1
elif totalplayers < 48:
diff = 2
else:
diff = 3
if abs(team1 - team2) > diff:
if p.getTeam() == 2: p.setTeam(1)
else: p.setTeam(2)
Return to BF2 Plugin Source Code.
