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 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 (see the wiki)
- 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 (see the wiki)
This is still very-much a work in progress. It may have bugs. See the issues section for bugs or things that are yet-to-be-done. Pull requests are welcome.
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.7 and should work on sourcemod 1.7 or later.
Extract the download archive into the csgo/ directory on the server. The only required file is actually just the get5.smx
plugin binary in the addons/sourcemod/plugins
directory.
If you need more help, see the step-by-step guide in the wiki.
!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
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 current players on the server on the current map, 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 matchmatch_title
: wrapper on themp_teammatchstat_txt
cvar, but can use {MAPNUMBER} and {MAXMAPS} as variables that get replaced with their integer valuesmaps_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)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
section is used for spectators)team1
: see the team schema belowteam2
: see the team schema below
name
: team name (wrapsmp_teamname_1
and is displayed often in chat messages)flag
: team flag (2 letter country code, wrapsmp_teamflag_1
)logo
team logo (wrapsmp_teamlogo_1
)matchtext
: warpsmp_teammatchstat_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 0
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.
get5_autoload_config
: a config file to autoload on map starts if no match is loadedget5_check_auths
: whether the steamids from a "players" section are used to force players onto teams (default 1)get5_demo_name_format
: format to name demo files in (default{MATCHID}_map{MAPNUMBER}_{MAPNAME}
)get5_event_log_format
: format to write get5 event logs to (defaultlogs/get5_match{MATCHID}.log
)get5_kick_when_no_match_loaded
: whether to kick all clients if no match is loadedget5_last_backup_file
: last match backup file get5 wrote in the current seriesget5_live_cfg
: config file executed when the game goes liveget5_live_countdown_time
: number of seconds used to count down when a match is going liveget5_max_backup_age
: number of seconds before a get5 backup file is automatically deleted, 0 to disableget5_max_pauses
: maximum number of pauses a team can use, 0=unlimitedget5_max_pause_time
: maximum number of time the game can spend paused by a team, 0=unlimitedget5_reset_pauses_each_half
: whether pause limits are reset each halftime period (default 1)get5_pausing_enabled
: whether pausing (!pause command) is enabledget5_stats_path_format
: path where stats are output each map end if setget5_stop_command_enabled
: whether the !stop command is enabledget5_time_to_start
: time (in seconds_ teams have to ready up before forfeiting the match, 0=unlimitedget5_time_to_make_knife_decision
: time (in seconds) a team has to make a !stay/!swap decision after winning knife round, 0=unlimitedget5_time_format
: time format string (default"%Y-%m-%d_%H
), only affects if a {TIME} tag is used in other file-name formatting cvarsget5_wait_for_spec_ready
: whether to wait for spectators (if there are any) to ready up to beginget5_warmup_cfg
: config file executed in warmup periods