-
-
Notifications
You must be signed in to change notification settings - Fork 2
Server Commands and FAQ
这一页是实战命令表,不替代仓库里的完整命令文档。需要精确参数时,以
docs/COMMANDS.md 和 docs/COMMANDS.zh-Hans.md 为准。
从 source round 0 开始 sequence:
dtr_go seq "<manifest.json>" 0
从 source round 5 开始 sequence:
dtr_go seq "<manifest.json>" 5
只播放一个 source round:
dtr_go round "<manifest.json>" 5
直接 restart alias:
dtr_seq_restart "<manifest.json>" 0
dtr_round_restart "<manifest.json>" 5
from_source_round 是 demo source round,不是当前服务器回合号。
保守第一跑:
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
完整本地 fidelity 测试:
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
单回合严格测试:
dtr_partial 0; dtr_go round "<manifest.json>" <source_round>
只观察路线,不做接触 handoff:
dtr_handoff off
如果左手/viewmodel 保真影响 handoff 体感:
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 管路线 replay 行为。scoreboard 属于 dtr_match,饰品属于
dtr_cosmetics,identity 属于 dtr_replay_identity。
BotHider identity 对齐:
dtr_replay_identity off
dtr_replay_identity name
dtr_replay_identity steam
dtr_replay_identity avatar
dtr_replay_identity full
推荐:
-
steam:写 demo 名字和 SteamID64,不写头像覆写。 -
avatar:用 DTR 合成 SteamID64 key 应用 manifest PNG 头像覆写,避免真实 SteamID64 头像 key 冲突。 -
full:旧路径,真实 demo SteamID64 加真实 SteamID64 keyed 头像覆写;只在明确需要时使用。
没有 BotHider 或 slot 不是 BotHider-managed bot 时,identity 对齐会跳过,不会应用到真人。
本地赛事展示:
dtr_match status
dtr_match off
dtr_match scoreboard
dtr_match scoreboard <on|off>
dtr_match full
dtr_match 不改变路线、武器、投掷物或饰品,只做本地展示同步。
饰品证据:
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>
dtr_cosmetics 只消费 converter 显式导出的 demo 证据。贴纸需要转换时传
--export-stickers,挂件需要 --export-charms。
自动语音:
dtr_voice_auto status
dtr_voice_auto on
dtr_voice_auto off
手动 sidecar 测试:
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
正常 sequence 回放应该使用 dtr_voice_auto on。
自动文字聊天:
dtr_chat_auto status
dtr_chat_auto on
dtr_chat_auto off
聊天 metadata 默认写在 manifest.json 的 rounds[].chat_messages 中,不需要额外 sidecar。
玩家聊天会由匹配到的安全 replay bot 通过原生 say / say_team 发出;server/admin
消息会作为 [DTR] server message 打印。
手动文字聊天测试:
dtr_chat_test <loaded|any|slot> [all|team] <message>
示例:
dtr_chat_test loaded all hello
dtr_chat_test 3 team rush B
如果你在观察者位置测试原生玩家文字聊天,需要先设置:
sv_full_alltalk 1
单独 sv_allchat 1 不足以保证 spectator 看到 replay bot 发出的 native text chat。
推荐 opening-route handoff:
dtr_handoff death_contact_c4 slot
死亡/接触时释放所有 slot:
dtr_handoff death_contact_c4 all
bot 数不足时允许部分 replay:
dtr_partial 1
要求 manifest 所有玩家都分配成功:
dtr_partial 0
整体状态:
dtr_status
单 slot 状态:
dtr_status <slot>
manifest/runtime 检查:
dtr_doctor "<manifest.json>"
dtr_runtime
dtr_config_status
停止:
dtr_stop sequence
dtr_stop pool
dtr_stop replay
dtr_stop slot <slot>
dtr_stop all
如果看到:
dtr: ABI mismatch; ...
说明 CounterStrikeSharp plugin 和 native BotController runtime 来自不同构建。 更新完整 server bundle,然后重启服务器或重新加载插件,避免旧 native DLL 仍留在进程里。
检查:
dtr_runtime
dtr_doctor "<manifest.json>"
如果看到:
[DTR ERR] voice send unavailable; ...
或:
voice_auto=unavailable ...
说明 native runtime 没暴露 voice send capability,或 ABI/capability 检测失败。 更新完整 server bundle,尤其是 BotController,然后检查:
dtr_runtime
dtr_voice_auto status
如果看到:
[DTR ERR] map mismatch: server="..." manifest="..."
切到 manifest 对应地图,或使用正确 demo 输出目录里的 manifest。
按顺序检查:
-
dtr_voice_auto status是on。 - replay 启动日志里有
voice_auto=started。 -
voice/roundXX.dtv和 manifest 在同一个输出包里。 - 服务器里有 live human client。
- 你是观察者,或和 replay bot speaker 在同一队。
-
dtr_runtime显示 BotController 有 voice send capability。
按顺序检查:
-
manifest.json中存在rounds[].chat_messages。 -
dtr_chat_auto status是on。 - replay 启动日志里有
chat_auto=started。 - sender 能映射到当前 loaded safe replay bot。
- 如果你是观察者,先设置
sv_full_alltalk 1。
手动验证:
dtr_chat_test loaded all hello
如果进 T/CT 队伍能看到、观察者看不到,通常是服务器聊天 cvar 问题,不是 manifest 缺失。
当前 runtime 在 freeze-preroll 中会 defer live window 语音。期望日志:
voice_auto=deferred_live file=roundXX.dtv clip_start=... live_start=...
如果同一句话在 live start 后又播一次,先确认 server bundle 已更新,并且旧 plugin/native DLL 没有仍在当前服务器进程里。
这是预期行为。文字聊天是瞬发事件;如果 replay 从 live anchor 开始,而 freezetime chat 早于当前 anchor,DemoTracer 会在 replay 开始时补发一次,避免开局文字交流丢失。语音不会 这样补发,因为语音是连续音频流。
饰品默认关闭是有原因的。只有转换时带了显式 cosmetic export flags,并且目标是本地/私有验证环境时,
才应打开 dtr_cosmetics full。DemoTracer 不会把饰品应用给真人玩家,但真人观察或接管 bot
仍可能带来服务器运营和 GSLT 风险。
使用:
dtr_partial 1
DemoTracer 会加载能安全分配到的 bot slot。使用:
dtr_partial 0
则要求 manifest 中所有玩家都分配成功,否则本回合加载失败。
不要提交或发布:
*.dem
*.dtr
*.dtv
tmp/
target/
bin/
obj/
logs
local server configs
local Steam/server paths
公开示例使用 <demo.dem>、<output-dir>、<manifest.json>、
<pool_manifest.json> 这类占位符。
Start here
Convert
Playback
Reference