Skip to content

Chat Commands

PracLab intercepts global chat (say) and team chat (say_team) to recognize player commands. All commands support both of the following prefix forms, case-insensitive:

Prefix Example
. .prac
! !prac

Command Overview

Practice Mode Control

Command Alias Description
.prac Load practice config and enable practice mode

Map Management

Command Alias Description
.map Show the list of available maps (visible to sender only)
.inferno Switch to de_inferno
.mirage Switch to de_mirage
.nuke Switch to de_nuke
.ancient Switch to de_ancient
.vertigo Switch to de_vertigo
.anubis Switch to de_anubis
.dust2 Switch to de_dust2
.train Switch to de_train
.cache Switch to de_cache

Bot Management

Command Alias Description
.bot Spawn a bot at the player position
.crouchbot .cbot Spawn a crouching bot at the player position
.kickall Remove all bots
.kick Remove the bot the player is aiming at

Utility & Environment

Command Alias Description
.clear Remove all grenades/projectiles
.break .br Break all breakable entities

Time & God Mode

Command Alias Description
.fastforward .ff Start 10× server time fast-forward for 20 seconds, then auto-revert
.noflash Toggle flashbang immunity for the player (event-driven, other players unaffected)
.god Toggle god mode for the player

Spawn Point Teleport

Command Alias Description
.spawn <N> .s Teleport to the N-th spawn of the same team (default N=1)
.ctspawn <N> .cts Teleport to the N-th CT spawn
.tspawn <N> .ts Teleport to the N-th T spawn
.bestspawn .bs Teleport to the nearest own-team spawn
.worstspawn .ws Teleport to the farthest own-team spawn
.bestctspawn .bcts Teleport to the nearest CT spawn
.worstctspawn .wcts Teleport to the farthest CT spawn
.besttspawn .bts Teleport to the nearest T spawn
.worsttspawn .wts Teleport to the farthest T spawn

Spawn Point Boxes

Command Alias Description
.showspawns Re-display both teams' spawn boxes (auto-shown when prac mode is enabled)
.hidespawns Hide spawn boxes

E-key teleport: Aim at a box and press the use key (default E) to teleport to that spawn; the chat shows "Teleported to spawn N". CT and T boxes are both green; the box center shows an index number (rotated per-map config). In prac mode there is no team restriction — players may aim at any box to teleport. Boxes only show competitive-mode spawns (consistent with the .spawn family commands).

Team Switching

Command Alias Description
.watch .fas Force all other players into spectator mode, leaving only the command issuer active

Grenade Rethrow & Position Recall

Command Alias Description
.rethrow .rt Rethrow the player's last thrown grenade
.rethrowsmoke .rethrows Rethrow only the last smoke grenade
.rethrownade .rethrown Rethrow only the last HE grenade
.rethrowflash .rethrowf Rethrow only the last flashbang
.rethrowmolotov .rethrowm Rethrow only the last molotov/incgrenade
.rethrowdecoy .rethrowd Rethrow only the last decoy
.last .ls Teleport back to the last grenade position

Dryrun & Round Control

Command Alias Description
.dryrun .dry Temporarily switch from prac to competitive config for one round; auto-revert to prac when the round ends
.restartround .rr Restart the current round (executes mp_restartgame)

Dryrun flow: kick all bots → disable prac-specific ConVars (sv_cheats, traj, infinite_ammo, etc.) → load dryrun.cfg competitive config → restart the round to begin; when the round ends (EventRoundEnd), prac config is automatically restored. Use this to play a real competitive round from within a practice session.

Replay System

Command Alias Description
.record Enter pending-record state; starts recording when the player moves or presses F (inspect key); press F again or use .stoprecord to stop and save
.stoprecord Stop recording and save (equivalent to pressing F)
.replay [Id] No argument: play back all stopped recordings in parallel; with Id: play back only that recording. A bot of the same team is auto-spawned as the playback carrier
.stopreplay Stop all ongoing playbacks and kick the corresponding bots
.clearrecord <Id> Delete the recording with the given Id (removes both JSON file and list entry)
.clearrecordall Clear all recordings
.currentrecord .currentrec Print the recording list table (ID / Name / Status / Bot) to the server console

Two-layer architecture: The replay system consists of two parts — - Layer 1 (CSSharp C#): command dispatch, UI prompts, JSON read/write for recording files (under cfg/PracLab/recordings/). - Layer 2 (C++ Metamod plugin PracLabReplayEngine): hooks engine functions (ProcessMovement, CCSBot::Update, PlayerRunCommand, etc.) to implement frame-level movement recording and playback.

The cross-language ABI contract is documented in replay-engine/include/praclab_replay.h. Any change to field order/type must be synchronized across both layers.

When the replay engine is not deployed: all .record/.replay/... commands show a "replay engine not loaded, replay unavailable" message to the player, but other plugin features are unaffected.

Timer

Command Alias Description
.timer Start timing; entering .timer again stops it and prints the elapsed time to the player

ConVar Toggles

Command Alias Description
.solid Toggle mp_solid_teammates (teammate collision)
.impacts Toggle sv_showimpacts (show bullet impact markers)
.traj Toggle sv_grenade_trajectory_prac_pipreview (show grenade trajectory)

Help

Command Alias Description
.help Display all available commands grouped by category in chat (visible to sender only)