Skip to content

Глава 9.11: Устранение неполадок сервера

Главная | << Назад: Управление модами | Далее: Продвинутые темы >>


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


Содержание


Сервер не запускается

Отсутствующие DLL-файлы

Если DayZServer_x64.exe сбоит сразу с ошибкой отсутствующей DLL, установите последнюю версию Visual C++ Redistributable for Visual Studio 2019 (x64) с официального сайта Microsoft и перезапустите.

Порт уже используется

Другой экземпляр DayZ или приложение занимает порт 2302. Проверьте с помощью netstat -ano | findstr 2302 (Windows) или ss -tulnp | grep 2302 (Linux). Завершите конфликтующий процесс или смените порт с помощью -port=2402.

Отсутствует папка миссии

Сервер ожидает mpmissions/<template>/, где имя папки точно совпадает со значением template в serverDZ.cfg. Для Чернаруси это mpmissions/dayzOffline.chernarusplus/, и она должна содержать как минимум init.c.

Некорректный serverDZ.cfg

Одна пропущенная точка с запятой или неправильный тип кавычек молча предотвращают запуск. Обратите внимание на:

  • Отсутствие ; в конце строк значений
  • Типографские кавычки вместо прямых
  • Отсутствие {}; вокруг записей class

Отсутствующие файлы модов

Каждый путь в -mod=@CF;@VPPAdminTools;@MyMod должен существовать относительно корня сервера и содержать папку addons/ с файлами .pbo. Один неверный путь предотвращает запуск.


Игроки не могут подключиться

Проброс портов

DayZ требует, чтобы эти порты были проброшены и открыты в файрволе:

ПортПротоколНазначение
2302UDPИгровой трафик
2303UDPСеть Steam
2304UDPЗапросы Steam (внутренние)
27016UDPЗапросы браузера серверов Steam

Если вы изменили базовый порт с помощью -port=, все остальные порты сдвигаются на тот же офсет.

Блокировка файрволом

Добавьте DayZServer_x64.exe в исключения файрвола ОС. В Windows: netsh advfirewall firewall add rule name="DayZ Server" dir=in action=allow program="C:\DayZServer\DayZServer_x64.exe" enable=yes. В Linux откройте порты с помощью ufw или iptables.

Несоответствие модов

Клиенты должны иметь точно такие же версии модов, как и сервер. Если игрок видит "Mod mismatch", одна из сторон имеет устаревшую версию. Обновляйте обе стороны при любом обновлении мода в Workshop.

Отсутствующие файлы .bikey

Файл .bikey каждого мода должен быть в каталоге keys/ сервера. Без него BattlEye отклоняет подписанные PBO клиента. Загляните в папку keys/ или key/ каждого мода.

Сервер заполнен

Проверьте maxPlayers в serverDZ.cfg (по умолчанию 60).


Вылеты и нулевые указатели

Доступ к нулевому указателю

SCRIPT (E): Null pointer access in 'MyClass.SomeMethod' -- самая распространённая скриптовая ошибка. Мод вызывает метод на удалённом или неинициализированном объекте. Это баг мода, а не ошибка конфигурации сервера. Сообщите об этом автору мода с полным RPT-логом.

Поиск скриптовых ошибок

Ищите в RPT-логе SCRIPT (E). Имя класса и метода в ошибке подскажет, какой мод ответственен. Местоположение RPT:

  • Сервер: каталог $profiles/ (или корень сервера, если -profiles= не задан)
  • Клиент: %localappdata%\DayZ\

Вылет при перезапуске

Если сервер вылетает при каждом перезапуске, storage_1/ может быть повреждён. Остановите сервер, сделайте резервную копию storage_1/, удалите storage_1/data/events.bin и перезапустите. Если не помогает, удалите весь каталог storage_1/ (сбрасывает всю персистентность).

Вылет после обновления мода

Откатитесь к предыдущей версии мода. Проверьте журнал изменений Workshop на критические изменения -- переименованные классы, удалённые конфиги и изменённые форматы RPC являются частыми причинами.


Лут не появляется

types.xml не зарегистрирован

Предметы, определённые в types.xml, не появятся, если файл не зарегистрирован в cfgeconomycore.xml:

xml
<economycore>
    <ce folder="db">
        <file name="types.xml" type="types" />
    </ce>
</economycore>

Если вы используете пользовательский файл types (например, types_custom.xml), добавьте для него отдельную запись <file>.

Неправильные теги category, usage или value

Каждый тег <category>, <usage> и <value> в вашем types.xml должен совпадать с именем, определённым в cfglimitsdefinition.xml. Опечатка вроде usage name="Military" (с большой M) при определении military (с маленькой) молча предотвращает появление предмета.

Nominal установлен в ноль

Если nominal равен 0, CE никогда не заспавнит этот предмет. Это намеренно для предметов, которые должны существовать только через крафт, события или размещение администратором. Если вы хотите, чтобы предмет появлялся естественно, установите nominal минимум в 1.

Отсутствуют позиции групп карты

Предметам нужны допустимые позиции спавна внутри зданий. Если пользовательский предмет не имеет подходящих позиций групп карты (определённых в mapgroupproto.xml), CE негде его разместить. Назначьте предмету категории и usage, которые уже имеют допустимые позиции на карте.


Транспорт не появляется

Транспорт использует систему событий, а не types.xml.

Конфигурация events.xml

Спавн транспорта определяется в events.xml:

