El Muerte's UT2004 Creations
ServerExt
ServerExt
Copyright © 2004 Michiel "El Muerte" Hendriks 

ServerExt

ServerExt is a package containing extentions for UT2004 servers. It consist out of a couple of independed components: More components will be added in the future.
The ServerExt package is being developed by Michiel "El Muerte" Hendriks. This is an unofficial add-on and not supported by Atari support.

Downloads

New versions of this package can be downloaded from the ServerExt website.

License for ServerExt

Open Unreal Mod License
Version 1, March 2004

0. Definitions
"Program"       the work, either in binary or source form, that has a notice
				attached to it stating that it has been released under this
				license it by the copyright holder.
"Modification"  a derivate of the Program or any other work based on the Program
"Linking"       using parts of the Program, or using parts of any other work,
				thus creating a direct dependency
"You"           the licensee
"Runtime Environment"
				the virtual machine or operating system required to run the
				Program, as released by the Publisher or Creator of said
				runtime environment. This includes any extentions or updates
				for the runtime environment released by the Publisher or
				Creator.

1. License
Herewith everybody is granted permission to copy and distribute verbatim copies
of this document. The only restriction lies on changing the content, with the
exception to translation of this license.

This license applies to the Program that has been released under this license.
The license only applies to copying, distribution and modification of the
Program. Execution or output of the Program are not covered by this license,
however the right for additional limitations on the use (that do not cover
copying, distribution or modification) is granted to the copyright holder.
This license is only valid when all terms in this license comply with the
licenses of the dependecies of the Program. This includes the license of the
possible required runtime environment.

2. Copying and distribution
You are granted to copy or distribute verbatim copies of the Program, on any
medium, or in any format as you see fit. You are not limited to charging a fee
for the physical act of transferring the copy, nor are you limited to provide
warranty for the Program in return of a fee. Unless this is prohibited by the
license of the Runtime Environment.

Any distribution of the program should be accompanied with a verbatim copy of
this license.

3. Modification
You are allowed to modify the Program, or portions of it, therefore making it a
derivate of the Program. You are allowed to distribute your modifications under
the following conditions:
		- You must clearly state that it is a modification or derivate of the
		  Program
		- The original copyright notice must be kept intact
		- The modified files must contain notices of the changed made to it
		- The Modification must be released under the same license as the Program
		- Distribution happens in compliance with section 2

4. Source
The original source of the Program or Modification must be freely available on
request.

5. Linking
The Program or Modification may only link with other work that have been
released as free software.

The license grants exclusive right to link with any part of the Runtime
Environment, as provided by the publisher or creator of said Runtime
Environment.
Reusing pieces of source code available in the runtime environment in the
Program is only allowed under the following terms:
		- the "borrowed" code is clearly marked to originate from the runtime
		  environment, quoting the original copyright.
		- the following notice is added to the top of the file:
		  "This file contains portions of code from the runtime environment."

The right to "port" the Program to another runtime environment is reserved for
the copyright holder.

6. NON WARRANTY
THIS SOFTWARE DOES NOT COME WITH A WARRANTY OF ANY KIND, UNLESS NOTED OTHERWISE
BY THE COPYRIGHT HOLDER OR WARRANTY PROVIDER. THE ENTIRE RISK OF THE PERFORMANCE
AND QUALITY OF THE PROGRAM LIES WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE,
YOU WILL ASSUME ALL COSTS FOR REQUIRED OF REPAIR OR CORRECTION.

Revision history

Changes since v106

Changes since v105b

Changes since v105a

Changes since v105

Changes since v104

Changes since v103

Changes since v102

Changes since v101

Changes since v100

General Installation

Copy the following files to the System directory of your UT2004 servers: Remove the old ServerExtClient.u, ServerExtClient10*.u files from you system and configuration.

Copy the following files to the Web\ServerAdmin directory of your UT2004 servers: Note: do not add any of the packages to the ServerPackages list. When a package needs to be added to that list ServerExt will do that automatically.

