Time2Die's Quake3Arena Server Setup Guide.
Use this table of contents as a quick reference. If this is your first time creating a server config then I highly recommend reading over the entire document.
Time2Die's Handy Dandy Server Setup Guide.
Here some tips on creating and administering a quake3 server. When creating your server config, you will need to draw from your own previous playing experiences and determine what you have in the past liked and not liked in terms of timelimit, fraglimit, capturelimit, maxclients, maps played, and so on. Pull from those past experiences so that you can create the gaming experience your clients will experience and hopefully enjoy when connected to your server. Deciding on which game mode is played (DM/CTF) and how long or short levels last and on what maps players will play on will make or break your server. Balancing these variables is important in creating a popular and enjoyable server. With tweaking, testing, and gathering feedback you can create a reputable server where people will join knowing that they have come to the right place for a good game.
You need two files when running a Quake3 dedicated server. The server config file, which will set all of the variables and cvars for the server like timelimit and fraglimit, and second a batch file (referred to as a bat file for the duration of this web page) that calls the quake3 executable and sets server variables that can't be called from the server config file like game modes and ports.
Let's create the file that will start the server. There are certain settings (cvars) that can only be set from the command line. fs_game, net_ip, net_port, com_hunkmegs to name a few.
Note: You can create a shortcut to start the server, but if you move the server directory or copy it to another machine, the shortcut tries to update it's location and you end up fixing all of your shortcuts. I recommend using a bat files.
Create a file ending in .bat and include the following as a basic FFA server.
Note: If there is no "set fs_game xyz" variable in the command line, the server.cfg is understood to be located in the baseq3 directory.
Let's break this command line down piece by piece and show you what each variable does and how it impacts your server.
quake3 - This is of course the program executable name (duh!)
+set dedicated 2 - will set the server in "public mode" broadcasting it's presence to the id master server every 5 minutes. +set dedicated 1 would be used for a private or LAN game server.
+set bot_enable 0 - diables the bot support allowing you to run the dedicated server without the Quake3 CD in the server. Setting this to 1 allows you to setup bots. DO NOT SETUP BOTS for a server that's going to be on the Internet. Servers that during a refresh only show 4 players will be assumed to have the default b0t setup and people will be more hesitant to join. If people want to play bots they'll do it locally without the lag.
+exec XYZserver.cfg - this will transfer control to the server.cfg where the rest of your settings are loaded. By default, Quake3 will try and execute server.cfg in the same way it executes (exec's) autoexec.cfg in the client. Name your server config something other than server.cfg if you're going to be running multiple servers. What I DO recommend in the server.cfg are common varibles that don't change from server to server like rconpassword and sv_master.
Here are a couple of examples:
- start quake3 +set dedicated 1 +set com_hunkMegs 16 +exec server.cfg +exec ffa.cfg
- start quake3 +set dedicated 2 +set net_port 27961 +set bot_enable 0 +exec ffa.cfg
- start quake3 +seta com_hunkMegs 24 +set dedicated 1 +set fs_game osp +exec clanarena.cfg
Now that we have our bat file lets move onto the config.
If you look in your q3 pak file you will find:
By looking at those you can get a quick idea as to which variables are important and need to be set and how they differ from one mode of game play to another.
Here are some example scripts. While looking at this config, refer to the command list definitions to understand what's doing what. Also be sure to change the rcon, g_client, and privateclient passwords if you decide to use these scripts.
These are some tips on how to get an OSP server up and going ASAP.
start quake3 com_hunkMegs 24 +set dedicated 1 +set fs_game osp +exec clanarena.cfg
(0 == off / 1 == on)
III. HOW DO I?!?!....
IV. Server Quick Tips.
Clearing server passwords. When you set a password, you can clear it by setting it to the word none. This works with rconpassword, g_password, and sv_privatepassword. Check the "Server Commands" for which command effects what.
Private Server Clients. To setup private client slots on your server, you need to set 3 things.
When you have sv_privateclients set higher than 0, the total amount of public slots is sv_maxclients - sv_privateclients == total available public client slots. Example: sv_maxclients at 16 and sv_privateclients at 4 leaves 12 spots open for public clients to connect.
This only works if you have rcon. Use the following example:
Instead of doing a "/rcon map q3dm17" to get to your favorite "rail" map...instead do a "/rcon vstr q3dm17" and the level still changes...but the nextmap is still set to the next map in the map rotation
Changing the server from DM to CTF: "/rcon g_gametype 3" and either "/rcon map q3ctf1" or if you run the server and know there's a ctfserver.cfg do a "/rcon exec ctfserver.cfg" to start the ctf map rotation. Using callvote for the first two commands works as well.
Changing the number of Maxclients/Privateclients: "rcon sv_maxclients X" and then "rcon map_restart" for the changes to take effect. Callvote works in place of rcon as well.
Kicking a Player: Two way you can kick a player. One: Do a "/rcon status" and then a "/rcon kick x" where x is the players connection number. Or actually doing a "/rcon kick playername". Callvote works for that last one as well. The kick command also ignores color.
Banning player ip's (Adding, listing, and removing ip's): Do a "/rcon status" and take the persons ip down and either ban the ip like this "/rcon addip 192.168.1.123" or the whole subnet like this "/rcon addip 192.168.1.0". To list do a "/rcon g_banips". Use "/remove removeip 192.168.1.0" to remove the last example addip.
Keep a CTF server balanced: Use the commands g_teamautojoin and g_teamforcebalance both set to 1. Restarting the map is not needed.
Start a Match: "rcon map_restart". "Callvote map_restart" works as well if enabled.
1 == on
addip - This command is used to deny ip's access to your servers. To add a whole subnet use this example:
The server doesn't deal with hostnames. When you do "rcon status" it shows you only ip's. The ban list is saved in a cvar called g_banIPs. g_filterBan controls ban direction (default value of 0 means everyone is allowed to connect except those listed in the g_banips).
callvote - Basically an anonymous rcon command that allows you to do the following commands...map_restart, nextmap, map, g_gametype, kick, and g_dowarmup.
capturelimit - flag capture limit for a level.
fraglimit - Sets the fraglimit for a level. CTF and TeamDM servers should have this set at 0 and FFA servers should have it set depending on the what the maxclients is set to. IMHO I think the fraglimit depends on the maxclients and the size of the levels you're playing. With that said I think that the fraglimit should be set so that it takes more than 5 minutes to reach but not more than 15.
g_allowvote - Sets whether players can vote for server changes including the following commands.
g_banips - This is the list of ips that are banned/allowed to connect to your server depending on whether g_filterban is 0 (everyone allowed but those on the g_banips list) or 1 (no one allowed but those in the g_banips list). Ifyou want to see what ip's are being banned, type "/rcon g_banip" and the server will list the ip's set for this cvar. Blank means no ips have been banned. Set this in your common server.cfg so that all of your servers will pull from the same list of ip's.
g_doWarmup - to allow warmup countdown timer on all game modes. This helps out in clan matches, since they can do a restart and get a fair countdown (as opposed to a random map_restart that is abruptive). This also gives people with slow load times a fair chance.
g_filterBan - controls ban direction. Default value of 0 means everyone is allowed to connect except those listed in the g_filterban...you should keep it at 0.
g_forcespawn - time between death and when the server will automatically respawn an enemy. 5 seconds is what I would recommend. Any server that HAS to have this set should also have g_inactivity set as well.
g_friendlyFire - sets whether teammates can hurt other teammates. So...Set at 1 teammates can hurt each other and at 0 they cannot. CTF should be set at 0 and FFA and TeamDM should be set to 1. Teams is are set by red/blue color.
g_gametype - sets the game mode of Quake3.
g_inactivity - Kicks anyone that exceeds the number of seconds set for this variable. 120 is a step in the right direction (2 minutes).
g_log - The log file for Q3a to use. By defualt Q3 uses games.log in the /baseq3 dir. Setting this to something other than the default is good if you intend on running multiple servers and want to use a log parser to report/display stats. This will save the log in the fs_game directory. OSP logs will be in the OSP directory and so on.
g_motd - This is the info that you see when you're actually connecting to the server. Listing the clan or the servers web site is recommended. Sometimes where you put the stats URL as well.
g_needpass - Tells the internal browser (gamespy and pingtool seem to ignore this feature) if a password is needed to connect. *Don't bother trying to set this as it sets itself automatically when g_password is set. It is write protected and controlled by the server*.
g_password - this sets the server password needed to connect. To remove, set the g_password to the word "none". Passwords are CASE SENSITIVE.
g_teamAutoJoin - 1 sets it so players automatically join a team on connect
g_teamForceBalance - 1 forces it so that the spread between the number of players on a team is no more than two. Player will be disallowed to join a team with two or more players than the other.
g_warmup - The amount of time before a match that the server counts down. 30 seconds is usually good for a level change. This allows HPB's and people on slower connections to connect and be ready for when the game "map_restart"'s. In OSP set this to 0, g_dowarmup 1, and the match_readypercent to 100 and the server won't start the match until everyone is ready.
map_restart - restart current map without reconnecting as long as the gametype hasn't forced the items placement to change. Changing q3dm7 from FFA to Teamplay DM while cause the map to reload because of the different item placement. But still good for starting matches in the absense of a Tourney MOD (OSP). A fix also for stopping a match in OSP.
net_ip - set the ip for the server to listen on. If you have two network adapters and want the server only listening on one you would use this command in the server bat file to bind the ip to that particular interface. Also good if you're trying to do load balancing on two network adapters. Q3 will bind by default to your first/default ip.
net_port - sets the port of the game server.You can set the port for the server by adding a +net_port and the port number. A feature that id created with dedicated q3 servers is that when the server comes up and notices that the default port or the port it was trying for is taken, it will increment the port number by one and bind itself to that one. So if you had a dm and ctf server bat without specifically setting the port in the bat file, the first server to come up would take 27960 and the second server would take 27961. Not the most static way of doing things...but ok for the newbie which is what id was hoping to help. Here's an example server line.
quake3 +set dedicated 2 +bot_enable 0 +net_port 27961 +exec server.cfg
nextmap - used to change the level of a server to whatever is next in the map rotation.
rcon - prefix all commands you want to send to the server with /rcon , after setting your rconpassword, and those commands will execute as tho they were typed in locally at the server console (instead of remotely from your client PC).
rconaddress - sets the rcon address for a higher level of security. Not used much and not recommended unless you start having rcon/admin problems.
rconpassword - set this first when trying to do "rcon" commands remotely. A good habit to form is to make sure that before hitting enter you always hit the tab to verify you have a / before each command. I have had more than one rconpassword given to me by mistake because of a missing forward slash.
removeip - The ban list is saved in a cvar called g_banIPs. controls ban direction (default value of 0 means everyone is allowed to connect except those listed in the g_filterban)
sv_floodProtect - Set this to 0 so that clients do lag out when doing more than one macro within a short period of time
sv_hostname - This sets your Servers Name that shows up in gamespy and pingtool. Use quotes (" ") when setting a sv_hostname with spaces.
sv_master - This is what reports your server to a Q3 master server. By default sv_master1 is set to the id master. You can also specify sv_master2 as master0.gamespy.com and it will show up on their list as well. If you're using LANMASTER set the sv_master1 to the local ip of the LANMASTER server. This is necessary since LANMASTER won't detect servers not on the default port.
sv_maxclients - Total maximum number of players that can connect to a server including privateclients. Take the sv_maxclients and subtract the number of sv_privateclients when trying to figure out the total number of public clients that can connect to your server.
sv_privateClients - reserved client slots This should be 2-4 on FFA and CTF servers and 1-2 on 1v1 and TeamDM servers.
sv_privatePassword - password needed to connect to a privateclient slot.
sv_pure - This forces the client to have the same pak files as the server in hopes of trying to curb clients (easily) cheating on your server. It's a pain...but it's all we have for now.
timelimit - Set the duration of play. FFA's should be around 15 minutes and CTF/TeamDM at 20.
This tip comes from BuLL_DoG who runs a server at 220.127.116.11 . I have pasted in his email as it explains how the "sets" command works as well as I could have...
If you learn of a cool server trick and want to share it I will post it to this page and give you credit. If there is misinformation on this page just email me and I will fix it. If you have problems putting up your server you can contact me on the IRC network ETG on the server irc.enterthegame.com in channel #killco. I pulled some of the server command definitions from the id q3 FAQ and from the following URL's (among others):
do the death match flags with examples
things people forget. set, in the command line, stuff you can't change once the game has started, how to whip clean the slate and load a new config