Skip to content

Server Commands and FAQ

unicbm edited this page Jul 8, 2026 · 5 revisions

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.

High-Level Playback

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.

Common Presets

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

Replay Fidelity

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.

Projectile Alignment

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.

Identity

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.

Match Presentation

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.

Cosmetics

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.

Voice

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.

Chat

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.

Handoff and Partial Replay

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

Status and Doctor

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

FAQ

ABI mismatch

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>"

voice send unavailable

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

Map mismatch

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.

I cannot hear voice

Check in order:

  1. dtr_voice_auto status is on.
  2. Replay startup logs show voice_auto=started.
  3. voice/roundXX.dtv is next to the matching manifest output.
  4. The server has a live human client.
  5. You are a spectator or on the same team as the replay bot speaker.
  6. dtr_runtime shows BotController voice send capability.

I cannot see text chat

Check in order:

  1. manifest.json contains rounds[].chat_messages.
  2. dtr_chat_auto status is on.
  3. Replay startup logs show chat_auto=started.
  4. The sender maps to a loaded safe replay bot.
  5. If you are spectating, set sv_full_alltalk 1.

Manual verification:

dtr_chat_test loaded all hello

Fire grenades do not land exactly like the demo

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.

Not enough bots

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 local artifacts

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.

Clone this wiki locally