Jaymod Server

From Fearless Assassins Wiki

Upgrade

CVAR Changes

This section outlines CVARs which have changed significantly prior to Jaymod 2.2.0. If you are already running 2.2.0 then you should skip this section.

These CVARs will need to be updated in your server configs or these features may not work as expected.

g_censor With release 2.1.0 and higher, g_censor is no longer a comma-separated list of words, and has changed to accept either { 0, 1 } to respectively { disable, enable } the censor feature.

The words list is now read from a censor.db located in the Jaymod directory. There is no practical limit to the number of words you can enter into this file. Jaymod expects one word per line, such as:

   word1
   word2
   word3

g_xpSave With release 2.1.0 and higher, g_xpSave no longer specifies a filename and has changed to accept { 0, 1 } to respectively { disable, enable } the XP-save feature. The reason for this is that XP data is now integrated into users.db.

Preparing to Upgrade

This section describes the pre-upgrade procedure.

1. Check Minimum System Requirements.

Warning: Older versions of ET may not work as expected or may fail entirely. Using older versions is not recommended and is not supported.

2. Shutdown Server. For this example we will assume you are using the serverctl script bundled with Jaymod.

   [etserver]$ cd ~etserver/server1/
   [etserver]$ ./serverctl status
   [etserver]$ ./serverctl stop
   [etserver]$ ./serverctl status

3. Backup Important Data. Before making any significant changes to your system, make sure to backup all your important data. Plan for the worst, hope for the best.

Shrubbot Conversion

This section is intended for server administrators migrating Jaymod from pre-2.1.0 to 2.2.0. If you have already migrated or migration does not apply, you should skip this section.

As of Jaymod 2.1.0 the data files have changed and are not compatible with older versions. In order to assist servers wanting to upgrade, we provide a Perl script which can convert most (not all) of the data from old shrubbot.cfg to the newer .db formats.

Note: The conversion script is written in Perl. Most LinuxOSX systems have this available and should be able to run the script. Windows systems typically do not have Perl available. You can either install Perl yourself, or find someone else (maybe a friendly Linux) whom you can trust and have run the script for you.

Warning: Upgrades are only supported from Jaymod 2.0.X to Jaymod 2.2.0. Older versions may not convert as expected.

Data from shrubbot.cfg will be converted and placed into user.db and level.db. Other data found in .dat files is silently ignored and not converted.

Admin, level and permanent-ban records are converted. Temporary-ban records are not converted.

1. Change to server's Jaymod directory as convert_shrub expects to find shrubbot.cfg in the current directory. Execute convert_shrub. The script usually has the correct file permissions and can find perl by itself on recent Linux systems, but for our example we will explicitly run it from your shell path.

   [etserver]$ cd ~etserver/server1/jaymod/
   [etserver]$ perl ~etserver/jaymod-2.2.0/linux/convert_shrub

2. Examine the newly created .db files. The next time Jaymod server is launched it will read the files into memory. Then shutdown the server and the full (scrubbed) data will be written which is cleaner, and more rich than what convert_shrub can produce.

   [etserver]$ cd ~etserver/server1/jaymod/
   [etserver]$ less level.db
   [etserver]$ less user.db

3. Rename shrubbot.cfg. This file is no longer required but is recommended to keep this file around if you want to compare the converted data. We rename it to show the file is no longer in use.

   [etserver]$ cd ~etserver/server1/jaymod/
   [etserver]$ mv shrubbot.cfg shrubbot.cfg.DISABLED

Upgrade

This section describes the main upgrade procedure.

1. Extract Jaymod 2.2.0 distribution bundle available for download from http://jaymod.clanfu.org.

   [etserver]$ cd ~etserver
   [etserver]$ tar xzf jaymod-2.2.0.tar.gz

2. Create a backup directory to hold files replaced during upgrade.

   [etserver]$ cd ~etserver/server1/
   [etserver]$ mkdir BACKUP

3. Backup and copy new servercl script into place. Once you have copied the new script into place, manually apply any edits that are appropriate for your situation by comparing to backup copy.

   [etserver]$ cd ~etserver/server1/
   [etserver]$ mv serverctl BACKUP/.
   [etserver]$ cp ~etserver/jaymod-2.2.0/linux/serverctl .

4. Backup and copy new game server module into place.

   [etserver]$ cd ~etserver/server1/
   [etserver]$ mv jaymod/qagame.mp.i386.so BACKUP/.
   [etserver]$ cp ~etserver/jaymod-2.2.0/qagame.mp.i386.so jaymod/.

