SHOW:
|
|
- or go back to the newest paste.
1 | - | =========================== |
1 | + | =========================== |
2 | - | QUAKE LIVE DEDICATED SERVER |
2 | + | QUAKE LIVE DEDICATED SERVER |
3 | - | =========================== |
3 | + | =========================== |
4 | - | |
4 | + | |
5 | - | 1. Requirements |
5 | + | 1. Requirements |
6 | - | 2. Updating and Launching |
6 | + | 2. Updating and Launching |
7 | - | 3. Configuring your server |
7 | + | 3. Configuring your server |
8 | - | 4. Managing server access list |
8 | + | 4. Managing server access list |
9 | - | 5. Setting up a map pool |
9 | + | 5. Setting up a map pool |
10 | - | 6. Creating custom gametypes (factories) |
10 | + | 6. Creating custom gametypes (factories) |
11 | - | 7. Using Steam Workshop |
11 | + | 7. Using Steam Workshop |
12 | - | 8. Using external remote console |
12 | + | 8. Using external remote console |
13 | - | 9. Using external stats |
13 | + | 9. Using external stats |
14 | - | |
14 | + | |
15 | - | 1. Requirements |
15 | + | 1. Requirements |
16 | - | --------------- |
16 | + | --------------- |
17 | - | |
17 | + | |
18 | - | The dedicated server is available in both 32-bit and 64-bit versions, and should run on any modern machine that can |
18 | + | The dedicated server is available in both 32-bit and 64-bit versions, and should run on any modern machine that can |
19 | - | run the Steam client. We recommend Ubuntu Server 14.04. |
19 | + | run the Steam client. We recommend Ubuntu Server 14.04. |
20 | - | |
20 | + | |
21 | - | To run the 32-bit version of the server on 64-bit installs, you will need to install 32-bit versions of all libraries. |
21 | + | To run the 32-bit version of the server on 64-bit installs, you will need to install 32-bit versions of all libraries. |
22 | - | See your distribution's instructions on how to perform this. |
22 | + | See your distribution's instructions on how to perform this. |
23 | - | |
23 | + | |
24 | - | |
24 | + | |
25 | - | 2. Updating and Launching |
25 | + | 2. Updating and Launching |
26 | - | ------------------------- |
26 | + | ------------------------- |
27 | - | |
27 | + | |
28 | - | Install and update the server through SteamCMD, using a command similar to below. |
28 | + | Install and update the server through SteamCMD, using a command similar to below. |
29 | - | |
29 | + | |
30 | - | ./steamcmd.sh +login user pass +force_install_dir ./steamapps/common/qlds/ +app_update 349090 +quit |
30 | + | ./steamcmd.sh +login user pass +force_install_dir ./steamapps/common/qlds/ +app_update 349090 +quit |
31 | - | |
31 | + | |
32 | - | Please see the Valve Developer Community for full SteamCMD options: https://developer.valvesoftware.com/wiki/SteamCMD |
32 | + | Please see the Valve Developer Community for full SteamCMD options: https://developer.valvesoftware.com/wiki/SteamCMD |
33 | - | |
33 | + | |
34 | - | Run the server using the provided run_server_x86.sh and run_server_x64.sh scripts. This will set the proper working |
34 | + | Run the server using the provided run_server_x86.sh and run_server_x64.sh scripts. This will set the proper working |
35 | - | directory and LD_LIBRARY_PATH to the correct libsteam_api.so. You can add command line options at will. |
35 | + | directory and LD_LIBRARY_PATH to the correct libsteam_api.so. You can add command line options at will. |
36 | - | |
36 | + | |
37 | - | A standard server or VPS can host many instances of Quake Live, so you may wish to run multiple servers. We recommend |
37 | + | A standard server or VPS can host many instances of Quake Live, so you may wish to run multiple servers. We recommend |
38 | - | managing them through a third party process control system. Below is a sample script that will take one parameter: a |
38 | + | managing them through a third party process control system. Below is a sample script that will take one parameter: a |
39 | - | number starting at 0. This will launch a server with a unique hostname, port, rcon port, and stats port. This is a |
39 | + | number starting at 0. This will launch a server with a unique hostname, port, rcon port, and stats port. This is a |
40 | - | great way to quickly run a small cluster of servers on a single box. |
40 | + | great way to quickly run a small cluster of servers on a single box. |
41 | - | |
41 | + | |
42 | - | You should change the path to reflect where you have installed the game. Never run the server under root. |
42 | + | You should change the path to reflect where you have installed the game. Never run the server under root. |
43 | - | |
43 | + | |
44 | - | #!/bin/bash |
44 | + | #!/bin/bash |
45 | - | gameport=`expr $1 + 27960` |
45 | + | gameport=`expr $1 + 27960` |
46 | - | rconport=`expr $1 + 28960` |
46 | + | rconport=`expr $1 + 28960` |
47 | - | servernum=`expr $1 + 1` |
47 | + | servernum=`expr $1 + 1` |
48 | - | |
48 | + | |
49 | - | exec /home/user/steamcmd/steamapps/common/qlds/run_server_x86.sh \ |
49 | + | exec /home/user/steamcmd/steamapps/common/qlds/run_server_x86.sh \ |
50 | - | +set net_strict 1 \ |
50 | + | +set net_strict 1 \ |
51 | - | +set net_port $gameport \ |
51 | + | +set net_port $gameport \ |
52 | - | +set sv_hostname "My Quake Live Server #$servernum" \ |
52 | + | +set sv_hostname "My Quake Live Server #$servernum" \ |
53 | - | +set fs_homepath /home/user/.quakelive/$gameport \ |
53 | + | +set fs_homepath /home/user/.quakelive/$gameport \ |
54 | - | +set zmq_rcon_enable 1 \ |
54 | + | +set zmq_rcon_enable 1 \ |
55 | - | +set zmq_rcon_password "mypass" \ |
55 | + | +set zmq_rcon_password "mypass" \ |
56 | - | +set zmq_rcon_port $rconport \ |
56 | + | +set zmq_rcon_port $rconport \ |
57 | - | +set zmq_stats_enable 1 \ |
57 | + | +set zmq_stats_enable 1 \ |
58 | - | +set zmq_stats_password "mypass" \ |
58 | + | +set zmq_stats_password "mypass" \ |
59 | - | +set zmq_stats_port $gameport |
59 | + | +set zmq_stats_port $gameport |
60 | - | |
60 | + | |
61 | - | This can be combined with a process control system like supervisord in order to manage and launch any number of |
61 | + | This can be combined with a process control system like supervisord in order to manage and launch any number of |
62 | - | instances. Note that supervisord is third party software, and the below may change at any point. We will not support |
62 | + | instances. Note that supervisord is third party software, and the below may change at any point. We will not support |
63 | - | issues involving third party software. |
63 | + | issues involving third party software. |
64 | - | |
64 | + | |
65 | - | You will need to replace "user" with the user name of the dedicated server. |
65 | + | You will need to replace "user" with the user name of the dedicated server. |
66 | - | |
66 | + | |
67 | - | [program:quakelive] |
67 | + | [program:quakelive] |
68 | - | command=/home/user/steamcmd/steamapps/common/qlds/launch.sh %(process_num)s |
68 | + | command=/home/user/steamcmd/steamapps/common/qlds/launch.sh %(process_num)s |
69 | - | user=user |
69 | + | user=user |
70 | - | process_name=qzeroded_%(process_num)s |
70 | + | process_name=qzeroded_%(process_num)s |
71 | - | numprocs=10 |
71 | + | numprocs=10 |
72 | - | autorestart=true |
72 | + | autorestart=true |
73 | - | |
73 | + | |
74 | - | In conjunction with the above launch script, this will give you 10 server instances, numbered #1 to #10, starting |
74 | + | In conjunction with the above launch script, this will give you 10 server instances, numbered #1 to #10, starting |
75 | - | at port 27960, with rcon starting at port 28960. They will automatically restart if crashed. For information on using |
75 | + | at port 27960, with rcon starting at port 28960. They will automatically restart if crashed. For information on using |
76 | - | rcon, please see later in this document. |
76 | + | rcon, please see later in this document. |
77 | - | |
77 | + | |
78 | - | |
78 | + | |
79 | - | 3. Configuring your server |
79 | + | 3. Configuring your server |
80 | - | -------------------------- |
80 | + | -------------------------- |
81 | - | |
81 | + | |
82 | - | Configure your server through server.cfg. You may wish to make a copy of this file and place it into your fs_homepath, |
82 | + | Configure your server through server.cfg. You may wish to make a copy of this file and place it into your fs_homepath, |
83 | - | as updates to the default server.cfg may revert your changes to default. The default server.cfg is heavily commented, |
83 | + | as updates to the default server.cfg may revert your changes to default. The default server.cfg is heavily commented, |
84 | - | so please see that for further information. |
84 | + | so please see that for further information. |
85 | - | |
85 | + | |
86 | - | There is no need to specify a map on the command line or server.cfg. The server will automatically execute the variable |
86 | + | There is no need to specify a map on the command line or server.cfg. The server will automatically execute the variable |
87 | - | "serverstartup" when the server has completed initialization. By default, this will launch a random map selected |
87 | + | "serverstartup" when the server has completed initialization. By default, this will launch a random map selected |
88 | - | from the server's map pool. Please see the below section on configuring map pools. |
88 | + | from the server's map pool. Please see the below section on configuring map pools. |
89 | - | |
89 | + | |
90 | - | Quake Live servers are designed to handle multiple gametypes, and multiple gametype variations on one server. This |
90 | + | Quake Live servers are designed to handle multiple gametypes, and multiple gametype variations on one server. This |
91 | - | means that your server can switch from Free For All to Capture the Flag to Clan Arena, to even variants of gametypes, |
91 | + | means that your server can switch from Free For All to Capture the Flag to Clan Arena, to even variants of gametypes, |
92 | - | such as InstaGib FFA, and custom variations that provide more traditional competitive settings. |
92 | + | such as InstaGib FFA, and custom variations that provide more traditional competitive settings. |
93 | - | |
93 | + | |
94 | - | Because of this, you should generally not place gameplay settings inside server.cfg. Although the server will attempt |
94 | + | Because of this, you should generally not place gameplay settings inside server.cfg. Although the server will attempt |
95 | - | to restore all old settings after switching gametypes, these factory settings will override settings in server.cfg. |
95 | + | to restore all old settings after switching gametypes, these factory settings will override settings in server.cfg. |
96 | - | |
96 | + | |
97 | - | See the below section on creating custom factories to setup your own match rules. |
97 | + | See the below section on creating custom factories to setup your own match rules. |
98 | - | |
98 | + | |
99 | - | |
99 | + | |
100 | - | 4. Managing server access list |
100 | + | 4. Managing server access list |
101 | - | ------------------------------ |
101 | + | ------------------------------ |
102 | - | |
102 | + | |
103 | - | Quake Live reads and stores to a persistent text file on disk information about who has access to server moderation, |
103 | + | Quake Live reads and stores to a persistent text file on disk information about who has access to server moderation, |
104 | - | server administration, and ban list. By default, this is in the file access.txt, and can be changed through the |
104 | + | server administration, and ban list. By default, this is in the file access.txt, and can be changed through the |
105 | - | console variable "g_accessFile" |
105 | + | console variable "g_accessFile" |
106 | - | |
106 | + | |
107 | - | Only edit this file on disk while all servers are stopped, as the game will write out the current access list before |
107 | + | Only edit this file on disk while all servers are stopped, as the game will write out the current access list before |
108 | - | each map load. In order to have access to your server, you will need to add yourself as an admin. Obtain your |
108 | + | each map load. In order to have access to your server, you will need to add yourself as an admin. Obtain your |
109 | - | 64-bit Steam ID by connecting to any match, and typing /players in the console. Put it in access.txt in the |
109 | + | 64-bit Steam ID by connecting to any match, and typing /players in the console. Put it in access.txt in the |
110 | - | given format. Example: |
110 | + | given format. Example: |
111 | - | |
111 | + | |
112 | - | 76561198072786081|admin |
112 | + | 76561198072786081|admin |
113 | - | |
113 | + | |
114 | - | Save the file, and start the server. You can then use /mod, /admin, /demote, /ban and /unban commands to manage the |
114 | + | Save the file, and start the server. You can then use /mod, /admin, /demote, /ban and /unban commands to manage the |
115 | - | access list while the server is running. |
115 | + | access list while the server is running. |
116 | - | |
116 | + | |
117 | - | |
117 | + | |
118 | - | 5. Setting up a map pool |
118 | + | 5. Setting up a map pool |
119 | - | ------------------------ |
119 | + | ------------------------ |
120 | - | |
120 | + | |
121 | - | The server's map pool accepts a map, and a factory, delimited with a |. See the default mappool.txt for an example. |
121 | + | The server's map pool accepts a map, and a factory, delimited with a |. See the default mappool.txt for an example. |
122 | - | A different file can be specified through "sv_mapPoolFile" |
122 | + | A different file can be specified through "sv_mapPoolFile" |
123 | - | |
123 | + | |
124 | - | If you wish to use your own custom factories, you can specify them in here so that your custom factory will appear |
124 | + | If you wish to use your own custom factories, you can specify them in here so that your custom factory will appear |
125 | - | in the three map voting system at the end of the game. |
125 | + | in the three map voting system at the end of the game. |
126 | - | |
126 | + | |
127 | - | If you wish to lock your server to one gametype, then make sure your map pool only contains maps in that factory, |
127 | + | If you wish to lock your server to one gametype, then make sure your map pool only contains maps in that factory, |
128 | - | then add 8 to g_voteFlags to stop "callvote map" from accepting the optional factory argument. This is not |
128 | + | then add 8 to g_voteFlags to stop "callvote map" from accepting the optional factory argument. This is not |
129 | - | usually needed though; we recommend allowing your players to play and callvote whatever gametypes they wish to |
129 | + | usually needed though; we recommend allowing your players to play and callvote whatever gametypes they wish to |
130 | - | play on your servers, but it is often not bad to restrict Duel servers due to the low player counts. |
130 | + | play on your servers, but it is often not bad to restrict Duel servers due to the low player counts. |
131 | - | |
131 | + | |
132 | - | |
132 | + | |
133 | - | 6. Creating custom gametypes (factories) |
133 | + | 6. Creating custom gametypes (factories) |
134 | - | ---------------------------------------- |
134 | + | ---------------------------------------- |
135 | - | |
135 | + | |
136 | - | Setting up a custom factory is a bit more involved than the past solutions of editing config files, but it allows for |
136 | + | Setting up a custom factory is a bit more involved than the past solutions of editing config files, but it allows for |
137 | - | more flexibility in match rules, while ensuring that settings don't leak over into future matches. By default, |
137 | + | more flexibility in match rules, while ensuring that settings don't leak over into future matches. By default, |
138 | - | Quake Live ships with base rules for every gametype, and a few variations. Other factories may be available on Steam |
138 | + | Quake Live ships with base rules for every gametype, and a few variations. Other factories may be available on Steam |
139 | - | Workshop. |
139 | + | Workshop. |
140 | - | |
140 | + | |
141 | - | To define your own gametype factory, create a "scripts" folder inside your baseq3 directory, and name the file with |
141 | + | To define your own gametype factory, create a "scripts" folder inside your baseq3 directory, and name the file with |
142 | - | anything that ends in ".factories" |
142 | + | anything that ends in ".factories" |
143 | - | |
143 | + | |
144 | - | Example: baseq3/scripts/mynewgametype.factories |
144 | + | Example: baseq3/scripts/mynewgametype.factories |
145 | - | |
145 | + | |
146 | - | This file is a JSON file that contains either a JSON array with multiple factories, or a JSON object containing a |
146 | + | This file is a JSON file that contains either a JSON array with multiple factories, or a JSON object containing a |
147 | - | single factory. For example, here is the built in InstaGib FFA factory: |
147 | + | single factory. For example, here is the built in InstaGib FFA factory: |
148 | - | |
148 | + | |
149 | - | { |
149 | + | { |
150 | - | "id": "iffa", |
150 | + | "id": "iffa", |
151 | - | "title": "Instagib FFA", |
151 | + | "title": "Instagib FFA", |
152 | - | "author": "id Software", |
152 | + | "author": "id Software", |
153 | - | "description": "Railgun and Gauntlet only. One shot, one kill.", |
153 | + | "description": "Railgun and Gauntlet only. One shot, one kill.", |
154 | - | "basegt": "ffa", |
154 | + | "basegt": "ffa", |
155 | - | "cvars": { |
155 | + | "cvars": { |
156 | - | "g_dropCmds": "0", |
156 | + | "g_dropCmds": "0", |
157 | - | "g_spawnArmor": "0", |
157 | + | "g_spawnArmor": "0", |
158 | - | "dmflags": "28", |
158 | + | "dmflags": "28", |
159 | - | "g_instagib": "1", |
159 | + | "g_instagib": "1", |
160 | - | "g_startingWeapons": "65", |
160 | + | "g_startingWeapons": "65", |
161 | - | "timelimit": "15", |
161 | + | "timelimit": "15", |
162 | - | "g_allowKill": "0", |
162 | + | "g_allowKill": "0", |
163 | - | "fraglimit": "50", |
163 | + | "fraglimit": "50", |
164 | - | "g_overtime": "0", |
164 | + | "g_overtime": "0", |
165 | - | "g_loadout": "0" |
165 | + | "g_loadout": "0" |
166 | - | } |
166 | + | } |
167 | - | } |
167 | + | } |
168 | - | |
168 | + | |
169 | - | All fields should be present and of the correct type. |
169 | + | All fields should be present and of the correct type. |
170 | - | |
170 | + | |
171 | - | "id" is how you will refer to the factory inside a map pool or a callvote, and must be a string. |
171 | + | "id" is how you will refer to the factory inside a map pool or a callvote, and must be a string. |
172 | - | "title", "author" and "description" are all strings containing info about the factory, and can be seen in Start Match |
172 | + | "title", "author" and "description" are all strings containing info about the factory, and can be seen in Start Match |
173 | - | "basegt" is a string of the base gametype it should apply the settings on. Valid values for "basegt" are: |
173 | + | "basegt" is a string of the base gametype it should apply the settings on. Valid values for "basegt" are: |
174 | - | ffa, duel, race, tdm, ca, ctf, oneflag, har, ft, dom, ad, rr |
174 | + | ffa, duel, race, tdm, ca, ctf, oneflag, har, ft, dom, ad, rr |
175 | - | "cvars" is an object containing key value pairs of the cvar names and values to set. |
175 | + | "cvars" is an object containing key value pairs of the cvar names and values to set. |
176 | - | |
176 | + | |
177 | - | If a factory is invalid, the reason why will be printed in the console during startup, and the factory will not be |
177 | + | If a factory is invalid, the reason why will be printed in the console during startup, and the factory will not be |
178 | - | available for play. |
178 | + | available for play. |
179 | - | |
179 | + | |
180 | - | |
180 | + | |
181 | - | 7. Using Steam Workshop |
181 | + | 7. Using Steam Workshop |
182 | - | ----------------------- |
182 | + | ----------------------- |
183 | - | |
183 | + | |
184 | - | Quake Live will only autodownload custom content that has been uploaded to Steam Workshop. The legacy HTTP and UDP |
184 | + | Quake Live will only autodownload custom content that has been uploaded to Steam Workshop. The legacy HTTP and UDP |
185 | - | download functions have been removed. If you want your players to be able to play custom content on your servers, |
185 | + | download functions have been removed. If you want your players to be able to play custom content on your servers, |
186 | - | you must use Steam Workshop. |
186 | + | you must use Steam Workshop. |
187 | - | |
187 | + | |
188 | - | To add a workshop item to your server, add its item ID to workshop.txt. The item ID can be obtained from the URL |
188 | + | To add a workshop item to your server, add its item ID to workshop.txt. The item ID can be obtained from the URL |
189 | - | when browsing the Steam Workshop in your browser. |
189 | + | when browsing the Steam Workshop in your browser. |
190 | - | |
190 | + | |
191 | - | Before the server finishes initializing, it will attempt to download all items in workshop.txt, such that custom |
191 | + | Before the server finishes initializing, it will attempt to download all items in workshop.txt, such that custom |
192 | - | content can be included in your map pool. The progress of this process will be printed to the server console, and if |
192 | + | content can be included in your map pool. The progress of this process will be printed to the server console, and if |
193 | - | any download fails, it will be skipped and the server will continue to start. |
193 | + | any download fails, it will be skipped and the server will continue to start. |
194 | - | |
194 | + | |
195 | - | To upload content, you will need to use SteamCMD's workshop_build_item command. Please refer to the Steam documentation |
195 | + | To upload content, you will need to use SteamCMD's workshop_build_item command. Please refer to the Steam documentation |
196 | - | on how to upload Workshop content. |
196 | + | on how to upload Workshop content. |
197 | - | |
197 | + | |
198 | - | Occasionally, the Workshop startup process will fail, usually due to temporarily unavailable content server. Some users |
198 | + | Occasionally, the Workshop startup process will fail, usually due to temporarily unavailable content server. Some users |
199 | - | have reported that switching from the 64-bit dedicated to the 32-bit dedicated binary will fix downloads. In these |
199 | + | have reported that switching from the 64-bit dedicated to the 32-bit dedicated binary will fix downloads. In these |
200 | - | cases, you can use SteamCMD to download the workshop item, and then move it to the appropriate place. |
200 | + | cases, you can use SteamCMD to download the workshop item, and then move it to the appropriate place. |
201 | - | |
201 | + | |
202 | - | Download the item with: |
202 | + | Download the item with: |
203 | - | |
203 | + | |
204 | - | ./steamcmd.sh +login anonymous +workshop_download_item (appid) (workshop_id) +quit |
204 | + | ./steamcmd.sh +login anonymous +workshop_download_item (appid) (workshop_id) +quit |
205 | - | |
205 | + | |
206 | - | and then copy the steamapps/workshop folder into the steamapps folder where the server is installed. This will |
206 | + | and then copy the steamapps/workshop folder into the steamapps folder where the server is installed. This will |
207 | - | cause the game to see the item as cached, and not attempt to download it. |
207 | + | cause the game to see the item as cached, and not attempt to download it. |
208 | - | |
208 | + | |
209 | - | |
209 | + | |
210 | - | 8. Using external remote console |
210 | + | 8. Using external remote console |
211 | - | -------------------------------- |
211 | + | -------------------------------- |
212 | - | |
212 | + | |
213 | - | The remote console works differently than previous titles. Rcon is disabled by default, and can be configured using |
213 | + | The remote console works differently than previous titles. Rcon is disabled by default, and can be configured using |
214 | - | "zmq_rcon_enable", "zmq_rcon_ip". "zmq_rcon_port" and "zmq_rcon_password". Unlike previous titles, rcon will bind to |
214 | + | "zmq_rcon_enable", "zmq_rcon_ip". "zmq_rcon_port" and "zmq_rcon_password". Unlike previous titles, rcon will bind to |
215 | - | the TCP port you specify, not UDP. The socket itself is a ZeroMQ socket, using CZMQ for authentication. Included with |
215 | + | the TCP port you specify, not UDP. The socket itself is a ZeroMQ socket, using CZMQ for authentication. Included with |
216 | - | the server is a simple rcon client, zmq_rcon.py, written for Python 2.x. You will need to install Python CZMQ, which |
216 | + | the server is a simple rcon client, zmq_rcon.py, written for Python 2.x. You will need to install Python CZMQ, which |
217 | - | can most easily be done through "pip install czmq" if pip is available on your system. To run the script, use something |
217 | + | can most easily be done through "pip install czmq" if pip is available on your system. To run the script, use something |
218 | - | similar to the following: |
218 | + | similar to the following: |
219 | - | |
219 | + | |
220 | - | python zmq_rcon.py --host=tcp://127.0.0.1:27961 --password=mypass |
220 | + | python zmq_rcon.py --host=tcp://127.0.0.1:27961 --password=mypass |
221 | - | |
221 | + | |
222 | - | |
222 | + | |
223 | - | 9. Using external stats |
223 | + | 9. Using external stats |
224 | - | ----------------------- |
224 | + | ----------------------- |
225 | - | |
225 | + | |
226 | - | Quake Live also exposes a ZeroMQ publish/subscribe socket that will emit a great amount of detail about the ongoing |
226 | + | Quake Live also exposes a ZeroMQ publish/subscribe socket that will emit a great amount of detail about the ongoing |
227 | - | match, live as events occur. A basic script is included, zmq_stats_verbose.py, but it will simply print the stats events |
227 | + | match, live as events occur. A basic script is included, zmq_stats_verbose.py, but it will simply print the stats events |
228 | - | to screen as an example. All events emitted by the engine should be valid JSON. Any additional functionality and |
228 | + | to screen as an example. All events emitted by the engine should be valid JSON. Any additional functionality and |
229 | storing of stats is left as an exercise to the reader. |