A competitive 5v5 config is not just \"public server with friendly fire on.\" It is a specific, deliberately austere ruleset — fixed economy timings, no auto-balancing, restricted spectating, friendly fire enabled with team-kill punishment removed — loaded on demand for a match and unloaded afterward. This walks through the cvars that matter, what belongs in the config versus a match plugin, and how to keep it from bleeding into your public settings.
1. Keep the match config separate
Do not put competitive values in server.cfg. Create a dedicated file, cstrike/match.cfg, that you exec when a match starts and that a public config overwrites when it ends. That way your public server.cfg is the resting state and the match settings are a temporary overlay:
// in-game / rcon exec match.cfg // switch to competitive rules // ... play the match ... exec public.cfg // restore public rules
2. The core round and economy cvars
These are the values ESL-style 5on5 has used for years. Units matter — roundtime and buytime are in minutes (see the mp_ cvars reference):
// match.cfg -- round & economy mp_freezetime 6 mp_roundtime 1.75 // 1:45, standard for de_ maps mp_startmoney 800 mp_buytime 0.25 // 15 seconds mp_c4timer 35 // classic competitive fuse mp_maxrounds 0 // the match plugin controls score, not this mp_timelimit 0 // no time-based map change during a match
3. Fair-play and team cvars
Competitive turns off the conveniences a public server wants. Friendly fire is on, but automatic team-kill punishment is off because the referee/admin handles it; teams are never auto-shuffled:
// match.cfg -- fair play mp_friendlyfire 1 mp_tkpunish 0 // FF on, but no auto-punish -- admins decide mp_autoteambalance 0 // never move players between teams mp_limitteams 0 // 5v5 is set by the players, not the engine mp_hostagepenalty 0 // irrelevant on de_ maps; avoid accidental kicks mp_forcecamera 2 // dead players locked -- anti-ghosting mp_fadetoblack 0 // most leagues play with this off; agree beforehand
mp_forcecamera 2 (also seen as mp_forcechasecam on some builds) is the anti-ghosting rule: a dead player cannot free-fly the map and call positions. Confirm the exact cvar name on your build — type it in console with no argument and see if it echoes a value.
4. Movement, sound and rates
Competitive play wants full information and headroom on the network. Keep footsteps and flashlight on, standard movement speed, and generous rates so nobody is rate-limited during a clutch:
// match.cfg -- feel & network mp_footsteps 1 mp_flashlight 1 sv_maxspeed 320 sv_maxrate 25000 sv_minrate 20000 sv_maxupdaterate 101 sv_minupdaterate 60 sv_cheats 0 mp_logdetail 3 // log attacks + kills for review mp_logmessages 1
The update rate ceiling is only real if your server FPS can sustain it — promising 101 on a 60 FPS box just produces choke. See the sys_ticrate truth and the essential cvars list.
5. Let a match plugin run the actual match
The config sets the rules; it does not run the match. The score, the MR15 half-switch, the knife round for side selection, the ready-up (.ready/.live), warmup, and the score printout are all the job of a match/PUG plugin. Do not try to reproduce that with mp_maxrounds alone — you will get a map change mid-match at the worst moment. Install a maintained match plugin and let it own the flow; the CSB Match Manager handles ready-up, knife round, half-switch and score for a standard 5v5. On ReGameDLL these plugins are more reliable because round-end and money hooks are exposed cleanly through ReAPI.
Common errors
- Map changes in the middle of a match — you left
mp_maxroundsormp_timelimitnon-zero and it fired. Zero both and let the match plugin end the map. - Buytime is way too long —
mp_buytime 15is 15 minutes. Use0.25for 15 seconds. - Dead players calling positions —
mp_forcecamerais 0. Set it to lock spectating; confirm the cvar name your build uses. - Teams get shuffled at halftime —
mp_autoteambalance 1is still on from the public config. The match overlay must set it to 0. - Public settings never came back — you execed
match.cfgbut never restored the public config. Keep apublic.cfgand exec it (or change the map) after the match. - A cvar \"does not exist\" — it is a ReGameDLL-only cvar and you are on stock CS. Install ReGameDLL or drop that line.
Verification
Load the config and read the key values back before anyone joins:
exec match.cfg mp_freezetime mp_roundtime mp_friendlyfire mp_autoteambalance
Each should echo the competitive value. Then run a knife round through your match plugin and confirm the side switch and score are correct at MR15. Finally, exec public.cfg and verify friendly fire and auto-balance return to your public defaults — the overlay is only safe if it cleanly reverts.









