Complete netdemo feature as a single commit on implant2. See svdemo.txt for full documentation. Recording: svdemo_record, delta compression, keyframes, auto-record, chat capture, configstring tracking, map_restart handling. Playback: svdemo_play, free camera (client-owned), follow mode, pause, seek/seekexact with keyframes, scoreboard, PVS via usercmd origin, SNAPFLAG_RESET_ENTITIES for clean transitions. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
196 lines
9.2 KiB
Text
196 lines
9.2 KiB
Text
===========================================================================
|
||
Серверные демо-записи (SVDEMO)
|
||
Руководство пользователя
|
||
===========================================================================
|
||
|
||
ОПИСАНИЕ
|
||
--------
|
||
|
||
Система серверных демо-записей позволяет записывать полное состояние
|
||
игрового сервера (все сущности, все игроки) и воспроизводить запись
|
||
с возможностью свободного перемещения камеры или просмотра от первого
|
||
лица любого игрока.
|
||
|
||
В отличие от обычных клиентских демо (запись только того, что видит
|
||
один игрок), серверная запись содержит полную картину матча.
|
||
|
||
|
||
КОНСОЛЬНЫЕ КОМАНДЫ
|
||
------------------
|
||
|
||
Запись:
|
||
|
||
svdemo_record <имя>
|
||
Начать запись серверного демо. Файл сохраняется в
|
||
svdemos/<имя>.svdm внутри игровой директории.
|
||
|
||
svdemo_stop
|
||
Остановить текущую запись или воспроизведение.
|
||
При остановке воспроизведения происходит отключение от сервера.
|
||
|
||
Воспроизведение:
|
||
|
||
svdemo_play <имя>
|
||
Воспроизвести серверное демо. Загружает карту из записи,
|
||
подключает зрителя автоматически. Можно вызывать из меню,
|
||
из игры или во время просмотра другого демо.
|
||
|
||
svdemo_pause
|
||
Пауза / продолжение воспроизведения. Во время паузы камера
|
||
свободно перемещается, сущности заморожены.
|
||
На экране отображается "Playback Paused".
|
||
|
||
svdemo_seek <секунды>
|
||
Перемотка относительно текущей позиции. Положительное значение --
|
||
вперёд, отрицательное -- назад.
|
||
Перемещает к ближайшему ключевому кадру (точность ±5 сек).
|
||
Работает в паузе.
|
||
Пример: svdemo_seek -10 (назад на 10 секунд)
|
||
|
||
svdemo_seekexact <секунды>
|
||
Точная перемотка. Находит ближайший ключевой кадр, затем
|
||
прочитывает кадры до целевого времени. Точность до одного
|
||
серверного кадра (50 мс при sv_fps 20). Может занять долю
|
||
секунды на длинных перемотках. Работает в паузе.
|
||
Пример: svdemo_seekexact -10 (назад ровно на 10 секунд)
|
||
|
||
|
||
НАСТРОЙКИ (CVARS)
|
||
-----------------
|
||
|
||
svdemo_autorecord <0|1> (по умолчанию: 0)
|
||
Автоматическая запись демо при каждой загрузке карты.
|
||
Файлы именуются автоматически: <карта>_ГГГГММДД_ЧЧММСС.svdm
|
||
Пример: q3dm6_20260323_141530.svdm
|
||
|
||
svdemo_pauseEmpty <0|1> (по умолчанию: 1)
|
||
Пауза воспроизведения, когда нет подключённых зрителей.
|
||
Демо начинается с первого кадра при подключении зрителя.
|
||
|
||
svdemo_keyframeInterval <секунды> (по умолчанию: 5, 0 = выкл.)
|
||
Интервал ключевых кадров. Ключевые кадры позволяют перематывать
|
||
запись. Чем меньше интервал, тем точнее перемотка командой
|
||
svdemo_seek, но немного больше размер файла. Первый кадр
|
||
записи всегда является ключевым.
|
||
|
||
Все настройки сохраняются в конфигурации (CVAR_ARCHIVE).
|
||
|
||
|
||
ЗАПИСЬ
|
||
------
|
||
|
||
1. Запустите сервер и начните игру как обычно:
|
||
devmap q3dm6
|
||
|
||
2. Начните запись:
|
||
svdemo_record mymatch
|
||
|
||
3. Играйте. Все действия всех игроков записываются.
|
||
|
||
4. Остановите запись:
|
||
svdemo_stop
|
||
|
||
Запись также автоматически останавливается при:
|
||
- Смене карты (map, devmap, nextmap по таймлимиту/фраглимиту)
|
||
- Выключении сервера
|
||
Перезапуск карты (map_restart) НЕ прерывает запись.
|
||
|
||
|
||
ВОСПРОИЗВЕДЕНИЕ
|
||
---------------
|
||
|
||
1. Запустите воспроизведение:
|
||
svdemo_play mymatch
|
||
|
||
2. Карта загрузится автоматически. Вы подключитесь как зритель
|
||
со свободной камерой (полёт по карте).
|
||
|
||
3. Управление зрителем:
|
||
- Свободная камера: перемещайтесь как обычный спектатор
|
||
- Следование за игроком: нажмите MOUSE1 (ATTACK) для входа
|
||
в режим следования и переключения между игроками
|
||
- Выход из следования: team spectator (можно забиндить)
|
||
|
||
4. В режиме следования вы видите игру от первого лица выбранного
|
||
игрока с полным HUD: здоровье, броня, боеприпасы, оружие.
|
||
|
||
5. Табло (TAB) показывает счёт записанных игроков.
|
||
|
||
6. Управление воспроизведением:
|
||
- svdemo_pause -- пауза/продолжение
|
||
- svdemo_seek -10 -- быстрая перемотка назад на 10 сек
|
||
- svdemo_seek 30 -- быстрая перемотка вперёд на 30 сек
|
||
- svdemo_seekexact -10 -- точная перемотка назад на 10 сек
|
||
- svdemo_stop -- остановка и выход
|
||
|
||
7. Воспроизведение останавливается автоматически при
|
||
достижении конца записи.
|
||
|
||
|
||
ФОРМАТ ФАЙЛА
|
||
-------------
|
||
|
||
Расширение: .svdm
|
||
Директория: svdemos/
|
||
|
||
Файл содержит:
|
||
- Заголовок: название карты, настройки сервера, конфигстроки
|
||
(имена игроков, модели, настройки игры)
|
||
- Покадровые данные: дельта-сжатые состояния сущностей и игроков,
|
||
серверные команды (чат, принты), изменения конфигстрок
|
||
- Ключевые кадры с индексом в конце файла
|
||
|
||
Дельта-кодирование обеспечивает компактный размер файла.
|
||
Типичный 10-минутный матч с 10 ботами занимает ~8 МБ.
|
||
|
||
Одна запись = одна карта. При смене карты запись останавливается.
|
||
|
||
|
||
ОГРАНИЧЕНИЯ
|
||
-----------
|
||
|
||
- Если в записанной игре было 64 игрока (MAX_CLIENTS), один
|
||
из них не будет виден при воспроизведении (его слот занят зрителем).
|
||
- Воспроизведение требует наличия тех же pk3-файлов (карты, модели),
|
||
что использовались при записи.
|
||
- Демо несовместимы между разными версиями движка, если изменился
|
||
формат сетевых структур.
|
||
- При перемотке могут кратковременно отображаться визуальные артефакты
|
||
(частицы, вспышки) от локальных эффектов.
|
||
|
||
|
||
ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ
|
||
---------------------
|
||
|
||
Автоматическая запись всех матчей:
|
||
|
||
set svdemo_autorecord 1
|
||
devmap q3dm17
|
||
|
||
(все матчи на этом сервере будут записываться автоматически)
|
||
|
||
|
||
Запись конкретного матча:
|
||
|
||
devmap q3tourney2
|
||
svdemo_record duel_finals
|
||
(играть...)
|
||
svdemo_stop
|
||
|
||
|
||
Просмотр записи:
|
||
|
||
svdemo_play duel_finals
|
||
|
||
|
||
Просмотр с перемоткой:
|
||
|
||
svdemo_play duel_finals
|
||
(подождать 30 секунд)
|
||
svdemo_seekexact -20 (вернуться на 20 секунд назад)
|
||
svdemo_pause (поставить на паузу)
|
||
svdemo_seek -5 (ещё назад на 5 секунд, в паузе)
|
||
svdemo_pause (продолжить)
|
||
|
||
|
||
===========================================================================
|