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.

Alternate download locations

Related documents


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=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.
the UnrealAdmin Page
Site Sponsor


GamingHosting
History
  • ServerExt