Get5 is a standalone SourceMod plugin for CS:GO servers for running matches. It is originally based on pugsetup and is inspired by eBot.
The core idea behind its use is all match details being fully defined in a single config file. Check out this example config. Its main target use-case is tournaments and leagues (online or LAN). All that is required of the server-admins is to load match config file to the server and the match should run without any more manual actions from the admins. This plugin is not invasive - most of its functionality is built to work within how the CS:GO server normally operates, not replacing its functionality. No, it is not recommended for your new matchmaking service. It is intended for competitive play, not pickup games.
It is meant to be relatively easy to use for tournament admins.
Features of this include:
- Locking players to the correct team by their Steam ID
- In-game map veto support from the match's maplist
- Support for multi-map series (Bo1, Bo2, Bo3, Bo5, etc.)
- Warmup and !ready system each team
- Automatic GOTV demo recording
- Advanced backup system built on top of valve's backup system
- Knifing for sides
- Pausing support
- Coaching support
- Automatically executing match config files
- Automatically setting team names/logos/match text values for spectator/GOTV clients
- Stats collection and optional MySQL result/stats upload
- Allows lightweight usage for scrims
- Has its own event logging system
You must have sourcemod installed on the game server. You can download it at http://www.sourcemod.net/downloads.php. Note that sourcemod also requires MetaMod:Source to be on the server. You can download it at http://www.sourcemm.net/downloads.
Download a release package from the releases section or a the latest development build.
Release and development builds are currently compiled against sourcemod 1.8 and should work on sourcemod 1.8 or later.
Extract the download archive into the csgo/ directory on the server. Once the plugin first loads on the server, you can edit general get5 cvars in the autogenerated cfg/sourcemod/get5.cfg
. You should also have 3 config files: cfg/get5/warmupcfg
, cfg/get5/knife.cfg
, cfg/get5/live.cfg
. These can be edited, but I recommend not blindly pasting another config in (e.g. ESL, CEVO). Configs that execute warmup commands (mp_warmup_end
, for example) will cause problems.
If you need more help, see the step-by-step guide in the wiki.
Generally admin commands will have a get5_
prefix and must be used in console. Commands intended for general player usage are created with sm_
prefixes, which means sourcemod automtically registers a !
chat version of the command. (For example: sm_ready in console is equivalent to !ready in chat)
Some client commands are available also for admin usage. For example, sm_pause and sm_unpause will force pauses if executed by the server (e.g., through rcon).
!ready
: marks a client's team as ready to begin!unready
: marks a client's team as not-ready!pause
: requests a freezetime pause!unpause
: requests an unpause, requires the other team to confirm!coach
: moves a client to coach for their team!stay
: elects to stay after a knife round win!swap
: elects to swap after a knife round win!stop
: asks to reload the last match backup file, requires other team to confirm!forceready
: force readies your team, letting your team start regardless of player numbers/whether they are ready
get5_loadmatch
: loads a match config file (JSON or keyvalues) relative from thecsgo
directoryget5_loadbackup
: loads a get5 backup fileget5_loadteam
: loads a team section from a file into a teamget5_loadmatch_url
: loads a remote (JSON formatted) match config by sending a HTTP GET to the given url, this requires either the system2 or Steamworks Extensionsget5_endmatch
: force ends the current matchget5_creatematch
: creates a Bo1 match with the current players on the server on the current mapget5_scrim
: creates a Bo1 match with the using settings fromconfigs/get5/scrim_template.cfg
get5_addplayer
: adds a steamid to a team (any format for steamid)get5_removeplayer
: removes a steamid from all teams (any format for steamid)get5_forceready
: marks all teams as readyget5_dumpstats
: dumps current match stats to a fileget5_status
: replies with JSON formatted match state (available to all clients, requires SMJansson)get5_listbackups
: lists backup files for the current matchid or a given matchid
See the example config in Valve KeyValues format or JSON format to learn how to format the configs. Both files contain equivalent match data.
Note: to use a JSON match file, you must install the SMJansson sourcemod extension on the server.
Of the below fields, only the team1
and team2
fields are actually required. Reasonable defaults are used for entires (bo3 series, 5v5, empty strings for team names, etc.)
matchid
: a string matchid used to identify the matchmaps_to_win
: number of maps needed to win the series (1 in a Bo1, 2 in a Bo3, 3 in a Bo5)bo2_series
: whether the series is a bo2 series (will ignoremaps_to_win
if it is)maplist
: list of the maps in use (an array of strings in JSON, mapnames as keys for KeyValues), you should always use an odd-sized maplistskip_veto
: whether the veto will be skipped and the maps will come from the maplist (in the order given)veto_first
: either "team1", or "team2". If not set, or set to any other value, team 1 will veto first.side_type
: either "standard", "never_knife", or "always_knife"; standard means the team that doesn't pick a map gets the side choice, never_knife means team is always on CT first, and always knife means there is always a knife roundplayers_per_team
: maximum players per team (doesn't include a coach spot, default: 5)min_players_to_ready
: minimum players a team needs to be able to ready up (default: 1)favored_percentage_team1
: wrapper formp_teamprediction_pct
favored_percentage_text
wrapper formp_teamprediction_txt
cvars
: cvars to be set during the match warmup/knife round/live statespectators
: see the team schema below (only theplayers
andname
sections are used for spectators)team1
: see the team schema belowteam2
: see the team schema below
Fields you may use, you aren't generally needed to:
match_title
: wrapper on themp_teammatchstat_txt
cvar, but can use {MAPNUMBER} and {MAXMAPS} as variables that get replaced with their integer values. In a BoX series, you probably don't want to set this since get5 automatically sets mp_teamscore cvars for the current series score, and take the place of the mp_teammatchstat cvars.
Only name
and players
are required.
name
: team name (wrapsmp_teamname_1
and is displayed often in chat messages)tag
: team tag (or short name), this replaces client "clan tags"flag
: team flag (2 letter country code, wrapsmp_teamflag_1
)logo
team logo (wrapsmp_teamlogo_1
)players
: list of Steam id's for users on the team (not used ifget5_check_auths
is set to 0)series_score
: current score in the series, this can be used to give a team a map advantage or used as a manual backup method, defaults to 0matchtext
: wrapsmp_teammatchstat_1
, you probably don't want to set this, in BoX series mp_teamscore cvars are automatically set and take the place of the mp_teammatchstat cvars
There is advice on handling these match configs in the wiki.
Instead of the above fields, you can also use "fromfile" and a filename, where that file contains the other above fields. This is available for both json and keyvalue format.s
Note: these are auto-executed on plugin start by the auto-generated (the 1st time the plugin starts) file cfg/sourcemod/get5.cfg
.
You should either set these in the above file, or in the match config's cvars
section. Note: cvars set in the cvars
section will override other settings. Please see the wiki for a full list of cvars. You may also just look at the cfg/sourcemod/get5.cfg
file directly on your server and see the cvar descriptions and values in the autogenerated file.
Please make a github issue and fill out as much information as possible. Reproducible steps and a clear version number will help tremendously!
Pull requests are welcome. Please follow the general coding formatting style as much as possible. If you're concerned about a pull request not being merged, please feel free to make an issue and inquire if the feature is worth adding.