Chat Filter

ChatFilter is a server add-on to clean up the chatting on a server. ChatFilter has the power to reduce spamming on a server, it can also filter bad words from the line. On bad behavior the player will get a score assigned on a defined level actions can taken against the player. It's pretty much the same as ChatFilter for UT2003.
Chat Filter requires version 3197 or higher, the retail contains a bug that prevents ChatFilter from working correctly.

Installation

Add ServerExt.ChatFilter to the Server Actors list in your system configuration
[Engine.GameEngine]
ServerActors=ServerExt.ChatFilter

Configuration

UT2004.ini

The configuration of the behavior of ChatFilter resides in the server configuration file (UT2003.ini). Add the following lines to the file:
[ServerExt.ChatFilter]
fTimeFrame=1.0000
iMaxPerTimeFrame=2
iMaxRepeat=1
iScoreSpam=1
CencorWord=*****
iScoreSwear=1
iKillScore=10
KillAction=CFA_Nothing
BadWords=asshole
BadWords=fuck
...
bShowMuted=false
bUseReplacementTable=false
bCheckNicknames=false
BadnickAction=BNA_Kick
UnallowedNicks=Player
UnallowedNicks=Admin
...
bWildCardNicks=true
sWarningNotification="ChatFilter: Please clean up your act"
sWarningBroadcast="%s is chatting abusive, type 'mutate cf judge %i` to judge the player"
WarningAction=CFA_Kick
iMaxWarnings=2
fMinVote=0.5000
sMuteMessage="ChatFilter: You are muted the rest of the game"
bLogChat=false
sFileFormat="ChatFilter_%P_%Y_%M_%D_%H_%I_%S"
fTimeFrame
Set the number of seconds of a single time frame
iMaxPerTimeFrame
Maximum number of lines allowed per time frame
iMaxRepeat
The maximum times a player can say the same line in a row
iScoreSpam
The score to add when a player exceeds the iMaxRepeat value
CencorWord
Text to replace BadWords with
iScoreSwear
The score to add for every bad word
iKillScore
The maximum score a player may have before actions will be taken
KillAction
Action to take against the player:
  • CFA_Nothing do nothing
  • CFA_Kick kick the player
  • CFA_Ban ban the player
  • CFA_SessionBan ban the player for this game
  • CFA_Defrag remove one point of the players score
  • CFA_Warn the player will be warned
  • CFA_Mute the player will be muted for the rest of the game
BadWords
Words that are considderd bad/swearing. By default no words are added
bUseReplacementTable
Uses the a per badword replacement, BadWords have to be divided with a ; to change the replacement, or the default if omitted. For example:
BadWords=shit;sh*t
BadWords=hate;love
bShowMuted
Update the HUD to show when a player has been muted
bCheckNicknames
Check the players nick name for BadWords.
BadnickAction
Action to take on a bad nick name
  • BNA_Kick kick the player
  • BNA_Request request a nick change, don't kick
  • BNA_Ban ban the player
  • BNA_SessionBan ban the player for this game
bWildCardNicks
Accept wildcards in the bad nick name list
UnallowedNicks
List with nick names that are never allowed for players
sWarningNotification
The message a player will get when he gets warned
sWarningBroadcast
The message all players get when somebody get's warned. "%s" is replaced by the player name, and "%i" is replaced by the filter record contain information about this user, required for the `mutate cf judge` command
WarningAction
The action to take when a player get's voted off or exceeds the maximum warnings. You can choose from the same actions as KillAction, except CFA_Warn ofcourse
iMaxWarnings
The maximum number of warnings before the server automatically takes action
fMinVote
The minimum percentage of players on the server that have to vote before actions are taken against the warned player
sMuteMessage
The message a player get's when he's muted for the rest of the game
bLogChat
Save the chat to a log file
sFileFormat
The format for the log filename. You can use the following replacements:
  • %P server Port
  • %Y current Year
  • %M current Month
  • %Y current Day
  • %H current Hour
  • %I current mInute
  • %S current Second
  • %N server Name
