TitanTeamFix: - v2.0beta5 (coded by John 'Shambler' Barrett)
------------
	A modular team balancing tool initially coded for the Titan servers: http://ut2004.titaninternet.co.uk/
	this is a greatly expanded port from my UT2004 version of this tool.


Installation:
------------
	- Put the UTGame folder in your "%My Documents%\My Games\Unreal Tournament 3\" folder OR, if you use
		-nohomedir in your commandline then place the files in your UT3 install folder.

	- Put the Web folder in your UT3 install folder

	- To run the normal team balancer: (which removes your server from the pure list)
		- Add '?Mutator=TitanTeamFixUT3.TTeamFixMut' to your server commandline; when using the UT3
			WebAdmin, select 'Titan Team Fix' from the mutator list.

	- To run the 'Lite' team balancer: (which keeps your server on pure list, at the cost of some settings)
		- Open UTEngine.ini in your UTGame\Config folder, and under [Engine.GameEngine] add:
			ServerActors=TitanTeamFixUT3.TTeamFixLite


Notes:
-----
	- All settings can be configured through the UT3 WebAdmin
	- This version of TitanTeamFix requires at least UT3 patch 2.0
	- The 'Source' folder doesn't need to be put anywhere, it contains the source code
	- The file 'TTFMsg.u' is pushed to clients; it's for the TTF notification messages


