This is Q2Admin by Shane Powell with R1CH's security patches applied and a couple tweaks to prevent kicking of players for false positives (Q2Admin would think a player was a bot when they were merely lagging badly.)
Versions 1.17.46 and later fix a bug in the way q2admin calculated flood protection thresholds. The bug could cause a player to be kicked for flooding the server when this was not intended. The algorithm now works correctly.
This version of the dll wants to be placed in the quake2/debug
or quake2/release
subdirectory with the default name for the dll. Then q2admin loads the game dll from the quake2/mod folder without needing to rename the game dll to gamex86.real.dll. If you want to keep the renaming convention, set quake2dirsupport = "No" in the
q2admin.txt file and uncomment the line by removing the leading semicolon.
Note: quake2dirsupport is set TRUE by default in the dll, causing the non-renamed dll to be launched from the mod folder.
The q2admin dll should be located in quake2/release/ or quake2/debug/ and must be named per the target processor architecture as defined by the Quake2 engine being used. The DLL name is automatically set when you compile q2admin in your environment. For example: gamex86_64.dll or gamex86.dll on Windows or gamex86_64.so or gamei386.so on Linux.
The q2admin dll will load the mod dll of the same name from the mod folder named in the command line.
Thus: quake2/release/gamex86_64.so the q2admin module, is loaded by the engine and the q2admin then loads quake2/yourgame/gamex86_64.so to launch the mod.
Note: r1q2 seeks and loads quake2/(release or debug)/gamex86_64.dll or gamex86_64.so automatically. To obtain the same functionality in Q2PRO
you must write: +set sys_forcegamelib quake2/release/gamex86_64.so
on the command line that launches the server.
Let's assume your game is called mymod. Your dll's would be named and placed as shown below.
c:\quake2\release\gamex86.dll - The Q2admin dll
c:\quake2\mymod\gamex86.dll - The mymod dll
quake2/release/gamex86.so - The Q2admin dll
quake2/mymod/gamex86.so - The mymod dll
c:\quake2\mymod\gamex86.dll - The Q2admin dll
c:\quake2\mymod\gamex86.real.dll - The mymod dll
quake2/mymod/gamex86.so - The Q2admin dll
quake2/mymod/gamex86.real.so - The mymod dll
The VS2019 project depends on the existence of a special Q2DIR system environment variable for placement of the DLL directly into your Quake2 path. You can set this via CMD or Powershell command lines or via the Settings | Advanced system settings | Environment Variables dialog or run this batch file in an Administrator CMD window.
@echo off
set Q2DIR=c:\quake2
(where c:\quake2
represents the root of your Quake2 game tree)
end
This method is used so VS Projects don't have to know the absolute path to the game folder. This Q2DIR is a system variable, not a path variable. The projects are configured to output the target files to $(Q2DIR)\debug\
and $(Q2DIR)\release\
for all configured modes so performing a Batch Rebuild
of all the targets will place all the configured DLL modes and PDB files in those folders for easy use when debugging your game mod with Q2Admin. Under Linux, the GNUmakefile builds an un-stripped shared object (.so) file so it's debuggable under gdb.
Clone this repository. Change to the directory containing the clone. Using make all
will clean the build directory, rescan the source files for dependencies and recompile all source files and create the dll in your default architecture. Use cp or mv to place the dll into quake2/release/
. Use setarch i386 make all
to build a 32-bit dll on x64 Linux platforms. Refer to the comments in GNUmakefile for more details. make clean
and make depends
are also valid.
*******************************************************
* *
* Q2Admin v1.17 for Quake2 *
* (c) Shane Powell 1999-2001 *
* *
* Date: 18th August 2001 *
* *
* Win32 / Linux *
* *
* http://www.planetquake.com/q2admin/ *
* *
*******************************************************
Q2Admin is a transparent proxy mod that adds many admin
functions plus ZBot/Ratbot detection (including hacked
bots) to Quake2. It works with all Quake2 mods transparently
by filtering communication between the server and the primary
mod it is running on top of.
Contents:
1. Install.
1.1. Windows Install.
1.2. Linux Install.
1.3. Alpha Linux Install.
1.4. Solaris Install.
2. Admin Commands and Setup.
2.1. Admin Commands.
2.2. q2admin.txt setup.
2.3. Quake2 client admin.
2.4. Quake2 Server admin.
2.5. Admin command reference.
2.5.1 "[LIKE/RE/CL] name" explained.
2.6. Impulses explained.
2.7. Advanced admin commands.
2.7.1. Max Rate / Max fps.
2.7.2. IP / Nick Banning.
2.7.3. Limited rcon.
2.7.4. Chat Flood Protection and Muting.
2.8. play_ and say_ commands.
2.8.1 play_all.
2.8.2 play_team.
2.8.3 play_person.
2.8.4 say_person.
2.8.5 say_group.
2.8.6 extended say.
2.9. Message of the Day (MOTD).
2.10 disable spawning items.
2.11 command voting.
2.12 disable client commands.
2.13 cl_pitchspeed and cl_anglespeedkey (Action Quake2 M4 Scripts)
2.14 client side variable checking
3. String preprocessing.
4. Logging explained.
5. Regular expressions.
6. Trouble Shooting.
7. Credits.
8. Copyright and Distribution Permissions.
9. Release History.
1. Install
----------
1.1. Windows Install
--------------------
Installation for servers running Quake2 v3.20
1. Shut down the Quake2 Server.
2. Create a directory off the Quake2 root directory called
'release'
3. Copy the gamex86.dll into the 'release' directory.
4. Copy the following files into the Quake2 root directory
(wherever Quake2.exe is).
q2admin.txt
q2adminban.txt
q2adminlog.txt
q2adminlrcon.txt
q2adminflood.txt
q2adminspawn.txt
q2adminvote.txt
q2admindisable.txt
q2admincheckvar.txt
5. Start the server as usual.
The Q2Admin prints it's version number out just before
the standard "==== InitGame ====" when the server starts.
Q2Admin also prints out warning messages if the config
files can't be found.
To enable overflow detection you must set logfile to 2 or
3 on the server. This is best done by adding it to your
server.cfg file.
Installation for servers running Quake2 up to v3.19
1. Shut down the Quake2 Server.
2. Copy the gamex86.dll and q2admin.txt into the Quake2 root
directory (wherever Quake2.exe is). You shouldn't
be overwriting any mod files unless you already have a
seamless dll installed for another mod (I believe there is
a camera mod that is seamless). You can only run one
seamless dll at a time.
3. Start the server as usual.
The Q2Admin prints it's version number out just before
the standard "==== InitGame ====" when the server starts.
Q2Admin also prints out warning messages if the config
files can't be found.
To enable overflow detection you must set logfile to 2 or
3 on the server. This is best done by adding it to your
server.cfg file.
1.2. Linux Install
------------------
PLEASE NOTE THAT Q2ADMIN ONLY RUNS WITH THE GLIBC VERSION
OF QUAKE2 FOR LINUX. It will run with the non-glibc
version but a lot of features seem to be broken when
running it with that version. Use at your own risk.
1. Shut down the Quake2 Server.
2. Uncompress q2admin1.tar.gz into the Quake2 root
directory. e.g. "tar zxf q2admin1.tar.gz"
3. For each mod that you want to protect, copy the
following files into the mod directory.
install
q2admin.so
q2admin.txt*
q2adminban.txt*
q2adminlog.txt*
q2adminlrcon.txt*
q2adminflood.txt*
q2adminspawn.txt*
q2adminvote.txt*
q2admindisable.txt*
q2admincheckvar.txt*
*Optional. Use only if you want to customithe Q2Admin
config for this particular mod rather than use the global
Q2Admin config.
4. Run "install" once. (e.g. ". ./install")
5. Start the server as usual.
The Q2Admin prints it's version number out just before
the standard "==== InitGame ====" when the server starts.
Q2Admin also prints out warning messages if the config
files can't be found.
The "install" script moves the old gamei386.so to
gamei386.real.so and moves q2admin.so gamei386.so.
If the install script is run again the files are moved
back to there original names. This can be used to
uninstall or enable / disable the detect bot code.
To enable overflow detection you must set logfile to 2 or
3 on the server. This is best done by adding it to your
server.cfg file (v3.20 only).
1.3. Alpha Linux Install
------------------------
1. Shut down the Quake2 Server.
2. Uncompress q2adminaxp1.tar.gz into the Quake2 root
directory. e.g. "tar zxf q2adminaxp1.tar.gz"
3. For each mod that you want to protect, copy the
following files into the mod directory.
install
q2admin.so
q2admin.txt*
q2adminban.txt*
q2adminlog.txt*
q2adminlrcon.txt*
q2adminflood.txt*
q2adminspawn.txt*
q2adminvote.txt*
q2admindisable.txt*
q2admincheckvar.txt*
*Optional. Use only if you want to customize the Q2Admin
config for this particular mod rather than use the global
Q2Admin config.
4. Run "install" once. (e.g. ". ./install")
5. Start the server as usual.
The Q2Admin prints it's version number out just before
the standard "==== InitGame ====" when the server starts.
Q2Admin also prints out warning messages if the config
files can't be found.
The "install" script moves the old gameaxp.so to
gameaxp.real.so and moves q2admin.so gameaxp.so.
If the install script is run again the files are moved
back to there original names. This can be used to
uninstall or enable / disable the detect bot code.
To enable overflow detection you must set logfile to 2 or
3 on the server. This is best done by adding it to your
server.cfg file (v3.20 only).
1.4. Solaris Install
--------------------
The Solaris port is done by the SolarEclipse. Go check
them out for ports of other Quake2 mods to Solaris OS.
http://www.planetquake.com/eclipse
Intel Solaris OS:
----------------
1. Shut down the Quake2 Server.
2. Uncompress q2admin1_solx86.tar.gz into the Quake2 root
directory. e.g. "tar zxf q2admin1_solx86.tar.gz"
3. For each mod that you want to protect, copy the
following files into the mod directory.
install.ksh
q2admin.solx86.so
q2admin.txt*
q2adminban.txt*
q2adminlog.txt*
q2adminlrcon.txt*
q2adminflood.txt*
q2adminspawn.txt*
q2adminvote.txt*
q2admindisable.txt*
q2admincheckvar.txt*
*Optional. Use only if you want to customize the Q2Admin
config for this particular mod rather than use the global
Q2Admin config.
4. Run "install" once. (e.g. ". ./install")
5. Start the server as usual.
The Q2Admin prints it's version number out just before
the standard "==== InitGame ====" when the server starts.
Q2Admin also prints out warning messages if the config
files can't be found.
The "install" script moves the old gamei386.so to
gamei386.real.so and moves q2admin.solx86.so gamei386.so.
If the install script is run again the files are moved
back to there original names. This can be used to
uninstall or enable / disable the detect bot code.
To enable overflow detection you must set logfile to 2 or
3 on the server. This is best done by adding it to your
server.cfg file (v3.20 only).
Sparc Solaris OS:
----------------
1. Shut down the Quake2 Server.
2. Uncompress q2admin1_sparc.tar.gz into the Quake2 root
directory. e.g. "tar zxf q2admin1_sparc.tar.gz"
3. For each mod that you want to protect, copy the
following files into the mod directory.
install.ksh
q2admin.sparc.so
q2admin.txt*
q2adminban.txt*
q2adminlog.txt*
q2adminlrcon.txt*
q2adminflood.txt*
q2adminspawn.txt*
q2adminvote.txt*
q2admindisable.txt*
q2admincheckvar.txt*
*Optional. Use only if you want to customize the Q2Admin
config for this particular mod rather than use the global
Q2Admin config.
4. Run "install" once. (e.g. ". ./install")
5. Start the server as usual.
The Q2Admin prints it's version number out just before
the standard "==== InitGame ====" when the server starts.
Q2Admin also prints out warning messages if the config
files can't be found.
The "install" script moves the old gamesparc.so to
gamesparc.real.so and moves q2admin.sparc.so gamesparc.so.
If the install script is run again the files are moved
back to there original names. This can be used to
uninstall or enable / disable the detect bot code.
To enable overflow detection you must set logfile to 2 or
3 on the server. This is best done by adding it to your
server.cfg file (v3.20 only).
2. Admin commands and Setup
---------------------------
2.1. Admin commands
-------------------
There are 3 ways to use admin commands.
1. In the q2admin.txt for initial configuration.
2. In a Quake2 client connected to a server running Q2Admin.
3. On the server console.
2.2. q2admin.txt setup
-------------------------
The configuration file is automatically read from two places.
It first reads q2admin.txt from the Quake2 directory then
from the mod directory.
Anyone wanting to make a configuration specific to a mod
can copy the q2admin.txt into the mod directory and
modify it for the requirements of that mod.
If you run multiple servers from one mod directory you can
use the command "+set q2admintxt <q2admin.txt-filename>"
when starting a quake2 server. The q2amin.txt-file needs to
be in the mod directory for this to work. For example:
quake2 +set dedicated 1 +set q2admintxt q2admin_port27920.txt +exec ctfserver.cfg
The format for the .txt file is as follows:
Lines beginning with a ';' are comment lines and are
ignored. e.g.
; this is a comment line.
The standard layout for a config command is as follows:
<command> "<value>"
Note the value must always be in quotes. e.g.
adminpassword "secret"
For a list of configuration commands see section 2.5.
2.3. Quake2 client admin
------------------------
By default the Quake2 client admin is disabled. To enable it
you must provide a password. Edit the q2admin.txt file
and add a default password.
All remote admin commands must be prefixed with a '!'.
Before you can use any of the remote admin commands you
must login. Logging in puts the user in admin mode where
he/she can run admin commands. Admin mode lasts until
the level changes, the server is shut down or the player
disconnects from the server. There can be multiple
admins logged in at the same time.
To log into admin mode, from the Quake2 client use the
command '!setadmin' with the admin password that was
set in q2admin.txt file.
e.g.
!setadmin secret
The server will print the 'q2admin Admin mode active'.
There is also a automatically way to get into admin on
client connect.
You can put your password into a cvar 'q2adminpassword'
and this cvar is checked on client connect to see if it's
got the correct password set. If it has it will print
'q2admin Admin mode active' message not long after connect.
e.g.
set q2adminpassword secret
then connect to the server.
Note, the cvar is ONLY checked at client connect.
Once set you can begin to use admin commands. If you try to
setadmin again the server will tell you that you are already
in admin mode.
For string values there are some special commands. To have
a double quote in a value, you must use '\q'. To use a
new line in a string you use '\n'. To use a '$' in a string
you use a '\d'. To use a '\' in a string you use '\\'.
e.g.
!customservercmd "error \qGet off my server, ZBot/RatBot user!\q"
or
!ban + name re ^VK-.*\d password duck
When typing in a command on the client console you
don't have to type the whole command in most cases, you just
need to type in enough of the command to make it unique.
e.g.
!customs "error \qGet off my server, ZBot/RatBot user!\q"
For a list of admin commands see section 2.5.
2.4. Quake2 Server admin
------------------------
All admin commands run from the server console must be
prefixed with 'sv !'.
e.g.
'sv !ban name blank'
For string values there are some special commands. To have
a double quote in a value, you must use '\q'. To use a
newline in a string you use '\n'. To use a '$' in a string
you use a '\d'. To use a '\' in a string you use '\\'.
e.g.
sv !customservercmd "error \qGet off my server, ZBot/RatBot user!\q"
or
sv !ban + name re ^VK-.*\d password duck
When typing in a command on the server console you
don't have to type the whole command in most cases, you just
need to type in enough of the command to make it unique.
e.g.
sv !customs "error \qstuff off ZBot/RatBot user\q"
For a list of server admin commands see section 2.5.
2.5. Admin command reference
----------------------------
Here is a list of all the admin commands broken down into sections:
Admin Setup:
adminpassword - client console password (blank = disable)
setadmin - sets a client into admin mode
maxfps - controls the max clients cl_maxfps value
minfps - controls the min clinets cl_maxfps value
maxrate - controls a clients max rate value
minrate - controls a clients min rate value
gamemaptomap - converts the mod gamemap to map commands
quake2dirsupport - makes the win32 dll setup like the linux
serverinfoenable - enable/disable 'set Q2Admin "1.15" S'
q2adminrunmode - q2admin run level
maxclientsperframe - max clients processed per frame
framesperprocess - messages per x frames.
Banning:
ban - adds bans
banonconnect - disallow banned clients at the connect
chatban - adds chat bans
chatbanning_enable - enable chat bans
defaultbanmsg - default ban message
defaultchatbanmsg - default chat ban message
defaultreconnectmessage - default reconnect message
delban - deletes a ban from memory
delchatban - deletes a chat ban from memory
hackuserdisplay - message to show on detection of a hacked quake2.exe
kickonnamechange - kick client when changing to banned name
listbans - lists all bans in memory
listchatbans - lists all chat bans in memory
nickbanning_enable - enable nick banning
ipbanning_enable - enable ip banning
reloadbanfile - clear and reload all bans
lock - disable/enable access to the server
lockoutmsg - message when trying to connect to a locked server
reconnect_address - enable forced reconnecting
reconnect_time - forced reconnecting timeout in seconds
reconnect_checklevel - check level for the reconnect feature
skincrashmsg - message to show on detection of a too large skin
checkclientipaddress - check if connecting clients has a valid ip address
Chat Flood Protection:
chatfloodprotect - chat flood protection setup (like QW)
clientchatfloodprotect - client chat flood protection setup
chatfloodprotectmsg - chat flood message displayed
mute - mutes a single client for x seconds
reloadfloodfile - reloads the q2adminflood.txt file.
listfloods - lists the commands that are flood protected
floodcmd - adds a command to the flood protected list
flooddel - dels a command from the flood list
Logging:
clearlogfile - deletes the log file
displaylogfile - displays the while log file to the console
logevent - view / modify log events
logfile - view / add / del log file setups
ZBot/RatBot/ZorBot/BW-Proxy/Nitro2(Xania)/Timescale Detection:
clientsidetimeout - internal development, don't touch.
customclientcmd - run on the zbot/ratbot client when detected
customservercmd - run on the server when zbot/ratbot detected
disconnectuser - kicks zbot/ratbot user on detect
disconnectuserimpulse - kicks client for using impulses
displayimpulses - displays message when client uses impulses
displayzbotuser - display message when a client is detected as a zbot
dopversion - determines if a p_version is sent to each player
impulsestokickon - which impulses to kick client on
numofdisplays - number of times zbot/ratbot message is displayed
randomwaitreporttime - random wait time between detect & action
zbotdetect - enable/disable zbot/ratbot detection
zbotdetectactivetimeout - wait time between detect & action taken
zbotuserdisplay - message that is displayed on zbot detect
zbc_enable - WhiteFang's ZbotCheck code enable
zbc_jittermax - WhiteFang's ZbotCheck setting
zbc_jittermove - WhiteFang's ZbotCheck setting
zbc_jittertime - WhiteFang's ZbotCheck setting
proxy_bwproxy - detection of BW-Proxy setup
proxy_nitro2 - detection of Nitro2/Xania setup
timescaledetect - detect timescale cheaters.
timescaleuserdisplay - message to display for a timescale cheater
Client Connecting:
customclientcmdconnect - client command run on client connect
customservercmdconnect - server command run on client connect
Name Changing:
displaynamechange - displays message when user changes names
namechangefloodprotect - name change flood protection setup (like QW)
namechangefloodprotectmsg - name change flood protection message
Skin Changing:
skinchangefloodprotect - skin change flood protection setup (like QW)
skinchangefloodprotectmsg - skin change flood protection message
Lrcons:
listlrcons - list all lrcons loaded into memory
lrcon - add lrcon into memory.
lrcondel - delete lrcon from memory.
reloadlrconfile - clear and reload all lrcon's.
rcon_random_password - used random rcon password for the lrcon command.
lrcon_timeout - lrcon timeout for a random set rcon
play_ commands control:
play_all_enable - enable the play_all client command
play_team_enable - enable the play_team client command
play_person_enable - enable the play_person client command
printmessageonplaycmds - enable the message display of play_ commands
say_ commands control:
extendedsay_enable - enable extended say/play commands
say_group_enable - enable the say_group client command
say_person_enable - enable the say_person client command
Server console chatting:
say_group - server console messaging to a group
say_person - server console messaging to a client
MOTD:
setmotd - set the MOTD file.
Client Control:
stuff - force client to run a client command
ip - displays a clients ip address
kick - allows you to kick one or more clients
Spawning Entities Control:
spawnentities_enable - enable/disable the spawn entities feature
listspawns - lists all the disabled entity types
reloadspawnfile - reloads the spawn entity list from file
spawncmd - add spawn entity type to the list
spawndel - delete a spawn entity type
spawnentities_internal_enable - enable the internal disable feature
Command Voting:
vote_enable - enable / disable command voting
clientvotecommand - client vote command to use
clientvotetimeout - vote timeout
votecountnovotes - count non-voters in percent
votepasspercent - pass percent
voteminclients - minimum clients needed to start a vote
clientremindtimeout - remind clients to vote every x seconds
listvotes - lists all the allowed vote commands
reloadvotefile - reload vote command list
votecmd - add vote command
votedel - delete vote command
voteclientmaxvotes - max votes a player can cast in x seconds
voteclientmaxvotetimeout - time limit that the player can cast x votes
Disable Client Commands Control:
disablecmds_enable - enable/disable the disable client commands feature
listdisable - lists all the disabled commands
reloaddisablefile - reloads the disable commands list from file
disablecmd - add disable command type to the list
disabledel - delete a disable command type
Misc:
version - prints the current version of q2admin out
cvarset - more powerful version of server console set
entity_classname_offset - sets the classname offset, needed for some features
filternonprintabletext - filters out nonprintable characters.
swap_attack_use - swaps +attack and +use.
mapcfgexec - exec the map cfg files.
cl_pitchspeed:
cl_pitchspeed_enable - Enable/Disable cl_pitchspeed change detect.
cl_pitchspeed_display - Display when a user changes cl_pitchspeed.
cl_pitchspeed_kick - Kick user for changing cl_pitchspeed.
cl_pitchspeed_kickmsg - Kick message.
cl_anglespeedkey:
cl_anglespeedkey_enable - Enable/Disable cl_anglespeedkey change detect.
cl_anglespeedkey_display - Display when a user changes cl_anglespeedkey.
cl_anglespeedkey_kick - Kick user for changing cl_anglespeedkey.
cl_anglespeedkey_kickmsg - Kick message.
Client Side Variable checking:
checkvarcmds_enable - Enable/Disable client side variable checking
listcheckvar - lists all the checked variables commands
reloadcheckvarfile - reloads the checked variables commands list from file
checkvarcmd - add checked variable command type to the list
checkvardel - delete a checked variable command type
checkvar_poll_time - poll timeout in second between each variable check
Command: "adminpassword"
Value: String
Where Allowed: q2admin.txt, server console.
Sets the password used in activating admin mode
for a Quake2 client.
Command: "ban"
Where Allowed: client console, server console.
See section 2.7.2.
Command: "banonconnect"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Ban on client connect (YES) or ban on client begin (NO).
When banning on client connect the banned player will not
use up a client position at all BUT no ban message is
displayed. Ban on client begin will use a player position
for the length of the client map load then be kicked. But
client will get a BAN message before getting kicked.
See section 2.7.2.
Command: "chatban"
Where Allowed: client console, server console.
See section 2.7.2.
Command: "chatbanning_enable"
Where Allowed: client console, server console.
Enable chat banning.
See section 2.7.2.
Command: "chatfloodprotect"
Value: <number of messages> <in x seconds> <silence in seconds>
Where Allowed: q2admin.txt, client console, server console.
Chat flood protection so that a chat macro
does not flood the server and other clients.
x number of messgaes in y number of seconds will set will
mute the player for z seconds.
if <silence in seconds> is 0 then the person is kicked.
if <silence in seconds> is -1 then the person is permanently
muted.
The console format for the command is:
[sv] !chatfloodprotect <number of messages> <in x seconds> <silence in seconds>
to disable change to:
[sv] !chatfloodprotect disable
See section 2.7.4.
Command: "chatfloodprotectmsg"
Value: String
Where Allowed: q2admin.txt, client console, server console.
Chat flood protection message.
See section 2.7.4.
Command: "checkvar_poll_time"
Value: Number (seconds)
Where Allowed: q2admin.txt, client console, server console.
The number of seconds between before each variable for each client is checked when
check client side variables is enabled.
e.g. if there are 5 variables listed in q2admincheckvar.txt, the first variables is
checked first, x seconds later the next line is checked and so on until there are no
more variables to check. It then loops back to checking the first variable again.
So if checkvar_poll_time is 60 seconds and there are 5 variables listed, each
variable will be checked one every 5 minutes. Reducing this variable will increase
the traffic between the client and the server.
Command: "checkvarcmd"
Where Allowed: client console, server console.
[sv] checkvarcmd CT variable value
[sv] checkvarcmd RG variable lower upper
Used to add client side variable command to the list. See section 2.14.
Command: "checkvarcmds_enable"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Enables/Disables the client side variable checking commands list. See section 2.14.
Command: "checkvardel"
Where Allowed: client console, server console.
[sv] disabledel disablenum
Used to delete a client side variable command from the checked variable commands list.
See section 2.14.
Command: "clearlogfile <lognum>"
Value: none
Where Allowed: client console, server console.
Where lognum is 1 to 32.
Deletes the Q2Admin lognum log file if it is setup.
Command: "clientchatfloodprotect"
Where Allowed: client console, server console.
Client chat flood protection so that a chat macro
does not flood the server and other clients. This
commands sets the clients local flood protection
setup which overrides the global one if enabled.
x number of messgaes in y number of seconds will set will
mute the player for z seconds.
if <silence in seconds> is 0 then the person is kicked.
if <silence in seconds> is -1 then the person is permanently
muted.
The console command format is:
[sv] !clientchatfloodprotect [LIKE/RE/CL] name [xxx(num) xxx(sec) xxx(silence) / disable]
See section 2.7.4.
Command: "clientsidetimeout"
Value: Number (seconds)
Where Allowed: q2admin.txt, client console, server console.
Mainly used for internal development testing. Don't touch.
Command: "clientvotecommand"
Value: String
Where Allowed: q2admin.txt, client console, server console.
Client console vote command. See section 2.11.
Command: "clientvotetimeout"
Value: Seconds
Where Allowed: q2admin.txt, client console, server console.
Sets the clients voting timeout is seconds. See section 2.11.
Command: "cl_anglespeedkey_enable"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Enables/disables the cl_anglespeedkey change detect. See section 2.13.
Command: "cl_anglespeedkey_display"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Display when a cl_anglespeedkey change is detected. See section 2.13.
Command: "cl_anglespeedkey_kick"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Kick the user when a cl_anglespeedkey change is detected. See section 2.13.
Command: "cl_anglespeedkey_kickmsg"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Kick string to display when the user is kicked.
Command: "cl_pitchspeed_enable"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Enables/disables the cl_pitchspeed change detect. See section 2.13.
Command: "cl_pitchspeed_display"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Display when a cl_pitchspeed change is detected. See section 2.13.
Command: "cl_pitchspeed_kick"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Kick the user when a cl_pitchspeed change is detected. See section 2.13.
Command: "cl_pitchspeed_kickmsg"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Kick string to display when the user is kicked.
Command: "customclientcmd"
Value: String
Where Allowed: q2admin.txt, client console, server console.
Custom client console command to run on ZBot/RatBot bot detect.
(run after the client messages and before the disconnect)
Command: "customclientcmdconnect"
Value: String
Where Allowed: q2admin.txt, client console, server console.
Custom client console command that runs when a client connects.
Command: "customservercmd"
Value: String
Where Allowed: q2admin.txt, client console, server console.
Custom server console command to run on ZBot/RatBot bot detect.
(run after the log file update)
There is a special variable you can pass to this command.
%c will get translated to the clients connection number.
Command: "customservercmdconnect"
Value: String
Where Allowed: q2admin.txt, client console, server console.
Custom server console command that is run when clients
connect. '%c's are replaced by the client number.
e.g. "sv !stuff cl %c file clientconnect.txt"
Command: "cvarset"
Value: None
Where Allowed: client console, server console.
Allows the settings of server console cvar's. This is a little
more powerful than the 'set' command as it accepts the string
process features of q2admin. See section 2.2 for more details.
Setting a value to 'none' will also delete the cvar (the same
as setting it to blank. This is useful for remote control of
features like RA2 password cvar where you can set it remotely
but you can't blank it remotely. You can with cvarset
e.g. "rcon xxx sv !cvarset password none"
Command: "defaultbanmsg"
Value: String
Where Allowed: q2admin.txt, client console, server console.
The default ban message for logging and displaying when someone
is banned.
Command: "defaultchatbanmsg"
Value: String
Where Allowed: q2admin.txt, client console, server console.
The default chat ban message for logging and displaying when someone
has typed in a banned word.
Command: "defaultreconnectmessage"
Value: String
Where Allowed: q2admin.txt, client console, server console
Message to display while a player is reconnecting to the Quake2 server.
Command: "delban"
Value: Ban Number
Where Allowed: client console, server console.
Deletes a ban from memory (not from the q2adminban.txt file though).
See section 2.7.2.
Command: "delchatban"
Value: Ban Number
Where Allowed: client console, server console.
Deletes a chat ban from memory (not from the q2adminban.txt file though).
See section 2.7.2.
Command: "disablecmd"
Where Allowed: client console, server console.
[sv] disablecmd [SW/EX/RE] command
Used to add disabled command to the list. See section 2.12.
Command: "disablecmds_enable"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Enables/Disables the disable client commands list. See section 2.12.
Command: "disabledel"
Where Allowed: client console, server console.
[sv] disabledel disablenum
Used to delete a disabled command from the disabled commands list.
See section 2.12.
Command: "disconnectuser"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Disconnect a bot user when detected.
Command: "disconnectuserimpulse"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Disconnect user if generating an impulse.
Command: "displayimpulses"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Display when impulses are generated / used
This is a future-proof thing that will display messages
when impulses are used. The reason is if the ZBot
person has a ZBot hack to get around the "normal" detect
this will display when he is sending commands. Sort of
like a back-up method of detecting ZBot users. The only
problem is that normal clients can generate impulses as
well and I don't know if this is for commanding the ZBot
or something that a normal q2 mod uses. Only 1 q2 mod
that I know off uses impulses though so chances are that
it's a ZBot user.
ZBot impulses:
- Impulse 169 : toggle menu
- Impulse 170 : move up (menu)
- Impulse 171 : move down (menu)
- Impulse 172 : increase item (menu)
- Impulse 173 : decrease item (menu)
- Impulse 174 : toggles bot on/off
- Impulse 175 : toggles scanner display
Note: I display a message when ANY impulse is used just
to be safe...
Command: "displaylogfile <lognum>"
Value: none
Where Allowed: client console
Where lognum is 1 to 32.
Displays the contents of lognum logfile to the console.
Command: "displaynamechange"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Display name changes so everybody knows someone's changed their name...
Command: "displayzbotuser"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Display user is a ZBot/RatBot to the rest of the server.
Command: "dopversion"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Determines whether Q2Admin will send a "p_version"-string to a player
on connect. If the player is using a proxy it will respond with its
name and version number.
Command: "entity_classname_offset"
Value: Number
Where Allowed: q2admin.txt, client console, server console.
The byte offset to the classname pointer in the entity structure.
This is required for the internal disable spawn entities feature.
If this figure is wrong q2admin may crash and the internal disable
entities feature will not work or the entity create/delete logging
feature to work.
Email killerbee to check what the offset is for the mod that you are
running.
Command: "extendedsay_enable"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Enables the say_group and say_person client commands to be run
from the say and messagemode commands in a special syntax.
See section 2.8.6
Command: "filternonprintabletext"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Filters out any non-printable characters from any text being said/printed.
It only allows characters in the range of 0x20 to 0x7E.
This may upset some mods printing.
Command: "floodcmd"
Where Allowed: client console, server console.
Adds a client console command to the flood protected list in memory.
See section 2.7.4.
Command: "flooddel"
Where Allowed: client console, server console.
Deletes a client console command from the flood protected list in memory.
See section 2.7.4.
Command: "framesperprocess"
Value: Number
Where Allowed: q2admin.txt, client console, server console.
q2admin processes messages every x frames. This is a internal
testing value and it is not a good idea to change it.
Command: "gamemaptomap"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Converts the mod gamemap commands to map commands for when it changes
levels. This forces the mod dll to unload / reload.
Command: "impulsestokickon"
Value: List of numbers
Where Allowed: q2admin.txt, client console, server console.
What impulses do we want to kick people on?? disconnectuserimpulse
must be set to 'Yes' for this to take action. Commenting this
command out of the q2admin.txt will select all impulses.
The format for running this command in the server console or the
client console is:
[sv] !impulsestokickon [add/reset] [impulse] [impulse] ...
[add] will add the following impulses to the current list.
[reset] will clear the current list (effectively selecting all
impulses)
Command: "ip"
Where Allowed: client console, server console.
Displays the ip address of a client.
[sv] !ip [like/re/cl] name
Command: "ipbanning_enable"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Enable ip banning. For bans that use both IP and Name, it then just
uses the name.
See section 2.7.2.
Command: "hackuserdisplay"
Value: String
Where Allowed: q2admin.txt, client console, server console
Message to display when a player gets kicked for using a hacked
quake2.exe to get around (some of) the protection methods of Q2Admin.
Command: "kick"
Where Allowed: client console, server console.
Kick one or more clients.
[sv] !kick [like/re/cl] name
e.g.
!kick re ^VK-.*\d
will kick any client which starts with 'VK-'
!kick cl 1+4+5+7
will kick clients 1, 4, 5, 7.
Command: "kickonnamechange"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Kick uses for changing to banned names. If No the name is not allowed
to change.
See section 2.7.2.
Command: "listbans"
Where Allowed: client console, server console.
Lists all the bans loaded into memory.
See section 2.7.2.
Command: "listchatbans"
Where Allowed: client console, server console.
Lists all the chat bans loaded into memory.
See section 2.7.2.
Command: "listcheckvar"
Where Allowed: client console, server console.
Lists all the checked variable commands loaded into memory.
See section 2.14
Command: "listdisable"
Where Allowed: client console, server console.
Lists all the disabled commands loaded into memory.
See section 2.12
Command: "listfloods"
Where Allowed: client console, server console.
Lists all the flood protected commands loaded into memory.
See section 2.7.4.
Command: "listlrcons"
Where Allowed: client console, server console.
Lists all the lrcons loaded into memory.
See section 2.7.3.
Command: "listspawns"
Where Allowed: client console, server console.
Lists all the spawns loaded into memory.
See section 2.10
Command: "listvotes"
Where Allowed: client console, server console.
Lists all the vote commands loaded into memory.
See section 2.11
Command: "lock"
Value: Yes/No
Where Allowed: client console, server console.
When set to yes it locks down the server so
that noone else can connect.
Command: "lockoutmsg"
Value: String
Where Allowed: q2admin.txt, client console, server console.
The server lockdown message that connecting users see.
Command: "logevent"
Where Allowed: client console, server console.
Lists / edits the log event list.
See section 4.
Command: "logfile"
Where Allowed: client console, server console.
Lists / edits the log file list.
See section 4.
Command: "lrcon_timeout"
Value: Number (seconds)
Where Allowed: q2admin.txt, client console, server console.
Timeout, when rcon_random_password is set to "Yes", for how long lrcon command is
timed out before the rcon password is set back to the orginal value.
See section 2.7.3.
Command: "lrcon"
Where Allowed: client console, server console.
Adds lrcon's to the internal lrcon list.
See section 2.7.3.
Command: "lrcondel"
Where Allowed: client console, server console.
Deletes lrcon's from the internal lrcon list.
See section 2.7.3.
Command: "mapcfgexec"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Enables the feature to exec the mapcfg/<mapname>-pre.cfg,
mapcfg/<mapname>-post.cfg and mapcfg/<mapname>-end.cfg files.
Command: "maxclientsperframe"
Value: Number
Where Allowed: q2admin.txt, client console, server console.
Maximum clients that q2admin can process per frame.
This is a debugging/internal value that should not be
changed unless told to.
Command: "maxfps"
Value: Number
Where Allowed: q2admin.txt, client console, server console.
Sets the maximum cl_maxfps that a client may have.
See section 2.7.1.
To disable set to 0.
Command: "maxrate"
Value: Number
Where Allowed: q2admin.txt, client console, server console.
Sets the maximum rate that a client may have.
See section 2.7.1.
To disable set to 0.
Command: "maximpulses"
Value: Number
Where Allowed: q2admin.txt, client console, server console.
Max number of impulses to detect before kicking.
Command: "minfps"
Value: Number
Where Allowed: q2admin.txt, client console, server console.
Sets the minimum cl_maxfps that a client may have.
To disable set to 0.
Command: "minrate"
Value: Number
Where Allowed: q2admin.txt, client console, server console.
Sets the minimum rate that a client may have.
See section 2.7.1.
To disable set to 0.
Command: "mute"
Where Allowed: client console, server console.
[sv] !mute [like/re/cl] name [time(seconds) / PERM]
This command will stop the client from messaging for time
seconds.
A mute time of 0 will unmute a client.
[PERM] option will permanently mute a client.
One caveat for this command is that is works a lot better if
the underlying mod's flood protection is turned off and
q2admin's flood protection is used. For most code based on
the v3.20 code you use the 'flood_msgs 0' to turn off flood
protection.
See section 2.7.4.
Command: "namechangefloodprotect"
Value: <number of messages> <in x seconds> <silence in seconds>
Where Allowed: q2admin.txt, client console, server console.
Name changing flood protection so that a name change macro
does not flood the server and other clients.
[sv] !namechangefloodprotect <number of messages> <in x seconds> <silence in seconds>
if <silence in seconds> is 0 then the person is kicked.
to disable change to:
[sv] !namechangefloodprotect disable
Command: "namechangefloodprotectmsg"
Value: String
Where Allowed: q2admin.txt, client console, server console.
Name change flood protection message.
Command: "nickbanning_enable"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Enable nick banning. For bans that use both IP and Name, it
then just uses the IP.
See section 2.7.2.
Command: "numofdisplays"
Value: Number
Where Allowed: q2admin.txt, client console, server console.
Message to display that the using is using a bot.
NOTE: must have 1 and only 1 '%s' in the line
%s will print the users name
Command: "play_all_enable"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Enable play_all command.
Plays a wav file for each person in the game.
See section 2.8
Command: "play_team_enable"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Enable play_team command (may not work %100 with each mod,
depends on how the mod teams are implemented).
Plays a wav file on each person that is in your team.
See section 2.8
Command: "play_person_enable"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Enable play_person command.
Plays a wav file for 1 person in the game.
See section 2.8
Command: "printmessageonplaycmds"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Print messages when clients use the play sound commands. It tells who is playing the sound and to whom.
(all/team/private)
Command: "proxy_bwproxy"
Value: Number (0-2)
Where Allowed: q2admin.txt, client console, server console.
Controls the detection of BW-Proxy proxy.
0 - No Detection. This means they will be detected as zbots.
1 - Normal Detection. This is the most secure method but with some mods
this may not work.
2 - Insecure Detection. This will allow the proxies to connect but
it may also allow some types of modified zbot to connect as well.
Also settings either proxy_bwproxy or proxy_nitro2 to '2' will
automatically set the other one to '2' as well.
Command: "proxy_nitro2"
Value: Number (0-2)
Where Allowed: q2admin.txt, client console, server console.
Controls the detection of Nitro2 proxy.
0 - No Detection. This means they will be detected as zbots.
1 - Normal Detection. This is the most secure method but with some mods
this may not work.
2 - Insecure Detection. This will allow the proxies to connect but
it may also allow some types of modified zbot to connect as well.
Also settings either proxy_bwproxy or proxy_nitro2 to '2' will
automatically set the other one to '2' as well.
Command: "quake2dirsupport"
Value: Yes/No
Where Allowed: q2admin.txt.
Only for use in windows.
This tells the Q2Admin dll that it is running in the Quake2
directory (or the release directory for v3.20+). When set to
'No' the dll is being loaded from the mod directory like the
linux / solaris versions. For win32 the old mod dll must be
called 'gamex86.real.dll' for this to work.
Command: "randomwaitreporttime"
Value: Number (seconds)
Where Allowed: q2admin.txt, client console, server console.
When zbotdetectactivetimeout is -1 this value is used to
generate a random time between 5 seconds to 5 seconds +
randomwaitreporttime seconds.
e.g. 55 means 5 seconds to 60 seconds
Command: "rcon_random_password"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Changes the rcon password to some random string for the lrcon command. This prevents
people from discovering the real rcon password through dumpping packets.
See section 2.7.3.
Command: "reconnect_address"
Value: String
Where Allowed: q2admin.txt, client console, server console.
Force client to reconnect to inital connection, bepasses any
proxies that may be runnning. Please put in the ip
address/name and port (if needed) of the server.
e.g. reconnect_address "quake2.games.org.nz:27920"
or
e.g. reconnect_address "192.168.1.10"
No address means the feature is disabled.
Command: "reconnect_checklevel"
Value: Number
Where Allowed: q2admin.txt, client console, server console.
This controls how strict the reconnect feature is.
0 - very strict (most secure but is the most likely to cause multiple reconnections)
1 - less strict (not so secure, this should allow NAT router / internet software proxy
to connect more easily)
Command: "reconnect_time"
Value: Number (seconds)
Where Allowed: q2admin.txt, client console, server console.
Client must reconnect in X time from the inital connect.
Command: "reloadbanfile"
Value: None
Where Allowed: client console, server console.
Deletes all the current ban's and reloads the banfile.
Command: "reloadcheckvarfile"
Value: None
Where Allowed: client console, server console.
Deletes all the current checked variable command list and
reloads the checked variable command list file.
See section 2.14
Command: "reloaddisablefile"
Value: None
Where Allowed: client console, server console.
Deletes all the current disbled command list and reloads the
disabled command list file. See section 2.12
Command: "reloadfloodfile"
Value: None
Where Allowed: client console, server console.
Deletes all the current flood protected commands from memory and
reloads them from the q2adminflood.txt file.
See Section 2.7.4.
Command: "reloadlrconfile"
Value: None
Where Allowed: client console, server console.
Deletes all the current lrcon's and reloads the lrcon command
list file.
Command: "reloadspawnfile"
Value: None
Where Allowed: client console, server console.
Deletes all the current spawn list and reloads the spawn
list file. See section 2.10
Command: "reloadvotefile"
Value: None
Where Allowed: client console, server console.
Deletes all the current vote command list and reloads the
vote command list file. See section 2.11
Command: "say_group"
Where Allowed: server console.
Sends a message to 1 or more clients.
[sv] !say_group [LIKE/RE/CL] <playername> <message>
See section 2.8
Command: "say_group_enable"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Enable say_person command.
Send a message to a group of people in the game.
See section 2.8
Command: "say_person"
Where Allowed: server console.
Sends a message to 1 client.
[sv] !say_person [LIKE/RE/CL] <playername> <message>
See section 2.8
Command: "say_person_enable"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Enable say_person command.
Send a message to 1 person in the game.
See section 2.8
Command: "serverinfoenable"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Sets Q2Admin's version number in a cvar on the server. This way
programs like Gamespy will show Q2Admin's version number as part
of the server info. If you're getting "Info string length exceeded"
on the server console, change this value to "No".
Command: "setadmin"
Value: String
Where Allowed: client console.
Sets the admin mode for Quake2 clients.
Command: "setmotd"
Value: String (filename)
Where Allowed: q2admin.txt, client console, server console.
MOTD file to display at client connect (and also happens on
level changed as well)
For the console versions of the command, if you don't supply
a filename, the MOTD is cleared. If you do the MOTD is loaded.
NOTE: by default the MOTD is read from the Quake2 directory.
If you want to use a mod motd you must supply the directory
name. e.g. sv !setmotd "ctf/mymotd.txt"
Also a any qauke2 client connected to the server may redisplay
the motd by typing 'motd' into the console.
Command: "skinchangefloodprotect"
Value: <number of skin changes> <in x seconds> <silence in seconds>
Where Allowed: q2admin.txt, client console, server console.
Skin changing flood protection so that a skin change macro
does not flood the server and other clients.
[sv] !skinchangefloodprotect <number of skin changes> <in x seconds> <silence in seconds>
if <silence in seconds> is 0 then the person is kicked.
to disable change to:
[sv] !skinchangefloodprotect disable
Command: "skinchangefloodprotectmsg"
Value: String
Where Allowed: q2admin.txt, client console, server console.
Skin change flood protection message.
Command: "skincrashmsg"
Value: String
Where Allowed: q2admin.txt, client console, server console
Message to display when a player gets kicked for trying to change
his skin to a very large value which would crash the server.
Command: "soloadlazy"
Value: Yes/No
Where Allowed: q2admin.txt.
This switch is only used in the LINUX version. It determines
the way that the so file is loaded. All so files should load
either way... so files that only load with the lazy switch set to
'yes' means that you are either missing a library to run the mod so
or that there is a problem with the so file that should be reported
to the author of the mod. Running so files that requires the lazy
flag set to 'yes' means that the mod may crash at some stage. This
switch is only provided so that if you require such mods to run you
can still run them with q2admin.
Note: q2 loads so files in lazy mod, which is why they work under
q2 and why they may crash as well.
Command: "spawncmd"
Where Allowed: client console, server console.
[sv] spawncmd [SW/EX/RE] command
Used to add spawn entities to the list. See section 2.10.
Command: "spawndel"
Where Allowed: client console, server console.
[sv] spawndel spawnnum
Used to delete spawn enities from the spawn list. See section 2.10.
Command: "spawnentities_enable"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Enables/Disables the spawn list from disabling the spawn entities
at map load. See section 2.10.
Command: "spawnentities_internal_enable"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Enables/Disables the internal spawn list feature from disabling the
spawn entities. spawnentities_enable must be enabled for this to
work. See section 2.10.
Command: "stuff"
Where Allowed: client console, server console.
[sv] !stuff [LIKE/RE/CL] name [client commands / FILE <filename>]
Stuffs the command or all the lines in the file to the client.
The client will run the command(s) just like the person typed
them into there quake2 client console themselves. Combine
this command with the customservercmdconnect command to force
default settings for all clients that connect.
To do multiple client commands in the one stuff command can work but
can be a little tricky. You must surround the command with double
quotes '"' and any double quotes you use in the command you must use
the '\q' syntax. e.g.
sv !stuff cl 0 "say \qxxx\q;say \qyyy\q;say \qzzz\q"
Command: "swap_attack_use"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Swaps the use of +attack and +use. This can be useful as if the players have
to use +use to fire instead of +attack then it renders the auto-aim proxy
unsable.
Side Note Proz (aka Black Monk) sent me:
BTW, for Macintosh users, !swap_attack_use is painful. They need to use
their Q2 mouse controls to set the fire button to be, "ALT24". I think.
They can't just "bind mouse1 +use" like PC users can, the mice act
differently due to InputSprockets. And if a Mac user is using, say, USB
OverDrive to get the Razor Boomslang mouse to work, popular for Mac gamers
but not a supported Mac product, then they won't be able to bind to ALT24 at
all meaning they are screwed or they have to bind a keyboard key to get it
working. Just an FYI in case you update the docs.
Command: "timescaledetect"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Detect timescale cheaters.
Command: "timescaleuserdisplay"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Message to display when a timescale cheater has been detected.
Command: "version"
Value: none
Where Allowed: client console, server console.
Displays q2admin version number. Also works in the Quake2
console if your not in admin mode.
Command: "votecmd"
Where Allowed: client console, server console.
[sv] votecmd [SW/EX/RE] command
Used to add a vote command to the vote command list. See section 2.11.
Command: "voteclientmaxvotes"
Value: Number
Where Allowed: q2admin.txt, client console, server console.
Maximum number of votes allowed in <voteclientmaxvotetimeout> time for one player.
0 = disabled, i.e. unlimited.
e.g. if you would like 5 votes every ten min's for a client you will have:
voteclientmaxvotes "5"
voteclientmaxvotetimeout "600"
if you would like only 1 vote allowed every min.
voteclientmaxvotes "1"
voteclientmaxvotetimeout "60"
if you would like unlimited voting
voteclientmaxvotes "0"
see voteclientmaxvotetimeout
see section 2.11.
Command: "voteclientmaxvotetimeout"
Value: Number
Where Allowed: q2admin.txt, client console, server console.
Time in seconds allowed for <voteclientmaxvotes> to be cast for one player.
0 = for whole level.
e.g. if you would like 2 votes every 30 seconds:
voteclientmaxvotes "2"
voteclientmaxvotetimeout "30"
if you would like 10 votes for every level:
voteclientmaxvotes "10"
voteclientmaxvotetimeout "0"
see voteclientmaxvotes
see section 2.11.
Command: "votecountnovotes"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Enable/disable counting of clients that didn't vote as a no vote
in the percent calculation.
Command: "votedel"
Where Allowed: client console, server console.
[sv] votecmd votenum
Used to delete a vote command from the vote command list. See section 2.11.
Command: "voteminclients"
Value: Number
Where Allowed: q2admin.txt, client console, server console.
The minimum numnber of clients that need to be connected before a vote
can be proposed. See section 2.11.
Command: "votepasspercent"
Value: Number (1-100)
Where Allowed: q2admin.txt, client console, server console.
The percent of 'yes' votes required to pass a vote command.
See section 2.11.
Command: "vote_enable"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Enable/disable voting.
Command: "zbotdetect"
Value: Yes/No
Where Allowed: q2admin.txt, client console, server console.
Enable/disable main ZBot/RatBot detection.
Command: "zbotdetectactivetimeout"
Value: Number (seconds)
Where Allowed: q2admin.txt, client console, server console.
Once a ZBot/RatBot is detected, how long to wait before actioning it.
-1 will generate a random timeout between 5 seconds to 5
seconds + randomwaitreporttime seconds.
Command: "zbotuserdisplay"
Value: String
Where Allowed: q2admin.txt, client console, server console.
Message to display that the using is using a ZBot/RatBot.
NOTE: must have 1 and only 1 '%s' in the line
%s will print the users name
2.5.1. "[LIKE/RE/CL] name" explained
------------------------------------
Many of the q2admin server console / client console use the
"[LIKE/RE/CL] name" format to find one or many clients to
apply the command to.
There are 3 ways that q2admin commands allow to select a
client.
"LIKE name" The name part must be somewhere in the
client name.
"RE name" Uses regular expressions syntax to find the
client name.
"CL cnum" This allows you to give the client number.
You can use the server console command 'status'
to find out the client number.
For command that allow multiple clients to be
selected you can use multiple client numbers
with a '+' between each client number.
e.g. "CL 0+2+3+4"
For commands that allow only 1 client and more than 1 client
matches then the command erros out.
2.6. Impulses explained
-----------------------
The ZBot has two types of commands for the client to communicate
with the ZBot proxy. One is special Quake2 console commands
and the other is the Quake2 impulse command. The Quake2 impulse
command is basically the same as the Quake impulse command and is
not used in Quake2. Because Quake2 doesn't use the impulse
command it just ignores it. What the detector does it monitor the
impulse commands that are generated by a Quake2 client and
log / display / kick (if you wish) when an impulse is generated.
The problem with detecting impulses is that ANY Quake2 client can
generate an impulse. This can lead to false detections if you kick
people generating impulses. I leave it up to the server admin to
decide how to handle impulses.
Impulse detection is included as a backup for of detection in case
the main ZBot detection fails. Most admins can ignore
impulses unless they are being regularly generated. If they are
then there is a chance that that person is using a hacked or
modified ZBot that can gets around the main detection.
Reasons for clients generating impulses:
1. They are using a hacked ZBot.
2. They have used a ZBot before and have exceed zbot.cfg that
comes with the ZBot and the binded keys have been saved to
there config.cfg file. Then they press the keys by accident
during play.
3. The mod uses impulses (I don't know of any other mod that
uses them though).
4. They think they are in Quake for some reason!!
2.7. Advanced admin commands
----------------------------
2.7.1. Max Rate / Max fps
-------------------------
RATE:
The Quake2 server sends one packet per server frame (10 per second)
regardless of the client's cl_maxfps setting. The client's rate setting,
which can be set by the server to provide rate-capping, sets the maximum
number of bytes per second (not bytes per frame) that the client wishes to
receive. If the rate is exceeded, the server will drop packets to avoid
overflowing the connection. (Note: The rate is expressed in bytes of game
data, so it should be lower than the available bandwidth to allow for
protocol overhead.)
The maxrate command clips a players rate so that it can't be
changed to greater than the maxrate setting. Setting maxrate to
0 turns it off.
The minrate command clips a players rate so that it can't be
changed to a lesser than the minrate setting. Setting minrate to
0 turns it off.
CL_MAXFPS:
The Quake2 client sends a packet to the server once per client frame. The
client framerate varies from machine to machine, so a fast machine with
limited bandwidth runs the risk of overflowing its connection.
Unfortunately, the only way to limit the upstream traffic is to limit the
client framerate via cl_maxfps.
The maxfps command clips a players cl_maxfps value so that it
can't be changed to greater than the maxfps settings. Setting
maxfps to 0 turns it off. Setting the maxfps doesn't have a
noticeable effect unless the player is used to having a fast
computer on a show connection. If you want to set cl_maxfps
I would suggest ranges from 31 to 41. The other problem with
this is there is a chance that it will not work with all mods.
You can tell it's not working correctly when player names start
to get truncated.
This was the taken from the UQSA forum's:
Whatz Up With "Rate"
After all the hoopla concerning the "rate" setting and how it
affects the server and client, Brett Jacobs decided to email
Zoid and ask him just "whatz up with dat rate stuff?" Below
is his reply to Brett's question. Brett's main reason for
emailing him was because a server kicked Brett for having his
"rate" set to 15,000.
Hi Zoid,
It seems the server fad now is to disallow too high of a "rate"
setting for clients. Can you explain to me how a client's high
"rate" setting can affect the server and also what affect will
it have on other players on that server. Also does my clients
"rate" setting affect other players differently depending on
whether they have a high or low bandwidth connection?
Zoid's Reply:
Rate simply controls the amount of data a server will send to
you. It has no effect on other players, since every player has
his own independent data stream. What is sent to the player is
calculated individually, so a player with rate 25000 does not
affect a player with rate 2500. It seems to be a common
misunderstanding to this.
It is not rate that beats the crap out of the servers, but the
client's framerate. The client sends a packet every frame. Even
if you had a rate of 2500, you could still be sending up to 72
packets/second, which is why low bandwidth connections should
lower their cl_maxfps, since at 72 packets/second, they could
lag themselves with the outgoing bandwidth.
The only way I could see rate affecting players is if the
server _itself_ was running out of bandwidth. This could happen
if the server was running on a low bandwidth line (cable modem)
and there were lots of players. The majority of servers run on a
decent connections though (such as T1), so this is probably not an
issue.
Also note that rate is simply an indicator of the _maximum_ the
server will send. If you are standing a room with one other player,
there isn't that much to send--you wouldn't hit the 25000 limit.
The average byte/second on a player on a server is about 2k to 3k.
Of course, busy rooms bump that up (such as CTF--you get a lot of
fights in the bases with lots of players).
I think what is happening is players get in a busy room (such as a
heavy attack on a CTF base) and low bandwidth guys start starving,
since their rate setting starts clipping pretty heavily to make
sure they don't start falling behind by being overrun with data.
This would happen regardless as to the rate of the other players.
A busy room is a busy room and higher bandwidth players (not
necessary lower ping, in this case, it's bandwidth that matters)
will have an advantage since they won't get as much data clipped
out by rate.
Back in the days when we didn't have rate settings, I imagine many
people remember being on e1m7 on a NetQuake server and finding
their ping had gone to like 3000 or so--this is because they
were in essentially one room with lots of other players and the
server was sending them more data then they could handle. This is
why rate was added in the first place, to cut down on the amount
of data being sent and keep you from lagging behind. Now, Quake2
is MUCH more efficient than NetQuake (it uses almost 2/3rds less
bandwidth than NetQuake did), it still sends out a lot of data in
a very busy room.
-----
/// Zoid.
2.7.2. IP / Nick Banning
------------------------
Banning can be enabled and disabled by the 'nickbanning_enable',
'ipbanning_enable' and 'chatbanning_enable' commands.
They can be enabled/disabled in the q2admin.txt by changing the
there values to "Yes" or "No".
e.g.
nickbanning_enable "Yes"
ipbanning_enable "Yes"
chatbanning_enable "Yes"
They can also be enabled/disabled from the server console / client admin
console as well. See section 2.3 and 2.4 for how to do this.
The permanent ban list, q2adminban.txt, is loaded from the Quake2 directory and
then the mod directory in that order.
The format for q2adminban.txt is a simple text file.
In q2adminban.txt there are 3 types of lines:
1. comments which are ignored.
2. nick / ip ban's which the line begins with 'BAN:'
3. chat bans which the line begins with 'CHATBAN
1. Comments:
Lines beginning with ';' are comments.
2. IP and Name Banning:
The format for a ban is:
BAN: [+/-(-)] [ALL/[NAME [LIKE/RE] "name"/BLANK/ALL(ALL)] [IP xxx[.xxx(0)[.xxx(0)[.xxx(0)]]][/yy(32)]] [PASSWORD "xxx"] [MAX 0-xxx(0)] [FLOOD xxx(num) xxx(sec) xxx(silence)] [MSG "xxx"]
[+/-(-)]
Exclude or include ban.
- (default) refuses access ban.
+ allows access ban.
The first ban that fits the connecting player profile is acted on.
Ban's are checked from the last added to the first added. So the
first bans to be checked are bans added manually at the console
then the mod ban list (last to first) then the Quake2 ban list
(last to first).
[NAME [LIKE/RE] "name"/BLANK/ALL(ALL)]
This is the format for a name ban.
LIKE means that the only part of a players name must match the
banned name for the ban rule to apply. Like only applies to
specified names, not BLANK or ALL.
RE means regular expression. If you don't know what regular
expressions are leave it alone. If you wish to use '\' commands
in names you MUST do a '\\' for every '\' you want passed to
regular expression. e.g. a '\' in the search you be '\\\\'.
This is because of the '\' commands in names that I preprocess
for. See section 5 for more details on Regular Expressions.
"name" is the nick or part nick to ban.
BLANK will pickup any name that is blank i.e. all spaces.
ALL is the default, meaning all names. This is default so that
when you specify a IP without a name it's applies to all names.
Example Name Bans:
BAN: - NAME BLANK
BAN: NAME LIKE "fuck"
[IP xxx[.xxx(0)[.xxx(0)[.xxx(0)]]/yy(32)]]
This is the format for a IP ban.
The /yy value says how many bits are fixed on the IP, i.e. a IP mask value.
Basically the first x number of bits to compare to the connecting players
IP.
0 = apply to all IPs.
(0.0.0.0 mask)
8 = compare first number only. e.g. IP 192.168.1.10/8 would
only compare the '192' part of the IP.
(255.0.0.0 mask)
16 = compare first two numbers only. e.g. 192.168.1.10/16
would only compare the '192.168' part of the IP.
(255.255.0.0 mask)
24 = compare first three numbers only e.g. 192.168.1.10/24
would only compare the '192.168.1' part of the IP.
(255.255.255.0 mask)
32(default) = compare the whole IP.
(255.255.255.255 mask)
If you don't specify an IP then the default IP of 'IP 0.0.0.0/0'
is used.
Examples of IP Bans:
BAN: - IP 192.168.1.10
BAN: + IP 192.10.1.1
BAN: - IP 192.168.1.10/24
[ALL]
Because the default BAN command allows for a default banning
of everybody, I've disallowed banning all using the NAME /
IP combo. To ban everybody you must use the ALL command e.g.
BAN: ALL MSG "Server down for maintenance"
BAN: + ALL MAX 10
[PASSWORD "xxx"]
This applies only to allow access bans (+) and only allows users
that have the correct password set in the client.
The password must be set on the client in the following manner before
connecting or renaming:
set pw xxx u
where xxx is the password. The password can't be bigger than 20
characters and is case sensitive.
e.g.
say you had a ban:
ban + name re "^VK-.*$" password "duck" msg "Name reserved for Clan VK"
the client must have the password set like:
set pw duck u
to connect or rename to a name beginning with "VK-". e.g.
name "VK-Test"
NOTE: because of the way Quake2 works in the area of servers seeing
client side variables, the password feature may NOT work with some mods.
If it does not you will start to see values being truncated. e.g. the
clients name. You can try to reduce the size of the password (within
reason).
[MAX 0-xxx(0)]
This applies only to allow access bans (+). This allows up to xxx
connections before refusing (banning) connections. A MAX of 0 means
unlimited connections and is the default.
e.g.
BAN: + IP 192.168/16 MAX 10
Will allow up to only 10 players to connect with ip of 192.168.x.x
e.g.
BAN: + ALL MAX 15
BAN: + IP 192.168/16 MAX 30
Will allow up to 30 from 192.168.* but only 15 with any other IP.
[FLOOD xxx(num) xxx(sec) xxx(silence]
Adding a flood option sets the clients chat flood protection (this
overrides any global chat flood protection that are set). The
options are the same as the standard "clientchatfloodprotect" command.
See section 2.7.4.
[MSG "xxx"]
This is the message to display in the log and displayed to the user.
Messages are only displayed to the user when a user changes their
name. Players ejected on connect can't be displayed a message.
e.g.
BAN: NAME BLANK MSG "No blank names allowed."
You can combine name and ip bans. Say you want to only allow 1
player with the name duck from a known IP.
e.g.
BAN: NAME "duck"
BAN: + NAME "duck" IP 234.231.34.154 MAX 2
(NOTE: the reason for MAX 2 is allow for crashes and reconnect so that
duck doesn't have to wait for the Q2 server to kick the old player off)
Console Bans:
The ban format is the same as banfile format with some added extras.
[sv] !BAN [+/-(-)] [ALL/[NAME [LIKE/RE] name/%p x/BLANK/ALL(ALL)] [IP [xxx[.xxx(0)[.xxx(0)[.xxx(0)]]]/%p x][/yy(32)]] [PASSWORD xxx] [MAX 0-xxx(0)]] [FLOOD xxx(num) xxx(sec) xxx(silence] [MSG xxx] [TIME 1-xxx(mins)] [SAVE [MOD]] [NOCHECK]
The ban will only last until a level change or the server is shut down
unless you use the save option.
Running it from the quake console 'sv !ban xxx' or from the
client console in admin mode '!ban xxx'.
New options:
NAME [LIKE/RE] %p x
Where x is a client connection number. It uses the name of the
client as the ban name.
e.g.
sv !ban name %p 1
IP %p x[/yy]
Where x is a client connection number. It uses the ip of the client
as the ban IP.
e.g.
sv !ban ip %p 1
TIME 1-xxx(mins)
The ban will only last for x minutes, until the level changes or
the server is shutdown.
SAVE [MOD]
"SAVE" by itself will cause the ban to be added last to the q2adminban.txt
in the Quake2 directory.
e.g.
sv !ban name blank save
"SAVE MOD" will cause the ban to be added last to the q2adminban.txt in
the mod directory.
e.g.
sv !ban name blank save mod
NOCHECK
When a ban is added in either the client or the server console, all
connected clients are checked against all current bans.
If you supply 'NOCHECK' then the ban checking is not executed.
Banning detected ZBot/RatBot users:
This is how you would ban a ZBot/RatBot player on detect for 5 minutes. In the
q2admin.txt file change the setting for customservercmd to something
like:
customservercmd "sv !ban ip %p %c msg \"ZBot/RatBot user ban\" time 5"
The above command applies an IP ban on the players ip for 5 minutes.
From the server or client console you can list all the loaded bans
by using the 'listbans' command.
e.g.
sv !listbans
Start Ban List:
(2, Temporary) BAN: NAME LIKE "test" TIME 9.831666
(1, Temporary) BAN: + NAME RE "^VK-.*$" PASSWORD "duck"
(0, Permanent) BAN: NAME BLANK
End Ban List
From the server or client console you can delete a ban from
memory. NOTE: this only deletes the ban from memory not from
the q2adminban.txt file.
The command is 'delban' and you have to know the ban number.
To get the ban number do a 'listbans' command and it will
display the ban number. e.g. the ban number of
BAN: + NAME RE "^VK-.*$" PASSWORD "duck"
is 1.
To delete this ban from memory you run delban like this:
sv !delban 1
Name changing:
The way name changing is handled when a player changes to a banned
name depends on the 'kickonnamechange' setting. If it is set to
"No" then the name change is disallowed and the ban msg (default
or ban message) is displayed. If it is set to "Yes" then the user
is displayed the ban msg and is kicked.
3. Chat Banning:
The q2adminban.txt format is:
CHATBAN: [LIKE/RE(LIKE)] "xxx" [MSG "xxx"]
This is the format for a name ban.
[LIKE/RE(LIKE)] "xxx"
LIKE means that the only part of a message text must match the
banned text for the ban rule to apply.
RE means regular expression. If you don't know what regular
expressions are leave it alone. If you wish to use '\' commands
in names you MUST do a '\\' for every '\' you want passed to
regular expression. e.g. a '\' in the search you be '\\\\'.
This is because of the '\' commands in names that I preprocess
for. See section 5 for more details on Regular Expressions.
"xxx" is the chat text to ban.
[MSG "xxx"]
Not working for the moment.
The chat banner is written in such a way that it will pick up
any chat message going to a client and not print them. It
doesn't matter what special message features a mod may have
it will work. The problem with this method is that I don't know
who generated the message.
Reloading q2adminban.txt:
From the server or client console you can delete all the bans
in memory and reload the q2adminban.txt file using the
'reloadbanfile' command. e.g.
sv !reloadbanfile
2.7.3. Limited rcon
-------------------
Limited rcon is for admins that need to give out rcon to clans for
competitions.
Limited rcon only allows specified commands to be executed.
The file q2adminlrcon.txt is read from the Quake2 directory and then the mod
directory. This allows server admins to set up global and
mod specific lrcon commands.
The passwords are case sensitive but the command compare is not.
*** Warning ***
Using lrcon without the rcon_random_password set to yes means that people
that know how to dump packets leaving your machine can see the rcon password.
rcon_random_password generates a random string for the rcon password for the
one lrcon command. The downside of this is that only 1 person can use an lrcon
at any one time AND while a lrcon is in affect the rcon password is some random
string meaning the admin has no control over server at that point.
lrcon_timeout is used to control how only the rcon password is set to a random
value when a lrcon is being used.
The format for q2adminlrcon.txt is as follows:
Lines beginning with a ';' are comments.
lrcon command format:
<lrcontype><password> <command to allow>
<lrcontype> can be one of three values:
'SW:' Starts with match.
The start of the command must match: e.g. 'SW:lrcon test map' allows
lrcon test map q2dm1
lrcon test map q2dm2
lrcon test map
'EX:' Exact match.
The whole command must match: e.g. 'EX:lrcon test map q2dm1' allows
lrcon test map q2dm1
That will disallow:
lrcon test map q2dm10
lrcon test map q2dm2
'RE:' Regular Expression match.
It is suggested that you use the start of line command '^' to make sure it
matches the commands you want. See section 5 for more details on Regular
Expressions.
e.g.
SW:secret map
SW:secret timelimit
SW:secret fraglimit
EX:top fraglimit 100
EX:top fraglimit 50
RE:tip ^map q2dm[1258]$
You can even specify exact commands that are allowed e.g. say you want
lrcon password 'duck' only to be able to change maps to q2dm1, q2dm2 and
q2dm8. The q2adminlrcon.txt would look like:
EX:duck map q2dm1
EX:duck map q2dm2
EX:duck map q2dm8
or use a regular expression like this:
RE:duck ^map q2dm[128]$
To run lrcon from the client console is the same as running rcon.
e.g.
lrcon duck map q2dm1
or
lrcon secret timelimit 40
There is a limit of 1024 lrcon password commands.
The only prerequisite for running lrcon is that the Quake2 server
rcon_password must be set to *SOMETHING*. It doesn't matter what,
it just has to be set.
Also, if the client has rcon_password set, lrcon will not work.
Note: there is no lrcon_password, so the password must be typed every
the time.
There are 5 server console commands to control lrcon's.
[sv] !listlrcons
List all the lrcons loaded into memory.
e.g.
sv !listlrcons
Start lrcon's List:
1 SW:"bad" "map"
2 SW:"bad" "timelimit"
3 SW:"bad" "fraglimit"
4 EX:"test" "map q2dm1"
5 RE:"tip" "^map q2dm[128]$"
End lrcon's List
[sv] !reloadlrconfile
Deletes all the lrcons in memory and reloads the q2adminlrcon.txt file.
e.g.
sv !reloadlrconfile
[sv] !lrcon [SW/EX/RE] "password" "command"
Adds a lrcon to the list in memory.
e.g.
sv !lrcon sw "test" "map"
sv !lrcon ex "duck" "map q2dm1"
sv !lrcon re "tip" "^map q2dm[128]\d"
[sv] !lrcondel lrconnum
Delete one lrcon out of memory. The lrconnum is the number displayed leftmost
when running the lrconlist server console command. NOTE: after the delete the
lrcon numbers higher than the delete lrcon will be reduced by one.
e.g.
sv !lrcondel 2
2.7.4. Chat Flood Protection and Muting
---------------------------------------
The q2admin chat flood protection and muting will work best if any mod flood
protection is disabled.
Q2admin does chat flood protection on 2 levels, a global level and a client
level. The client level overrides the global level if it is enabled. The
global level is controlled by the chatfloodprotect variable. The client
level is controlled by the clientchatfloodprotect variable.
The format for the chatfloodprotect is:
[sv] !chatfloodprotect [<number of messages> <in x seconds> <silence in seconds> / disable]
This variable can also be set in the q2admin.txt file.
A silence value of 0 will kick the client.
A silence value of -1 will permanently mute the client.
The format for the clientchatfloodprotect
[sv] !clientchatfloodprotect [LIKE/RE/CL] name [<number of messages> <in x seconds> <silence in seconds> / disable]
This variable can also be set with include bans. See section 2.7.2.
A silence value of 0 will kick the client.
A silence value of -1 will permanently mute the client.
The flood message that is displayed if the client floods the server is controlled
by the chatfloodprotectmsg which can be set in q2admin.txt or the server/admin
client console.
Flood protection automatically monitors the say, say_team, say_person,
say_group, console messages and any mod command that generates print messages.
You can also enable monitoring of non-message command flooding. e.g. q2admin's
play_ commands, quake2 wave command, any mod added command.
To add commands you wish to flood monitor to the q2adminflood.txt file.
The file q2adminflood.txt is read from the quake2 directory and the mod
directory. This allows server admin's to setup lrcon's as global and
mod specific as well.
The format for q2adminlrcon.txt is as follows:
Lines beginning with a ';' are comments.
flood command format:
<floodtype><command to check>
<floodtype> can be one of three values:
'EX:' Exact match.
'SW:' Starts with match.
'RE:' Regular Expression match.
e.g.
SW:play_
EX:wfplay
RE:^say.*
The matchs are only made against the first word or the command
e.g. in the command "play_person cl 0 xxx" only "play_person" is
checked against the flood command list
NOTE: DO NOT PUT THE FOLLOWING COMMANDS INTO THIS FILE:
say, say_team, say_group, say_person or any added mod command
that generates normal message text.
You can monitor q2admin own commands like:
play_person, play_team
Also note that internal commands to quake2 can't be monitored as
mod's don't see as client commands. e.g. name, cl_maxfps, rate, etc
There is a limit of 1024 custom flood commands that can be setup.
The server / admin client console command 'reloadfloodfile' can
be used to delete all flood commands and reload the q2adminflood.txt
file.
[sv] !reloadfloodfile
The server / admin client console command 'listfloods' is used to
list all the flood commands loaded.
[sv] !listfloods
The server / admin client console command 'floodcmd' is used to add a
flood command to the flood list loaded into memory.
[sv] !floodcmd [SW/EX/RE] "command"
e.g.
sv !floodcmd SW "play_"
The server / admin client console command 'flooddel' is used to delete
a flood command from the flood list loaded into memory.
[sv] !flooddel floodnum
e.g.
sv !flooddel 1
You can use the listfloods command to find out with the flood number is.
The list of flood controlled commands are reloaded every level change.
With the mute server / client admin command you can stop a clients message
commands and all the commands in the flood protected list from doing
anything, the flood protection code does a automatic mute in effect. The
mute command can be used to timelimit mute / permanently mute and unmute
clients.
The format for the mute command is:
[sv] !mute [like/re/cl] name [time(seconds) / PERM]
This command will stop the client from messaging for time
seconds.
A mute time of 0 will unmute a client.
[PERM] option will permanently mute a client.
2.8. play_ and say_ commands
----------------------------
play_all, play_team and play_person commands are not server admin
commands as such. They have added functionality for the clients to
play wave files. printmessageonplaycmds enables the displaying of
a message when a client using any of the play_ commands.
2.8.1 play_all
--------------
play_all <wavefile>
play_all will play the wave file on all the clients machines (if they
have the wave file).
play_all can be enabled / disabled with the play_all_enable admin
command.
2.8.2 play_team
---------------
play_team <wavefile>
play_team will play the wave file on all the team client machines.
This command will work the same as the say_team command. This command
may not work for all team mods though. It all depends on how the teams
are programmed in the mod. Try it, if it works, it works.
play_team can be enabled / disabled with the play_team_enable admin
command.
2.8.3 play_person
-----------------
play_person [LIKE/RE/CL] <playername> <wavefile>
play_person will play the wave file on a specific players client.
play_person will only play the wave for the specified player.
If more than 1 player name matches then no wave is played.
The play_team, play_all and play_person works the same as the play command
so you can play wave files that are in pak files.
play_person can be enabled / disabled with the play_person_enable admin
command.
2.8.4 say_person
----------------
say_person [LIKE/RE/CL] <playername> <message>
This command allows a player to send a private message to another player. The
message is also sent the server console as well. The say_person command will
only send a message to one player. If more than 1 player name matches then no
message is sent.
[LIKE] The playername must be somewhere in the actual players name.
[RE] Regular Expression match of a players name. See section 5 for more
details on Regular Expressions.
[CL] The <playername> must be a client number. This can only really be used
by admin's that can run the rcon status command to find out the client
number. The CL option is mainly for the !say_ server console commands.
say_person can be enabled / disabled with the say_person_enable admin
command.
say_person can also be used on the server console as well. The console version
is always enabled.
[sv] !say_person [LIKE/RE/CL] <playername> <message>
2.8.5 say_group
----------------
say_group [LIKE/RE/CL] <playername> <message>
This command allows a player to send a private message to 1 or more other players.
The message is also sent the server console as well. To send to more than 1 player
with completely different nick's you will have to use Regular Expressions and the \|
command. e.g. say_group re "fred\\|john\\|ted" yo yo, what's up guys?
[LIKE] The playername must be somewhere in the actual players name.
[RE] Regular Expression match of a players name. See section 5 for more
details on Regular Expressions.
[CL] The <playername> must be a client number. This can only really be used
by admin's that can run the rcon status command to find out the client
number. Multiple clients can be selected by using the '+' between the
client numbers.
e.g. CL 0+2+14+3
Note there are NO spaces between the numbers and '+'s.
The CL option is mainly for the !say_ server console commands.
say_group can be enabled / disabled with the say_group_enable admin
command.
say_group can also be used on the server console as well. The console version
is always enabled.
[sv] !say_group [LIKE/RE/CL] <playername> <message>
2.8.6 extended say
------------------
Extened say allow you to run the say_person, say_group, play_all, play_team and
play_person from the messagemode or the messagemode2 prompts. To enabled
extended say checking you set the extendedsay_enable variable to yes in the
q2admin.txt or in the server / client admin console.
To use any of the supported commands you must also enable the command as well.
e.g. to use say_person you must enable extendedsay_enable and say_person_enable.
say_person format:
!p [LIKE/RE/CL] <playername> <message>
e.g. at the messagemode prompt you type:
!p like tom hi tom
say_group format:
!g [LIKE/RE/CL] <playername> <message>
e.g. at the messagemode prompt you type:
!g re ^VK-.*-$ meeting tonight... normal place, normal time..
play_all format:
!a wavfile
e.g. at the messagemode prompt you type:
!a hiall
play_team format:
!t wavfile
e.g. at the messagemode prompt you type:
!t attack
play_person format:
!w [LIKE/RE/CL] name wavfile
e.g. at the messagemode prompt you type:
!w like tom hi
2.9. Message of the Day (MOTD)
------------------------------
The MOTD feature in the Q2Admin is very, very simple. There isn't
much to it and is meant to do two things:
1. Provide a simple MOTD features for mods that don't have a MOTD.
2. Provide a global MOTD for admin's that want a global MOTD.
The setmotd command is used to set name of the MOTD file. This file is
loaded from the Quake2 directory. If you wish to have a unique MOTD per
mod then I suggest you add a following line into you server startup
config and leave the setmotd in the q2admin.txt file blank.
sv !setmotd "xxx\motd.txt"
where xxx is the mod directory.
The MOTD file is reloaded with every level change.
The MOTD file can be reloaded with the above command as well.
Clients can re-view the MOTD at any time by using the "motd"
command at the client console.
The length of time the message stays displayed is controlled by a client
console variable 'scr_centertime'. The default is 2.5 seconds.
2.10. disable spawning items
----------------------------
To enable the spawn disable feature you must set the 'spawnentities_enable'
variable in q2admin.txt to 'yes'.
Entity types can be disabled from loading in a map. It stops the entity from
loading *IF* is loaded from the map. If it's loaded from another source it
can't. If the mod supports ent files or some other method of entity
loading then it can't stop that. You will have to use there method to stop
it loading. e.g. if it uses ent files then you will have to edit the ent file.
There is also a feature for disabling entities as they are created in memory.
This feature has some risks involved as "entity_classname_offset" must be set
correctly. This variable MAY be different for every mod that exists. Most
likely tho 99% of mods will have the same value. There is no way to calculate
or figure out this variable. The easiest way to see work it out is to send
killerbee@planetquake.com a email stating the mod and asking what the correct
number is. Also disabling some entities may cause the mod to do strange things.
To enable this feature you must have 'spawnentities_enable' and
'spawnentities_internal_enable' set to 'Yes'.
To help work out what entity classnames may be there is a logging feature that
will log the classnames as they are created.
The file q2adminspawn.txt contains a list of entity classnames that are
disabled. You just need to edit the file and follow the instructions.
In q2adminspawn.txt is listed all the entity classnames for quake2 that ID
provide. For other mod's you will have to look up the mod documentation for
the classname list.
The q2adminspawn.txt is treated a little differently from the other txt config
files. The file is only loaded once at server startup or when the map command
is used.
You can also load a disable spawn entity list for a specific maps. To create a
spawn disable list for a specific maps you must create a "q2adminmaps" directory
off the mod directory. In this directory you need to create a spawn file with the
name of "<mapname>.q2aspawn". The format for this file is exactly the same as
q2adminspawn.txt. e.g. If the mod is the default quake2 dm and you wanted to
disable the grenade launcher on q2dm1 only then you would:
Create the directory "baseq2/q2adminmaps".
In that directory you would create the file "baseq2/q2adminmaps/q2dm1.q2spawn".
In the file "baseq2/q2adminmaps/q2dm1.q2spawn" you would have the line
"EX:weapon_grenadelauncher".
Disabled spawn classnames can be managed with the 'spawncmd', 'spawndel',
'listspawns' and 'reloadspawnfile' commands.
spawncmd can be used to add a spawn classname to the disabled list. Note that
the entity type is NOT disabled right then, it will only be disabled on the
next map onwards.
spawndel can be used to delete a spawn classname from the list. Note that the
entity type will appear from the next map onwards.
reloadspawnfile is used to delete and reload the spawn list.
listspawns is used to list all the spawns classnames loaded.
2.11. command voting
--------------------
To enable the voting feature set 'vote_enable' in the q2admin.txt file to
'Yes'.
Any command you wish people to allow to vote on can be added to the
q2adminvote.txt file. You can add any command that can be run on the
server. There are three types of command setups that you can use.
Extract match type commands. e.g. 'EX:map q2dm1' meaning that a client
can only vote for 'map q2dm1' and nothing else.
Starts with type commands. e.g. 'SW:map' meaning that a client
can vote for any command start with map. e.g. 'map q2dm1', 'map q2dm3'
Regular expressions commands. e.g. 'RE:^map q2dm[123456]$' The most powerful
way to restrict commands.
The client command used to do vote is set by the 'clientvotecommand' and
is 'vote' by default.
The voting is setup with a number of variables.
'clientvotetimeout' is the length of time that the vote will last for until
it will voting ends. It can be shorter then this if everyone votes.
votepasspercent sets the pass percent required to pass a vote.
e.g. 60 is 60% of the counted clients need to vote yes.
'votecountnovotes' says if clients that didn't vote are counted as no votes
or not counted at all.
e.g. if there are 10 clients and the passvotepercent is set to %50. If 4
people vote 'yes' and 2 people vote 'no' and the rest didn't vote.
If 'votecountnovotes' is set to 'Yes' (default) the calculation goes like so:
4 / 10 == 40% < %60 == Vote Failed.
If 'votecountnovotes' is set to 'No' the calculation goes like so:
4 / (10 - 4) == 66% > %60 == Vote Passed.
'voteminclients' is the minimum number of clients that have to be connected
before a vote can be proposed.
'clientremindtimeout' is frequency at which clients are reminded to vote.
Every 'clientremindtimeout' seconds since the vote has started until the
vote is complete.
The vote commands can be managed with the 'votecmd', 'votedel', 'listvotes'
and 'reloadvotefile'.
'votecmd' is used to add vote commands.
'votedel' is used to delete a vote command.
'listvotes' can be used to list all the vote commands available.
'reloadvotefile' deletes and reloads all the vote commands.
q2adminvote.txt is loaded can each level change.
On the client side the voting works as follows. Note the clientvotecommand
is assumed to be set to 'vote'.
A vote can be proposed by typing in a vote followed by a valid vote command.
e.g.
vote map q2dm1
All the clients are informed of that they need to vote, how to vote, and
the current vote stats.
The person the proposed the vote is automatically voted 'yes'.
Other clients can vote by typing in the console:
vote yes
or
vote no
They can change there vote at any stage before the vote ends.
Every 'clientremindtimeout' the reminder message, vote proposed and the
current vote stats is displayed to clients that haven't voted and only the
vote proposed and the vote stats are displayed.
When everyone has voted or the clientvotetimeout is up the vote is passed or
failed. The pass / fail and the vote stats and displayed to all clients.
If the vote has passed, there is a 5 second gap before the vote command is
run on the server.
The length of time the vote messages stays displayed is controlled by a
client console variable 'scr_centertime'. The default is 2.5 seconds.
2.12. disable client commands
-----------------------------
To enable the disable client commands feature you must set the 'disablecmds_enable'
variable in q2admin.txt to 'yes'.
Disabled client commands are filtered out so that they do not reach the mod. This is
good for removing any mod command that you do not wish the client to use. Anyone
using a disabled command will see nothing. The use of a disabled command is logged
to the server console and the can also be logged to the q2admin log. See section 4
on logging for further details on the q2admin log setup.
The file q2admindisable.txt contains a list of disabled commands that are
disabled. You just need to edit the file and follow the instructions.
Disabled client commands can be managed with the 'disablecmd', 'disabledel',
'listdisable' and 'reloaddisablefile' commands.
disablecmd can be used to add a disabled command to the disabled command list.
disabledel can be used to delete a disabled command from the list.
reloaddisablefile is used to delete and reload the disabled command list.
listdisable is used to list all the disabled commands loaded.
2.13 cl_pitchspeed and cl_anglespeedkey (Action Quake2 M4 Scripts)
------------------------------------------------------------------
There is a Action Quake2 cheat that allows M4 Not to kick up when used.
This script changes the clients cl_pitchspeed or cl_anglespeedkey. To enable
the detection of changing cl_pitchspeed you need to edit the q2admin.txt
file and change "cl_pitchspeed_enable" variable to "Yes".
To enable the detection of changing cl_anglespeedkey you need to edit the q2admin.txt
file and change "cl_anglespeedkey_enable" variable to "Yes".
"cl_pitchspeed_display" will display when someone changes the value.
"cl_pitchspeed_kick" if the person is kicked when they change the value.
"cl_pitchspeed_kickmsg" what the kick message is.
"cl_anglespeedkey_display" will display when someone changes the value.
"cl_anglespeedkey_kick" if the person is kicked when they change the value.
"cl_anglespeedkey_kickmsg" what the kick message is.
The log will log them as a zbot use with a value of '-7'.
Changing the cl_pitchspeed value to "150" (the normal value for cl_pitchspeed)
is ignored (this is for technical reasons).
Changing the cl_anglespeedkey value to "1.5" (the normal value for cl_anglespeedkey)
is ignored (this is for technical reasons).
2.14 client side variable checking
----------------------------------
To enable client side variable commands feature you must set the
'checkvarcmds_enable' variable in q2admin.txt to 'yes'.
This feature allows you to force any client side variable to be a constant value
or a between a range for numeric variables. You can setup which variables you
want to check in the q2admincheckvar.txt file. Q2admin implements this feature
by polling the variables every XX seconds. This means that q2admin isn't using
up userinfo space. You can set the polling frequency using the 'checkvar_poll_time'
variable in q2admin.txt.
If there are 5 variables listed in q2admincheckvar.txt, the first variables is
checked first, x seconds later the next line is checked and so on until there are no
more variables to check. It then loops back to checking the first variable again.
So if checkvar_poll_time is 60 seconds and there are 5 variables listed, each
variable will be checked one every 5 minutes. Reducing this variable will increase
the traffic between the client and the server.
The file q2admincheckvar.txt contains a list of client side variables to check.
You just need to edit the file and follow the instructions in the default
q2admincheckvar.txt.
Client side checked variables can be managed with the 'checkvarcmd', 'checkvardel',
'listcheckvar' and 'reloadcheckvarfile' commands.
checkvarcmd can be used to add a client side variable to the variable list.
checkvardel can be used to delete a client side variable from the list.
reloadcheckvarfile is used to delete and reload the client side variable list.
listcheckvar is used to list all the client side variables loaded.
3. String preprocessing.
------------------------
What values to pass can be a little confusing. Just about all the strings
passed into q2admin are preprocessed. There are many reasons for q2admin
to do this. The major ones are to allow values to be passed though from
the quake2 console that normally aren't allowed. To allow special values
to be passed that would not normally be known until runtime.
All the values in a string beginning with '\' are replaced. The current
replacement list is:
'\\' replaced with '\'.
'\q' replaced with '"'.
'\"' replaced with '"'. (This can't be used in the quake2 console)
'\n' replaced with a newline.
'\s' replaced with a space (' ').
'\m' replaced with the current mod directory.
Some examples of uses:
in the q2admin.txt file:
customservercmd "error \"Get off my server, ZBot/RatBot user!\""
in the quake2 client q2admin admin console:
!customservercmd "error \qGet off my server, ZBot/RatBot user!\q"
in the server console:
sv !cvarset test \s\s\s
in q2adminban.txt file:
INCLUDE: "\m\\includebanlist.txt"
in the server console:
sv !stuff cl 0 "say \qyo yo\q\nsay \qhi hi\q"
4. Logging explained
--------------------
Logging is all controlled by one file, "q2adminlog.txt".
There can be up to 32 log files and one log event can go to
any of the 32 log files (including one/some/all of them).
The layout for the file is split into two parts. One is
setting of the log files. This must go at the start of
the file before any of the logevents can be setup.
The format for log file setup is:
LOGFILE: LogNum [MOD] "LogFileName"
LogNum: is a number between 1 to 32.
MOD: means the log file is saved into the mod directory
instead of the Quake2 directory.
"LogFileName": is the log file name. This can include
directories. Also you can use '%p' in the file name.
This is replaced by the server port number to give a
unique log for each server within the same mod
that is run.
e.g.
LOGFILE: 1 "q2admin.log"
LOGFILE: 2 MOD "q2admin%p.log"
LOGFILE: 5 MOD "entity.log"
The second part is setting up the log events layout themselves.
Each log event can only be set up once and log events not set up
are assumed to be not logged.
The format for a log event is:
[logtype]: YES/NO lognum [+ lognum [+ lognum ...]] "format"
logtype: is the specific log event that we are logging.
YES/NO: log this event or not.
lognum: is a number between 1 to 32. Says which log file(s) to
log this event to. Multiple log files can be assigned by
using the '+' sign. e.g. 1 + 2 + 3 + 4
"format": the string to print to the log file. This can have a number
of replacement fields.
Log types:
Here is the list of log types that can be used:
ZBOT
Logged when a ZBot or RatBot user is detected.
ZBOTIMPULSES
Logged when someone uses ZBot impulses.
IMPULSES
Logged when someone uses impulses other than ZBot impulses.
NAMECHANGE
Logged when someone changes there name.
SKINCHANGE
Logged when someone changes there skin.
CHATBAN
Logged when a message is banned.
CLIENTCONNECT
Logged on client connect.
CLIENTBEGIN
Logged on client begin.
CLIENTDISCONNECT
Logged on client disconnect.
CLIENTKICK
Logged when the Q2Admin dll kicks someone for any reason.
CLIENTCMDS
Logged when a client sends a command to the server.
CLIENTLRCON
Logs when a client runs a lrcon command.
BAN
Logged when a client is banned (ip or name)
CHAT
Logged when chat messages are used.
SERVERSTART
Logged when the server is started.
SERVERINIT
Logged when the server is inited.
SERVEREND
Logged when the server is shutdown.
INTERNALWARN
Logged when the Q2Admin dll generates certain types of
internal warning. Used for internal testing of problems.
PERFORMANCEMONITOR
Logged for all the major quake2 -> mod function calls.
Should only be used for small periods of time. It is meant
to collect / pin-point performance problems with q2admin
and the underlying mod.
This option will create very large log files in a very short
period of time.
DISABLECMD
When someone tries to run a disabled client command.
ENTITYCREATE
When a entity is created. "entity_classname_offset" must be
correct for the classname to be correct.
ENTITYDELETE
When a entity is deleted. "entity_classname_offset" must be
correct for the classname to be correct.
"format" can include the following replacements:
#n = Client Name
#p = Client Ping
#i = Client IP
#r = Client Rate
#s = Client Skin
#t = Date / Time
#m = Impulse Message (ZBot impulse only)
#e = Impulse Number (impulse and ZBot impulse only)
#e = Internal ZBot/Ratbot detect number
(50 to -2 is a zbot detect, -3 or -4 is a ratbot detect, -5 is a Nirto2 / BW-Proxy / Xania)
#e = Internal warning number (internal warning only)
#f = Time in seconds to complete function (performance monitor only)
#m = Internal warning message (internal warning only)
#m = Old Name (name change only)
#m = Old Skin (skin change only)
#m = Kick Reason (kick only)
#m = Banned chat (chat ban only)
#m = Client command (Client commands only)
#m = lrcon command sent (lrcon only)
#m = ban message (ban only)
#m = chat message (chat only)
#m = performance monitor function (performance monitor only)
#m = command that was tried to run (disabled command only)
#m = entity classname (entity create or entity delete command only)
Examples of event log setups are:
ZBOT: YES 1 "Proxy User: Time \"#t\" name \"#n\" Ping \"#p\" IP \"#i\" I(#e)"
ZBOTIMPULSES: YES 1 "ZBOT Impulse: Time \"#t\" Impulse \"#n generated a impulse #m\" Ping \"#p\" IP \"#i\""
IMPULSES: YES 1 "Impulse: Time \"#t\" Impulse \"#n generated a impulse #e\" Ping \"#p\" IP \"#i\""
NAMECHANGE: YES 1 "Name: Time \"#t\" \"#m -->> #n\" Ping \"#p\" IP \"#i\""
SKINCHANGE: YES 1 "Skin: Time \"#t\" Name \"#n\" \"#m -->> #s\" Ping \"#p\" IP \"#i\""
CLIENTCONNECT: YES 1 "Connect: Time \"#t\" Name \"#n\" Ping \"#p\" IP \"#i\" SKIN \"#s\""
CLIENTBEGIN: YES 1 "Player Begin: Time \"#t\" Name \"#n\" Ping \"#p\" IP \"#i\""
CLIENTDISCONNECT: YES 1 "Disconnect: Time \"#t\" Name \"#n\" Ping \"#p\" IP \"#i\""
INTERNALWARN: YES 1 "Internal Warning(#e): Time \"#t\" Name \"#n\" Ping \"#p\" IP \"#i\" #m"
CHATBAN: YES 1 "chat ban :#n \"#m\""
CLIENTKICK: YES 1 "kick #n"
CLIENTCMDS: YES 1 "cmd #n \"#m\""
BAN: YES 1 "ban #n \"#m\""
CHAT: YES 2 "chat #n \"#m\""
SERVERSTART: YES 1 + 2 "Server Startup #t"
SERVERINIT: YES 1 "Server Init #t"
SERVEREND: YES 1 + 2 "Server Shutdown #t"
PERFORMANCEMONITOR: YES 3 "Performance: Time \"#t\" Time taken(sec) \"#f\" Function \"#m\" Name \"#n\" Ping \"#p\" IP \"#i\""
DISABLECMD: YES 1 "Disabled command: Time \"#t\" Name \"#n\" Ping \"#p\" IP \"#i\" Command \"#m\""
ENTITYCREATE: YES 5 "Create Entity: Time \"#t\" classname: \"#m\""
ENTITYDELETE: YES 5 "Delete Entity: Time \"#t\" classname: \"#m\""
Logging can also be controlled through the use of two server console commands
'logevent' and 'logfile'.
logfile:
The format for this command is:
[sv] !logfile view <logfilenum>
This command lists all the log files setup or just one log file.
e.g.
sv !logfile view
sv !logfile view 1
or
[sv] !logfile edit [filenum(1-32)] [mod] [filename]
This command will add/edit the logfiles.
e.g.
sv !logfile edit 1 mod q2admin.log
sv !logfile edit 2 q2adminchat.log
(NOTE: the %p doesn't work here, it only works in the q2adminlog.txt. It's
easy enough to find out the port from the console with the port
command)
or
[sv] !logfile del [filenum(1-32)]
This will remove the logfile from being used. This does not delete or touch
the logfile in any way. It just means the log file will not be used any more.
e.g.
sv !logfile del 1
logevent:
The format for this command is:
[sv] !logevent view <logtype>
This command lists all the log events setup or just any log events starting with logtype.
e.g.
sv !logevent view
sv !logevent view zbot
sv !logevent view client
or
[sv] !logevent edit [logtype] <log [yes/no]> <logfiles [logfile[+logfile...]]> <format \"format\">]
This command will edit any of the log events.
e.g.
sv !logevent edit zbot log yes
sv !logevent edit zbot log no
sv !logevent edit zbotimpulses logfiles 1+2+3
sv !logevent edit clientconnect format "Connect: Time \q#t\q Name \q#n\q Ping \q#p\q IP \q#i\q SKIN \q#s\q"
sv !logevent edit chatban log yes logfiles 3 format "chat ban :#n \q#m\q"
5. Regular expressions
----------------------
Some parts of q2admin allow the use of regular expressions to
match data. The RE syntax that is allowed in q2admin is the
POSIX extended syntax.
Regular expression syntax is to big of a topic to include this
readme.
To find out more about regular expressions you can download
the GNU RE document that comes with the GNU RE source. Beware,
this document is written with programmers in mind, not users.
It does detail the RE syntax though.
The document can be downloaded from the web site under the
files section.
You can also check out a on-line version of the documentation
at
http://yenta.www.media.mit.edu/projects/Yenta/Releases/Documentation/regex-0.12/xregex_toc.html
6. Trouble Shooting
-------------------
Q. I get the server console message "Info string length exceeded"
after adding q2admin to the server.
A. There is a limited space available for server information
strings that problems like gamespy display. Most likely you
have info strings that give details about your server e.g.
set admin "Shane Powell, KillerBee" s
When you exceed this info space you get the "Info string
length exceeded" message on the server console. q2admin
adds 1 info string: "set Bot "No Bots" s". This is most
likely the problem. You can do 1 of 2 things:
1. Shorten or remove some of your info strings.
2. Turn off the q2admin info string by editing the
q2admin.txt file and changing the "serverinfoenable"
variable to "No". e.g.
serverinfoenable "No"
The above problem is more common with q2 mod's that add it's
own server info strings. e.g. Action Quake2
Q. The maximum length of the usernames is smaller than the default
15 characters after I add the q2admin mod.
A. Quake2 provides a way for the server to be dynamically updated
whenever a cvar changes. (e.g. the name cvar) Only some of the
cvars are marked to be dynamically updated. You can see what
cvar's that are marked by doing a cvarlist at the console. The
left hand column there are letters by some of the cvars. The
ones with the 'U' are marked for dynamic updating. The problem
is that quake2 only has a very small amount of space set aside
for dynamic updating. When this space is overflowed the values
of the cvar are truncated. The only one that stands out though is
the name cvar. Basically if the mod is marking cvars as 'U' and
q2admin marks cvars as 'U' there may be a overflowing. To fix
this you have to reduce the amount of cvars marked as 'U'. You
can either do this in q2admin or in mod. I would assume that most
mods wouldn't give you the option though. There are 2 features in
q2admin that mark cvars as 'U'. The first is the maxfps feature
and the second is the passwords on ban names. Try reducing the
password length and/or turning off one of both features.
7. Credits
----------
Written by Shane Powell (KillerBee)
killerbee@Quake2.bitstreet.net
http://www.teamevolve.com
Mike (McNasty) for beta testing and for bugging me enough
to write this dll in the first place.
#Cookie for input and advice.
Mentor for allowing me to beta-test on his server.
ElectricMonk for programming advice and input.
Matt (Fisty) for porting to linux.
HeKTik for letting me use his linux machine for compiling
on demand.
Chief Bastard for linux server testing.
The Solaris port is done by the SolarEclipse. Go check
them out for ports of other Quake2 mod's to Solaris OS.
http://www.planetquake.com/eclipse
For the many many server admin's and users that have reported
problems and made feature suggestions.
A very big thanks goes to the alpha test team that helped me
make the move from zbot detector to q2admin. They are the
people that have made q2admin what it is today.
Brian (Spanky aka Brain), Apocalypse, Thaddeus, Simon, John,
Sentry, Brandon (Thumper), Michael, Mentor, Zool, James (GenChaos),
Grozny (Gsu27), Ron (Iron), Phil (Deltoid), Mark (Spiff), Paul
(NeDDoG), Ian, Jarmo
And finally [KfK]Vithar for modifying the version 1.10 source and
adding the extra protection measures that make up version 1.11.
8. Copyright and Distribution Permissions
-----------------------------------------
This program is freely distributable provided that this
readme.txt is distributed with it as well and remains unchanged.
All code is Copyright Shane Powell 1998.
DISCLAIMER: This program is 100% safe, tested, and FDA
approved, so you should have no trouble with it. But if
you do.. its not our fault.
DLL's always carry an inherent risk for servers!
The q2admin and the q2admin source code is provided under the
GNU GENERAL PUBLIC LICENSE.
9. Release History
------------------
v0.92 beta - 19 October - First public release for Win32 version
v0.93 beta - 21 October - First public release for Linux version
v0.94 beta - 22 October - Fixed bug with normal dm servers not
loading. Win32 version only atm, linux
update soon.
v0.94 beta - 23 October - Renamed to 'UQSA ZBOT Detector' and moved
to a new web site and the release of the
linux release.
v0.95 beta - 26 October - Added Quake2dirsupport for windows version
only in ZBotdetect.cfg.
- Added customclientcmdconnect to ZBotdetect.cfg
- Improved performance.
- Fixed command overflow problem.
v0.96 Alpha - 01 November - Fixed blank IP's in log file.
- Log and display name changes now.
- Kick on client impulse generate option
(default off).
- "!version" command added. Can be used by any
client you don't have to be in admin mode to run.
- Added support for double quotes '\"' and newlines
'\n' in command strings.
e.g. customclientcmd "error \"Fuck off ZBOT User\""
- Use log file in mod dir option added (default set
to Quake2 directory)
- Added ZBotmotd option, this is a file that is
printed to each client on connect and reconnect
(level change).
- Checks for overflow now, to do this I force
"logfile 2" on servers.
- Added 'play_team' command and 'play_team_enable'
option.
- Added 'play_all' command and 'play_all_enable'
option.
- Added serverinfoenable with tells the dll to set
the server variable Bot "No Bots".
v0.96 Alpha - 16 November - Added server console admin interface.
- Added support for string admin commands in the
server console and client console. Added '\q' for
inserting quotes in strings in the console.
- Added support for detecting hacked ZBots.
- Changed the 1/0 settings to Yes/No for easier to
understand admin commands.
- Added IP and Name banning.
- Added rate and maxfps capping.
- Added limited rcon.
- Added conned / disconnect logging.
- Added selectable impulses to kick on.
- Rewrote the readme.txt
v0.96 Alpha - 23 November - Break logclientconnects into 3 options.
- Added BAN ALL command.
- Changed BAN IP MASK format to /yy format
- Added ZBotmotd command to server & client console.
- Prints out the ZBot version on server startup.
- Fixed problem with 'gamemap' command (e.g. timelimit,
fraglimit)
- Added reload ban list command.
- Added reload lrcon list command.
- Added motd client command to redisplay motd.
- Fixed long pauses before certain commands would
complete.
- Disable client admin console command (NO by default)
- Fixed bug with incorrect game dll being loaded in
rare cases.
- Changed format for some of the logging output to make
it nicer I hope :)
- Added displaylogfile to server console commands.
- Added command to display bans in memory.
- Added command to display lrcons in memory.
- Added command to delete ban.
- Added option (banonconnect) on how banned connecting
players are handled.
- Changed name changing to disallow instead of kicking
when changing to a banned name.
- Adding a ban at the console now reruns all the bans on
currently connected clients.
- Added nocheck to ban console to NOT rerun the ban on
currently connected clients.
- Added option to protect against name change flooding.
- Added regular expressions to ban names.
- extended lrcons format with exact match and regular
expression matching.
- Added passwords option to include bans.
v0.96 Alpha B4 - 27 November - Fixed MSG message for bans with passwords not displaying.
- Fix ip banning disabled and name banning enabled problem.
(Disabled now ignores ip bans with a subnet mask greater
than 0)
- Added build number to version string.
- Fixed server crash if banonconnect yes set to 'No' and
the user cash banned. Only some types of mod's will be
effected by this bug namely lmctf.
- Fixed "ban all" bans loading incorrectly from ZBotban.txt
file.
- Fixed problem with "internal error" and the false detection
that can go with it.
- Setting the user admin password (adminpassword) to nothing
will disable client side admin console. This replaces the
separate variable what was in the Build 3.
- Option added to kick on name change to banned name.
- Change flood protection to be more like quakeworld (number,
time, seconds).
- Chat filter.
v0.96 Alpha B5 - 9 December - Fixed some small bugs with the detection methods causes
internal errors.
- Fixed the linux crashing problem.
- Improved detection method be allowing for more cases and
increased the retry count.
- ZBotdetect.cfg is now loaded from the Quake2 directory AND then
the mod directory.
- Removed the setting of the logfile and recommend setting it to two
or 3 in the readme.txt.
v0.96 Alpha B6 - 14 December - Fixed bug in build 5 where banonconnect set to no didn't kick
the person.
- Fixed up some internal error (4)'s from happening.
- Fixed up a big code 'doh' for not catching times when internal
errors could happen.
v0.96 Alpha B7 - 17 December - Changed the 'ZBotmotd' command to 'setmotd'.
- Changed the 'ZBotdetect.cfg' file to 'q2admin.cfg'.
- Changed the name from ZBot detector to q2admin.
- Changed the file 'ZBotban.txt' to 'q2adminban.txt'.
v0.96 Alpha B8 - 23 December - Finished off the chat banning so that MSG part of the chat ban
works now.
- Added advanced logging.
- Deleted all the old logging commands as they are not needed any
more.
- play_person [LIKE/RE] <playername> <wavefile> command added.
- say_person [LIKE/RE] <playername> <message> command added.
v0.96 Alpha B9 - 29 December - Fixed bug that caused a server crash when players changed names
to names longer than 15 characters.
v0.96 Alpha B10- 11 January - Fixed bug where setmotd command from the server or client
console would not load the motd file correctly. Also stuffed
up the motd client command.
- lrcon.txt file renamed to q2adminlrcon.txt.
- lrcon password now made case sensitive. Because the password is
now separate from the command, the RE command format doesn't begin
with a '^' before the password any more.
e.g. "RE: ^duck2 map q2dm[128]$" is now "RE: duck2 ^map q2dm[128]$"
- Fixed bug where client console commands (e.g. motd or lrcon or
admin command !) didn't work for up to a second after connecting.
- ban passwords are now case sensitive.
- readme.txt worked over by -=Phil to correct my english.
- Fixed linux crash in Build 9.
- Fixed problem with internal error (1) coming up for no reason.
- Changed name from internal error to internal warning.
- Allowing running from a moddir which doesn't have a game dll or so.
(i.e. the loading now defaults to baseq2 if the game dll/so doesn't
exist in the mod directory)
v0.96 Alpha B10- 13 January - Fixed problem with linux and created a test server code to test the
linux version before releases.
- Re-released the linux build 10.
v0.96 Alpha B10- 18 January - Build 10 port to x86 and sparc solaris.
v0.96 Alpha B11- 18 January - Switched to the GNU regular expression code. The RE mode that I use
is the POSIX extended mode.
- Fixed '#m' for kick log messages not displaying any message.
- Changed some of the ban connect code to be more mod friendly.
- Added lrcon client command logging. This logs all correct lrcon
commands sent to the server.
v0.96 Alpha B12- 19 January - Fixed the I(85) zbot false detection bug.
v0.96 Alpha B13- 20 January - Fixed the RE not working bug.
- Changed the cl_maxfps code so that it doesn't require the setting of
the cl_maxfps var for unsetup clients.
v0.96 Alpha B14- 21 January - Fixed client crashing after 3 seconds from connect. Was caused by the
cl_maxfps code changed :(
- Added rate and cl_maxfps descriptions to the readme.txt file.
- Added a Trouble Shooting section to the readme.txt file.
v0.96 Alpha B15- 22 January - Fixed lrcon not being run correctly if the logging of lrcon's was
turned on bug.
v0.96 Alpha B16- 2 February - Added performance monitor logging option.
v1.0 RC1 - 9 February - Fixed hacked zbot checking.
- Expanded the "impulsestokickon" server/client console command.
v1.0 - 12 February - Clean up some of the cfg files and readme.txt.
- Minor cleanup code changes.
- First public release.
v1.1 Beta - 19 February - Added '%p' to the log file name setup. This is replaced by the server
port number.
- Added 'stuff' command to the server console / client admin console
commands.
- Added 'customservercmdconnect' to the config / server console / client
admin console commands.
- Added maximpulses option to kick after x number of impulses generated.
- Added server console commands '!say_person' and '!say_group'. Also
added 'CL' to all the play_ say_ commands for specifying client numbers
instead of names. Mainly for use with the server console versions of
say_ instead of typing in names.
- Added warnings when any of the config files don't load.
- Fixed bug where say_person bypassed the chatban checking.
- Added extended say where say_group and say_person can be run from the say
and messagemode commands. This is mainly for the messagemode command so
you don't have to bring down the console to do a say_person or say_group.
- Added logfile and logevent server console commands to setup/maintain log
files.
- Added lrcon and lrcondel server console commands to setup/maintain
lrcon's.
v1.1 Beta 2 - 20 February - Fixed problem with the stuff command sending it to the incorrect client.
- Chat logging now knows who sent the message.
- Fixed bug with the extended say on. (so much for coping id code and
guessing that is would work ok... doh)
- Added chat flood protection.
- Added gamemap to map option.
v1.1 Beta 3 - 25 February - Fixed the server console sv !say_person and sv !say_group commands not
working.
- Fixed up some readme.txt problems and change around the admin command
reference.
- Added mute command with one caveat, if the underlying mod has flood
protection, it works allot better if it is turned off and the q2admin
flood protection is used (in most cases with mod code based on v3.20,
flood_msg 0 as the server console will turn off flood protection)
- Added q2adminpassword client cvar which is checked at client connect to
see if the client should be set to Admin Mode.
- Converted the memory routines in the GNU RE lib to the Q2 memory routines.
- Change memory routines to use TAG_LEVEL to make sure a level change frees
all memory. There is possible memory leaks in the GNU RE code that may have
caused problems with a server running for a long time.
v1.1 Beta 4 - 4 March - Allow mute for 0 seconds to unmute someone.
- Fixed a logging problem with one of the zbot detect routines.
- Added permanent mute option to the mute command and the chat flood
protection.
- Fixed bugs where the mute / flood protection didn't mute/flood protect
the say_person / say_group commands.
- Fixed bugs where the say_person / say_group commands wheren't being logged
in to the chat log.
- Changed chat flood protection so that there is a global chat flood protection
and a client chat flood protection. The client overrides the global if it is
set. If it isn't then the global settings are used.
- Added chat flood protection settings to include ban. This sets the clients
chat flood protection.
- Added clientchatfloodprotect command to the server console / client admin
console commands to set a clients chat flood protection.
- Spanky did some work on the readme.txt file.
- Changed the format of the stuff command to use the "[LIKE/RE/CL] name"
format to it.
- Added q2adminflood.txt file to flooding protection.
- Added reloadfloodfile, listfloods, floodcmd and flooddel commands to manage
the new flood command list.
- Convert the old list display commands over to the new coding method for
displaying lists.
- Extended say now works in both messagemode and messagemode2 prompts.
- play_all (!a), play_team (!t) and play_person (!e) commands added to extended
say.
v1.1 Beta 5 - 11 March - Fixed bug where the admin client commands that used the [LIKE/RE/CL] syntax
didn't work correctly. This included stuff, say_person and say_group server
admin commands.
- Improved support for non-standard console chat in the chat flood protection /
muting commands. The only mod so far that I know does this is LMCTF.
v1.1 Beta 6 - 28 March - Fixed major problems with the zbot detection feature turned off.
- Minor changes to internal features.
v1.1 - 12 April - Fixed some internal house-keeping bugs.
- Added support for a different method for generating chat messages. Adds
support for OSP and any other mod that uses this method for generating
chat messages.
- Renamed q2admin.cfg to q2admin.txt. This is the make sure that
q2admin.txt will not be exec'd.
- Fixed bug with 'chatfloodprotect' causing a 'SZ_GetSpace: overflow without
allowoverflow set' error.
v1.2 Beta 1 - 8 May - Added 'ip' commnd for displaying a clients IP.
- Added 'kick' commnd for kicking one or more clients.
- Added 'lock' commnd for locking / unlocking a server.
- Added disable entity spawning feature. (q2adminspawn.txt, spawnentities_enable,
spawncmd, spawndel, listspawnsRun)
- Fixed a loophole which allowed clients to run client commands on other client
machines.
- Command voting.
- Added option to load unsafe so files in linux.
v1.2 Beta 2 - 11 May - Wrote my own standard clib functions to try and make it linux clib/glib
version independent.
- Added WhiteFang's zbotcheck code (zbot type movement detection).
v1.2 Beta 3 - 26 May - Changed ip address printout from chat to normal.
- Detect and ignore Nitro2 and BW-Proxy clients.
- Change the way I compile the glib support.
v1.2 Beta 4 - 24 July - Fixed bug that would cause a crash with some mods and genreal crashs sometimes.
v1.2 Beta 5 - 7 August - Added 2 methods of detecting ratbots (1 quick and 1 slow).
- Added proxy_bwproxy and proxy_nitro2 for controlling how BW-Proxy and Nitro2 Proxy
are detected.
- Added 'consolechat_disable' to disable client console chat.
v1.2 Beta 6 - 10 August - Added 'cvarset' command for emonk.
- Changed ratbot detect routine to just print the message to the client only.
It now can't be turned off.
- Fixed up the way the second ratbot method works to be more internet safe and
to fix a bug that caused false detects.
- Added 'q2adminrunmode' for internal reasons.
- Added 'maxclientsperframe' for internal testing.
- Updated readme.txt to include ratbot documentation updates.
- Added 'framesperprocess' for internal testing.
v1.2 Beta 7 - 12 August - Fixed bug there name changes where NOT meant to be passed onto mod code.
- Added spawn files per mod map.
v1.2 Beta 8 - 28 August - Added include file support for in banfiles.
- Added '\m' in the string processing is replaced by the current mod directory.
e.g. in the q2adminban.txt file: INCLUDE: "\m\\includebanlist.txt"
- Updated readme.txt to include a string preprocessing section.
v1.2 Beta 9 - 29 August - Updated the 'ratbot detect test' to support v2.25 of the ratbot.
v1.2 Beta 10 - 25 September- Fixed linux clib problem (this fixes the chasm cam problem with the
ServerConfigMod and the Includes in ban files problem).
- Fixed chatflood problem. This fixes the crash with Superheros2.
- Added more warning printouts when bans / chatbans / flood protection / disabled
spawns / voting lines fail.
- Fixed change level problems with nitro2 and bw-proxy and reduced the change
level overhead for reconnecting players when using the gamemap change level
method.
- Changed the second ratbot method to be more internet friendly to lagged players.
- Increased the RE expression size to 80 characters from 20 characters.
v1.2 beta 11 - 30 October - Added timescale hack detect.
- Added minfps.
- Removed clib fix, seamed to cause more problems than it solved.
- Added skin flood protection.
- Added disable client commands.
v1.2 beta 12 - 3 November - Fixed name change problem.
- Changed Nitro2 detection.
- Added Xania proxy detection (since it's basically the same as Nitro2 it works
off the proxy_nitro2 variable)
v1.2 beta 13 - 11 November - Fixed problem with the speed cheat detection.
- Fixed Nirto2 detection.
- Added -5 bot log for a Nitro2 / BW-Proxy / Xania proxy detection.
- Changed some of the default proxy detect messages to be more proxy generic than
"zbot" only messages.
v1.2 beta 14 - 2 January - Added cl_pitchspeed change detect.
- Changed around the error codes: -5 is a timescale detect, -6 is a proxy detect
- Added -7 log which is a cl_pitchspeed change detect.
v1.3 - 25 January - Added minrate command.
- Added forced reconnect option.
v1.4 - 28 January - Fixed bugs in reconnect.
- Added voteclientmaxvotes and voteclientmaxvotetimeout variables.
v1.5 - 31 January - Added spawnentities_internal feature.
- Added entity logging.
- Commented out the skin change logging in the default log file.
- 12 February - Added filternonprintabletext command.
v1.6 - 19 February - Added quick detection for the new version of ratbot.
v1.7 - 26 February - Removed -8 ratbot logging because of false logging.
- Removed the ratbot and p_version messages from displaying. Replaced with
non display mesages.
- Added new ratbot detect of the latest ratbot.
- Added swap_attack_use. Another method for getting around the auto-aim proxy.
- Added a 5 retry limit to the reconnect feature so that people can't get into
a infinite retry loop.
v1.8 - 9 June - Added reconnect_checklevel to allow a less strict setup of the reconnect feature.
- Added lockoutmsg command for the lock command.
- Changed the lock command to allow access to disconnected / disconnecting
users.
- On map changes, run a <mapname>-pre.cfg script before the map is changed and run
<mapname>-post.cfg script after the map is loaded.
- Change the timescale checking routines just in case.
- Kick clients that change the 'msg' to other than '0'.
- Fixed a bug that stoppd Q2 Variant (http://www.ionwerks.net/defunkt/action/q2v.htm)
from working.
v1.9 - 11 June - Fixed with v1.8 crashing linux servers (Seams there is a difference to the way
that linux quake2 handles events to the win32 quake2 server).
v1.10 - 12 June - Changed the msg kick to only effect msg mode less than 4.
v1.11 - 2 May - Added four new options that can be used in q2admin.txt: dopversion,
hackuserdisplay, defaultreconnectmessage & skincrashmsg. An explanation on
how to use these new options can be found inside this readme.
- Replaced the cvar "Bot No Bots" by "Q2Admin 1.11". This way programs like
Gamespy will show Q2Admin's version number as part of the server info.
- Made it possible to give a message to reconnecting players.
- Made the p_version on level-join serveradmin-configurable.
- Added protection for speedbots using a timescale value between 1 and 1.999.
- Made the checksum for speedbots random so people cannot get around it anymore.
- Added protection for hacked quake2.exe, so people cannot get around the
reconnect-function or rate-cap anymore.
- Added protection for known proxies that want to bypass the reconnect-function.
- Added protection for wrong userinfo so clients can't crash the server
anymore or other quake2 players on the server.
- Fixed a bug that made the server crash when someone changed their userinfo
(i.e. name or skin) while reconnecting.
- Added "[Q2Admin]" at the beginning of every default message that is given
by Q2Admin (for example: "[Q2Admin] %s is using a zbot!!!").
- Modified the readme.txt to include directions on how to use different
q2admin.txt files when you run multiple servers from one mod directory
(this functionality was already in Q2Admin, but was never documented).
v1.12 - 24 June - Fixed bug in disable spawn entity bug where it would only disable the
entity for one level when gamemap was being used to change levels.
- Added ".disconnect" message to one of the display messages.
- Updated readme with information about Macintosh users and the "use" feature.
- Corrected the userinfo fix with a better fix that didn't stop other features
from working correctly.
- Fixed bug in serious bug lrcon that allowed only "part" of a password would be
allowed.
- Added in the checking client side variables feature. See section 2.14.
- Forced an IP address to be in the userinfo when connecting (I think this will
get around people trying to ignore banning).
- Added rcon_random_password and lrcon_timeout to get around people dumping
lrcon packets packets and finding out the rcon password.
v1.13 - 28 June - Fixed the userinfo bug at it's source.
v1.14 - 7 July - Added support for the Win32 loopback startup.
- Changed lrcon "rcon_random_password" feature to work for win32 clients.
v1.15 - 12 August - Fixed bug with "rcon_random_password" feature.
- All the map change exec cfg files are now run from the mapcfg directory. (Mustang)
- All the map change exec cfg files are controled by the mapcfgexec variable in
q2admin.txt.
- Add printmessageonplaycmds command to display messages when someone uses a
play_ command. (Mustang)
- Added another bot protection supplied to me by Vithar.
- Print the IP address to the console window in the banned user message.
- Added cl_anglespeedkey detect.
- Added -9 log which is a cl_anglespeedkey change detect.
- Added q2adminbantxt variable for the same use as the q2admintxt variable.
- Added maxmsglevel variable to control the msg level that the maximum client level
clients are allowed to have.
- Added checkclientipaddress to control if the users ip address is checked on connect.
(Note: users that don't have a valid ip address can't be ip banned, also the reason
a user may have a invalid ip address is because there userinfo space is overflowing
and this can cause other problems by itself)
v1.16 - 15 August - Fixed spamming problem with ".please.disconnect.all.bots" messages. Opps my problem.
- Added another reconnect protection again the newest bots that get around the
reconnect feature. (manic miner)
v1.17 - 18 August - Fixed the rest of the spamming problem with the ".please.disconnect.all.bots" messages.
- Added in better check for ip addresses. It now works with userinfo strings that have
overflowed.
- Added in a check for client userinfo buffers that have overflowed. It displays a
message to the client and to the server console window.