-
-
Notifications
You must be signed in to change notification settings - Fork 2
Server Commands and FAQ
This page is a practical command sheet. For exact argument details, use the repository docs/COMMANDS.md as the source of truth.
Start sequence playback from source round 0:
dtr_go seq "<manifest.json>" 0
Start sequence playback from source round 5:
dtr_go seq "<manifest.json>" 5
Play one source round:
dtr_go round "<manifest.json>" 5
Restart aliases:
dtr_seq_restart "<manifest.json>" 0
dtr_round_restart "<manifest.json>" 5
from_source_round is the demo source round, not the current server round number.
Conservative first run:
dtr_replay_identity steam; dtr_align default; dtr_cosmetics off; dtr_match off; dtr_partial 1; dtr_handoff death_contact_c4 slot; dtr_voice_auto on; dtr_chat_auto on; dtr_go seq "<manifest.json>" 0
Full local fidelity test:
dtr_replay_identity steam; dtr_align full; dtr_cosmetics full; dtr_match full; dtr_partial 1; dtr_handoff death_contact_c4 slot; dtr_voice_auto on; dtr_chat_auto on; dtr_go seq "<manifest.json>" 0
Strict single-round test:
dtr_partial 0; dtr_go round "<manifest.json>" <source_round>
Route-only observation without contact handoff:
dtr_handoff off
If left-hand desired writes affect handoff feel:
dtr_align handoff_safe
dtr_align status
dtr_align default
dtr_align full
dtr_align handoff_safe
dtr_align off
dtr_align weapons <on|off>
dtr_align projectiles <on|off>
dtr_align crosshair <on|off>
dtr_align left_hand <on|off>
dtr_align controls replay fidelity features. Scoreboard and match presentation are under dtr_match; cosmetic evidence is under dtr_cosmetics; replay identity is under dtr_replay_identity.
dtr_projectile_align <0|1>
dtr_projectile_align_ticks <status|default|once|2..512|until_delete>
dtr_molotov_align_point <status|off|teleport|detonate> [lead_ticks]
dtr_projectile_align_log [clear|all|molotov|fire]
Projectile alignment is demo-derived and conservative. Fire projectile point alignment only applies when reliable effect metadata is available. It does not force player damage or health state.
BotHider identity alignment:
dtr_replay_identity off
dtr_replay_identity name
dtr_replay_identity steam
dtr_replay_identity avatar
dtr_replay_identity full
Recommended modes:
-
steam: applies demo names and SteamID64 values without avatar overrides. -
avatar: uses DemoTracer-synthesized avatar keys for manifest PNG avatar overrides. -
full: legacy full identity path; use only when explicitly needed.
Without BotHider, or when a slot is not BotHider-managed, identity alignment is skipped.
dtr_match status
dtr_match off
dtr_match scoreboard
dtr_match scoreboard <on|off>
dtr_match full
dtr_match is local presentation sync. It does not change movement replay, weapons, projectiles, cosmetics, or replay bot state.
dtr_cosmetics status
dtr_cosmetics off
dtr_cosmetics weapons
dtr_cosmetics basic
dtr_cosmetics full
dtr_cosmetics weapons <on|off>
dtr_cosmetics knives <on|off>
dtr_cosmetics gloves <on|off>
dtr_cosmetics names <on|off>
dtr_cosmetics stickers <on|off>
dtr_cosmetics charms <on|off>
dtr_cosmetics preserve_native <on|off>
Cosmetic alignment consumes explicitly exported demo-backed evidence only. Sticker evidence requires --export-stickers; charm evidence requires --export-charms. Cosmetic runtime alignment is default-off.
Automatic voice playback:
dtr_voice_auto status
dtr_voice_auto on
dtr_voice_auto off
Manual sidecar tests:
dtr_voice_test <voice_clip.dtv> <sender_slot> [recipient_slot|all]
dtr_voice_mix <voice_clip.dtv> <xuid=slot[,xuid=slot...]|loaded> [recipient_slot|all]
dtr_voice_stop
Normal sequence playback should use dtr_voice_auto on.
Automatic chat playback:
dtr_chat_auto status
dtr_chat_auto on
dtr_chat_auto off
Chat metadata is stored in manifest.json under rounds[].chat_messages. Player chat is sent by matched safe replay bots through CS2's native say / say_team path. Server/admin messages are printed as [DTR] server messages.
Manual chat test:
dtr_chat_test <loaded|any|slot> [all|team] <message>
Examples:
dtr_chat_test loaded all hello
dtr_chat_test 3 team rush B
For spectator testing of native player text chat, set:
sv_full_alltalk 1
sv_allchat 1 by itself is not enough to guarantee spectator visibility.
Recommended opening-route handoff:
dtr_handoff death_contact_c4 slot
Release all slots on death/contact:
dtr_handoff death_contact_c4 all
Allow replay when not every manifest player can be assigned:
dtr_partial 1
Require every manifest player to be assigned:
dtr_partial 0
Overall status:
dtr_status
Single-slot status:
dtr_status <slot>
Manifest and runtime checks:
dtr_doctor "<manifest.json>"
dtr_runtime
dtr_config_status
Stop commands:
dtr_stop sequence
dtr_stop pool
dtr_stop replay
dtr_stop slot <slot>
dtr_stop all
If you see:
dtr: ABI mismatch; ...
the CounterStrikeSharp plugin and native BotController runtime come from different builds. Install the full matching server bundle and restart the server so an old native DLL is not left in the process.
Check:
dtr_runtime
dtr_doctor "<manifest.json>"
If you see:
[DTR ERR] voice send unavailable; ...
or:
voice_auto=unavailable ...
the native runtime does not expose the voice send capability, or ABI/capability detection failed. Install the complete server bundle and check:
dtr_runtime
dtr_voice_auto status
If you see:
[DTR ERR] map mismatch: server="..." manifest="..."
switch to the map expected by the manifest, or use the manifest from the correct demo output directory.
Check in order:
-
dtr_voice_auto statusison. - Replay startup logs show
voice_auto=started. -
voice/roundXX.dtvis next to the matching manifest output. - The server has a live human client.
- You are a spectator or on the same team as the replay bot speaker.
-
dtr_runtimeshows BotController voice send capability.
Check in order:
-
manifest.jsoncontainsrounds[].chat_messages. -
dtr_chat_auto statusison. - Replay startup logs show
chat_auto=started. - The sender maps to a loaded safe replay bot.
- If you are spectating, set
sv_full_alltalk 1.
Manual verification:
dtr_chat_test loaded all hello
Fire projectile alignment is conservative and only uses reliable demo effect metadata. CS2 still owns collision, detonation, inferno creation, and damage. Use:
dtr_projectile_align_log fire
to inspect recent fire projectile alignment decisions.
Use:
dtr_partial 1
DemoTracer will load the safe bot slots it can assign. With:
dtr_partial 0
all manifest players must be assigned or the round load fails.
Do not publish:
*.dem
*.dtr
*.dtv
tmp/
target/
bin/
obj/
logs
local server configs
local Steam/server paths
Use placeholders such as <demo.dem>, <output-dir>, <manifest.json>, and <pool_manifest.json> in public examples.
Start here
Convert
Playback
Reference