From 1f925bd67044085da3f58ec7c5b49b724e68bcbf Mon Sep 17 00:00:00 2001 From: Daniel Gibbs Date: Sun, 19 Feb 2017 16:07:53 +0000 Subject: [PATCH] Updated Quake Live Config --- QuakeLive/server.cfg | 251 +++++++++++++++++++++++++++--------- QuakeLive/server.cfg.orig | 103 +++++++++++++++ QuakeLive/server_readme.txt | 228 ++++++++++++++++++++++++++++++++ 3 files changed, 523 insertions(+), 59 deletions(-) create mode 100644 QuakeLive/server.cfg.orig create mode 100644 QuakeLive/server_readme.txt diff --git a/QuakeLive/server.cfg b/QuakeLive/server.cfg index 5c8e461..3221f85 100644 --- a/QuakeLive/server.cfg +++ b/QuakeLive/server.cfg @@ -1,32 +1,114 @@ +// **************************************************************************** +// * +// Quake Live - server.cfg * +// Version 090217 * +// * +// **************************************************************************** + // Servers have the ability to run multiple gametypes, known as "factories." You should not add gameplay related // cvars in the server config: they may get overwritten by the factory. For creating your own sets of gameplay rules, // create a file ending in ".factories" inside baseq3/scripts, and refer to "Creating custom gametypes" in the // server_readme.txt file. +// This config will override command line options. // Be aware that factories can override any cvar, including ones specified in this config file. +// ............................. Basic Settings ............................. // + +// Hostname for server. set sv_hostname "SERVERNAME" -set sv_tags "" // Comma delimited field of server tags to show in server browser. - // Will automatically include gametype and some gameplay modifications. - // ex. "crouch slide, classic, space" -set sv_mapPoolFile "mappool.txt" // Map pool that the server will use. See default mapcycle.txt for format. - // Built in map pools: mappool.txt, mappool_ca.txt, mappool_ctf.txt, mappool_duel.txt, - // mappool_ffa.txt, mappool_race.txt, mappool_tdm.txt -set g_accessFile "access.txt" // Used to determine which 64-bit Steam IDs have admin access, or are banned. - -set sv_maxClients "16" // How many players can connect at once. -set g_password "" // Set a server-wide password, and stop all users from connecting without it. -set sv_privateClients "0" // Reserve slots that can be used with sv_privatePassword. -set sv_privatePassword "" // Password to use in conjunction with sv_privateClients. -set com_hunkMegs "60" // May need to be increased for additional players. - -// Flood protection will increment everytime the user sends a client command, ex. dropweapon, changing name, color -// model, or chatting. Set g_floodprot_maxcount to 0 to disable completely, but this will allow uncontrolled spam. -set sv_floodprotect "10" // Kick the player when they reach x commands, decreases by 1 every second -set g_floodprot_maxcount "10" // Kick the player when their userinfo flood counter reaches this level. -set g_floodprot_decay "1000" // Decrease the userinfo flood counter by 1 this often, in milliseconds. - -// Add the below values for which callvotes should be DISABLED: + +// Server password - for private servers. +set g_password "" + +// Server tags - Tags show up on the in-game server browser. This helps +// users filter servers. +// e.g "crouch slide, classic, space, custom" +// example: sv_tags "custom, classic" +set sv_tags "" + +// ............................... Map Cycles ............................... // + +// info: The .txt file used to cycle the maps on servers. +// There are several predefined mapcycles available that are listed below. +// You can also create your own custom mapcycle. +// "mappool.txt" - all maps +// "mappool_ca.txt" - Clan Arena +// "mappool_ctf.txt" - Capture the Flag +// "mappool_duel.txt" - Duel +// "mappool_ffa.txt" - Free for All +// "mappool_race.txt" - Race +// "mappool_tdm.txt" - Team Death Match +set sv_mapPoolFile "mappool.txt" + +// Default map +// Random Map - startRandomMap +// Specific map (factory is required) - map campgrounds ffa +// Default: set serverstartup "startRandomMap" +set serverstartup "startRandomMap" + +// ............................ Client Settings ............................. // + +// Number of player slots available. +// Default: set sv_maxClients "16" +set sv_maxClients "16" + +// Reserved slots, requires sv_privatePassword. +// Default: set sv_privateClients "0" +set sv_privateClients "0" + +// Reserved slots password. +// Default: set sv_privatePassword "" +set sv_privatePassword "" + +// ............................ Flood Protection ............................ // + +// Flood protection will increment everytime the user sends a client command. +// Excluding: dropweapon, changing name, color, model, or chatting. +// Set g_floodprot_maxcount to 0 to disable flood protection, but this not reccomended. + +// Kick a player when their userinfo flood counter reaches this level. +// Default: set g_floodprot_maxcount "10" +// Disable: set g_floodprot_maxcount "0" +set g_floodprot_maxcount "10" + +// Kick a player when they reach X commands, decreases by 1 every second +// Default: set sv_floodprotect "10" +set sv_floodprotect "10" + +// Decrease the userinfo flood counter by 1 this often, in milliseconds. +// Default: set g_floodprot_decay "1000" +set g_floodprot_decay "1000" + +// Used to determine which 64-bit Steam IDs have admin access, or are banned. +set g_accessFile "access.txt" + +// ................................. Voting ................................. // + +// Allow Voting. +// 1 - enabled +// 0 - disabled +// Default: set g_allowVote "1" +set g_allowVote "1" + +// Delay allowing votes for X milliseconds after map load. +// Default: set g_voteDelay "0" +set g_voteDelay "0" + +// Limit users to X votes per map. +// 0 - no limit +// Default: set g_voteLimit "0" +set g_voteLimit "0" + +// Only allow votes from mid game +// default - set g_allowVoteMidGame "0" +set g_allowVoteMidGame "0" + +// Allow spectators to call votes +// Default: set g_allowSpecVote "0" +set g_allowSpecVote "0" + +// Add together the below values for which callvotes should be DISABLED: // map 1 // map_restart 2 // nextmap 4 @@ -41,63 +123,114 @@ set g_floodprot_decay "1000" // Decrease the userinfo flood counter by 1 this // end-game voting 2048 // ammo (global) 4096 // timers (item) 8192 +// e.g to disable map and nextmap: 1+4=5 +// +// Default - set g_voteFlags "0" set g_voteFlags "0" -set g_allowVote "1" // Turn off all votes -set g_voteDelay "0" // Delay allowing votes for x milliseconds after map load. -set g_voteLimit "0" // Limit users to x votes per map. -set g_allowVoteMidGame "0" // Don't allow callvotes once the map has started -set g_allowSpecVote "0" // Allow spectators to call votes - -set sv_warmupReadyPercentage "0.51" // Ratio of players that must be ready before the match starts. -set g_warmupDelay "15" // Wait x seconds before allowing match to start to allow all players to connect. -set g_warmupReadyDelay "0" // Force the game to start after x seconds after someone readies up. -set g_warmupReadyDelayAction "1" // Set to 1 to force players to spectator after g_warmupReady Delay, 2 to force ready up. - -set g_inactivity "0" // Kick players who are inactive for x amount of seconds. -set g_alltalk "0" // 0: Limit voice comms to teams during match - // 1: Allow all players to talk to each other always - // 2: 1+ send back your own voice to yourself for testing - -// System settings - -// Uncomment and set below to use (server.cfg will override commandline!) -// set net_strict "1" // Quit out immediately if we can't bind the IP and port. -// set net_ip "" // Which IP to bind to. Blank will bind to all interfaces. -// set net_port "55555" // Which UDP port to bind to. Blank will start at 27960 and keep going up, if net_strict is 0. -set sv_serverType "2" // 0 = Offline, 1 = LAN, 2 = Internet -set sv_master "1" // Whether the server should respond to queries. Disable this to stop server from appearing in browser. - // (This will affect the LAN browser!) - -set sv_fps "40" // Change how many frames the server runs per second. WARNING: Has not been tested extensively, and - // will have a direct impact on CPU and network usage! + +// ....................... Time Limits/Round Settings ....................... // + +// Ratio of players that must be ready before the match starts. +// Default: set sv_warmupReadyPercentage "0.51" +set sv_warmupReadyPercentage "0.51" + +// Wait x seconds before allowing match to start to allow all players to connect. +// Default: set g_warmupDelay "15" +set g_warmupDelay "15" + +// Force the game to start after x seconds after someone readies up. +// Default: set g_warmupReadyDelay "0" +set g_warmupReadyDelay "0" + +// Set to 1 to force players to spectator after g_warmupReady Delay, 2 to force ready up. +// Default: set g_warmupReadyDelayAction "1" +set g_warmupReadyDelayAction "1" + +// Kick players who are inactive for X amount of seconds. +// 0 - disabled +// Default: set g_inactivity "0" +set g_inactivity "0" + +// ............................. Communication ............................. // + +// Voice Comms +// 0 - Limit voice comms to teams only during the match. +// 1 - Allow all players to talk to each other. +// Default: set g_alltalk "0" +set g_alltalk "0" + +// ................................ Network ................................ // + +// Which IP to bind to. Blank will bind to all interfaces. +set net_ip "" + +// Server port (UDP) +// Blank - Will increment until finds an empty unbound. net_strict must be 0 +// Default: set net_port "27960" +set net_port "27960" + +// Quit out immediately if we can't bind the IP and port. +// Default: set net_strict "1" +set net_strict "1" + +// Server Type +// 0 - Offline +// 1 - LAN +// 2 - Internet +// Default: set sv_serverType "2" +set sv_serverType "2" + +// ................................ System Settings ................................ // + +// Show in server browser and respond to queries. This will also affect the LAN Broswer +// Default: set sv_master "1" +set sv_master "1" + +// Change how many frames the server runs per second. WARNING: Has not been tested extensively, and will have a direct impact on CPU and network usage! +set sv_fps "40" // Exit the server if idle (not running a map) for a specified time. This will allow it to automatically restart // in the case of a game error or other problem. A value of "1" is recommended, but not default, when you are running // the server detached from the terminal. - set sv_idleExit "120" +// ................................ Remote Admin ................................ // + // Enable remote console, provided through ZeroMQ. See zmq_rcon.py for simple client. // ZMQ rcon binds on a separate port from the game server, and uses TCP. It must differ from the stats port if used. // Rcon can not be enabled or disabled after launch, nor can the IP and port change. Password can, however. -// Uncomment and set below to use (server.cfg will override commandline!) +// Enable rcon +// Default: set zmq_rcon_enable "1" set zmq_rcon_enable "1" -// set zmq_rcon_ip "" -// set zmq_rcon_port "28960" + +// Which IP to bind to. Blank will bind to all interfaces. +set zmq_rcon_ip "" + +// Rcon port +// default: set zmq_rcon_port "28960" +set zmq_rcon_port "28960" + +// Rcon password set zmq_rcon_password "ADMINPASSWORD" // Enable ZeroMQ stats socket. This will not be much use without a client listening. // See zmq_stats_verbose.py for example connect and stats printing. // If not specified, the stats socket will default to the same IP and port as the game server, but on TCP. -// Uncomment and set below to use (server.cfg will override commandline!) -// set zmq_stats_enable "1" +// Enable ZeroMQ stats +set zmq_stats_enable "0" + +// Which IP to bind to. Blank will bind to all interfaces. // set zmq_stats_ip "" + +// ZeroMQ stats port (TCP) // set zmq_stats_port "" + +// ZeroMQ stats password // set zmq_stats_password "" -// The server will run serverstartup when it finishes initializing, so start a random map from the map pool. -set serverstartup "startRandomMap" -// Or, start a map of your choosing (factory is required) -// set serverstartup "map campgrounds ffa" \ No newline at end of file +// .................................... Misc .................................... // + +// May need to be increased for additional players. +set com_hunkMegs "60" \ No newline at end of file diff --git a/QuakeLive/server.cfg.orig b/QuakeLive/server.cfg.orig new file mode 100644 index 0000000..5c8e461 --- /dev/null +++ b/QuakeLive/server.cfg.orig @@ -0,0 +1,103 @@ +// Servers have the ability to run multiple gametypes, known as "factories." You should not add gameplay related +// cvars in the server config: they may get overwritten by the factory. For creating your own sets of gameplay rules, +// create a file ending in ".factories" inside baseq3/scripts, and refer to "Creating custom gametypes" in the +// server_readme.txt file. + +// Be aware that factories can override any cvar, including ones specified in this config file. + +set sv_hostname "SERVERNAME" +set sv_tags "" // Comma delimited field of server tags to show in server browser. + // Will automatically include gametype and some gameplay modifications. + // ex. "crouch slide, classic, space" +set sv_mapPoolFile "mappool.txt" // Map pool that the server will use. See default mapcycle.txt for format. + // Built in map pools: mappool.txt, mappool_ca.txt, mappool_ctf.txt, mappool_duel.txt, + // mappool_ffa.txt, mappool_race.txt, mappool_tdm.txt +set g_accessFile "access.txt" // Used to determine which 64-bit Steam IDs have admin access, or are banned. + +set sv_maxClients "16" // How many players can connect at once. +set g_password "" // Set a server-wide password, and stop all users from connecting without it. +set sv_privateClients "0" // Reserve slots that can be used with sv_privatePassword. +set sv_privatePassword "" // Password to use in conjunction with sv_privateClients. +set com_hunkMegs "60" // May need to be increased for additional players. + +// Flood protection will increment everytime the user sends a client command, ex. dropweapon, changing name, color +// model, or chatting. Set g_floodprot_maxcount to 0 to disable completely, but this will allow uncontrolled spam. +set sv_floodprotect "10" // Kick the player when they reach x commands, decreases by 1 every second +set g_floodprot_maxcount "10" // Kick the player when their userinfo flood counter reaches this level. +set g_floodprot_decay "1000" // Decrease the userinfo flood counter by 1 this often, in milliseconds. + +// Add the below values for which callvotes should be DISABLED: +// map 1 +// map_restart 2 +// nextmap 4 +// gametype 8 (ex: "/callvote map campgrounds" will be allowed, but "/callvote map campgrounds ca" will fail) +// kick 16 +// timelimit 32 +// fraglimit 64 +// shuffle 128 +// teamsize 256 +// cointoss/random 512 +// loadouts 1024 +// end-game voting 2048 +// ammo (global) 4096 +// timers (item) 8192 +set g_voteFlags "0" +set g_allowVote "1" // Turn off all votes +set g_voteDelay "0" // Delay allowing votes for x milliseconds after map load. +set g_voteLimit "0" // Limit users to x votes per map. +set g_allowVoteMidGame "0" // Don't allow callvotes once the map has started +set g_allowSpecVote "0" // Allow spectators to call votes + +set sv_warmupReadyPercentage "0.51" // Ratio of players that must be ready before the match starts. +set g_warmupDelay "15" // Wait x seconds before allowing match to start to allow all players to connect. +set g_warmupReadyDelay "0" // Force the game to start after x seconds after someone readies up. +set g_warmupReadyDelayAction "1" // Set to 1 to force players to spectator after g_warmupReady Delay, 2 to force ready up. + +set g_inactivity "0" // Kick players who are inactive for x amount of seconds. +set g_alltalk "0" // 0: Limit voice comms to teams during match + // 1: Allow all players to talk to each other always + // 2: 1+ send back your own voice to yourself for testing + +// System settings + +// Uncomment and set below to use (server.cfg will override commandline!) +// set net_strict "1" // Quit out immediately if we can't bind the IP and port. +// set net_ip "" // Which IP to bind to. Blank will bind to all interfaces. +// set net_port "55555" // Which UDP port to bind to. Blank will start at 27960 and keep going up, if net_strict is 0. +set sv_serverType "2" // 0 = Offline, 1 = LAN, 2 = Internet +set sv_master "1" // Whether the server should respond to queries. Disable this to stop server from appearing in browser. + // (This will affect the LAN browser!) + +set sv_fps "40" // Change how many frames the server runs per second. WARNING: Has not been tested extensively, and + // will have a direct impact on CPU and network usage! + +// Exit the server if idle (not running a map) for a specified time. This will allow it to automatically restart +// in the case of a game error or other problem. A value of "1" is recommended, but not default, when you are running +// the server detached from the terminal. + +set sv_idleExit "120" + +// Enable remote console, provided through ZeroMQ. See zmq_rcon.py for simple client. +// ZMQ rcon binds on a separate port from the game server, and uses TCP. It must differ from the stats port if used. +// Rcon can not be enabled or disabled after launch, nor can the IP and port change. Password can, however. + +// Uncomment and set below to use (server.cfg will override commandline!) +set zmq_rcon_enable "1" +// set zmq_rcon_ip "" +// set zmq_rcon_port "28960" +set zmq_rcon_password "ADMINPASSWORD" + +// Enable ZeroMQ stats socket. This will not be much use without a client listening. +// See zmq_stats_verbose.py for example connect and stats printing. +// If not specified, the stats socket will default to the same IP and port as the game server, but on TCP. + +// Uncomment and set below to use (server.cfg will override commandline!) +// set zmq_stats_enable "1" +// set zmq_stats_ip "" +// set zmq_stats_port "" +// set zmq_stats_password "" + +// The server will run serverstartup when it finishes initializing, so start a random map from the map pool. +set serverstartup "startRandomMap" +// Or, start a map of your choosing (factory is required) +// set serverstartup "map campgrounds ffa" \ No newline at end of file diff --git a/QuakeLive/server_readme.txt b/QuakeLive/server_readme.txt new file mode 100644 index 0000000..39a5a04 --- /dev/null +++ b/QuakeLive/server_readme.txt @@ -0,0 +1,228 @@ +=========================== +QUAKE LIVE DEDICATED SERVER +=========================== + +1. Requirements +2. Updating and Launching +3. Configuring your server +4. Managing server access list +5. Setting up a map pool +6. Creating custom gametypes (factories) +7. Using Steam Workshop +8. Using external remote console +9. Using external stats + +1. Requirements +--------------- + +The dedicated server is available in both 32-bit and 64-bit versions, and should run on any modern machine that can +run the Steam client. We recommend Ubuntu Server 14.04. + +To run the 32-bit version of the server on 64-bit installs, you will need to install 32-bit versions of all libraries. +See your distribution's instructions on how to perform this. + + +2. Updating and Launching +------------------------- + +Install and update the server through SteamCMD, using a command similar to below. + +./steamcmd.sh +login anonymous +force_install_dir ./steamapps/common/qlds/ +app_update 349090 +quit + +Please see the Valve Developer Community for full SteamCMD options: https://developer.valvesoftware.com/wiki/SteamCMD + +Run the server using the provided run_server_x86.sh and run_server_x64.sh scripts. This will set the proper working +directory and LD_LIBRARY_PATH to the correct libsteam_api.so. You can add command line options at will. + +A standard server or VPS can host many instances of Quake Live, so you may wish to run multiple servers. We recommend +managing them through a third party process control system. Below is a sample script that will take one parameter: a +number starting at 0. This will launch a server with a unique hostname, port, rcon port, and stats port. This is a +great way to quickly run a small cluster of servers on a single box. + +You should change the path to reflect where you have installed the game. Never run the server under root. + + #!/bin/bash + gameport=`expr $1 + 27960` + rconport=`expr $1 + 28960` + servernum=`expr $1 + 1` + + exec /home/user/steamcmd/steamapps/common/qlds/run_server_x86.sh \ + +set net_strict 1 \ + +set net_port $gameport \ + +set sv_hostname "My Quake Live Server #$servernum" \ + +set fs_homepath /home/user/.quakelive/$gameport \ + +set zmq_rcon_enable 1 \ + +set zmq_rcon_password "mypass" \ + +set zmq_rcon_port $rconport \ + +set zmq_stats_enable 1 \ + +set zmq_stats_password "mypass" \ + +set zmq_stats_port $gameport + +This can be combined with a process control system like supervisord in order to manage and launch any number of +instances. Note that supervisord is third party software, and the below may change at any point. We will not support +issues involving third party software. + +You will need to replace "user" with the user name of the dedicated server. + + [program:quakelive] + command=/home/user/steamcmd/steamapps/common/qlds/launch.sh %(process_num)s + user=user + process_name=qzeroded_%(process_num)s + numprocs=10 + autorestart=true + +In conjunction with the above launch script, this will give you 10 server instances, numbered #1 to #10, starting +at port 27960, with rcon starting at port 28960. They will automatically restart if crashed. For information on using +rcon, please see later in this document. + + +3. Configuring your server +-------------------------- + +Configure your server through server.cfg. You may wish to make a copy of this file and place it into your fs_homepath, +as updates to the default server.cfg may revert your changes to default. The default server.cfg is heavily commented, +so please see that for further information. + +There is no need to specify a map on the command line or server.cfg. The server will automatically execute the variable +"serverstartup" when the server has completed initialization. By default, this will launch a random map selected +from the server's map pool. Please see the below section on configuring map pools. + +Quake Live servers are designed to handle multiple gametypes, and multiple gametype variations on one server. This +means that your server can switch from Free For All to Capture the Flag to Clan Arena, to even variants of gametypes, +such as InstaGib FFA, and custom variations that provide more traditional competitive settings. + +Because of this, you should generally not place gameplay settings inside server.cfg. Although the server will attempt +to restore all old settings after switching gametypes, these factory settings will override settings in server.cfg. + +See the below section on creating custom factories to setup your own match rules. + + +4. Managing server access list +------------------------------ + +Quake Live reads and stores to a persistent text file on disk information about who has access to server moderation, +server administration, and ban list. By default, this is in the file access.txt, and can be changed through the +console variable "g_accessFile" + +Only edit this file on disk while all servers are stopped, as the game will write out the current access list before +each map load. In order to have access to your server, you will need to add yourself as an admin. Obtain your +64-bit Steam ID by connecting to any match, and typing /players in the console. Put it in access.txt in the +given format. Example: + +76561198072786081|admin + +Save the file, and start the server. You can then use /mod, /admin, /demote, /ban and /unban commands to manage the +access list while the server is running. + + +5. Setting up a map pool +------------------------ + +The server's map pool accepts a map, and a factory, delimited with a |. See the default mappool.txt for an example. +A different file can be specified through "sv_mapPoolFile" + +If you wish to use your own custom factories, you can specify them in here so that your custom factory will appear +in the three map voting system at the end of the game. + +If you wish to lock your server to one gametype, then make sure your map pool only contains maps in that factory, +then add 8 to g_voteFlags to stop "callvote map" from accepting the optional factory argument. This is not +usually needed though; we recommend allowing your players to play and callvote whatever gametypes they wish to +play on your servers, but it is often not bad to restrict Duel servers due to the low player counts. + + +6. Creating custom gametypes (factories) +---------------------------------------- + +Setting up a custom factory is a bit more involved than the past solutions of editing config files, but it allows for +more flexibility in match rules, while ensuring that settings don't leak over into future matches. By default, +Quake Live ships with base rules for every gametype, and a few variations. Other factories may be available on Steam +Workshop. + +To define your own gametype factory, create a "scripts" folder inside your baseq3 directory, and name the file with +anything that ends in ".factories" + +Example: baseq3/scripts/mynewgametype.factories + +This file is a JSON file that contains either a JSON array with multiple factories, or a JSON object containing a +single factory. For example, here is the built in InstaGib FFA factory: + + { + "id": "iffa", + "title": "Instagib FFA", + "author": "id Software", + "description": "Railgun and Gauntlet only. One shot, one kill.", + "basegt": "ffa", + "cvars": { + "g_dropCmds": "0", + "g_spawnArmor": "0", + "dmflags": "28", + "g_instagib": "1", + "g_startingWeapons": "65", + "timelimit": "15", + "g_allowKill": "0", + "fraglimit": "50", + "g_overtime": "0", + "g_loadout": "0" + } + } + +All fields should be present and of the correct type. + +"id" is how you will refer to the factory inside a map pool or a callvote, and must be a string. +"title", "author" and "description" are all strings containing info about the factory, and can be seen in Start Match +"basegt" is a string of the base gametype it should apply the settings on. Valid values for "basegt" are: + ffa, duel, race, tdm, ca, ctf, oneflag, har, ft, dom, ad, rr +"cvars" is an object containing key value pairs of the cvar names and values to set. + +If a factory is invalid, the reason why will be printed in the console during startup, and the factory will not be +available for play. + + +7. Using Steam Workshop +----------------------- + +Quake Live will only autodownload custom content that has been uploaded to Steam Workshop. The legacy HTTP and UDP +download functions have been removed. If you want your players to be able to play custom content on your servers, +you must use Steam Workshop. + +To add a workshop item to your server, add its item ID to workshop.txt. The item ID can be obtained from the URL +when browsing the Steam Workshop in your browser. + +Before the server finishes initializing, it will attempt to download all items in workshop.txt, such that custom +content can be included in your map pool. The progress of this process will be printed to the server console, and if +any download fails, it will be skipped and the server will continue to start. + +To upload content, you will need to use SteamCMD's workshop_build_item command. Please refer to the Steam documentation +on how to upload Workshop content. + +Occasionally, the Workshop startup process will fail, usually due to temporarily unavailable content server. Some users +have reported that switching from the 64-bit dedicated to the 32-bit dedicated binary will fix downloads. In these +cases, you can use SteamCMD to download the workshop item, and then move it to the appropriate place. + +Download the item with: + +./steamcmd.sh +login anonymous +workshop_download_item (appid) (workshop_id) +quit + +and then copy the steamapps/workshop folder into the steamapps folder where the server is installed. This will +cause the game to see the item as cached, and not attempt to download it. + + +8. Using external remote console +-------------------------------- + +The remote console works differently than previous titles. Rcon is disabled by default, and can be configured using +"zmq_rcon_enable", "zmq_rcon_ip". "zmq_rcon_port" and "zmq_rcon_password". Unlike previous titles, rcon will bind to +the TCP port you specify, not UDP. The socket itself is a ZeroMQ socket, using CZMQ for authentication. Included with +the server is a simple rcon client, zmq_rcon.py, written for Python 2.x. You will need to install Python CZMQ, which +can most easily be done through "pip install czmq" if pip is available on your system. To run the script, use something +similar to the following: + +python zmq_rcon.py --host=tcp://127.0.0.1:27961 --password=mypass + + +9. Using external stats +----------------------- + +Quake Live also exposes a ZeroMQ publish/subscribe socket that will emit a great amount of detail about the ongoing +match, live as events occur. A basic script is included, zmq_stats_verbose.py, but it will simply print the stats events +to screen as an example. All events emitted by the engine should be valid JSON. Any additional functionality and