ServerExt
From UnrealAdminWiki
Contents |
ServerExt
ServerExt is a package containing extentions for UT2004 servers. They usually do not affect gameplay and thus the mutators in this package are whitelisted.
The ServerExt package is being developed by Michiel "El_Muerte" Hendriks. This is an unofficial add-on and not supported by Atari support.
ServerExt is released under version 1.0 of the unreal:Open Unreal Mod License.
Please report bugs in the BugTracker. First check if the bug wasn't already submitted.
Downloads
New versions of this package can be downloaded from the ServerExt website.
- Version 110 zip ut4mod
- Version 109 zip ut4mod
- Version 108 zip ut4mod
- Version 107 zip ut4mod
- Version 106 zip ut4mod
- Version 105b zip ut4mod
- Version 105a zip ut4mod
- Version 105 zip ut4mod
- Version 104 zip ut2mod
- Version 103 zip ut2mod
- Version 102 zip ut2mod
- Version 101 zip ut2mod
- Version 100 zip
- Alternate download locations
Related documents
- Bug Tracker
- RemoteStats Example -- example PHP script for RemoteStats
- RSS Feed Configuration -- more information on how RSS Feeds are stored
- ServQuery Additions -- added gamespy protocol queries by ServQuery
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
The configuration of the behavior of ChatFilter resides in the server configuration file (UT2004.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" bUnfilteredWebAdmin=false bUnfilteredAdmin=false bWebAdminReceiveTeam=false bDisableBHFix=true
- 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 '_'
- bUnfilteredWebAdmin
- show unfiltered chat in the webadmin interface
- bUnfilteredAdmin
- show unfiltered chat for logged-in admins
- bWebAdminReceiveTeam
- the webadmin also receives team chats
- bDisableBHFix
- disable the BroadcastHandler fix, some mods replace the original BroadcastHandler breaking this mod. You should leave this false unless told otherwise.
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
[ServerExt.PlayerJoinLog] bExternalLog=false sFileFormat="PlayerJoin_%P_%Y_%M_%D_%H_%I_%S" fPriority=0
- 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:
- %P server port
- %N server name
- %Y year
- %M month
- %D day
- %W day of the week
- %H hour
- %I minute
- %S second
- fPriority
- number of seconds between checks, if <= 0 it will check every tick
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 UTStatsDB.
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 can be found here.
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
[ServerExt.ReservedSlots] bSilentAdmin=false SlotManagerClasses=ServerExt.SlotManager
- bSilentAdmin
- When true admin logins won't be broadcasted to other players
- SlotManagerClasses
- Slot manager classes. Leave this as the default unless you know what you are doing.
Note: if you use ReservedSlotsIni it should be used in the [ServerExt.ReservedSlotsIni] section.
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 bProtectAdmins=true 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
- bProtectAdmins
- Logged in admins will never be kicked to make room
- 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 ratio
- SOM_KickBest - kick the player with the highest score/death ratio
- SOM_KickWorstSPM - kick the player with the lowest score/minute ratio
- SOM_KickBestSPM - kick the player with the highest score/minute ratio
- 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.
To change the config file for the slot configuration add the following on your commandline: -SlotManager=MyPolicies.ini.
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 UnrealWiki page. There are some tools that use the extended features of ServQuery, these tools incluse: UT2Monitor and UTStatsDB.
Information about the added queries and information can be found here
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
[ServerExt.ServQuery] bVerbose=false sReplyTo=TASGMEBH ePType=PT_None iTimeframe=60 iMaxQueryPerFrame=180 iMaxQueryPerHostPerFrame=10 sPassword= iCacheSeconds=30
- 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_None none PT_PerFrame maximum queries in total per frame PT_HostPerFrame maximum queries per host per frame PT_Both use 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\ - iCacheSeconds
- number of seconds to cache the game rules and player info results. These queries are very common and can takes up quite some CPU cycles (not really a lot, but less is always better).
Stats chat log
he 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
More information about the RSS Feed Configuration can be found in this document. This document will also explain how to set up "ServerAdsSE" like messages.
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 |
| add name location | add a new RSS feed with name and download location |
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(This option no longer works in newer versions) - 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=truedebug 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.