Not all characters are supported in the filename, for example '.', these will be translated to an underscore '_'
The log file generated will start with a line with the date the log started: --- Log started on 2003/2/28 21:17:40 After that you will get the log files in there field (seperated by tabs) time tag playername message Tag is one of the following: CHAT, TEAMCHAT, SPAM, TEAMSPAM, MUTE, TEAMMUTE The lines are uncensored (the bad words are not filtered)

Player Join Log

Player Join Log is the UT2004 equivalent of PlayerJoinDumpSE for UT2003. It will dump player joins/parts and nick changes to a log file.
The following types of lines will be dumped to the log file:
[PLAYER_JOIN] <time stamp>	<name>	<IP>	<net speed>	<Player ID hash>
[PLAYER_NAME_CHANGE]	<time stamp>	<old name>	<new name>
[PLAYER_PART]	<time stamp>	<name>
The fields are seperated with TAB characters.
Spectator information is also dumped, but the following tags are used: [SPECTATOR_JOIN], [SPECTATOR_NAME_CHANGE] and [SPECTATOR_PART]

Installation

Add ServerExt.PlayerJoinLog to the Server Actors list in your system configuration
[Engine.GameEngine]
ServerActors=ServerExt.PlayerJoinLog

Configuration

UT2004.ini

[ServerExt.PlayerJoinLog]
bExternalLog=false
sFileFormat="PlayerJoin_%P_%Y_%M_%D_%H_%I_%S"
bExternalLog
If set to true an external log file will be used instead of the standard log file. External log files will be saved in the UserLog directory.
sFileFormat
This set's the filename of the external log file. The following replacements can be used:
%Pserver port
%Nserver name
%Pyear
%Mmonth
%Dday
%Wday of the week
%Hhour
%Iminute
%Ssecond

Remote stats

Remote stats allows you do send the stats to a remote server. The stats data will be send to a webserver that can then analyse the data. You can use this together with UT StatsDB.
This feature will not obstruct with the normal stats logging.

Installation