Configuration Info:
------------------
	- bAnnounceSwitch: If true, all players will be notified when a player is forcibly switched by TTF

	- bAnnounceImbalance: If true, TTF will message all players when it notices that the teams are uneven

	- bAnnounceSlotOpened: (Doesn't work with 'Lite' balancer) If true, all spectators will be notified if a
		player leaves when the server is full


	- PreferredTeams: (Doesn't work with 'Lite' balancer) This allows server admins to dictate how the players
		preferred team (i.e. the team a player wants to join when entering a server) is handled, the
		different options for this are:

		- PT_Disable: Ignores the players preferred team and randomly assigns the player to a team

		- PT_Enable: Tries to assign the player to his/her preferred team (UT's default)

		- PT_PreferLosingTeam: Changes the players preferred team so that they try to join the losing team


	- ImbalanceAction: The action TTF will undertake when it notices that the teams are uneven, options are:
		- IA_NoAction: Does nothing; use this if you only want the messages or preferred team modification

		- IA_Countdown: If the teams are still uneven after 'BalanceCountdown' seconds, forcibly even them

		- IA_DeathEvent: If a player dies who has been ingame less than 2 minutes, this switches him/her

		- IA_CountdownOrDeath: A combination of IA_Countdown and IA_DeathEvent, forcibly evens the teams if
					no player has been switched after 'BalanceCountdown' seconds

		- IA_TeamDeath: Specially for round based gametypes (i.e. BTA/BFA), this monitors for the death of
			an entire team and rebalances them if they are uneven


	- BalanceCountdown: If 'ImbalanceAction' is set to 'IA_Countdown' or 'IA_CountdownOrDeath', then this is
		the amount of time (in seconds) that TTF will count down from before forcibly balancing the teams
		NOTE: If set at or below 0, the teams will be instantly balanced


	- ShuffleTeams: Allows server admins to shuffle the teams at the start or end of a match, options are:
		- ST_Disable: Disables team shuffling

		- ST_MatchStart: Shuffles the teams at the start of every match

		- ST_MatchEnd: Shuffles the teams at the end of every match (before travelling to next level)

	- ShuffleMode: The method used to rate and balance players when shuffling teams
		- SM_Random: Randomly assigns players to a team

		- SM_Points: Distributes players evenly based upon points

		- SM_PointsVsDeaths: Distributes players based upon points divided by deaths

		- SM_PointsPerSecond: Distributes players based on points divided by seconds ingame

		- SM_DamageDealt: Distributes players based upon total damage given out

		- SM_DamgeDealtVsDamageTaken: Distributes players based upon damage dealt divided by damage taken

		- SM_DamageDealtPerSecond: Distributes players by total damage dealt divided by seconds ingame

		- SM_ELORank: Distributes players based upon their ELO rank


	- bBotsBalanceTeams: If true, then bots are used to balance the teams when there are an uneven number of
		human players in the game. N.B. This is incompatible with bPlayersVsBots


	- BotBalanceCutoff: If bBotsBalanceTeams is true, then bots are no longer used to balance the teams when
		the playercount exceeds this number. N.B. Disabled when 0


	- bIgnoreIdlePlayers: If true, TTF will not count idle players when checking if the teams are uneven

	- IgnoreIdleTime: The amount of time a player can be inactive before TTF considers the player as idle

	- RecentlyJoinedTime: The amount of time since joining where a player is considered 'recently joined'
		(only these players are switched when 'Imbalance Action' is 'Balance on Death')

	- SwitchOrder: Controls how TTF decides which player should be switched, the higher up a 'SwitchOrder'
		entry, the more important it is (NOTE: The .ini file must be modified manually for this setting)
		Written in this format: SwitchOrder=(Variable=SV_JoinTime,Placement=SP_Low)
		'Placement' controls whether a variable puts a player higher/lower in the list, and 'Variable'
		is the player value which is checked, 'Variable' options are:
		- SV_SwitchCount: Sorts based on the number of times TTF has already switched a player (SP_Low
			prioritizes players who have been switched less)

		- SV_JoinTime: Sorts based on how recently a player joined the game (SP_Low prioritizes recently
			joined players)

		- SV_Score: Sorts based on scores (SP_Low prioritizes players with lower score)

		- SV_Deaths: Sorts based on deaths (SP_Low prioritizes players with more deaths)

		- SV_Health: Sorts by health/armor (SP_Low prioritizes players with less health and dead players)

		- SV_KillingSpree: Sorts by killing spree progress (SP_Low prioritizes players with a lower spree
			kill count)

		- SV_HasSuperWeapon: Sorts based on whether or not a player has a superweapon (SP_Low prioritizes
			players without one)

		- SV_HasSuperPickup: Sorts based on whether a player has an active powerup, e.g. berserk or
			invincibility (SP_Low prioritizes those without)

		- SV_InVehicle: Sorts based on whether a player is in a vehicle (SP_Low prioritizes those on foot)

		- SV_AliveTime: Sorts based on time since last death (SP_Low prioritizes players who have been
			alive for a shorter period)

		- SV_Admin: Sorts based on whether a player is an admin (SP_Low prioritizes normal players)

		- SV_FlagDistance: Sorts based on a players distance from an objective, e.g. enemy flag, enemy
			flag base, dropped friendly flag, neutral/enemy WAR nodes, dropped orbs (SP_Low
			prioritizes players further away from an objective)


Advanced Configuration Info:
---------------------------
	When TitanTeamFix runs for the first time, it will create an entry in UTGame.ini under the header
	'[TitanTeamFixUT3.TTeamFixConfigLoader]', with these options:


	- ActiveConfigurationProfile: This allows you to specify what configuration profile TTF will load from
		the UTTitanTeamFix.ini file

	- bSuffixGameToProfile: If true, TTF will add '_GameType' to the end of 'ActiveConfigurationProfile'
		when searching UTTitanTeamFix.ini for the configuration profile; this allows you to specify
		different configuration profiles for each gametype (i.e. 'default_UTOnslaughtGame_Content').

	- bAddWebAdminConfigMenu: Whether or not TTF will add a menu item to the webadmin, for configuring
		TitanTeamFix (includes interface for creating/modifying/deleting configuration profiles)


	To create new config profiles, open UTTitanTeamFix.ini and copy '[Default TTFProfile_Generic]' with
	all its options, paste it at the end of the file and modify the header (and settings) to match your
	new config profile.
	For example, with 'ActiveConfigurationProfile' set to "TestProfile" and 'bSuffixGameToProfile' set
	to "true" with a Warfare server, you would need a header like this:
	[TestProfile_UTOnslaughtGame_Content TTFProfile_Generic]


Message Customization:
---------------------
	Server admins and clients can customize the messages that TitanTeamFix displays; in UTTitanTeamFix.ini,
	server admins can adjust the following settings under [TTFMsg.TTeamFixMessageReplicationInfo]:


	- bEnableCustomMessages: Allows server admins to enable/disable custom server messages
	- bClientEnableCustomMessages: As above, except relating to clients


	- SwitchedMessage: The message given to a player, when switched to the other team

	- AnnounceMessage: The message given to ALL players, when a player is switched (the code %p is replaced
		with the player name at runtime)

	- MultipleAnnounceMessage: The same as 'AnnounceMessage', but for multiple players being switched

	- ImbalanceMessage: The message given to all players, when the teams become uneven

	- IdleImbalanceMessage: Same as 'ImbalanceMessage', except this includes the number of idle players
		(the code %i is replaced with the number of idle players)

	- SlotOpenedMessage: The message given to spectators on a full server, when an active player leaves
		(thus opening a slot for a spectator to join)

	- ShuffleMessage: The mesage given to all players, when the teams are shuffled at the start/end of game


	- MessageColor: The colour given to all messages


	Clients can also customize the raw message strings, by creating a UTTitanTeamFix.int file in the
	UTGame\Localization\INT folder (replacing INT with the appropriate folder name, if using a non-English
	version of UT3), and adding a section '[TitanTeamFixUT3.TTeamFixMessages]'.
	Then the 'SwitchedMessage' etc. strings can be customized in that section, like described above.


Contact:
-------
	JBarrett847@GMail.com or 'Shambler' on http://ut2004.titaninternet.co.uk