Skip to content

Глава 9.10: Управление модами

Главная | << Назад: Контроль доступа | Далее: Устранение неполадок >>


Краткое содержание: Установка, настройка и обслуживание сторонних модов на выделенном DayZ-сервере. Параметры запуска, загрузка из Workshop, ключи подписей, порядок загрузки, серверные моды vs клиентские, обновления и самые распространённые ошибки, вызывающие сбои или кики игроков.


Содержание


Как загружаются моды

DayZ загружает моды через параметр запуска -mod=. Каждая запись -- это путь к папке, содержащей PBO-файлы и config.cpp. Движок читает каждый PBO в каждой папке мода, регистрирует его классы и скрипты, затем переходит к следующему моду в списке.

Сервер и клиент должны иметь одинаковые моды в -mod=. Если сервер указывает @CF;@MyMod, а клиент имеет только @CF, подключение не удастся с ошибкой несоответствия подписей. Серверные моды, указанные в -servermod=, являются исключением -- клиентам они не нужны.


Формат параметров запуска

Типичная команда запуска модового сервера:

batch
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:

batch
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=. Создайте именованную символическую ссылку (рекомендуется) или скопируйте папку:

batch
mklink /J "C:\DayZServer\@CF" "C:\DayZServer\steamapps\workshop\content\221100\1559212036"

Использование ссылки (junction) означает, что обновления через SteamCMD применяются автоматически -- повторное копирование не требуется.

Шаг 3: Копирование .bikey

См. следующий раздел.


Ключи модов (.bikey)

Каждый подписанный мод поставляется с папкой keys/, содержащей один или несколько файлов .bikey. Эти файлы сообщают BattlEye, какие подписи PBO принимать.

  1. Откройте папку мода (например, @CF/keys/)
  2. Скопируйте каждый файл .bikey в корневой каталог keys/ сервера
DayZServer/
  keys/
    dayz.bikey              # Ванильный -- всегда присутствует
    cf.bikey                # Скопирован из @CF/keys/
    vpp_admintools.bikey    # Скопирован из @VPPAdminTools/keys/

Без правильного ключа каждый игрок с этим модом получает: "Player kicked: Modified data".


Порядок загрузки и зависимости

Моды загружаются слева направо в параметре -mod=. config.cpp мода объявляет свои зависимости:

cpp
class CfgPatches
{
    class MyMod
    {
        requiredAddons[] = { "CF" };
    };
};

Если MyMod требует CF, то @CF должен стоять перед @MyMod в параметре запуска:

-mod=@CF;@MyMod          ✓ правильно
-mod=@MyMod;@CF          ✗ сбой или отсутствие классов

Общий шаблон порядка загрузки:

  1. Фреймворк-моды -- CF, Community-Online-Tools
  2. Библиотечные моды -- BuilderItems, любые общие паки ресурсов
  3. Контентные моды -- дополнения к картам, оружие, транспорт
  4. Зависимые моды -- всё, что перечисляет вышеуказанное в requiredAddons

При сомнениях проверьте страницу мода в Workshop или его документацию. Большинство авторов модов публикуют необходимый порядок загрузки.


Серверные и клиентские моды

ПараметрКому нуженТипичные примеры
-mod=Серверу + всем клиентамОружие, транспорт, карты, UI-моды, одежда
-servermod=Только серверуМенеджеры экономики, инструменты логирования, админ-бэкенды, скрипты планировщика

Правило простое: если мод содержит любые клиентские скрипты, раскладки, текстуры или модели, он должен быть в -mod=. Если он запускает только серверную логику без ресурсов, к которым клиент когда-либо обращается, используйте -servermod=.

Размещение серверного мода в -mod= заставляет каждого игрока скачивать его. Размещение клиентского мода в -servermod= вызывает отсутствие текстур, сломанный UI или скриптовые ошибки на клиенте.


Обновление модов

Процедура

  1. Остановите сервер -- обновление файлов при работающем сервере может повредить PBO
  2. Скачайте заново через SteamCMD:
    batch
    steamcmd.exe +force_install_dir "C:\DayZServer" +login your_username +workshop_download_item 221100 <modID> +quit
  3. Скопируйте обновлённые файлы .bikey -- авторы модов иногда меняют ключи подписи. Всегда копируйте свежий .bikey из папки keys/ мода в каталог keys/ сервера
  4. Перезапустите сервер

Если вы использовали символические ссылки (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" -- два мода определяют один и тот же класс

Изоляция проблемы

Когда у вас много модов и что-то ломается, тестируйте поэтапно:

  1. Запустите только с фреймворк-модами (@CF)
  2. Добавляйте по одному моду за раз
  3. Запускайте и проверяйте логи после каждого добавления
  4. Мод, вызывающий ошибки -- виновник

Два мода редактируют один и тот же класс

Если два мода оба используют 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. Обновляйте все моды и сервер одновременно.


Главная | << Назад: Контроль доступа | Далее: Устранение неполадок >>

Released under CC BY-SA 4.0 | Code examples under MIT License