-
MatchZy 0.8.74
StableAll checks were successfulBuild and Release / Build and Release (push) Successful in 46sreleased this
2026-08-13 13:51:01 +02:00 | 66 commits to main since this release0.8.74
August 11, 2026
- Demo recording is now verified by the file actually growing on disk, not only by the file existing. GOTV's demo writer buffers tv_delay seconds of frames in memory before anything past the header reaches disk, so the check waits out the configured GOTV delay plus a margin before it treats a static file as a dead recording. A dead recording is stopped and started again into a new file, up to three attempts.
- The demo file is watched for the whole match, not only at the start. The file size is sampled once a minute; a recording whose file stops growing for several minutes in a row (scaled to the GOTV delay) is restarted into a new demo file. The restart is silent in chat and only reported in the server log.
- A failed demo start runs tv_stoprecord before retrying, so a recording the engine considers open but stalled cannot make every retry fail with "already recording".
- The plugin now sets tv_enable_dynamic 0 when a demo recording starts and when practice mode is set up. Dynamic CSTV (a +tv_enable_dynamic 1 launch option used by some hosts) removes the CSTV bot whenever nobody is spectating, which looks like the bot being kicked and can stall a running recording.
- Practice bot commands (.bot and friends) no longer add a bot when the server has no free slot. bot_add on a full server takes the CSTV bot's slot, kicking CSTV and killing GOTV and the demo recording. The player gets a chat message that the server is full instead.
- Bots are now kicked one by one by name instead of with a bare bot_kick (practice start and end, dryrun start, match reset, and the warmup and practice cfg templates). The bare bot_kick could also take out the CSTV bot, which killed GOTV and the demo recording.
- Molotov and incendiary detonation times in practice are now tracked per projectile instead of per player, so throwing two mollies in a row prints a correct time for each. The molotov/incendiary label now comes from the grenade itself instead of the thrower's team, which mislabeled picked-up nades.
- Added matchzy_auto_team_names_enabled. Set to 0 to stop MatchZy from renaming scoreboard teams in scrim mode (the automatic team_ naming at knife/match start), keeping the game's own team names. Team names from a Get5/JSON match config are always applied regardless. Setting matchzy_ct_name or matchzy_t_name to "" never disabled the renaming, it only switched to the player-based naming; the config.cfg comments now say so.
Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
2 downloads
-
MatchZy 0.8.73
StableAll checks were successfulBuild and Release / Build and Release (push) Successful in 43sreleased this
2026-08-06 20:05:08 +02:00 | 69 commits to main since this release0.8.73
August 6, 2026
- A match that is stopped before it finishes now gets an end time written to the database. Stopping a match with .stopmatch, !endmatch, !forceend, !restart, !surrender or the Stop Match button in the admin menu left end_time empty in matchzy_stats_maps and matchzy_stats_matches, so the match stayed in the database looking like it was still running. The round score at the moment of the stop is stored as well.
- A stopped match is recognisable by having an end time but no winner. The winner column is left empty on purpose, since a match that plays out always stores a team name or "Draw" there. Rows that already have an end time are never overwritten.
- This also covers a match stopped during the knife round or side selection, which had already been given a database row at ready-up.
- config.cfg is no longer part of the release zip. Unpacking an update over an existing server could overwrite an edited config.cfg and wipe the settings on it. Servers without a config.cfg still get a complete one written on the next plugin load, and servers that have one keep it: new cvars from an update are appended to it as before.
- The release zip now contains database.json.example next to the config files, listing the MySQL fields. The real database.json is still never shipped, since overwriting it on an update would replace the server's MySQL login with the SQLite default and quietly stop stats from reaching the database.
- scrim.cfg written by the plugin now includes sv_pure, sv_pure_kick_clients and sv_pure_trace, matching the scrim.cfg that ships in the release zip.
Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
2 downloads
-
MatchZy 0.8.72
StableAll checks were successfulBuild and Release / Build and Release (push) Successful in 45sreleased this
2026-08-06 19:33:19 +02:00 | 71 commits to main since this release0.8.72
August 5, 2026
- Added matchzy_restore_auto_unpause. When enabled, the match unpauses on its own after a round restore instead of waiting for both teams to type .unpause. Default: false (unchanged behavior).
- Added matchzy_restore_unpause_delay, the countdown in seconds used by the automatic unpause. Default: 5.
- Fixed the match staying paused with no way to unpause when matchzy_pause_after_restore was disabled. The game already pauses itself on a backup load (mp_backup_restore_load_autopause), and MatchZy did not know about it, so .unpause did nothing.
- Restoring a backup that holds no round data no longer reports a successful restore and pauses the match. The admin now gets a message that nothing was restored. If the server still has the round file the game itself wrote for that round, the restore now uses it instead of refusing.
- Round backups no longer end up without round data. The backup was written at round start, at which point the game had not always finished writing its own round file yet, so the round data was missing and that round could not be restored later. The backup is now completed once the game is done.
- A round restore is now announced only once the server has actually loaded it. If the load does not take effect, the restore is reported as failed in chat and the reason is written to the server console, instead of announcing a successful restore and pausing a match that never moved.
- The round backup file is now rewritten from the stored backup every time before it is loaded. A leftover file from an earlier match with the same match id and round number was being loaded instead, which could make a restore do nothing.
- Restoring the current round with !restorecurrent, !restartround, !rr or !rrestore no longer asks for a "yes" confirmation. The command is admin-only and !restore never asked for one.
- Fixed .restorecurrent and .rrestore replying "invalid value for restore command" when typed with anything after the command name.
- The pause after a round restore is now applied after the backup has actually been loaded, instead of before it.
- A round restore now also rolls the scoreboard back: the round history above the scoreboard is cut to the restored round, and player kills, deaths, assists, damage, score and MVPs are set back to what they were in that round. Added matchzy_restore_scoreboard_stats to turn it off. Older backup files only get the round history rolled back, since they carry no player snapshot.
- The chat commands .backup, .backups, .backupmenu, .restorelast, .rl, .restorecurrent and .rrestore now work. Only the !backup and /backup forms were reaching the plugin.
- The round history above the scoreboard is now cleared when a match is ended and the server returns to warmup, instead of keeping the win icons of the finished match next to a 0-0 score.
- Fixed MatchZy writing config files into a second cfg folder on servers that have both csgo/cfg/matchzy and csgo/cfg/MatchZy. One folder is now picked consistently (an exact lowercase "matchzy" first), and the folder in use is printed in the server log at startup. If both folders exist, a warning names the one being used so the unused folder can be deleted.
- database.json is now read from the same cfg folder as the rest of the config files instead of a hardcoded lowercase path.
- Fixed MatchZy commands running twice on servers that list "." as a chat trigger in CounterStrikeSharp's configs/core.json (for example "PublicChatTrigger": [ "!", "." ]). CounterStrikeSharp already turns ".map" into the css_map console command, and MatchZy handled the same chat line a second time, so the command was carried out twice and every reply was printed twice (".map junkname" answered "Invalid map name!" twice). MatchZy now detects the trigger at startup and leaves those commands to CounterStrikeSharp. Chat commands that have no console command of their own, such as .rdy and .knife, are unaffected. Servers using the default "!" and "/" triggers see no change.
- Added matchzy_dot_trigger_dedupe to turn the above off (default: true). It only has an effect on servers that use "." as a chat trigger.
Downloads
-
Source code (ZIP)
5 downloads
-
Source code (TAR.GZ)
5 downloads
-
MatchZy 0.8.71
StableAll checks were successfulBuild and Release / Build and Release (push) Successful in 47sreleased this
2026-08-01 17:20:18 +02:00 | 73 commits to main since this release0.8.71
August 1, 2026
- Recorded demos are now uploaded once the map ends, if matchzy_demo_upload_url is set. The fork previously stopped the recording without ever uploading it.
- Added matchzy_demo_upload_s3 (alias get5_demo_upload_s3). When enabled, the demo is sent with an HTTP PUT and the raw .dem file as the body, for S3-compatible storage that uses presigned upload URLs. Sign the URL with Content-Type application/octet-stream. Default: false.
- Added matchzy_demo_upload_header_key and matchzy_demo_upload_header_value (aliases get5_demo_upload_header_key / get5_demo_upload_header_value) to send a custom authentication header with the upload.
- Large demo uploads no longer fail part way through. The upload now has its own timeout instead of sharing the 10 second one used for event publishing.
- Added the demo_upload_ended event, sent to the remote log URL after each upload with the demo filename and whether it succeeded.
- An invalid matchzy_demo_upload_url is now reported in the server log instead of being ignored silently.
- matchzy_demo_upload_url and the two upload header settings are deliberately not written to config.cfg, because a presigned URL and an authentication token are credentials and config.cfg is world readable. Set them from a private cfg. config.cfg documents the syntax in a comment.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
2 downloads
-
MatchZy 0.8.69
StableAll checks were successfulBuild and Release / Build and Release (push) Successful in 45sreleased this
2026-07-30 21:01:27 +02:00 | 76 commits to main since this release0.8.69
July 30, 2026
- Fixed
.t/.ctwhile spectating in practice: previously the player was either kicked (client drop with NETWORK_DISCONNECT_LOOPDEACTIVATE) or joined the team permanently dead. The switch now calls the engine's own HandleCommand_JoinTeam (immediate mode), which runs the complete join flow and spawns the player. Requires the updated gamedata/matchzy.json (new key: CCSPlayerController_HandleCommandJoinTeam); without it the switch falls back to the old behavior plus a team-menu hint. - Fixed a practice side-switch sometimes swallowing the player's next real death on the scoreboard: the no-death flag was set even when no switch suicide fired (e.g. switching while dead or spectating) and lingered until the next death.
Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
3 downloads
- Fixed
-
MatchZy 0.8.68
StableAll checks were successfulBuild and Release / Build and Release (push) Successful in 55sreleased this
2026-07-29 14:08:54 +02:00 | 77 commits to main since this release0.8.68
July 29, 2026
- Fixed
.botjigglemaking a freshly spawned.botinvisible: the jiggle anchored the new bot at the map spawn point it briefly appeared on and yanked it back there every tick, so it never showed up at the lineup. Jiggle now strafes each bot around its assigned practice spot; bots not spawned via practice commands are no longer jiggled at all. .botnow pre-pins bot_quota to the expected count (current bots + 1) right before bot_add, so the engine's quota logic has no headroom to spawn the second bot of a pair in the first place. If the engine pair-spawns anyway, the extra is still detected and kicked as before.- Fixed
.bot/.tbot/.ctbotsometimes spawning nothing (console: "kicking wrong-team pair bot"): when bot_add pair-spawned one bot per team, the wrong-team bot could be seen first and the requested one arrived a tick later, after the claim pass had already given up and kicked everything. The claim now prefers the requested team over the whole set and retries briefly before failing, so the right bot is kept and only the pair extra is kicked. .backups(css_backupmenu) now works when no match is live: it lists the 5 newest backup files on disk (match id, round, score, map, age) with a ready-to-use restore command for each. Useful after a server crash - reconnect, run.backups, restore the round the match crashed on.- Added
css_loadbackupas an alias ofmatchzy_loadbackup/get5_loadbackup, so a backup file can be restored from chat with!loadbackup <file>(admin only). Previously the command was only usable from the server console.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
2 downloads
- Fixed
-
MatchZy 0.8.67
StableAll checks were successfulBuild and Release / Build and Release (push) Successful in 44sreleased this
2026-07-28 21:19:22 +02:00 | 78 commits to main since this release0.8.67
July 28, 2026
- Removed
matchzy_random_spawnsand the 0.8.65 coach auto-scatter entirely. Live match/scrim rounds always use the map's competitive spawns; a coach never changes player spawn behavior (the coach sits at their own viewing spot and does not take a competitive spawn point). Dryrun mode keeps its random spawns. If your existing config.cfg contains a matchzy_random_spawns line, it can be deleted (a leftover line only causes a harmless unknown-command console note). - Fixed a coach still displacing one player off the standard competitive spawns (e.g. Ancient CT: one player left in the back corner instead of the line of 5). The reseat treated every enabled spawn as valid, so the displaced player was never pulled back; it now only accepts the map's lowest-priority (competitive) spawn set and moves the displaced player onto the spawn the coach freed up. Also fixed a player standing exactly on a competitive spawn being re-teleported every round (a neighbouring player could claim that spawn first; spawn claiming is now nearest-first).
- Added
bot_quota 0to live.cfg, scrim.cfg, hill.cfg, knife.cfg and warmup.cfg. The CS2 default is 10, so on servers whose base config never zeroes it the engine could quietly add or refill bots during warmup and matches. - Added
mp_randomspawn 0to scrim.cfg, hill.cfg and knife.cfg (live.cfg already had it). The cvar is sticky, so a mode or plugin that had set it to 1 earlier could leave scrim/hill/knife rounds with randomized engine spawns. - The coach-displaced player is now corrected in the spawn frame itself (before the client renders), instead of a visible teleport during freezetime - players no longer notice anything when a coach is on. Nobody is ever moved to Spectator (no ghosting window), and the timer-based reseat stays as a safety net.
- The coach's freezetime death no longer shows up in the kill feed (the old suppression only matched self-attributed suicides; the forced kill reports the world as attacker and slipped through).
- The coach no longer steals one of the five competitive teammate colors: the coach is set colorless and the five real players on each side always hold the five distinct colors (the ex-coach gets a color back on .uncoach).
- Fixed the coach not dying at all on current CS2 builds: the coach body is made untouchable at placement, and the engine now drops the forced suicide when the pawn takes no damage - damage is re-enabled for the kill itself. Also moved the kill to the end of freezetime (about 1 second before live) so the coach is alive at the viewing spot for the whole tactical talk, without an idle body entering the live round or a long black death-cam during freezetime.
- The coach is never moved through the Spectator team anymore (ghosting risk): the freezetime-end fallback for a still-alive coach now kills the coach instead of bouncing them Spectator-and-back, and the coach team fixup switches directly between sides.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
2 downloads
- Removed
-
MatchZy 0.8.65
StableAll checks were successfulBuild and Release / Build and Release (push) Successful in 1m4sreleased this
2026-07-27 17:06:08 +02:00 | 83 commits to main since this release0.8.65
July 27, 2026
- Added
matchzy_random_spawns(default false): randomizes player spawns each live round across all enabled map spawns instead of the fixed competitive set, so maps no longer always reuse the same spots (e.g. Dust2 T now uses all 10 spawns, not the same 5). For casual/scrim variety only; leave off for ranked matches. While on, the coach spawn-reseat is skipped. (Note: a side can only vary up to the number of spawn entities the map defines - Dust2 CT has only 5, so it cannot vary.) - Random spawns now also turn on automatically while a coach is present (no need to set the convar), since a coach on a side is exactly when spawns look "always the same". Coaches are excluded from the shuffle (they stay at their viewing spot). Reverts to normal once the last coach leaves.
- Fixed the coach being killed ~1 second AFTER the round went live (visible/idle body into the round) instead of during freezetime. The kill is now scheduled at a small fixed delay early in freezetime, so the coach body is reliably gone before the round starts, regardless of the
mp_freezetimevalue (previously it readmp_freezetime- a float cvar - as an int, mistiming the kill). - Fixed
.watchme/.fas(and.spec) failing to move players to Spectator and spammingCCSPlayerPawnBase::SwitchTeam( 1 ) - invalid team index.:SwitchTeamonly accepts T/CT, so the Spectator move now usesChangeTeamon the already-dead pawn.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
2 downloads
- Added
-
MatchZy 0.8.64
StableAll checks were successfulBuild and Release / Build and Release (push) Successful in 43sreleased this
2026-07-24 22:08:03 +02:00 | 85 commits to main since this release0.8.64
July 24, 2026
- Fixed a rare server crash when using
.ct/.t/.specto switch to the side you are already on. It ran a redundant suicide plus team-switch to your current team (the engine'sChangeBasePlayerTeamAndPendingTeamwith the requested team equal to the current one occasionally crashed). It is now a no-op, only respawning you if you were dead on T/CT. .cbot/.crouchbot/.duckbotnow boost you on top of the crouched bot (spawn above it), matching.crouchboost.- Fixed
.crouchboost/.cboostskipping the player-validity and bot-limit checks that.boostalready ran. - Fixed
.loadbotposplacing a bot tilted or under the map when the saved spot was recorded while looking up or down: the bot is now always placed upright, facing the saved direction. - Reduced duplicate "kicking late untracked bot" log spam when spawning several bots in quick succession.
- Removed the experimental
.jt/.jumpthrowcommand and thematchzy_experimental_jumpthrowconvar (the server-side input injection was unreliable across CS2 builds).
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
2 downloads
- Fixed a rare server crash when using
-
MatchZy 0.8.63
StableAll checks were successfulBuild and Release / Build and Release (push) Successful in 48sreleased this
2026-07-24 17:22:05 +02:00 | 86 commits to main since this release0.8.63
July 24, 2026
- Fixed a match load being wiped when the config's first map differs from the current map. Loading via
get5_loadmatch_url/matchzy_loadmatch(or the file variants) changelevels to the match map; that changelevel ended the outgoing map and reset the just-loaded match, so the server arrived on the new map with no match (get5_statusreturnednone/ null matchid, default team names, no ready). The match is now carried across the changelevel and re-loaded on the target map, matching get5 behavior. Loading while already on the first map was unaffected and still works.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
3 downloads
- Fixed a match load being wiped when the config's first map differs from the current map. Loading via