To install Remote Stats you will have to change the stats logging class:
[Engine.GameInfo]
GameStatsClass=ServerExt.RemoteStats
If you are using OLStats and you want to use the same feature (and no OLStats's upload feature) you will have to use: ServerExtOL.OLRemoteStats.

Configuration

There are a few things you can configure. Most important is to set the PostURL.
[ServerExt.RStatsLink]
BufferSize=2048
PostURL=http://location.to/RemoteLogDump.php
fRetryDelay=30
SecretName=secret
SecretValue=MySecret
BufferSize
The stats data will be send when it reaches this size (in bytes). This is used to reduce traffic. You don't want to set this to high because, but too low isn't very good too. A nice size would be 10% of the average log size. A value of 10000 would be too high. If you experience server lag when the stats are uploaded you might want to reduce the buffer size.
PostURL
This is the URL to post the data to. The script must return a HTTP 200 code or otherwise the internal caching will be triggered.
fRetryDelay
Number of seconds between retries. When posting of the data fails (e.g. HTTP code other than 200) it will try to repost it after this delay.
SecretName and SecretValue
This combination will be added to the post data. You can use this to validate the POST data in the script, like a password.

Usage

The data posted will have the following field:
serverHost
the IP of the host (note, this can be an internal IP)
serverName
the name of the server
serverPort
the server's listen port
gameDateTime
The time this match started, you can use this to distinguish matches from the same server.
The date will be in the following format: DayName, Day MonthName Year Hour:Minute:Second.
For example: Fri, 01 Oct 2004 11:51:37
sequence
The sequence number, this will be incremented for every post. You can use this to validate the data received to be in order. The first value is 0
"SecretName"
with as value "SecretValue"
stats
The stats data AS IS. Just like the log file usualy contains.
An example PHP script is included with this package, you can find it in: Help/ServerExt/RemoteLogDump.php

Reserved slots

This add-on allows you to add reserved slots. Players with the correct login details can still enter a server that is at capicity.
This add-on replaces the AccessControl (both the single admin and multiple admin system are supported), so this mod doesn't work with other mods that replace the AccessControl.

Installation

If you are using the single admin system you will have to change the following setting:
[Engine.GameInfo]
AccessControlClass=ServerExt.ReservedSlots
If you are using the multiple admin system (xAdmin) you will have to change it to:
[Engine.GameInfo]
AccessControlClass=ServerExt.ReservedSlotsIni

Configuration

The reserved slots can be configured via the WebAdmin. A new page is added to the main list, this page allows you to edit the reserved slots. The other settings might be available via the "defaults" page.
But you can also change the settings directly in the UT2004.ini file:
[ServerExt.SlotManager]
AbsoluteMaxPlayers=0
AbsoluteMaxSpectators=0
Slots=(Data="12345678901234567890123456789012",Type=ST_Hash,specOnly=False,Method=SOM_Expand)
Slots=(Data="192.168.*",Type=ST_IP,specOnly=False,Method=SOM_KickRandom)
...
AbsoluteMaxPlayers
This is the absolute maximum limit for players, the player count will never increase more than this value. If this value is zero or less there won't be a limit
AbsoluteMaxSpectators
Same as AbsoluteMaxPlayers but for spectators
Slots
This is a list of reserved slots. You can have an unlimited number of slot configuration. Each entry has the following fields:
data
This contains the information to check, the format depends on the type. You can use the following wildcards: * = zero or many characters, ? = one character
type
This is the type of the slot, it set what information to check.
  • ST_IP - IP address
  • ST_Hash - CDKey hash
  • ST_Nick - Requested nick name
  • ST_Password - The password entered on the connect url (?password=[somepassword])
  • ST_Options - Match with the connect url. This can be usefull to keep the check comepletely secret. For example a the data contains "*MySecret=URLOption*", if the player joins the server with: ip.to.server?name=MyNick?MySecret=URLOption (or similar) it will match.
specOnly
if set to True this slot is for spectators only
method
The method to use to make room for this player.
  • SOM_Expand - increase the max limit (adviced method)
  • SOM_KickRandom - use a random kick method
  • SOM_KickWorst - kick the player with the lowest score/death ration
  • SOM_KickBest - kick the player with the highest score/death ration
  • SOM_KickOldest - kick the player that been the longest on the server
  • SOM_KickNewest - kick the player that joined last
By default the system has only one SlotManager installed (ServerExt.SlotManager). It's possible to program additional SlotManagers. To add new slot managers you have to change the following:
[ServerExt.ReservedSlots]
SlotManagerClasses=ServerExt.SlotManager
SlotManagerClasses=MyExtentions.MySlotManager
...
Note: if you installed the ReservedSlotsIni as AccessControl it should be the section "[ServerExt.ReservedSlotsIni]"
Information on writing a SlotManager can be found in the source code of ServerExt.

Alternative config file

To change the config file used by ReservedSlots, ReservedSlotsIni and SlotManager you have to specify the following option on your commandline: -class=myini.ini. For ReservedSlots this would be for example:
ucc server dm-mymap?game=xgame.xteamgame?.... ini=server.ini log=server.log -ReservedSlots=MyPolicies.ini
Changing the configuration file for ReservedSlots and ReservedSlotsIni will also save the IP and CDKey Hash Policies in that new configuration file.

ServQuery

ServQuery is a replacement for the default GameSpy query protocol that comes with UT2004. It adds quite some additional information, like team info, more detailed server information. And even the map list can be retrieved.
For information about how to query a server using this interface refer to this UnrealWiki page. There are some tools that use the extended features of ServQuery, these tools incluse: UT2Monitor and UT Stats DB.

The following queries are added:

\about\

Returns about information, you can use this to check if a server has ServQuery installed, and what version.
Reply: \about\ServQuery <version>\author\Michiel 'El Muerte' Hendriks\authoremail\elmuerte@drunksnipers.com\HighestRequestCount\<count>

\bots\

Return information about the bots on the server
Reply for each bot: \bot_<id>\<bot name>\ping_<id>\<fake bot ping, if any>

\gamestatus\

Returns additional status of the current game
Reply: \elapsedtime\<elapsed time of the game>\timeseconds\<seconds the game is active>\starttime\<time the game started at>\overtime\<true if in overtime>\gamewaiting\<true if waiting to start>\nextmap\<next map>\

\playerhashes_???\

Returns the Player ID hashes, the ??? in the query is the password as set in the configuration to protect this query
Reply for each player: \phname_<id>\<player name>\phash_<id>\<player id hash>\phip_<id>\<player IP>\

\maplist\

Returns the current maplist in rotation
Reply for each map: \maplist_<id>\<map name>\

\spectators\

Returns information about the connected spectators, if any.
Reply for each spectator: \spectator_<id>\<name>\specping_<id>\<spectator's ping>\

\teams\

Returns information about the teams, if it's a team game
Reply for each team: \team_<id>\<team name>\score_<id>\<team score>\size_<id>\<number of team members>\

Installation

Add ServerExt.SQMSUplink to the Server Actors list in your system configuration
[Engine.GameEngine]
ServerActors=ServerExt.SQMSUplink
And make sure you remove the Server Actor IpDrv.MasterServerUplink

Configuration

UT2004.ini

[ServerExt.ServQuery]
bVerbose=false
sReplyTo="TASGMEBH"
ePType=PT_None
iTimeframe=60
iMaxQueryPerFrame=180
iMaxQueryPerHostPerFrame=10
sPassword=
bVerbose
Set to true to increase the verbosity, this is only used when the flood propection is used
sReplyTo
Defines the extended queries ServQuery will respond to. It can contain the following values:
A\about\
B\bots\
E\echo\
G\gamestatus\
H\playerhashes_???\
M\maplist\
S\spectators\
T\teams\
ePType
Query flood protection. When this value is changed to anything other than PT_None a basic flood protection is enabled. When a set threshhold is reached ServQuery will not respond to queries for the rest of the time frame. Enabling flood protection generates a slight preformance decrease. The following values are allowed:
PT_Nonenone
PT_PerFramemaximum queries in total per frame
PT_HostPerFramemaximum queries per host per frame
PT_Bothuse both total maximum and per host
iTimeframe
The length (in seconds) of a time frame.
iMaxQueryPerFrame
The threshold for PT_PerFrame
iMaxQueryPerHostPerFrame
The threshold for PT_HostPerFrame
sPassword
The secret string to get the player hashes, should be included in the query: \playerhashes_YOURPASSWORD\

Stats chat log

The standard stats logging that comes with UT2004 does not log the chats to the log file. This addon will enable chat logging into the stats log file. It will only log chats to the local log and does not disrupt the global logging. The logging is compatible with the old LocalLog and LocalStats chat logging.

Installation

Add ServerExt.StatsChatLog to the Server Actors list in your system configuration
[Engine.GameEngine]
ServerActors=ServerExt.StatsChatLog

Configuration

No configuration required

RSS Feed Mutator

The RSS Feed mutator is a replacement for the ServerAdsSE server addon for UT2003. It has the same functionality, with the major exception that it will retrieve the content from so called RSS Feeds.
A lot of sites and portal software provide a way to syndicate news via RSS files. This mutator allows you do display this news in the UT2004 game.

Installation

The mutator can either be installed as Mutator or as Server Actor.
When installed as Server Actor you won't have the "mutate" functionality, and it won't show up in the mutator listing.
There are two versions of this mutator available, one stores it's configuration in the UT2004.ini (system) file: ServerExt.MutRSS and the other stores it's configuration in the RSS.ini files: ServerExt.MutRSSCentral.
If you run multiple servers and want the same configuration for all servers use the ServerExt.MutRSSCentral version.
If you want to install this mutator the normal way (as a mutator) at it to the mutator list of your commandline: ?mutator=ServerExt.MutRSS
If you want to install it as a Server Actor add ServerExt.MutRSS to the server actor list in the server configuration (UT2004.ini):
[Engine.GameEngine]
ServerActors=ServerExt.MutRSS
This mutator features a client side RSS Feed browser (only when installed as a mutator).

Configuration

Mutator configuration

If you use MutRSS this configuration should go in the server's configuration (UT2004.ini), if you use MutRSSCentral it should be in RSS.ini
Most of the configuration can also be set via the WebAdmin: defaults -> RSS Feeds
[ServerExt.MutRSS]
bEnabled=true
bAnnounce=true
sExlusiveFeeds=
bBroadcastEnabled=true
fBroadcastDelay=60
bInitialBroadcast=false
BroadcastMethod=BM_Sequential
iBroadcastMessages=2
iGroupSize=1
sBroadcastFormat="%title% [%ftitle%]"
bInteractive=true
bBrowserEnabled=true
bUpdateEnabled=true
iDefUpdateInterval=45
bEnabled
Global switch to enable/disable the mutator
bAnnounce
announce to the masterserver and clients that we are running this mutator
sExlusiveFeeds
Comma seperated list of RSS Feed names to use, leave blank to use all enabled RSS feeds
bBroadcastEnabled
If true the items in the RSS feeds will be broadcasted
fBroadcastDelay
the time, in seconds, between broadcasts
bInitialBroadcast
broadcast the first entry when the map has finished loading, usualy nobody has connect by then
BroadcastMethod
The method of broadcasting
BM_Linear display the lines in a row
BM_Random display random lines from all feeds
BM_RandomFeed display random lines from a single (random) feed, every broadcast
BM_Sequential display lines from feeds in a row (feed 1, line 1; feed 2 line 1; feed 3 line 1; feed 1 line 2; ...)
iBroadcastMessages
Number of groups of message to display per broadcast
iGroupSize
The number of lines in a group.
iGroupSize=1 means only one line at the time, a group size of n displays the the first min(n, length) entries starting from the selected index. The total number of lines displayed is: iBroadcastMessages * iGroupSize. When using BM_Linear you get the same result for iBroadcastMessages=1 ; iGroupSize=2 and iBroadcastMessages=2 ; iGroupSize=1
sBroadcastFormat
The format of the lines broadcasted. You can use the following replacements
%title% the title of the message
%link% the link of the message
%desc% the content/description of the message, if any
%no% the index of the message in the feed
%fno% the index of the feed
%ftitle% the title of the feed
%flink% the link of the feed
%fdesc% the description of the feed
bInteractive
If set to true the "mutate rss" console commands can be used (only when installed as mutator)
bBrowserEnabled
If set to true players can open the RSS Feed Browser ("mutate rss browser")
bUpdateEnabled
Should the mutator check for updates of the RSS Feed on start up?
iDefUpdateInterval
The default update interval of new RSS Feeds

RSS Feed configuration

RSS Feeds can also be configured via the WebAdmin, using the "RSS Feeds" sub page next to the "current" and "default" links.
All RSS Feeds are saved in the RSS.ini file. You can virtually have as many RSS Feeds as you want. Each feed has it's own configuration section. Each section starts with:
[<feed_name> RSSFeedRecord]
Where <feed_name> is a unique name of the feed. You may not use spaces in this name. However, this name will never be used when displaying information on screen (only in log files you will see this name again).
Each feed has the following user configurable options:
rssHost
The actual name of the feed. This will be used as fallback when it didn't receive the real name from the RSS feed.
rssLocation
The location to the RSS file
rssEnabled
True if this feed is enabled. Disabled feeds won't be used during broadcasting or updating.
rssUpdateInterval
Number of minutes between updates, don't set this too low. 45 minutes is a nice value. If this value is 0 the feed will never be updated, usefull for feeds that are not updated from a weblocation
TextColor
The color to use when showing the entries of this feed.
Format: (R=0,G=255,B=255,A=255)
After a feed has been updated the following additional entries will be saved to the RSS.ini file (for each feed). This information comes directly from the RSS files and should not be modified.
LastUpdate
UNIX timestamp of the last update of the feed
ChannelTitle
Real title of the RSS Feed "channel"
ChannelDescription
Description of this channel
ChannelLink
Link to the homepage of this channel
Entries
These are the entries received from the RSS Feed file
It has the following format: Entries=(Title=<entry title>,Link=<entry link>,Desc=<entry description>)
The package comes with a preconfigured RSS.ini.example file that contains configuration (disabled by default) for RSS feeds from: To learn more on how to set up your own RSS feeds follow read the following articles:

Local RSS Feed configuration

When you host multiple servers from the same location but with different admins running the servers (normal GISP concept). You might want to store the RSS Feed Configuration to the server's configuration file.
To set this up you need to add the following to the configuration of MutRSS
[ServerExt.MutRSS]
RSSFeedRecordClassName=%clientpackage%.LocalRSSFeedRecord
%clientpackage% is automatically renamed to the Client Side package for this release.

Usage

When installed as a mutator, and bInteractive set to true, users can use the RSS Feeds at their request via the "mutate" command.
All commands start with mutate rss, after which the following commands are accepted:
help shows a help overview
browser show client side browser, if it's enabled
list show feed list
show n [m] show m items from feed #n, m is 5 by default
Admin commands
start start the mutator, when it's disabled
stop stop the mutator
update n force an update on RSS feed #n
enable n enable RSS feed #n
disable n disable RSS feed #n
remove n remove RSS feed #n/td>
add name location add a new RSS feed with name and download location

ServerAdsSE like messages

To simply add lines to be broadcasted without using a remote RSS feed (like ServerAdSE used to work). Just create a feed like this:
[SomeName RSSFeedRecord]
rssEnabled=True
rssUpdateInterval=0
ChannelTitle=Custom entries
Entries=(Title="This is the first line")
Entries=(Title="This is the second line")
Entries=(Title="Even more lines")
Note that the value of rssUpdateInterval is set to 0.

Team Balance mutator

The Team Balance mutator will correct the team sizes when needed. Key players/bots (flag carriers) will never be balanced.

Installation

Since this is simply a mutator it works like any other mutator. The class name of this mutator is ServerExt.mutTeamBalance.

Configuration

[ServerExt.mutTeamBalance]
bAnnounce=true
fLingerTime=0
iSizeThreshold=2
bIgnoreWinning=false
fTeamScoreThreshold=-1
bOnlyBalanceOnRequest=false
fTeamBalanceDelay=5
bIgnoreReservedSlots=false
bBotsBalance=true
bAddBots=true
iMaxBots=-1
bBotsFill=false
bSwitchPlayersBack=true
BalanceMethod=BM_Newest
bAnnounce
If true announce this mutator in the server details
fLingerTime
number seconds since the beginning of the game that the team balancer will remain inactive.
iSizeThreshold
The size difference between teams before it's considered uneven, 2 is really the minimum
bIgnoreWinning
If set to true, don't take into account if the smaller team is winning
fTeamScoreThreshold
Difference in teamscore before it's considered winning (used when checking if the smallest team is winning), should be 0 or less because with -1 the score difference has to be at least 2
bOnlyBalanceOnRequest
Only balance the teams when it's requested via: mutate balance
fTeamBalanceDelay
Number of seconds to wait befor balancing the team automatically
bIgnoreReservedSlots
If set to true, that entered bassed on a reserved slot (requires the Reserved Slots addon) will not be balanced. Only the reserved slots with IP, Hash or PlayerName can be checked. Reserved slots based on the password or any other part of the connect url can't be checked.
bBotsBalance
Balance bots first. This only works if there are bots on the server, or MinPlayers has been set.
bAddBots
Add bots to balance the teams first.
iMaxBots
The absolute maximum number of bots allowed. If set to -1 it will use the maximum recommended player count for the current map, if set to -2 it will use the minimum recommended player count (both corrected with the current player count).
bBotsFill
When the game isn't unbalanced, but the team sizes are not equal bots will correct the team size
bSwitchPlayersBack
If a user switches team when the teams are unbalanced switch the user back to his old team (when he tried to join the bigger team). If set to false it will use the standard balancing method.
BalanceMethod
Various balance methods:
Balance players based on their join time (BM_Oldest, BM_Newest).
Balance players based on their gaming performance, their performance is defined by their score/death ration (BM_Worst, BM_Best).
Or just randomly (BM_Random). Key players are never balanced.
bDebug
If you add bDebug=true debug messages will be added to the log file. If you have problems with Team Balancer you might want to add this option to inspect the team balancer's actions.

License for LibHTTP3.5

Lesser Open Unreal Mod License
Version 1, March 2004

0. Definitions
"Program"       the work, either in binary or source form, that has a notice
				attached to it stating that it has been released under this
				license it by the copyright holder.
"Modification"  a derivate of the Program or any other work based on the Program
"Linking"       using parts of the Program, or using parts of any other work,
				thus creating a direct dependency
"You"           the licensee
"Runtime Environment"
				the virtual machine or operating system required to run the
				Program, as released by the Publisher or Creator of said
				runtime Environment. This includes any extentions or updates
				for the runtime Environment released by the Publisher or
				Creator.

1. License
Herewith everybody is granted permission to copy and distribute verbatim copies
of this document. The only restriction lies on changing the content, with the
exception to translation of this license.

This license applies to the Program that has been released under this license.
The license only applies to copying, distribution and modification of the
Program. Execution or output of the Program are not covered by this license,
however the right for additional limitations on the use (that do not cover
copying, distribution or modification) is granted to the copyright holder.
This license is only valid when all terms in this license comply with the
licenses of the dependecies of the Program. This includes the license of the
possible required runtime Environment.

2. Copying and distribution
You are granted to copy or distribute verbatim copies of the Program, on any
medium, or in any format as you see fit. You are not limited to charging a fee
for the physical act of transferring the copy, nor are you limited to provide
warranty for the Program in return of a fee. Unless this is prohibited by the
license of the Runtime Envoirement.

Any distribution of the program should be accompanied with a verbatim copy of
this license.

3. Modification
You are allowed to modify the Program, or portions of it, therefore making it a
derivate of the Program. You are allowed to distribute your modifications under
the following conditions:
		- You must clearly state that it is a modification or derivate of the
		  Program
		- The original copyright notice must be kept intact
		- The modified files must contain notices of the changed made to it
		- The Modification must be released under the same license as the Program
		- Distribution happens in compliance with section 2

4. Source
The original source of the Program or Modification must be freely available on
request.

5. Linking
The license grants exclusive right to link with any part of the Runtime
Environment, as provided by the publisher or creator of said Runtime
Environment.
Reusing pieces of source code available in the runtime environment in the
Program is only allowed under the following terms:
		- the "borrowed" code is clearly marked to originate from the runtime
		  environment, quoting the original copyright.
		- the following notice is added to the top of the file:
		  "This file contains portions of code from the runtime environment."

The right to "port" the Program to another runtime environment is reserved for
the copyright holder.

6. NON WARRANTY
THIS SOFTWARE DOES NOT COME WITH A WARRANTY OF ANY KIND, UNLESS NOTED OTHERWISE
BY THE COPYRIGHT HOLDER OR WARRANTY PROVIDER. THE ENTIRE RISK OF THE PERFORMANCE
AND QUALITY OF THE PROGRAM LIES WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE,
YOU WILL ASSUME ALL COSTS FOR REQUIRED OF REPAIR OR CORRECTION.