//==============================================================
// UAdminMod
// Version:	0.9.5 BETA 
//
// Author:	TBone
// Email:	[email protected]
// Web:		www.Fragskill.com
//
// Using this mutator as a base is PROHIBITED.
// Reworking and redistributing this mutator is PROHIBITED.
//
// Copyright (c) 2004.
// All rights reserved.
//==============================================================


This release of UAdminMod is a public beta.  There are no known 
issues with any of the features, however, if you feel you have
found a bug, please email me as soon as possible so that it can
be investigated and resolved.

Ideas for features and feedback on current features is welcome
and highly encouraged.  If you have something to say, please do
so in this thread at the Atari Server Administration forums:

[THREAD]

1.	Description
2.  Installation
3.	Configuration (Includes Quickstart)
4.	General Commands
5.	Team Balancer
6.	Reserved Slots
7.	Server Messages
8.	Automatic Login for Admins
9.	Silent Admins
10.	Name/Nick Filter
11.	Reserved Nicks
12.	Ping Watcher
13.	Known Issues
14.	Planned Features
15.	Credits

1.	Description

	NOTE: RUNNING THIS MUTATOR WILL *NOT* DISQUALIFY YOUR SERVER
	AS A "STANDARD SERVER"!  DO NOT ADD THIS MUTATOR AS A SERVER
	ACTOR!  IT WILL NOT WORK PROPERLY IF YOU DO THAT!
	
	Inspired by the orignal AdminMod from Half-Life, UAdminMod
	was created to put the control of YOUR server back into 
	YOUR hands.  UAdminMod provides Reserved Slot functionality,
	a custom messaging system for displaying server messages,
	a slew of commands to help keep your players "in line", a
	team balancer, chat log, chat filter, nick/name filters, ping 
	watcher, silent administration, and even automatic admin login 
	when an admin joins the server.  All of these features are 
	highly configurable and can easily be enabled/disabled.
	
	All command usage, blocked nicks, etc, will be logged to 
	/UT2004/UserLogs/UAdminMod.log
	
	NOTE:  This mutator has a built-in feature to protect against 
	the Unreal Tournament 2004 server exploit detailed here:  
	http://www.securityfocus.com/bid/9840/info/ .  There is no 
	guarantee that UAdminMod will protect against this exploit.

