Plugin:autobalance

From Tactical Wiki

Revision as of 16:09, July 11, 2005 by Pokerface (Talk | contribs)
(diff) ←Older revision | Current revision (diff) | Newer revision→ (diff)
Jump to: navigation, search

[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.