Глава 9.10: Управление модами
Главная | << Назад: Контроль доступа | Далее: Устранение неполадок >>
Краткое содержание: Установка, настройка и обслуживание сторонних модов на выделенном DayZ-сервере. Параметры запуска, загрузка из Workshop, ключи подписей, порядок загрузки, серверные моды vs клиентские, обновления и самые распространённые ошибки, вызывающие сбои или кики игроков.
Содержание
- Как загружаются моды
- Формат параметров запуска
- Установка модов из Workshop
- Ключи модов (.bikey)
- Порядок загрузки и зависимости
- Серверные и клиентские моды
- Обновление модов
- Устранение конфликтов модов
- Распространённые ошибки
Как загружаются моды
DayZ загружает моды через параметр запуска -mod=. Каждая запись -- это путь к папке, содержащей PBO-файлы и config.cpp. Движок читает каждый PBO в каждой папке мода, регистрирует его классы и скрипты, затем переходит к следующему моду в списке.
Сервер и клиент должны иметь одинаковые моды в -mod=. Если сервер указывает @CF;@MyMod, а клиент имеет только @CF, подключение не удастся с ошибкой несоответствия подписей. Серверные моды, указанные в -servermod=, являются исключением -- клиентам они не нужны.
Формат параметров запуска
Типичная команда запуска модового сервера:
DayZServer_x64.exe -config=serverDZ.cfg -port=2302 -profiles=profiles -mod=@CF;@VPPAdminTools;@MyContentMod -servermod=@MyServerLogic -dologs -adminlog| Параметр | Назначение |
|---|---|
-mod= | Моды, необходимые и серверу, и всем подключающимся клиентам |
-servermod= | Моды только для сервера (клиентам они не нужны) |
Правила:
- Пути разделяются точкой с запятой без пробелов вокруг точек с запятой
- Каждый путь относителен к корневому каталогу сервера (например,
@CFозначает<корень_сервера>/@CF/) - Вы можете использовать абсолютные пути:
-mod=D:\Mods\@CF;D:\Mods\@VPP - Порядок важен -- зависимости должны стоять перед модами, которые их требуют
Установка модов из Workshop
Шаг 1: Скачивание мода
Используйте SteamCMD с App ID клиента DayZ (221100) и ID мода в Workshop:
steamcmd.exe +force_install_dir "C:\DayZServer" +login your_username +workshop_download_item 221100 1559212036 +quitСкачанные файлы попадают в:
C:\DayZServer\steamapps\workshop\content\221100\1559212036\Шаг 2: Создание символической ссылки или копии
Папки Workshop используют числовые ID, которые нельзя использовать в -mod=. Создайте именованную символическую ссылку (рекомендуется) или скопируйте папку:
mklink /J "C:\DayZServer\@CF" "C:\DayZServer\steamapps\workshop\content\221100\1559212036"Использование ссылки (junction) означает, что обновления через SteamCMD применяются автоматически -- повторное копирование не требуется.
Шаг 3: Копирование .bikey
См. следующий раздел.
Ключи модов (.bikey)
Каждый подписанный мод поставляется с папкой keys/, содержащей один или несколько файлов .bikey. Эти файлы сообщают BattlEye, какие подписи PBO принимать.
- Откройте папку мода (например,
@CF/keys/) - Скопируйте каждый файл
.bikeyв корневой каталогkeys/сервера
DayZServer/
keys/
dayz.bikey # Ванильный -- всегда присутствует
cf.bikey # Скопирован из @CF/keys/
vpp_admintools.bikey # Скопирован из @VPPAdminTools/keys/Без правильного ключа каждый игрок с этим модом получает: "Player kicked: Modified data".
Порядок загрузки и зависимости
Моды загружаются слева направо в параметре -mod=. config.cpp мода объявляет свои зависимости:
class CfgPatches
{
class MyMod
{
requiredAddons[] = { "CF" };
};
};Если MyMod требует CF, то @CF должен стоять перед @MyMod в параметре запуска:
-mod=@CF;@MyMod ✓ правильно
-mod=@MyMod;@CF ✗ сбой или отсутствие классовОбщий шаблон порядка загрузки:
- Фреймворк-моды -- CF, Community-Online-Tools
- Библиотечные моды -- BuilderItems, любые общие паки ресурсов
- Контентные моды -- дополнения к картам, оружие, транспорт
- Зависимые моды -- всё, что перечисляет вышеуказанное в
requiredAddons
При сомнениях проверьте страницу мода в Workshop или его документацию. Большинство авторов модов публикуют необходимый порядок загрузки.
Серверные и клиентские моды
| Параметр | Кому нужен | Типичные примеры |
|---|---|---|
-mod= | Серверу + всем клиентам | Оружие, транспорт, карты, UI-моды, одежда |
-servermod= | Только серверу | Менеджеры экономики, инструменты логирования, админ-бэкенды, скрипты планировщика |
Правило простое: если мод содержит любые клиентские скрипты, раскладки, текстуры или модели, он должен быть в -mod=. Если он запускает только серверную логику без ресурсов, к которым клиент когда-либо обращается, используйте -servermod=.
Размещение серверного мода в -mod= заставляет каждого игрока скачивать его. Размещение клиентского мода в -servermod= вызывает отсутствие текстур, сломанный UI или скриптовые ошибки на клиенте.
Обновление модов
Процедура
- Остановите сервер -- обновление файлов при работающем сервере может повредить PBO
- Скачайте заново через SteamCMD:batch
steamcmd.exe +force_install_dir "C:\DayZServer" +login your_username +workshop_download_item 221100 <modID> +quit - Скопируйте обновлённые файлы .bikey -- авторы модов иногда меняют ключи подписи. Всегда копируйте свежий
.bikeyиз папкиkeys/мода в каталогkeys/сервера - Перезапустите сервер
Если вы использовали символические ссылки (junctions), шаг 2 обновляет файлы мода на месте. Если вы копировали файлы вручную, нужно копировать снова.
Обновления на стороне клиента
Игроки, подписанные на мод в Steam Workshop, получают обновления автоматически. Если вы обновляете мод на сервере, а у игрока старая версия, он получает несоответствие подписей и не может подключиться, пока его клиент не обновится.
Устранение конфликтов модов
Проверка RPT-лога
Откройте последний файл .RPT в profiles/. Ищите:
- "Cannot register" -- коллизия имён классов между двумя модами
- "Missing addons" -- зависимость не загружена (неправильный порядок загрузки или отсутствующий мод)
- "Signature verification failed" -- несоответствие
.bikeyили отсутствующий ключ
Проверка скрипт-лога
Откройте последний script_*.log в profiles/. Ищите:
- "SCRIPT (E)" -- скриптовые ошибки, часто вызванные порядком загрузки или несоответствием версий
- "Definition of variable ... already exists" -- два мода определяют один и тот же класс
Изоляция проблемы
Когда у вас много модов и что-то ломается, тестируйте поэтапно:
- Запустите только с фреймворк-модами (
@CF) - Добавляйте по одному моду за раз
- Запускайте и проверяйте логи после каждого добавления
- Мод, вызывающий ошибки -- виновник
Два мода редактируют один и тот же класс
Если два мода оба используют modded class PlayerBase, тот, который загружен последним (самый правый в -mod=), выигрывает. Его вызов super цепочечно переходит к версии другого мода. Обычно это работает, но если один мод переопределяет метод без вызова super, изменения другого мода теряются.
Распространённые ошибки
Неправильный порядок загрузки. Сервер сбоит или в логах появляется "Missing addons", потому что зависимость ещё не была загружена. Решение: переместите мод-зависимость раньше в списке -mod=.
Забыли -servermod= для серверных модов. Игроки вынуждены скачивать мод, который им не нужен. Решение: переместите серверные моды из -mod= в -servermod=.
Не обновили файлы .bikey после обновления мода. Игроков кикают с ошибкой "Modified data", потому что ключ на сервере не совпадает с новыми подписями PBO мода. Решение: всегда копируйте файлы .bikey заново при обновлении модов.
Перепаковка PBO модов. Перепаковка PBO-файлов мода ломает его цифровую подпись, вызывает кики BattlEye для каждого игрока и нарушает условия использования большинства авторов модов. Никогда не перепаковывайте мод, который вы не создавали.
Смешивание путей Workshop с локальными путями. Использование числового пути Workshop для одних модов и именованных папок для других вызывает путаницу при обновлении. Выберите один подход -- символические ссылки наиболее удобны.
Пробелы в путях модов. Путь вроде -mod=@My Mod ломает разбор параметров. Переименуйте папки модов, чтобы избежать пробелов, или оберните весь параметр в кавычки: -mod="@My Mod;@CF".
Устаревший мод на сервере, обновлённый на клиенте (или наоборот). Несоответствие версий не позволяет подключиться. Синхронизируйте версии сервера и Workshop. Обновляйте все моды и сервер одновременно.
Главная | << Назад: Контроль доступа | Далее: Устранение неполадок >>