2.	Installation (Server Only)

	NOTE:  This mutator will not load in Single Player/Instant
	Action.  It's sole intended purpose is to be run on a UT2004
	server (Listen or Dedicated).
	
	To install this mutator, extract the following files to 
	UT2004's 'System' directory:  
	
	UAdminModV095b.u
	UAdminModV095b.int
	UAdminModV095b.ucl
	
	The UAdminModV095b.u.uz2 file is simply a compressed version 
	of the .u file.  If you have a redirect server, place the 
	.uz2 file in the appropriate directory.  Otherwise, discard
	it.  If you have absolutely no idea what I'm talking about,
	discard it.
	
	Next, you need to add the mutator to your ServerPackages.
	Do this by opening your server's configuration file (usually
	UT2004.ini) and finding the [Engine.GameEngine] section.  
	Somewhere in this section, add the following line:
	
	ServerPackages=UAdminModV095b
	
	Once you've done this, you need to tell your server to run 
	UAdminMod.  This is just like running any other mutator.  Add
	it to your server's commandline and in the appropriate MapVote
	settings (if you're using MapVote).
	
	Commandline example:
	
	ucc server CTF-Maul?game=xGame.xCTFGame?Mutator=UAdminModV095b.UAdminMod,DualAssaultRifles2k4.DualAssaultRifles log=server.log
	
	Finally, you need to copy the contents of UAdminModV095bINI.txt
	to your server's configuration file (UT2004.ini by default).  If
	you don't care about configuring UAdminMod at all, you can skip
	this step; the settings will automatically be added to the file
	the next time you start your server and UAdminMod will run with
	its default settings.
	
3.	Configuration (Server Only)

	QUICKSTART:
	  
	Nothing *needs* to be configured.  By default, all commands 
	will be available to admins and the balance teams command 
	will be available to all players.  All command executions 
	will be logged to UT2004/UserLogs/UAdminMod.log, and the 
	rest of the features will be disabled.
	
	SLOWSTART:
	
	First off, each of the admin commands can be enabled or 
	disabled by setting bEnabled to true or false in their 
	respective section.  This is pretty self-explanatory.  For 
	instance, to disable the uam_slay command, go to the 
	section labeled [UAdminModV095b.UAMSlay] and change bEnabled
	to false.
	
	Some sections (ie, [UAdminModV095b.UAMBalanceTeams]) have 
	a setting called bAdminCmdOnly.  When false, any user can 
	execute the command.  When true, a user must be logged in 
	as an admin in order to execute the command.  By default,
	anyone can run the balance teams command, help command, 
	and players command.  All other commands are restricted to 
	administrators only.
	
	Another item to note is bUseAdminName.  This only pertains
	to punishment commands (slay, slap, llama, etc).  It defaults
	to true, which means that the server message broadcasted
	will include the admin's name... ie, "Frogger froze TBone". If
	false, the admin's name will not be revealed (though the log
	of the command will have the admin's name)... ie, "an Admin
	froze TBone".
	
	Most sections and properties relating to UAdminMod are 
	pretty self-explanatory, but here are some details. The specific
	sub-systems of UAdminMod are described in their respective 
	sections.
	
	[UAdminModV095b.UAdminMod] 
	
	bNotifyOfUAM=true
		If true, a message will be broadcast to your players that 
		the server is running UAdminMod.  The frequency of this 
		broadcast is determined by iNotifyInterval.
		
	iNotifyInterval=300
		The frequency (in seconds) that users are notified that 
		your server is running UAdminMod.  It is set to every 
		300 seconds by default.
		
	[UAdminModV095b.UAMBroadcastHandler]
	
	bLogChat=False
		If true, all chat is logged to /UserLogs/UAdminMod.log.
		
	bFilterChat=False
		If true, chat will be filtered for the words you 
		specify.
		
	BadWords=?
		You can add a BadWords entry for every word you want
		bleeped out of the chat.  You can have up to 50 entries.
		Adding a BadWords entry is just like a CustomMessages
		entry or a ServerPackages entry.
	
	[UAdminModV095b.UAMSlap]
	
	iSlapDamage = 10
		This is the amount of damage done to a target player 
		when slapped.
		
	fSlapMomentum = 100000.000000
		This is the amount of momentum the target player receives
		from a slap.  I do not recommend setting this higher than 
		100000.000000; otherwise, you're pushing people halfway 
		across the map.
		
	[UAdminModV095b.UAMFreeze]
	
	iMaxFreezeTime=20
		This is the maximum amount of time a player will remain
		frozen.  Once this time has elapsed, they will be dealt 
		with in accordance to bDeathAfterFreeze...
	
	bDeathAfterFreeze=true
		If true, the player will be killed if iMaxFreezeTime
		elapses before someone else kills them.  If false, they
		will be "unfrozen" without being killed at the end of
		iMaxFreezeTime... but that's no	fun, so leave it set to
		true.
		
	[UAdminModV095b.UAMGameRules]
	
	bAllowFFAgainstFrozen=true
		If true, frozen players can be hurt/killed by their team
		for the duration of their freeze.  I put this option in 
		since most times, an unscrupulous player is typically 
		hurting his own team rather than the enemy, so it's his
		own team who should get the revenge.  Setting this to
		true will not prevent the other team from hurting or
		killing him - it just also allows his own team to come
		after him.
	
	bAllowFrozenSuicide=false
		When false, frozen players will not be allowed to suicide.
		If you set this to true, frozen players will be allowed to
		kill themselves if they are frozen. That sort of defeats
		the purpose of being frozen, so I recommend leaving this 
		set to false.
		
	[UAdminModV095b.UAMBalanceTeams]
	
	bAdminCmdOnly=false
		If false, any player can execute the command.  If true,
		players must be logged in as an admin to use it.
		
	NOTE: bEnabled for UAMBalanceTeams only refers to the enabling
	of the MUTATE UAM_TEAMS command.  This setting is independant
	from the rest of the UAMBalanceTeams options (aka, Team Balancer).
	
	NOTE #2: UAdminMod no longer broadcasts the availability of the
	balance teams command at a regular interval.  The reason for this 
	is I decided that it was only necessary to inform players that 
	the command is even	available is if someone is complaining about 
	the teams in the first place.  So, if I say "even the stupid teams!" 
	in the chat area, UAdminMod will broadcast the availability of the 
	command to all players.  Of course, if I just type "teams", 
	UAdminMod will attempt to balance the teams (if bEnabled is True and 
	bAdminCmdOnly is false; or if I'm an admin).
	
	The rest of the configuration deals with each particular section. All
	of them are disabled by default, so if you don't need/want them, you
	are finished.

4.	General Commands

	When applicable, 'PlayerID' refers to the target player's unique 
	player ID.  These IDs can be obtained by typing MUTATE UAM_PLAYERS 
	in your console, or UAM_PLAYERS into your chat.  'PlayerName' refers 
	to the player's name or part of	his/her name.  Executing a command 
	against 'bon' will match 'TBone', 'Ebony', and 'James_Bond'.
	
	When specifying a command by player name, you must specify at least 3
	characters of that player's name.  Remember: anyone who's name 
	contains those 3 (or more) characters will receive the command.
	
	Commands can be issued/executed in two ways: through the console or
	through your chat.
	
	CONSOLE:  	MUTATE  
	CHAT:		 
	
	Command:		UAM_HELP
	Description:	Displays the list of UAdminMod commands in 
					the console.
	
	Command:		UAM_PLAYERS
	Description:	Displays a list of players and their player
					IDs in the console.
	
	Command: 		UAM_SWITCH 
	Description:	Moves target to the other team.
	
	Command: 		UAM_FREEZE 
	Description:	Prevents target from moving until they respawn. How
					long they are frozen depends on how you've configured
					the command.
	
	Command:		UAM_LLAMA  / UAM_UNLLAMA 
	Description		Changes name to "Llama" and prevents them from speaking 
					coherently... Oorgle!  Players will have the ability to 
					change their names back to whatever they please, but 
					they will not be able to speak "well" until you 
					uam_unllama them.  There is a max of 25 entries in the 
					llama list.  Once the list is full, the oldest entry is 
					removed to make room for a new entry.  If/when you 
					unllama a player, their name will be changed back to 
					their original name.
	
	Command:		UAM_MUTE  / UAM_UNLLAMA 
	Description		Changes name to "Muted" and prevents them from speaking 
					at all.  Players will have the ability to change their 
					names back to whatever they please, but they will not be 
					able to speak until you uam_unmute them.  There is a max 
					of 25 entries in the mute list.  Once the list is full, 
					the oldest entry is removed to make room for a new entry.  
					If/when you unmute a player, their name will be changed 
					back to their original name.
	
	Command:		UAM_RESETSCORE 
	Description:	Resets their score to 0.  Useful if someone is exploiting 
					a map or something of the like, and is just racking up 
					points.
	
	Command:		UAM_SLAP 
	Usage:			[mutate|Say|TeamSay] uam_slap [PlayerID|PlayerName]
	Description:	Slaps them and detracts a small amount of health
					(10 hit points by default).
	
	Command:		UAM_SLAY 
	Description:	Kills them.  Use with mercy.  Between the deafening 
					thunder, the blinding lightning, and the Sphere of Death, 
					getting slayed really sucks.
					
	Command:		UAM_TEAMS
	Description:	Evens the teams.  If one team has 2 or more players than 
					the other team, UAdminMod will begin shifting players over 
					to the shorthanded team, beginning with the newest player 
					to join. By default, this is a public command.  You do not 
					need to be logged in as admin to use it, however, admins 
					can disable the public use of this and restrict it to 
					admins only.
	
	Command:		UAM_VOMIT 
	Description:	Causes them to chuck all of his/her inventory. They will 
					not be able to pick up anything until they respawn.
					
	Have some cool ideas for more commands?  Let me know!!!
	
5.	Team Balancer

	Thanks to excellent community feedback, UAdminMod now has a VERY
	robust set of features and options for keeping your teams even.
	
	Locate the section [UAdminModV095b.UAMBalanceTeams] in your server's
	configuration file.
	
	bBalanceOnPlayerExit=False
		When true, UAdminMod will examine the teams whenever someone
		exits.  If they are uneven, UAdminMod will balance the teams
		according to the standard rules (moving the newest player on
		the overloaded team over to the shorthanded team, wash rinse
		repeat until teams are even).
		
	bMonitorTeamSwitches=False
		When true, UAdminMod will monitor team switches and take 
		various actions on them depending on the circumstances.  What
		actions are taken depend on bReportOnTeamSwitchesand
		bUndoBadSwitches.  See below;
		
	bReportOnTeamSwitches=False
		If bMonitorTeamSwitches is True and bReportOnTeamSwitches is
		True, UAdminMod will broadcast team change events to other 
		players to make them aware of what's happened.  For instance,
		if someone changes from the winning team to the losing team,
		a message will be broadcasted informing other players of his
		good deed.  If a player switches to the winning team, a 
		message will be broadcasted informing players of his treachery.
		If a player switches teams in an effort to balance them, that
		will also be broadcast on appropriately.

		
	bUndoBadSwitches=False
		(This is only applicable if bMonitorTeamSwitches is True)  If
		bUndoBadSwitches is True, then UAdminMod will undo team changes
		that were considered "bad", such as switching to the winning
		team or unevening the teams.
		
	bEnabled=True
		THIS OPTION ONLY REFERS TO THE AVAILABILITY OF THE UAM_TEAMS
		COMMAND.  IT IS INDEPENDANT OF EVERYTHING MENTIONED ABOVE.
		
	bAdminCmdOnly=False
		THIS OPTION ONLY REFERS TO THE AVAILABILITY OF THE UAM_TEAMS
		COMMAND.  IT IS INDEPENDANT OF EVERYTHING MENTIONED ABOVE.
		
	bAdminsImmune=True
		This option affects everything to do with team balancing, 
		whether it's the uam_teams command or the internal monitoring
		system.  When True, admins will not be evaluated by the system,
		their switches will not be undone, and they will not be used
		to help balance the teams.

6.	Reserved Slots
	
	This system is implemented via UAdminMod's custom AccessControl.  
	This is derived from Unreal Tournament 2004's Advanced 
	Administration system and does not modify any existing
	functionality; it ONLY adds the reserved slots functionality 
	and the ability for admins to be automatically logged in.
	
	In order to use this feature, you must first tell your server 
	to use this AccessControl class instead of the default one.  
	Note that by doing this, you will inherently be using the Advanced 
	Administration system.  If you do not want to use the Advanced 
	Administration system and only wish to use 	the Basic 
	Administration system, then ignore this entire section... but you 
	won't be able to use reserved slots or have admins automatically 
	logged in when they enter the server.
	
	If you are unsure of which system your server uses, look under 
	the [Engine.GameInfo] section in your server's ini file.  If 
	the AccessControlClass is set to Engine.AccessControl, then 
	your server uses the BASIC system.  If it is set to 
	XAdmin.AccessControlIni, then your server uses the ADVANCED 
	system.  Keep in mind that this can also be set in your 
	server's start-up commandline, and that will override the 
	setting in your ini file.  If you find that UAdminMod's 
	access control is not being loaded, make sure you're not 
	overriding the ini setting in the start-up commandline.
	
	So, without further ado...
	
	Change the AccessControlClass under	[Engine.GameInfo] to 
	UAdminModV095b.UAMAccessControlIni
	
	If you did this properly, you'll see the following text in your 
	server's log/console at start-up:
	
	UAdminMod: ----------------------------------------
	UAdminMod: UAMAccessControlIni for UAdminModV095b LOADED
	UAdminMod:   Author: TBone
	UAdminMod:   Email: [email protected]
	UAdminMod:   Web: www.Fragskill.com
	UAdminMod: ----------------------------------------
	
	You may see additional text inside the block, but that's okay.
	As long as the block appears, you're good to go.
	
	Next, locate the section [UAdminModV095b.UAMAccessControlIni]
	
	Here are the settings and their default values:
	
	bEnableReservedSlots=False
		The reserved slots system is off by default.  To turn it 
		on, change this to True.
	
	bMakeRoomByKicking=True
		When false, the server will make a reserved slot by adding
		a slot to the server for the player joining.  This new spot
		will be eliminated automatically when someone leaves.  The 
		server will create new slots as long as iMaxExpansion has 
		not been exceeded.  Once iMaxExpansion has been reached, 
		even players with reserved slots will be unable to join.
		
		If you set this to true, then the reserved slot will be 
		created by kicking the last player to join the server who 
		is not an admin and who does not posses a reserved slot.
		Folks who rent their servers from a host are advised to 
		use this option to avoid exceeding their agreed upon player
		limit.  That is why True is the default value.
		
	bUsePassword=True
		When true, players will be prompted to enter a password in 
		order to access a reserved slot.
		
		When false, reserved slots will only be given to players 
		who's player ID hash is listed in this section 
		(ie, ReservedHash=1234567890, see ReservedHash below if 
		you set this to False).
		
		NOTE: When someone enters the server with a reserved slot
		by entering a password, their hash will be stored to the 
		configuration file.  This will prevent them from ever 
		being kicked off the server when other players with 
		reserved slots join.
		
	iMaxExpansion=5
		This is the max number of additional slots the server will
		create for reserved slots.  If bMakeRoomByKicking is true, 
		this setting is irrelevant.
		
	sReservedSlotPW=
		This is the password for accessing a reserved slot.  For 
		your protection, the default value is an empty value and
		if you don't set it but you set bUsePassword to True, 
		UAdminMod will disable the reserved slots system.  If you
		control access by using the password option 
		(bUsePassword=True), you MUST specify a password.
		
	sOldReservedSlotPW=
		Do not modify this.  This is used internally to track 
		changes to sReservedSlotPW.  For instance, if you have 10 
		player hashes in your config file and you want to change
		sReservedSlotPW, then UAdminMod will detect the password 
		change and reset the ReservedHash values so that players 
		without	the new password cannot join.  Once they join with
		the new password, their hash will be re-added to the list.
		Now, if bUsePassword is false, this is ignored.  If 
		bUsePassword is false, changing either of the password 
		values will have no effect.
		
	ReservedHash=1234567890
		You can add up to 25 ReservedHashes.
		
		Adding a new reserved hash is just like adding a 
		ServerPackage:  Simply create a	new line in 
		[UAdminModV095b.UAMAccessControlIni]:
		
		ReservedHashes=23s83s83kdfhfkg83484kdkfg3494
		
		If bUsePassword is true, ReservedHash entries will be made
		by UAdminMod to track players who have supplied the correct
		reserved slot password.  This ensures that they are never 
		kicked by another player accessing a reserved slot.
		
		if bUsePassword is false, these lines are used by you to 
		enter the hashes of players who you want to have reserved 
		slot access. 
		
		To obtain your hash, open UT2004.log in your /UT2004/System
		directory.  Look for a line like "id=1212445lksdlsdfsfeee".
		That is your hash.  So, let's suppose your hash was 
		1234567890:  You would then add the following line:
		
		ReservedHash=1234567890
		
		The existing ReservedHash=1234567890 in the file is just 
		an example line.  You can change/delete it if you wish.
		
		If you exceed 25 ReservedHashes, UAdminMod will begin 
		pruning the oldest entries from the list until it is 
		back to 25.
		
	PrivClasses=XAdmin.xKickPrivs
	PrivClasses=XAdmin.xGamePrivs
	PrivClasses=XAdmin.xUserGroupPrivs
	PrivClasses=XAdmin.xExtraPrivs
		DO NOT MODIFY THESE!
		
	bAutoAdminLogin=False
		See Automatic Login for Admins for more information.
		
	NOTE:  If your server is already password protected, then the
	Reserved Slots password will suffice as a game password.  For
	instance, if your server's password is 'abc' and your reserved
	slots password is '123', then '123' will get you into the server
	as a catch-all password IF IT'S FULL.  If the server is not at
	capacity, the reserved slot password will not work.
	
	If there are additional features you would like added to the 
	reserved slots system, please let me know.  I will entertain all
	(reasonable) requests.
	
7.	Server Messages

	This feature allows you to set your server to broadcast up to 25
	messages which rotate at a given interval.  You can specify how
	long they're displayed, their color, and their frequency.
	
	To configure Server Messages (aka, Custom Messages), locate the 
	[UAdminModV095b.UAMCustomMessages] section of your server's 
	configuration file.
	
	bEnabled=False
		If True, server messages are enabled.
		
	bDspInChat=False
		If False, server messages will be displayed on their own line
		just underneath the chat area.  If set to True, server messages
		will be broadcast just like chat messages are, so they will
		blend in with chat/death messages.  I recommend leaving this
		at False, since your server messages are likely to be more
		noticed this way.  Plus, if you have UAdminMod treat your
		server messages like regular chat messages, your fMsgDuration
		and MsgColor settings will not take effect.
		
	bMsgBeep=True
		If True, players will hear a short beep when a server message
		is displayed.
		
	iMsgInterval=240
		This is the interval at which server messages are broadcast.
		
	fMsgDuration=10.0
		If bDspInChat is False, this setting dictates how long a 
		server message is displayed.
		
	MsgColor=(R=255,G=255,B=0,A=255)
		If bDspInChat is False, this setting dictates the color of a
		server message.
		
	CustomMessages=You can add up to 25 of these.
		These are the actual server messages.  To add new messages, 
		just add another CustomMessages=EnterMessageHere line to this
		section of your config.  You can have up to 25 server messages.
		If you exceed 25, UAdminMod will prune old messages until 
		you're back to 25.
	
8.	Automatic Login for Admins

	This system allows admins to have themselves automatically 
	logged in as admin whenever they join the server.

	Just like the Reserved Slots sytem, Auto Login for Admins is also
	dependant on UAdminModV095b.UAMAccessControlIni.  Even if you don't
	want to use Reserved Slots, you'll need to use this access control
	class to use Auto Login for Admins.  Even though the two features
	are unrelated to eachother, both depend on this class.  For 
	information on setting your server up to use this class, see
	Reserved Slots.
	
	So... assuming you've told your server to use UAdminMod's access
	control class, setting up Automatic Login for Admins is cake.
	Simply find the [UAdminModV095b.UAMAccessControlIni] section in
	your server's config and set bAutoAdminLogin to True.  This will
	turn the system on.  HOWEVER, a small change has been made to 
	this system in this version.  Instead of automatically remembering
	admins as soon as they log in, admins now have the OPTION of 
	having themselves automatically logged in the next time they 
	join.  Make sure you tell your admins about this.
	
	To have yourself automatically logged in the next time you join
	the server:
	
	1.  Log in as admin like you normally would.
	2.  Enter MUTATE UAM_SAVE in your console (or just uam_save in
	the chat area).  You'll receive a confirmation.
	
	To cancel the automatic login for yourself:
	
	1.  Make sure you're logged in as admin (you normally will be,
	since it automatically logged you in, but in case you logged
	yourself out, you'll need to log back in to issue the command).
	2.  Enter MUTATE UAM_FORGET in your console (or just uam_forget
	in the chat area).  You'll receive a confirmation.
	
	UAdminMod will remember up to 25 admins' login info.  If you 
	exceed 25 AdminRecords, UAdminMod will begin pruning the oldest 
	entries from the list until it is back to 25.

9.	Silent Admins

	This system relies on the UAMAccessControlIni class.  If your 
	server does not use this class as its AccessControl, you cannot
	use this feature.  See Reserved Slots for more information
	regarding this.
	
	Silent Admins allows you to silently admin your server.  When
	on, players will not be notified when admins log in or log out.
	Furthermore, the text "ADMIN" will not be displayed on the 
	scoreboard.  There will be no way for players to tell if any-
	one is logged in as admin.
	
	To turn this on, find the [UAdminModV095b.UAMAccessControlIni]
	section of your server's configuration file, and set 
	bEnableSilentAdmin to True.
	
	> See Known Issues for information regarding a possible bug in the 
	Silent Admin system.

10.	Name/Nick Filter

	UAdminMod has a feature that allows you to prevent players with
	certain words/characters in their name from joining your server.
	You can even set UAdminMod to ban such players.  
	
	This feature requires caution on your part.  Be VERY careful 
	about the values you screen from your server.  You don't want 
	to accidentally prevent half the players from entering your 
	server because you specified "elf" instead of "[Elf]" in your 
	blocked nicks list.
	
	Find the [UAdminModV095b.UAdminMod] section and note these 
	settings:
	
	bEnabled=False
		This feature is off by default.  Enable it by setting this
		to True.
	
	BlockedNicks=[Elf]
	BlockedNicks=[ELF]
		This is a list of blocked nicks.  You can have up to 
		50 nicks in this list.
		
		Adding a new nick is just like adding a ServerPackage:  
		Simply create a	new line in [UAdminModV095b.UAdminMod]:
		
		BlockedNicks=Value
		
		Out of the gate, UAdminMod filters the tag [Elf] and [ELF].
		If you do not wish to filter Elf members from your server,
		remove these two lines.  They exist as an example of how 
		to use this feature.  Note that "[Elf]" and "[ELF]" are 
		not the same.  These values are case-sensitive.
		
		When entering new values, BE AS SPECIFIC AS POSSIBLE!  
		If you want to prevent a certain clan from entering your
		server, make sure you enter their tag EXACTLY as they wear
		it, including the brackets, case, etc.  If your values are
		too non-specific, you'll unintentionally prevent others from
		entering your server.  This is why I only recommend using this
		feature if you have a very specific person or persons you 
		need to block, but you haven't yet had the chance to ban them.
		
	bBanBadNicks=False
		If False, players who's names match a value in your 
		BlockedNicks list will only be kicked from your server; they
		will not be banned.  They will receive a friendly message 
		explaining exactly why they were prevented from entering, and
		they will receive the admin's email address.
		
		If True, however, players who's names match a value in your
		BlockedNicks list will be permanently banned from your 
		server.  Due to a small bug in Unreal Tournament 2004's 
		ban system, I was unable to present banned players with a 
		custom message explaining why they were banned.  As a result,
		they will receive the generic ban message.  However, if they
		were kicked, they WILL receive the UAdminMod blocked-nick 
		message.
		
	Due to the nature of this feature, I urge extreme caution using 
	it.  I was very hesitant to include it, but it's here for the sake
	of completeness.
	
11.	Reserved Nicks

	Reserved Nicks is similar to the Nick Filter, except now we're looking
	for nicks that belong to specific player id's instead of ones that are
	forbidden in general.  This is really useful if you want to make sure
	that only your clan members can wear your clan tag, or if you want to
	make sure no one can impersonate an admin or respected community 
	member.
	
	Players are scanned when they first join the game and at a given 
	interval (iScanFrequency) thereafter (to check for mid-game name 
	changes).
	
	ReservedNicks=(PlayerHash="1234567890",PlayerNick="TBone")
		This entry exists by default and is just an example.  You can 
		remove it if you'd like.  In this example, no one will be permitted
		to have "TBone" as their nick or have it ANYWHERE IN THEIR NICK.
		This means that TBone is reserved as well as UberTBone. As you may
		guess, reserving "bob" or "me" would produce undesireable results.
		ReservedNicks should be as specific as possible.
		
		You can also use this to secure your clan tags.  Each member of 
		your clan will need an entry.  Let's suppose you want to lock down
		clan {HTM} on your server AND lock down the master admin nick:
		
		ReservedNicks=(PlayerHash="abcdefg",PlayerNick="{HTM}")
		ReservedNicks=(PlayerHash="abcdefg",PlayerNick="Frogger")
		ReservedNicks=(PlayerHash="1234567",PlayerNick="{HTM}")
		ReservedNicks=(PlayerHash="0987654",PlayerNick="{HTM}")
		
		No one can use Frogger except abcdefg, and no one can use {HTM}
		except abcdefg, 1234567, and 0987654.
		
		You can have up to 50 entries in this list. Add the entry just like
		you would a ServerPackage, ServerActor, or ReservedSlot.
		
	iScanFrequency=120
		This is the frequency, in seconds, that UAdminMod validates every-
		one's nicks against the ReservedNicks list.
	
	iWarnings=1
		This is the number of warnings a player will get before they are
		kicked.  For instance, if I join Frogger's server as {HTM}TBone,
		I will be warned immediately. If iWarnings is 1, I will receive 
		a warning and have iScanFrequency seconds to change it to something
		else.  If iWarnings is 2, I will have 360 seconds to change it and
		will receive two warnings.  Of course, if iWarnings is 0 (not 
		recommended), I'll be kicked as soon as I join.
		
	When a player is kicked by the Reserved Nicks system, they will receive
	the reason in the kick message.

12.	Ping Watcher

	PingWatch scans all players' pings every iScanFrequency seconds.
	
	For reference:
	
		HPB - High Ping Bastard. These are players who's pings are 
		considered high relative to the other players on the server.
		In some cases, an HPB (or a few of them together) can cause lag
		for the whole server.
		
		LPB - Low Ping Bastard. These are players who's pings are considered
		really low relative to the other players on the server. Server/
		Client netspeeds aside, they don't lag the server... but some feel
		that they have an unfair advantage. The option is here for the sake 
		of completeness.
	
	For any given player, their current ping is stored and an average is 
	established based on the number of scans that have been done for them 
	individually. Once iMinScansForAction has been reached for that player, 
	their average ping is evaluated for being too high or too low. If their 
	AVERAGE ping breaches a threshold, they are kicked (short spikes will 
	not count against them). If they are kicked, the event is logged 
	(/UserLogs/UAdminMod.log) and they are shown a message explaining why 
	they were kicked. 
	
	Note that if bCheckForServerLag is True (which I highly recommend), the
	average ping on the server will be taken into account before reviewing
	anyone's pings. If UAdminMod determines that the server is lagging, the 
	event will be logged and the current scan will be aborted.
	
	Lastly, in any given scan, any player with a ping of 999 or 0 will be
	ignored since 0 or 999 represents other things going on rather than a 
	poor connection. Also, scans will not take place prior to match start or 
	after the match has ended.
	
	The settings for Ping Watcher are described below, but aside from setting
	iMaxPing, I recommend leaving them alone.  The defaults have been heavily
	tested and offer the most accurate calculations on a given player's ping
	over the course of a game.  They've been tweaked to all but eliminate a
	player from being unfairly kicked while still keeping the pings on your
	server within a reasonable level.  Remember: leaving iMaxPing at 999
	effectively disables any checking for high pings, while leaving iMinPing
	at 0 effectively disables any checking for low pings.  I recommend 
	leaving iMinPing at 0 and setting iMaxPing somewhere between 250 and 300.
	
	bEnabled=False 
		If True, the utility is enabled. Shocking, I know. 
		
	bCheckForServerLag=True 
		If True, PingWatch will make sure the server isn't lagging 
		(and thus responsible for players' high pings) before it validates 
		pings.  The way it does this is somewhat crude (but effective): It 
		checks everyone's pings, and if the average ping on the server is 
		greater than iMaxPing, it aborts the current scan. I would NEVER 
		set this to False unless you want to be REALLY strict and are 
		POSITIVE your server will never be the cause of lag.
		
	bIgnoreHighAndLow=True
		Similar to bCheckForServerLag, this is a measure designed to prevent
		people from being kicked when their ping average isn't entirely 
		accurate due to a short spike on their line. By leaving this on, 
		players' high ping and low ping will be removed from their ping 
		average. This results in a more accurate ping average over time.
		
	bAdminsImmune=True
		Self-explanatory.
		
	iMaxPing=999 
		This is the threshold for kicking HPB's. Leaving it at 999 
		disables checking for HPB's.  If you want to enable this, here is
		a basic set of guidelines:
		
			Not Strict: 300
			Moderately Strict: 175 - 200
			Strict SOB: < 150
			
		If it were my server, I'd probably set it somewhere between 225
		and 300, but that's just me.
	
	iMinPing=0 
		This is the threshold for kicking LPB's. Leaving it at 0 
		essentially disables checking for LPB's.
		
		Setting this at all makes no sense to me, so do I can't really
		offer any guidelines here.
		
	iScanFrequency=20
		This is the frequency, in seconds, that PingWatch scans players' 
		pings.
		
	iMinScansForAction=4 & iWarnings=1
		This is the minimum number of scans on a given player before 
		action is taken on them for AVERAGING a too high/low ping.  If
		you leave these two settings at 4 and 1 respectively, then no 
		one player will be kicked until the SIXTH scan.  That's 4 
		scans + 1 warning = 5 scans.  After the fifth scan, they are
		fair game.  Let's suppose their average ping doesn't climb 
		above iMaxPing until the 20th scan, but they've had no warnings.
		Well, they'll receive a warning on the 21st scan and, if their
		ping hasn't dropped by the 22nd scan, they'll be booted on the 
		22nd scan.
	
	iMinPlayers=4
		This is the minimum number of players that need to be on the 
		server before Ping Watcher will begin scanning and tracking
		pings.  If you have a large server (say, 10+ players) and
		decent bandwidth, you may not care to start scanning unless 
		the player count reaches a certain percentage of that.  If 
		my server had a capacity of 16 players, I probably wouldn't 
		start scanning pings until it reached 8 players.  Why?  
		Because even if someone is lagging, I want them on my server
		to help attract more players.  When more players arrive, then
		we can let him/her go!  If you want to disable this option,
		just set it to 0.

	iScanDelay=90
		I strongly recommend not altering this setting.  This is the
		amount of time a player can play on a server before they'll
		be included in the ping scans.  Because a lot of information
		is pushed down to the client when they first connect (this is
		AFTER they've received any mutators and/or maps), their	pings
		are higher for a short while (30 seconds or less usually)
		after connecting.  This delays scanning them until all of that
		stuff has been pushed down to them.  If you're running a 1-on-1
		DM server, you can probably set this to 20 or 30 seconds.  For
		large ONS servers, leave it at 90.	
		
	A few notes:
	
	a.  Players are evaluated based on their average ping over time... 
	not one specific ping. For instance, if the server's maximum 
	allowable ping is 200 and I have 6 scans done on myself that found
	pings of 50, 65, 70, 45, 250 (spike on my ISP), and 60 respectively, 
	my AVERAGE ping	would be 90 - I will not be kicked or warned.
	
	b.  bCheckForServerLag is important. I seriously recommend leaving 
	this alone. Let's take an extreme example:  Suppose over the course
	of 6 scans I have pings of 50, 65, 750, 630, 65, 70... but on the 
	third and forth scans (750 and 630), half of the server's players had 
	similar pings.  Well, assuming the server's maximum allowable ping is 
	still set at 200, I might be concerned about getting kicked.  Wrong.
	Those third and forth scans would be completely discarded for everyone, 
	since it's pretty apparent that it was server lag that caused my pings 
	to shoot through the roof.  HOWEVER, if the server had disabled 
	bCheckForServerLag, those two scans would be factored in and half the 
	server's players would have artifically inflated average pings (mine 
	would be 272), and we would be kicked if those two scans pushed our
	averages above the threshold.  Now, that's an extreme example... scans
	take place every 20 seconds by default, so one or two high scans aren't
	going to impact the average much, but it still helps to keep this 
	option on.
	
	c.  bIgnoreHighAndLow can be set to false to make your server a little
	more strict. Setting this to false won't have the landslide negative
	effects that setting bCheckForServerLag to false could... it just 
	tightens things up a little. To explain how it works, lets use the 
	following example:
	
		Suppose I've been on a server for 3 minutes. If iScanFrequency is
		set at 30 seconds, I will have had 6 scans by now.  Here are the 
		results of those scans:
		
			1. 60ms
			2. 100ms
			3. 70ms
			4. 80ms
			5. 850ms
			6. 75ms
			
			AVG: 206ms
			
		It's obvious that I had a little spike on my line during the 5th 
		scan, and most server admins probably wouldn't want to have me
		kicked, even if their threshold is set at 200ms (which, by the 
		way, is a little strict).  Well, if you toss out the 1st and 5th 
		scan (remember, both the high and the low are thrown out with this
		option on), my average is now 81ms - which is a far more accurate
		representation of my connection than 206ms is. I'm now far from 
		getting kicked.

13. Known Issues

	There *might* be a bug in the silent admin system that can cause a 
	General Protection Fault (GPF) on client machines (not the server).  
	The testers and	myself have not been able to reproduce this on more
	than one server, let alone at will.  Three servers ran fine with no 
	issues, while one server caused clients to experience the GPF.  Because 
	of this, I have not been able to determine the origin of the bug, or 
	even determine if the bug is a result of UAM or a configuration setting 
	on the server that experienced it.
	
	If you are concerned about this and do not wish to be a guinea pig,
	simply leave bSilentAdmin set to FALSE.  If the bug is in fact due 
	to UAdminMod, leaving bSilentAdmin set to false will bypass it.
	
	I would be grateful to anyone who chooses to turn this feature on in
	order to help determine if this is a bug in UAdminMod.  If you decide
	to turn it on, please email me and let me know the results.  I've been
	unable to duplicate the problem on my own server or three out of four
	of our beta testers' servers.  Additional input from you would be very
	beneficial to the development of this feature.
	
	Other than that, there are no known issues.

14.	Planned Features

	a.	Issue commands from server console/web admin.
	
	b.  Menu system for quick command execution.
	
	c.  Optional auto-demorec.
	
	d.	uam_clan TeamID Tag:  This will move everyone with Tag over
	to team TeamID, and the rest of the server to the other team. 
	Calling this command will automatically disable team balancing,
	since the teams will likely be thrown out the window when this 
	command is issued.
	
	e.	Web Admin interface for all configurable options.
	
	f.	Have an idea?  Email me!  I will cater to any request that is
	applicable to the majority of servers/admins.

15.	Credits

	Frogger, Nihilist, and J4K0BYT3 for assisting with the closed BETA 
	testing.

[download file as is] (last changed: Mon, 17 Oct 2005 08:09:25 -0500)