5. Backup and copy new game server pak into place.

   [etserver]$ cd ~etserver/server1/
   [etserver]$ mv jaymod/jaymod-*.pk3 BACKUP/.
   [etserver]$ cp ~etserver/jaymod-2.2.0/jaymod-2.2.0.pk3 jaymod/.

6. Remove any existing etconfig.cfg files (don't worry, these files are automatically written by ET everytime a game ends and just keep a copy of the last known settings for certain CVARs).

   [etserver]$ cd ~etserver/server1/
   [etserver]$ rm etmain/etconfig.cfg
   [etserver]$ rm jaymod/etconfig.cfg
   [etserver]$ rm .etwolf/etmain/etconfig.cfg
   [etserver]$ rm .etwolf/jaymod/etconfig.cfg

After Upgrade

This section describes tasks that you must complete after the upgrade procedure.

1. Startup server. For this example we will assume you are using the serverctl script bundled with Jaymod.

   [etserver]$ cd ~etserver/server1/
   [etserver]$ ./serverctl status
   [etserver]$ ./serverctl start
   [etserver]$ ./serverctl status

2. Cleanup. Remove the Jaymod 2.2.0 distribution bundle extract.

   [etserver]$ cd ~etserver
   [etserver]$ rm -r jaymod-2.2.0/

Install

Preparing to Install

This section describes pre-install procedure.

1. Check Minimum System Requirements.

Warning: Older versions of ET may not work as expected, or may fail entirely. Using an older version is not recommended and is not supported.

2. Backup Important Data. Before making any significant changes to your system, make sure to backup all your important data. Plan for the worst, hope for the best.

3. Create server account. This server account requires no special privileges. If you desire to run more than one game server on the same host, you can use the same account for all of them, or create a unique account for each instance. In all cases, each server must have it's own unique directory.

   [root]# adduser -s /bin/bash etserver

4. Download and install Wolfenstein: Enemy Territory. There are many mirrors across the internet offering ET for download. Look for the latest Linux version of the game: 2.60 and the 2.60b patch. The default directory locations are highly recommended.

   [root]# cd /tmp/
   [root]# sh et-linux-2.60.x86.run --nox11
   [root]# unzip ET-2.60b.zip
   [root]# cd "Enemy Territory 2.60b/"
   [root]# cp *.x86 /usr/local/games/enemy-territory/.

Install

This section describes the main install procedure.

1. Extract Jaymod 2.2.0 distribution bundle available for download from http://jaymod.clanfu.org.

   [etserver]$ cd ~etserver
   [etserver]$ tar xzf jaymod-2.2.0.tar.gz

2. Create server1/ directory structure.

   [etserver]$ cd ~etserver
   [etserver]$ umask 022
   [etserver]$ mkdir server1/
   [etserver]$ cd server1/
   [etserver]$ mkdir etmain/
   [etserver]$ mkdir jaymod/
   [etserver]$ mkdir jaymod/mapscripts/
   [etserver]$ mkdir jaymod/mapconfigs/
   [etserver]$ mkdir pb/
   [etserver]$ mkdir log/

3. Copy servercl script into place.

   [etserver]$ cd ~etserver/server1/
   [etserver]$ cp ~etserver/jaymod-2.2.0/linux/serverctl .

4. Copy game server module into place.

   [etserver]$ cd ~etserver/server1/
   [etserver]$ cp ~etserver/jaymod-2.2.0/qagame.mp.i386.so jaymod/.

5. Copy game server pak into place.

   [etserver]$ cd ~etserver/server1/
   [etserver]$ cp ~etserver/jaymod-2.2.0/jaymod-2.2.0.pk3 jaymod/.

6. Optional: copy sample configuration files into place.

   [etserver]$ cd ~etserver/server1/
   [etserver]$ cp ~etserver/jaymod-2.2.0/server.cfg jaymod/.
   [etserver]$ cp ~etserver/jaymod-2.2.0/jaymod.cfg jaymod/.

7. Remove any existing etconfig.cfg files (don't worry, these files are automatically written by ET everytime a game ends and just keep a copy of the last known settings for certain CVARs).

   [etserver]$ cd ~etserver/server1/
   [etserver]$ rm etmain/etconfig.cfg
   [etserver]$ rm jaymod/etconfig.cfg
   [etserver]$ rm .etwolf/etmain/etconfig.cfg
   [etserver]$ rm .etwolf/jaymod/etconfig.cfg

8. Optional: copy mapscripts into place.

   [etserver]$ cd ~etserver/server1/
   [etserver]$ cp ~etserver/jaymod-2.2.0/mapscripts/* jaymod/mapscripts/.

After Install

This section describes the post-install procedure.

1. Edit serverctl. This script has several important variable settings. At a bare-minimum, you must at least edit ET_IP and change it to your (public) Internet IP address.

   [etserver]$ cd ~etserver/server1/
   [etserver]$ vi serverctl

2. Startup server. For this example we will assume you are using the serverctl script bundled with Jaymod.

   [etserver]$ cd ~etserver/server1/
   [etserver]$ ./serverctl status
   [etserver]$ ./serverctl start
   [etserver]$ ./serverctl status

3. Cleanup. Remove the Jaymod 2.2.0 distribution bundle extract.

   [etserver]$ cd ~etserver
   [etserver]$ rm -r jaymod-2.2.0/

Config

This chapter provides a convenient organization of server CVARs as found in the sample jaymod.cfg file bundled with Jaymod distribution.

 //////////////////////////////////////////////////////////////////////
 //
 // SECURITY
 //
 //////////////////////////////////////////////////////////////////////
 set g_password ""
 set g_shoutcastpassword ""
 set rconpassword ""
 set refereePassword ""
 set sv_privatePassword ""
 //////////////////////////////////////////////////////////////////////
 //
 // LOGGING
 //
 //////////////////////////////////////////////////////////////////////
 set g_log ""
 set g_logOptions "0"
 set g_logSync "0"
 set g_adminLog ""
 //////////////////////////////////////////////////////////////////////
 //
 // BRANDING
 //
 //////////////////////////////////////////////////////////////////////
 //sets .NAME "MyClan"
 //sets .URL "http://www.myserver.net/"
 set sv_hostname "ETHost"
 set g_watermark ""
 set g_protestMessage "Visit www.myserver.com to file a protest."
 set g_kickMessage "You have been kicked for $TIME."
 set g_kickTime "2m"
 //////////////////////////////////////////////////////////////////////
 //
 // MOTD
 //
 //////////////////////////////////////////////////////////////////////
 set server_motd0 ""
 set server_motd1 ""
 set server_motd2 ""
 set server_motd3 ""
 set server_motd4 ""
 set server_motd5 ""
 //////////////////////////////////////////////////////////////////////
 //
 // REGISTRATION
 //
 //////////////////////////////////////////////////////////////////////
 set sv_master1 "etmaster.idsoftware.com"
 set sv_master2 ""
 set sv_master3 ""
 set sv_master4 ""
 set sv_master5 ""
 //////////////////////////////////////////////////////////////////////
 //
 // NETWORKING
 //
 //////////////////////////////////////////////////////////////////////
 set sv_allowDownload "1"
 set sv_dl_maxRate "42000"
 set sv_floodProtect "1"
 set sv_fps "20"
 set sv_fullmsg "Server is full."
 set sv_lanForceRate "1"
 set sv_maxPing "0"
 set sv_maxRate "13000"
 set sv_maxclients "20"
 set sv_minPing "0"
 set sv_packetdelay "0"
 set sv_packetloss "0"
 set sv_padPackets "0"
 set sv_privateClients "4"
 set sv_pure "1"
 set sv_reconnectlimit "3"
 set sv_showAverageBPS "0"
 set sv_showloss "0"
 set sv_timeout "240"
 set sv_wwwBaseURL ""
 set sv_wwwDlDisconnected "0"
 set sv_wwwDownload "0"
 set sv_wwwFallbackURL ""
 set sv_zombietime "2"
 //////////////////////////////////////////////////////////////////////
 //
 // VOTING
 //
 //////////////////////////////////////////////////////////////////////
 set vote_allow_balancedteams "1"
 set vote_allow_comp "1"
 set vote_allow_friendlyfire "1"
 set vote_allow_gametype "1"
 set vote_allow_generic "1"
 set vote_allow_kick "1"
 set vote_allow_map "1"
 set vote_allow_matchreset "1"
 set vote_allow_matchrestart "1"
 set vote_allow_mutespecs "1"
 set vote_allow_muting "1"
 set vote_allow_nextmap "1"
 set vote_allow_pub "1"
 set vote_allow_referee "0"
 set vote_allow_shuffleteamsxp "1"
 set vote_allow_swapteams "1"
 set vote_allow_timelimit "0"
 set vote_allow_warmupdamage "1"
 set vote_limit "5"
 set vote_percent "50"
 //////////////////////////////////////////////////////////////////////
 //
 // BANNERS
 //
 //////////////////////////////////////////////////////////////////////
 set g_bannerLocation "4"
 set g_bannerTime "60"
 set g_banners "2"
 set g_banner1 "^3THIS SERVER IS RUNNING Jaymod 2.1.7"
 set g_banner2 "^3Check forums at http://jaymod.clanfu.org"
 //////////////////////////////////////////////////////////////////////
 //
 // Matchplay
 //
 //////////////////////////////////////////////////////////////////////
 set g_gametype "2"
 set g_campaignFile ""
 set g_headshot "0"
 set g_knifeonly "0"
 set g_panzerWar "0"
 set g_sniperWar "0"
 set match_latejoin "1"
 set match_minplayers "0"
 set match_mutespecs "0"
 set match_readypercent "100"
 set match_timeoutcount "3"
 set match_timeoutlength "180"
 set match_warmupDamage "1"
 //////////////////////////////////////////////////////////////////////
 //
 // TEAMS
 //
 //////////////////////////////////////////////////////////////////////
 set g_userAlliedRespawnTime "0"
 set g_userAxisRespawnTime "0"
 set g_teamForceBalance "1"
 set g_ammoRechargeTime "60000"
 set g_healthRechargeTime "10000"
 set team_maxArtillery "6"
 set team_maxLandMines "20"
 set team_maxFlamers "-1"
 set team_maxGrenLaunchers "-1"
 set team_maxM97s "-1"
 set team_maxMG42s "-1"
 set team_maxMortars "-1"
 set team_maxPanzers "-1"
 set team_maxplayers "0"
 set team_maxMedics "-1"
 set team_maxEngineers "-1"
 set team_maxFieldOps "-1"
 set team_maxCovertOps "-1"
 set team_nocontrols "1"
 //////////////////////////////////////////////////////////////////////
 //
 // PLAYERS
 //
 //////////////////////////////////////////////////////////////////////
 set g_defaultSkills "0 0 0 0 0 0 0"
 set g_levels_battlesense "20 50 90 140 200"
 set g_levels_covertops "20 50 90 140 200"
 set g_levels_engineer "20 50 90 140 200"
 set g_levels_fieldops "20 50 90 140 200"
 set g_levels_lightweapons "20 50 90 140 200"
 set g_levels_medic "20 50 90 140 200"
 set g_levels_soldier "20 50 90 140 200"
 set g_covertops "0"
 set g_engineers "0"
 set g_medics "0"
 set g_soldiers "0"
 set g_sk5_battle "1"
 set g_sk5_cvops "7"
 set g_sk5_eng "127"
 set g_sk5_fdops "3"
 set g_sk5_lightweap "1"
 set g_sk5_medic "243"
 set g_sk5_soldier "7"
 set g_covertopsChargeTime "30000"
 set g_engineerChargeTime "30000"
 set g_LTChargeTime "40000"
 set g_soldierChargeTime "20000"
 set g_medicChargeTime "45000"
 set g_medicSelfHealDelay "0"
 //////////////////////////////////////////////////////////////////////
 //
 // BULLETMODE
 //
 //////////////////////////////////////////////////////////////////////
 set g_bulletmode "0"
 set g_bulletmodeDebug "0"
 set g_bulletmodeReference "1"
 set g_bulletmodeTrail "0"
 //////////////////////////////////////////////////////////////////////
 //
 // HITMODE
 //
 //////////////////////////////////////////////////////////////////////
 set g_hitmode "0"
 set g_hitmodeAntilag "800"
 set g_hitmodeAntilagLerp "1"
 set g_hitmodeDebug "0"
 set g_hitmodeFat "0"
 set g_hitmodeGhosting "0"
 set g_hitmodeReference "1"
 set g_hitmodeZone "0"
 //////////////////////////////////////////////////////////////////////
 //
 // MISCELLANEOUS
 //
 //////////////////////////////////////////////////////////////////////
 set g_admin "1"
 set g_alliedmaxlives "0"
 set g_altStopwatchMode "0"
 set g_antiwarp "1"
 set g_autoFireteams "0"
 set g_axismaxlives "0"
 set g_censor "0"
 set g_censorPenalty "0"
 set g_classChange "0"
 set g_complaintlimit "6"
 set g_damagexp "0"
 set g_debugAlloc "0"
 set g_debugConstruct "0"
 set g_debugDamage "0"
 set g_debugMove "0"
 set g_debugSkills "0"
 set g_disableComplaints "0"
 set g_dragCorpse "1"
 set g_dropAmmo "2"
 set g_dropHealth "2"
 set g_dynamiteTime "30"
 set g_enforcemaxlives "1"
 set g_fastres "0"
 set g_fear "0"
 set g_filterBan "1"
 set g_filtercams "0"
 set g_fixedPhysics "1"
 set g_fixedPhysicsFPS "125"
 set g_forcerespawn "0"
 set g_friendlyFire "1"
 set g_glow "0"
 set g_goomba "4"
 set g_gravity "800"
 set g_heavyWeaponRestriction "100"
 set g_inactivity "0"
 set g_intermissionReadyPercent "75"
 set g_intermissionTime "30"
 set g_ipcomplaintlimit "3"
 set g_killSpreeLevels "5 10 15 20 25 30"
 set g_killingSpree "1"
 set g_knockback "1000"
 set g_landminetimeout "1"
 set g_lms_followTeamOnly "1"
 set g_lms_lockTeams "0"
 set g_lms_matchlimit "2"
 set g_lms_roundlimit "3"
 set g_lms_teamForceBalance "1"
 set g_loseSpreeLevels "10 20 30"
 set g_mapConfigs "mapconfigs"
 set g_mapScriptDirectory "mapscripts"
 set g_maxGameClients "0"
 set g_maxlives "0"
 set g_maxlivesRespawnPenalty "0"
 set g_misc "66"
 set g_moverScale "1.0"
 set g_movespeed "76"
 set g_muteTime "0"
 set g_noTeamSwitching "0"
 set g_packDistance "4"
 set g_playDead "1"
 set g_poisonSyringes "1"
 set g_proneDelay "0"
 set g_privateMessages "1"
 set g_reflectFriendlyFire "100"
 set g_saveCampaignStats "1"
 set g_scriptDebug "0"
 set g_scriptDebugLevel "0"
 set g_scriptName ""
 set g_shortcuts "0"
 set g_shove "100"
 set g_shoveNoZ "1"
 set g_skills "0"
 set g_slashKill "0"
 set g_smoothClients "1"
 set g_snap "7"
 set g_spawnInvul "3"
 set g_spectator "0"
 set g_spectatorInactivity "0"
 set g_speed "320"
 set g_teamDamageMinHits "6"
 set g_teamDamageRestriction "0"
 set g_truePing "1"
 set g_voiceChatsAllowed "4"
 set g_vulnerableWeapons "0"
 set g_warmup "30"
 set g_watermarkFadeAfter "60"
 set g_watermarkFadeTime "60"
 set g_weapons "5606"
 set g_wolfrof "0"
 set g_xpCap "0"
 set g_xpMax "0"
 set g_xpSave "1"
 set g_xpSaveTimeout "1h"

Operation

Jaymod supplies a serverctl script which is used to control the game server process on Linux. While you could create your own script to manage your game server, it is recommended you examine the launch command and signal usage in order to get a better understanding of officially endorsed methods.

Signals

Jaymod has special signal handling routines for Linux. The serverctl script makes use of these signals. If you have your own scripts, it is recommended you use the following signals for the appropriate actions.

sighup Queues a graceful shutdown sequence composed of { killserver, quit } server commands.

sigterm Queues a graceful shutdown sequence composed of { killserver, quit } server commands.

sigusr1 Queues a graceful database reload composed of { !dbload } server commands.

Startup

Startup server. For this example we will assume you are using the serverctl script bundled with Jaymod.

   [etserver]$ cd ~etserver/server1/
   [etserver]$ ./serverctl status
   [etserver]$ ./serverctl start
   [etserver]$ ./serverctl status

Shutdown

Shutdown server. For this example we will assume you are using the serverctl script bundled with Jaymod.

   [etserver]$ cd ~etserver/server1/
   [etserver]$ ./serverctl status
   [etserver]$ ./serverctl stop
   [etserver]$ ./serverctl status

Show Online Status

Check server status. For this example we will assume you are using the serverctl script bundled with Jaymod.

   [etserver]$ cd ~etserver/server1/
   [etserver]$ ./serverctl status

Restart

Restart server. For this example we will assume you are using the serverctl script bundled with Jaymod.

   [etserver]$ cd ~etserver/server1/
   [etserver]$ ./serverctl status
   [etserver]$ ./serverctl restart
   [etserver]$ ./serverctl status

Reload Database

Reload database files. For this example we will assume you are using the serverctl script bundled with Jaymod.

   [etserver]$ cd ~etserver/server1/
   [etserver]$ ./serverctl reload

Admin System

The Admin System is a collection of commands used to aid in server administration. The mechanism allows for a user to issue text-based commands from a variety of sources which are then executed on the game server. The system has been influenced by ET mod community's comfort level with Shrubmod, to which we have attempted to maintain some cosmetic familiarity.

Over time the system has grown to include more than just administrative commands; some commands have been added to make game play more enjoyable.

An access control list (ACL) based security system is in place to allow for fine-grained grants or denials of various privileges.

Note: After installing Jaymod the only user which has full access to all commands is the server console. Thus one must send commands through rcon or server console. Once users begin connecting and become known to the server, privileges can be granted to online or offline users as per server policy.

Warning: The person responsible for managing the game server is ultimately responsible for making sure commands are locked down and granted only to other responsible users. Please do not assume that Jaymod offers any kinds of guarantees. This is a free project, so we do not guarantee anything!

Synopsis

Commands may be issued from any of the following sources:

  • client console
  • client chat window
  • client team-chat window (if privilege granted)
  • client fireteam-chat window (if privilege granted)
  • client say bindings
  • client say_team bindings (if privilege granted)
  • client say_buddy bindings (if privilege granted)
  • rcon
  • server console

General command syntax is as follows. Note that commands are case-insensitive.

   !command [OPTION]...

Use the !help command to obtain a list of all available commands. Optionally, a detailed synopsis and description for a specific command is also available.

   !help [COMMAND]

Operation

The admin system is controlled using cvars and are effective immediately upon changing the value.

Table 7.1. Admin System Operation

Cvar Description
g_admin(cvar) enable or disables admin system
g_adminLog(cvar) sets the filename used for admin command logging

Quickstart Checklist

Most admins installing a new version of Jaymod just want to know how to get it up and running as fast as possible. The following is a simple checklist of steps to go through to grant yourself full access after connecting.

1. Enable server RCON access by setting the password in server console.

  [server-console] rconPassword PASSWORD

2. Inform client of default RCON password to use by setting the password in client console.

   [client-console] /rconPassword PASSWORD

3. Enable the admin system.

  [client-console] /rcon g_admin 1

4. Test that RCON has full access to all available commands. You should see a large list of commands. If you do not get any results there's probably something else wrong.

   [client-console] /rcon !help

5. Create a high admin-level. The number is arbitrary but must be a positive value.

   [client-console] /rcon !levadd 9

6. Grant level 9 all commands.

   [client-console] /rcon !levedit 9 -acl +@commands

7. Determine your client SLOT number as known to the server. This will usually be zero if you connected to an empty server.

   [client-console] /players

8. Now set your client SLOT to level 9.

   [client-console] /rcon !setlevel SLOT 9

9. Finished! Now try a few typical commands to see your new level in action.

   [client-console] !admintest
   [client-console] !help
   [client-console] !levlist

Privileges

Access control lists (ACL) are used to grant or deny privileges to an admin level or user. Generally, each admin level is different and by convention more privileges are granted to higher levels. Privilege naming is important and to help keep things clean the naming is a clear indicator of the type of privilege as follows:

pseudo Pseudo privileges are a logical grouping of other privileges.

Table 7.2. Pseudo Privileges

Privilege Description
@all all privileges
@behaviors all behavior privileges
@commands all command privileges

behavior Behavior privileges are used to control the behavior of the server in very specific ways. They usually effect the way commands operate or general policy enforcement.

Table 7.3. Behavior Privileges

Privilege Description
B/balanceImmunity can switch to any team regardless of balance
B/banPermanent does not need to specify the duration of a ban (permanent ban)
B/censorImmunity cannot be censored or flood protected
B/commandChat can run commands from team or fireteam chat
B/commandSilent can run commands silently from console (/!command)
B/reasonNone does not need to specify a reason for kick/ban
B/specChat can see all team, fireteam and PM chat as spectator
B/voteAny can call a vote anytime (even if disabled)
B/voteImmunity cannot be kicked, vote-muted, dropped for inactivity or complained against

command Each command has a corresponding privilege that follows the naming convention C/ command . For example, the privilege for !status is C/status. Privilege names are case-insensitive but for clarity we capitalize the prefix. Use the !help command to determine the privilege for a specific command.

Managing ACLs

ACL management is how we grant or deny a privilege to an admin level or user. Basically, an ACL is a list of intermixed granted or denied privileges, and our goal is to manage that list. In cases of logical conflict, a DENIED privilege takes precedence over a GRANTED privilege. Note ACL lists are reduced to their canonical value automatically by removing superfluous or conflicting entries.

Level manipulation is accomplished with !levedit and effects all users at the level being edited immediately. User manipulation is accomplished with !useredit but only effects the specific user being edited.

For the purposes of this documentation we'll be editing an admin level and assume it already exists. The examples will use level 5 and privilege C/news which corresponds to the popular !news command. Substitute these values according to your particular needs.

add grant The plus sign + immediately in front of a privilege specifies the privilege is to be granted.

   !levedit 5 -acl +C/news

add deny The minus sign - immediately in front of a privilege specifies the privilege is to be denied.

   !levedit 5 -acl -C/news

clear privilege The exclamation mark ! immediately in front of a privilege (without any space!) specifies the privilege is to be cleared (removed) from the ACL.

   !levedit 5 -acl !C/news

Various Examples

The following are various examples of how the commands may be used for some of the more complex tasks typical for a server admin.

1. Create a new admin level 500 for people who donate to server, add commands { !pants, !pip, !pop } to it and then assign some online players to that level.

 !levadd 500
 !levedit 500 -name Donators
 !levedit 500 -gtext ^3Greetings donator! Thanks for your contribution.
 !levedit 500 -gsound sound/osp/goat.wav
 !levedit 500 -acl +C/pants
 !levedit 500 -acl +C/pip
 !levedit 500 -acl +C/pop
 !levinfo 500
 !setlevel JohnSmith 500
 !setlevel MarthaKent 500
 !finger JohnSmith
 !finger MarthKent

2. A nasty user has come and gone from your server, but not without first creating a huge disruption. Maybe it's time to ban the player even though they already disconnected. The two pieces of information we have to go on is that the player's name was Jerry and he was connected within the last hour.

   !userlist -name jerry -since 60m

According to the results, the offending user has been identified with ID 1fea4ad9. Now let's ban the user for 30 days.

   !banuser 1fea4ad9 30d offensive behavior is not tolerated

And finally lets take a look at our ban list. As luck would have it, the list shows bans in order of newest bans to oldest so he should be right at the top of the list.

   !banlist

But we've had a change of heart! Let's review his ban details and unban him.

   !baninfo 1fea4ad9
   !unban 1fea4ad9

Database System

As of Jaymod 2.1.0 a new text-based database file structure has been implemented. Replacing the old data files are new .db files. These files, when possible, store information in human-readable ASCII format.

Important: All .db files are loaded into memory at game-init (map begin) time, and subsequently saved out to disk (overwriting the files) at game-shutdown (map end) time. This means any manual edits made to the database files will be lost at game-shutdown time. The best practice for manual edits (eg: adding levels to level.db file) is to first shutdown the server before editing database files.

The following table describes the new locations for old data.

Table 8.1. Data Transition

pre-2.1.0 2.1.0 Data Description
shrubbot.cfg level.db access level
shrubbot.cfg user.db admin and bans
xpbackup.dat user.db saved xp
recspree.dat map.db top killing sprees
seendb.dat user.db admin and bans

level.db Stores Admin System levels available for promoting users to higher levels of access. Data maintenance on this file should be done with the appropriate Admin System commands.

map.db Stores map related information such as killing-spree data. Data maintenance on this file can only be done with a text editor while the server is shutdown.

user.db Stores Admin System user related information, such as user level assignments, automatic greetings, ban, mute and XP-save data. Data maintenance on this file should be done with the appropriate Admin System commands.

XP-Save System

Operation

XP-save is controlled using cvars and are effective immediately upon changing the value. In order for XP-save to function, g_admin(cvar) must be enabled.

Table 9.1. XP-save Operation

Cvar Description
g_xpCap(cvar) set XP-limit action
g_xpMax(cvar) set XP-limit amount
g_xpSave(cvar) enable/disable XP-save feature
g_xpSaveTimeout(cvar) set XP-save timeout

Hitmode System

Introduction

The hitmode system is responsible for detecting bullet-hits on players. You might also know it as a hitbox system. As of Jaymod 2.1.0, an entirely new hitmode architecture has been implemented. I would like to acknowledge that we continue to use contributed code from Zinx Verituse for server-side player-animation tracking.

A great deal of care, thought and testing went into this system as we feel it is one of the most important aspects of gameplay. I hope you enjoy!

—Mr.Mxyzptlk, January 2007.

Highlights

antilag Antilag has been completely overhauled and integrated allowing for all bullet-fire weapons to benefit. Prior to this, mounted weapons such as Browning and MG42 did not benefit from antilag.

multiple modes The new architecture allows for Jaymod to support multiple hitmodes in a single release and leave it up to the server to decide which mode is best for them. As such, we have implemented backwards-compatible modes offering boxes which you are accustomed to, while at the same time permitted us to address some old weaknesses and to also offer newer, more advanced modes.

efficiency More hitmode and more sophistication usually results in a performance penalty. This is not the case with the new architecture. We use a hierarchal system to cull as many uneeded hit-checks as possible, while also no longer requiring temporary entities from the game engine. The net savings are very significant, resulting in more pound-for-pound CPU relief in typical gameplay, even when comparing a standing-up player with 7-boxes each in real mode, to 2-boxes each in pre-2.1.0 mode.

visual debugging Visual and data debugging support has been added which allows for testing and comparisons between different hitmodes during actual gameplay. Some of these are also useful for server admins and players seeking to learn and compare the new modes available, and we've decided to keep visual debugging enabled in releases so admins are free to experiment.

Operation

Hitboxes are controlled using cvars and are effective immediately upon changing the value.

Table 10.1 Hitmode Operation

Cvar Description
g_hitmode(cvar) set active hitmode
g_hitmodeAntilag(cvar) set antilag history in milliseconds
g_hitmodeAntilagLerp(cvar) enable/disable antilag lerping
g_hitmodeDebug(cvar) set bitflags for hitmode debugging
g_hitmodeFat(cvar) set increased torso-box size in inches
g_hitmodeGhosting(cvar) set lifetime of hit ghostin in milliseconds
g_hitmodeAReference(cvar) set reference hitmode for comparison
g_hitmodeZone(cvar) set zone for debugging

ETPro Mapscripting

Jaymod supports ETPro’s extended mapscripting.

The extended mapscripts offered by ETPro add new functions for new spawn points, map bugfixes, and many other possibilities. Documentation for these scripts is available at ETPro's website http://etpro.anime.net.

To enable use of these scripts, set g_mapScriptDirectory(cvar) appropriately.

Omni-bot

Jaymod natively supports the Omni-bot product. This product enables servers to set up computer controlled bots with relative ease. There is nothing that you have to set up within Jaymod’s configuration to use them. There is, however, some setup that needs to be done with the Omni-bot installation.

To get Omni-bot for your server, visit http://www.omni-bot.com. There, you will find downloads for the files needed to get running, and installation and configuration documentation.

It is imperative that you match the Omni-bot version exactly that which Jaymod supports. Jaymod 2.2.0 supports Omni-bot 0.81, and for all other versions please consult the appropriate documentation.

Native Library Search Path

Omni-bot can be installed in a variety of ways on your server. Because different people have different needs, a list of directories is searched and the first one which has a native library for your platform is used. Note that any duplicate directories are searched only once. The following is the standard search path, in order of preference, for Omni-bot native libraries:

1. optional directory specified via CVAR omnibot_path.

2. optional omni-bot sub-directory of fs_homepath, if specified.

3. optional omni-bot sub-directory of fs_basepath, if specified.

4. omni-bot subdir relative to { $HOME (for Linux) or %Program Files% (for Windows) } environment variables of the server process.

5. default mechanism for server platform's native library loader.

Note: On Linux systems, if the directory by which the Omni-bot library was found is relative (not absolute) then you must add '.' to the PATH environment variable before launching the process. If this is not done then the library will load but internal Omni-bot initialization routines will fail. It is strongly suggested that absolute paths be used to work around this issue.

Example search path for a typical Linux server with omnibot_path=/somewhere/omni-bot:

1. /somewhere/omni-bot/

2. /home/etserver/omni-bot/

3. /usr/local/games/enemy-territory/omni-bot/

4. $HOME/omni-bot/

5. <SYSTEM-LOADER>

Example search path for a typical Windows server with omnibot_path=Z:\Somewhere\Omni-bot:

1. Z:\Somewhere\Omni-bot\

2. G:\ETserver\Omni-bot\

3. C:\Program Files\Wolfenstein - Enemy Territory\Omni-Bot\

4. C:\Program Files\Omni-bot\

5. <SYSTEM-LOADER>

See Also

omnibot_enable(cvar) (Hyperlink coming soon!!)