xml
<event name="VehicleOffroadHatchback">
    <nominal>8</nominal>
    <min>5</min>
    <max>8</max>
    <lifetime>3888000</lifetime>
    <restock>0</restock>
    <saferadius>500</saferadius>
    <distanceradius>500</distanceradius>
    <cleanupradius>200</cleanupradius>
    <flags deletable="0" init_random="0" remove_damaged="1"/>
    <position>fixed</position>
    <limit>child</limit>
    <active>1</active>
    <children>
        <child lootmax="0" lootmin="0" max="1" min="1" type="OffroadHatchback"/>
    </children>
</event>

Отсутствуют позиции спавна

События транспорта с <position>fixed</position> требуют записей в cfgeventspawns.xml. Без определённых координат событию негде разместить транспорт.

Событие отключено

Если <active>0</active>, событие полностью отключено. Установите в 1.

Повреждённый транспорт блокирует слоты

Если remove_damaged="0", уничтоженный транспорт остаётся в мире навсегда и занимает слоты спавна. Установите remove_damaged="1", чтобы CE удаляла обломки и спавнила замены.


Проблемы с персистентностью

Базы исчезают

Территориальные флаги должны быть обновлены до истечения таймера. Значение FlagRefreshFrequency по умолчанию -- 432000 секунд (5 дней). Если ни один игрок не взаимодействует с флагом в этом окне, флаг и все объекты в его радиусе удаляются.

Проверьте значение в globals.xml:

xml
<var name="FlagRefreshFrequency" type="0" value="432000"/>

Увеличьте это значение на серверах с малым онлайном, где игроки заходят реже.

Предметы исчезают после перезапуска

Каждый предмет имеет lifetime в types.xml (секунды). Когда он истекает без взаимодействия игрока, CE удаляет его. Справочник: 3888000 = 45 дней, 604800 = 7 дней, 14400 = 4 часа. Предметы внутри контейнеров наследуют lifetime контейнера.

storage_1/ слишком разрастается

Если ваш каталог storage_1/ вырастает больше нескольких сотен МБ, ваша экономика производит слишком много предметов. Снизьте значения nominal в types.xml, особенно для предметов с большим количеством -- еда, одежда и боеприпасы. Раздутый файл персистентности вызывает более длительные перезапуски.

Потеряны данные игроков

Инвентари и позиции игроков хранятся в storage_1/players/. Если этот каталог удалён или повреждён, все игроки появляются заново. Регулярно делайте резервные копии storage_1/.


Проблемы с производительностью

Падение серверных FPS

DayZ-серверы стремятся к 30+ FPS для плавного геймплея. Распространённые причины низких серверных FPS:

  • Слишком много зомби -- снизьте ZombieMaxCount в globals.xml (по умолчанию 800, попробуйте 400-600)
  • Слишком много животных -- снизьте AnimalMaxCount (по умолчанию 200, попробуйте 100)
  • Избыточный лут -- снизьте значения nominal в types.xml
  • Слишком много объектов баз -- большие базы с сотнями предметов нагружают персистентность
  • Тяжёлые скриптовые моды -- некоторые моды запускают дорогую логику на каждый кадр

Рассинхронизация

Игроки, испытывающие телепортацию, задержку действий или невидимых зомби -- это симптомы рассинхронизации. Это почти всегда означает, что серверные FPS упали ниже 15. Устраните основную проблему производительности, а не ищите специфическую настройку рассинхронизации.

Долгие перезапуски

Время перезапуска прямо пропорционально размеру storage_1/. Если перезапуски занимают больше 2-3 минут, у вас слишком много постоянных объектов. Снизьте номинальные значения лута и установите соответствующие lifetime.


Чтение файлов логов

Расположение серверного RPT

RPT-файл находится в $profiles/ (если запущен с -profiles=) или в корне сервера. Шаблон имени файла: DayZServer_x64_<дата>_<время>.RPT.

Что искать

Поисковый запросЗначение
SCRIPT (E)Скриптовая ошибка -- в моде есть баг
[ERROR]Ошибка на уровне движка
ErrorMessageФатальная ошибка, которая может вызвать остановку
Cannot openОтсутствующий файл (PBO, конфиг, миссия)
CrashСбой на уровне приложения

Логи BattlEye

Логи BattlEye находятся в каталоге BattlEye/ внутри корня вашего сервера. Они показывают события кика и бана. Если игроки сообщают о неожиданных киках, проверяйте здесь в первую очередь.


Быстрый диагностический чек-лист

Когда что-то идёт не так, проработайте этот список по порядку:

1. Проверьте серверный RPT на строки SCRIPT (E) и [ERROR]
2. Убедитесь, что каждый путь в -mod= существует и содержит addons/*.pbo
3. Убедитесь, что все файлы .bikey скопированы в keys/
4. Проверьте serverDZ.cfg на синтаксические ошибки (пропущенные точки с запятой)
5. Проверьте проброс портов: 2302 UDP + 27016 UDP
6. Убедитесь, что папка миссии совпадает со значением template в serverDZ.cfg
7. Проверьте storage_1/ на повреждения (удалите events.bin при необходимости)
8. Протестируйте сначала без модов, затем добавляйте моды по одному

Шаг 8 -- самая мощная техника. Если сервер работает на ванильной версии, но ломается с модами, вы можете изолировать проблемный мод методом бинарного поиска -- добавьте половину модов, протестируйте, затем сузьте круг.


Главная | << Назад: Управление модами | Далее: Продвинутые темы >>

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