RE:NODE

Руководства16 мин чтения

serverDZ.cfg в DayZ: все настройки по строкам

Все параметры serverDZ.cfg на сервере DayZ по группам: доступ, время, логи, сеть, очередь и persistence, а также ошибки, из-за которых файл перестаёт работать.

0 прочтений

serverDZ.cfg - это файл, который любой сервер DayZ читает раньше всего остального: имя, пароли, число игроков, время суток, строгость античита, логи, очередь на вход и то, какую папку миссии загружать. В нём примерно пятьдесят строк вида key = value; и блок class Missions, и для большинства серверов значение имеют лишь около десятка из них. Остальное - либо безопасные значения по умолчанию, либо сетевые тонкости, которые без причины лучше не трогать. В этом руководстве файл разобран по группам, для каждой строки указано, какое значение стоит выставить, а в конце собраны синтаксические ошибки, из-за которых сервер игнорирует ваши правки или вовсе не запускается.

Если вы поднимаете сервер с нуля, начните с полного руководства по серверу DayZ - там описаны установка, порты и моды. Этот пост - справочник, который удобно держать открытым, пока вы редактируете файл.

Где лежит файл и как он читается#

Файл находится в корне сервера, рядом с DayZServer_x64.exe в Windows или DayZServer в Linux, а путь к нему передаётся параметром запуска:

bash
$ ./DayZServer -config=serverDZ.cfg -port=2302 -profiles=profiles

Имя файла - это соглашение, а не требование. -config= может указывать на любой файл, и именно так держат две конфигурации рядом - тестовую и боевую. На хостинге с панелью параметр обычно зафиксирован на вкладке Startup, и вы редактируете только сам файл - в браузере или по SFTP.

Три факта о том, как сервер читает файл, объясняют большую часть путаницы:

  • Он читается один раз, при старте. Правка файла на работающем сервере ничего не меняет до следующего перезапуска. В отличие от некоторых игр, DayZ не перезаписывает файл при остановке, так что правка, сделанная на работающем сервере, не теряется - она просто ещё не действует.
  • Неизвестные ключи молча игнорируются. Ключ с опечаткой или ключ из старого руководства, который Bohemia с тех пор убрала, не вызывает никакой ошибки. Сервер просто берёт значение по умолчанию. Если настройка будто бы ничего не делает, сверьте написание с файлом, который Bohemia поставляет с текущей сборкой.
  • Синтаксические ошибки молчат не всегда. Пропущенная точка с запятой или незакрытая кавычка могут заставить парсер проглотить следующую строку или остановить сервер при запуске. Ошибка, если она есть, будет ближе к началу файла .RPT сервера в папке профилей.

Самый надёжный порядок работы - самый скучный: остановить сервер, отредактировать, сохранить, запустить и прочитать первый экран лога.

Имя сервера и доступ#

serverDZ.cfg
hostname = "EU | Chernarus | Vanilla+ | 3-hour restarts";password = "";passwordAdmin = "a-long-random-string";enableWhitelist = 0;maxPlayers = 60;
КлючЧто делаетЧто стоит выставить
hostnameИмя в лаунчере и браузере серверовРегион, карта, стиль, ритм перезапусков
passwordПароль для входаПусто для публичного, задан для приватного
passwordAdminВход администратором в игреДлинный и случайный, никому не передавать
enableWhitelistПускать только игроков из списка0 для публичного, 1 для приватного
maxPlayersЧисло слотовСколько реально потянет ваш CPU

hostname - ваша единственная реклама в списке из тысяч серверов, и игроки выбирают, читая именно его. Вынесите туда то, по чему они решают: регион, карту, ванильный ли это сервер и как часто он перезапускается. Избегайте спецсимволов, которые лаунчер отображает криво; обычный ASCII и вертикальная черта безопасны.

passwordAdmin вводится после #login во внутриигровом чате и даёт доступ к немногочисленным ванильным админ-командам вроде #kick и #shutdown. Это не то же самое, что пароль BattlEye RCon, который хранится совсем в другом файле и описан в статье Инструменты администратора DayZ и BattlEye RCon. Оба пароля должны быть длинными и случайными. Короткий пароль администратора на публичном сервере DayZ не взламывают - его угадывают.

enableWhitelist = 1 пускает на сервер только тех, кто в списке. В стандартной установке список - это обычный текстовый файл whitelist.txt, по одному SteamID64 на строку; сервер читает его при старте. Если включить вайтлист с пустым файлом, не зайдёт никто, включая вас, поэтому сначала добавьте себя.

maxPlayers принимает большие числа, но честный предел задаёт серверный FPS, а не это поле. Ванильный сервер на 60 слотов вполне нормален на трёх ядрах; сервер на 60 слотов с длинным списком модов - часто нет. Цифры есть в таблице требований основного руководства, а общая логика описана в статье сколько игроков помещается на сервер.

Античит, сборки и ограничения клиента#

serverDZ.cfg
verifySignatures = 2;forceSameBuild = 1;allowFilePatching = 0;speedhackDetection = 1;disable3rdPerson = 0;disableCrosshair = 0;disableVoN = 0;vonCodecQuality = 20;

verifySignatures = 2 проверяет подпись каждого мода по ключам в папке keys сервера. Это единственное значение, которое поддерживает Bohemia, и именно отказ от него приводит к серверам с модифицированными клиентскими файлами. Если игроков выкидывает с ошибкой подписи, нужно скопировать недостающий .bikey в keys, а не понижать это значение.

forceSameBuild = 1 не пускает клиентов с другой сборкой игры. После патча игроки, которые не обновились, получают понятное сообщение ещё на входе, а не невнятный сбой посреди загрузки. Оставьте включённым.

allowFilePatching = 0 блокирует клиентов, запущенных с -filePatching: этот режим позволяет клиенту загружать отдельные файлы вместо подписанных PBO. Он нужен разработчикам модов при локальном тестировании, больше никому, и это частый путь для бытового читерства.

speedhackDetection = 1 включает встроенную проверку на спидхак. Она дешёвая и редко даёт ложные срабатывания; оставьте значение по умолчанию.

disable3rdPerson и disableCrosshair определяют стиль сервера сильнее любых других настроек. Только первое лицо (disable3rdPerson = 1) лишает возможности заглядывать за стены из третьего лица и считается нормой на «хардкорных» серверах. Оно же меняет то, как базы штурмуют и обороняют, поэтому решите это до запуска, а не после месяца строительства баз под третье лицо.

disableVoN = 0 сохраняет голосовой чат по близости, а он во многом и есть DayZ - ограбления, переговоры, торговля. vonCodecQuality принимает значения от 0 до 30; 20 - значение по умолчанию и разумный компромисс между чёткостью и трафиком. Поднятие до 30 немного добавляет трафика на каждого говорящего игрока, и разницу почти никто не замечает.

Время суток и смена дня и ночи#

serverDZ.cfg
serverTime = "SystemTime";serverTimeAcceleration = 6;serverNightTimeAcceleration = 4;serverTimePersistent = 1;
КлючДиапазонЧто делает
serverTime"SystemTime" или "YYYY/MM/DD/HH/MM"Начальные дата и время
serverTimeAccelerationот 0 до 24Множитель внутриигровых часов
serverNightTimeAccelerationот 0.1 до 64Дополнительный множитель ночью
serverTimePersistent0 или 1Сохранять время между перезапусками

Эта группа вызывает больше жалоб игроков, чем любая другая, хотя арифметика здесь простая. serverTimeAcceleration умножает скорость всех часов: при 1 сутки длятся 24 реальных часа, при 6 - четыре, при 12 - два. serverNightTimeAcceleration применяется поверх, только ночью, так что реальная скорость ночи - это произведение двух значений.

Пример. При serverTimeAcceleration = 6 и serverNightTimeAcceleration = 4 день идёт в 6 раз быстрее реального, а ночь - в 24 раза. За четырёхчасовую игровую сессию игроки видят длинные дни, в которые удобно играть, и ночи, которые заканчиваются гораздо меньше чем за час. Такая форма - длинный день, короткая ночь - нужна большинству публичных серверов, потому что ночи в DayZ по-настоящему тёмные и заметная часть онлайна на это время уходит.

serverTime = "SystemTime" запускает часы с локального времени машины. Фиксированное значение вроде "2024/6/15/8/0" начинает каждую сессию в восемь утра в июне, и от этого же зависит длина светового дня по сезону. При serverTimePersistent = 0 это начальное время применяется заново при каждом перезапуске - вот почему на серверах с четырьмя перезапусками в день и значением по умолчанию 0 утро наступает четыре раза. Поставьте 1, и часы продолжат идти с того места, где остановились.

Два связанных ключа меняют не длину ночи, а то, как она выглядит. lightingConfig = 0 - более светлая ночь, 1 - более тёмная. disablePersonalLight = 1 убирает слабый свет вокруг каждого игрока, благодаря которому в кромешной темноте можно играть без фонаря. Если сдвинуть обе настройки в сторону темноты, ночи станут гораздо тяжелее; если в сторону света - просто атмосферными. В последних сборках обе можно задать и в cfggameplay.json, о нём ниже.

Persistence, возрождение и урон базам#

serverDZ.cfg
instanceId = 1;storageAutoFix = 1;respawnTime = 5;disableRespawnDialog = 0;disableBaseDamage = 0;disableContainerDamage = 0;

instanceId определяет, какую папку persistence сервер читает и пишет: storage_1 для инстанса 1, storage_2 для инстанса 2, внутри папки миссии. В этой папке лежат все базы, палатки, машины и персонажи. Смените число, и сервер начнёт новый мир рядом со старым - старые данные никуда не делись, они просто не загружаются. Два сервера на одной машине никогда не должны использовать один и тот же instance id. Всё об этой папке, включая частичные и полные вайпы, - в статье Вайпы и persistence в DayZ.

storageAutoFix = 1 позволяет серверу при старте починить повреждённый файл persistence, а не отказаться его загружать. Оставьте включённым. Альтернатива автоматическому ремонту - не целый мир, а сервер, который не запустится, пока кто-нибудь вручную не восстановит backup.

respawnTime - задержка в секундах, после которой погибший игрок может возродиться. disableRespawnDialog = 1 пропускает выбор между свежим и случайным спавном и сразу отправляет игрока в случайную точку.

disableBaseDamage = 1 делает построенные заборы и стены неразрушимыми, а disableContainerDamage = 1 - то же самое для палаток, бочек и ящиков. Вместе они превращают сервер в сервер без рейдов. Это законный стиль для PvE- и RP-сообществ, но он убирает противовес накопительству, и на долгоживущем сервере с неразрушимыми хранилищами экономика лута забивается вещами, которые никто никогда не потеряет. Если вы отключаете рейды, внимательнее следите за флагами подсчёта в types.xml - они описаны в руководстве по экономике лута.

Очередь на вход, пинг и сообщения#

serverDZ.cfg
loginQueueConcurrentPlayers = 5;loginQueueMaxPlayers = 500;maxPing = 200;motd[] = {"Restarts every 3 hours", "Discord: example.gg/server"};motdInterval = 300;

loginQueueConcurrentPlayers - сколько игроков могут одновременно находиться в процессе загрузки, а loginQueueMaxPlayers - какой длины может быть очередь. Значения по умолчанию выбраны не случайно: двадцать игроков, которые одновременно грузятся после перезапуска, - это большой всплеск нагрузки на диск и CPU, а если пускать их по пять, серверный FPS остаётся стабильным для тех, кто уже в игре. Если поднять первое значение, наплыв после перезапуска пройдёт быстрее, но первые минуты будут тяжелее.

maxPing выкидывает игроков, чей пинг держится выше заданного значения в миллисекундах. Для сервера в Германии 200 пускает большую часть Европы, Ближнего Востока и восток США и отсекает игроков, у которых движение рассинхронизировалось бы для всех вокруг. Понижайте его, только если уверены в своей аудитории. В статье задержка, джиттер и потеря пакетов объяснено, почему высокий пинг мешает не только самому игроку, но и остальным.

motd[] - массив строк, которые показываются по очереди; motdInterval - пауза между ними в секундах. Обратите внимание на квадратные скобки после имени и фигурные вокруг списка: это единственное место в файле, где меняется синтаксис, и именно отсюда берётся большинство ошибок разбора.

Логи и debug monitor#

serverDZ.cfg
timeStampFormat = "Short";logAverageFps = 300;logMemory = 300;logPlayers = 300;logFile = "server_console.log";adminLogPlayerHitsOnly = 0;adminLogPlacement = 1;adminLogBuildActions = 1;adminLogPlayerList = 1;enableDebugMonitor = 0;

Три значения log* - это интервалы в секундах. logAverageFps = 300 пишет серверный FPS в лог каждые пять минут, и это самое полезное число для оценки того, перегружен ли сервер. Здоровый уровень - примерно выше 30; ниже 15 игроки замечают откаты позиции и двери, которые открываются со второго раза. logMemory и logPlayers делают то же самое для потребления памяти и числа игроков, что позволяет сопоставить замедление с тем, сколько людей было онлайн.

logFile задаёт имя консольного лога, который пишется в папку профилей. timeStampFormat бывает "Short" (только время) или "Full" (дата и время); выбирайте Full, если вам когда-нибудь придётся сравнивать логи за разные дни.

Ключи adminLog* определяют, что попадает в файл .ADM - журнал подключений, убийств, попаданий и позиций:

  • adminLogPlayerHitsOnly = 1 ограничивает запись попаданий только попаданиями по игрокам, что уменьшает файл на серверах с большим количеством заражённых.
  • adminLogPlacement = 1 записывает каждый установленный объект - палатки, ловушки, заборы. Незаменимо, когда нужно разобраться в спорах о том, кто что и где построил.
  • adminLogBuildActions = 1 записывает постройку, разборку и разрушение элементов базы. Включите, если в ваших правилах есть что-то о рейдах.
  • adminLogPlayerList = 1 каждые пять минут пишет полный список игроков с позициями.

Всё это стоит места на диске, а не CPU. Загруженный сервер со всеми включёнными опциями пишет несколько десятков мегабайт .ADM в день - дешёвая страховка; просто удаляйте старые логи по расписанию. Разумная политика хранения описана в статье какие логи стоит хранить.

enableDebugMonitor = 1 показывает каждому игроку небольшой оверлей со здоровьем, кровью и позицией. На тестовом сервере это полезно, а на боевом - подарок любому, кто охотится на других игроков. На публичном сервере держите выключенным.

Сеть, query и репликация#

serverDZ.cfg
steamQueryPort = 2305;guaranteedUpdates = 1;multithreadedReplication = 1;simulatedPlayersBatch = 20;networkRangeClose = 20;networkRangeNear = 150;networkRangeFar = 1000;networkRangeDistantEffect = 4000;defaultVisibility = 1375;defaultObjectViewDistance = 1375;

steamQueryPort - UDP-порт, через который лаунчер и браузер серверов запрашивают имя сервера, карту и число игроков. Если к серверу можно подключиться по IP, но в списке его нет, первым делом подозревайте этот порт: он должен совпадать с портом, реально выделенным серверу, и не должен использоваться ничем другим. Почему игры разделяют query-порт и игровой порт, объясняется в статье порты игровых серверов.

guaranteedUpdates = 1 выбирает сетевой протокол; 1 - единственное документированное значение. multithreadedReplication = 1 позволяет движку распределять сетевую репликацию по потокам, и её стоит оставить включённой. simulatedPlayersBatch ограничивает, сколько игроков сервер симулирует за один кадр.

Значения networkRange* - это расстояния в метрах, в пределах которых объекты реплицируются клиенту с разным приоритетом, а два значения видимости ограничивают дальность обзора и дальность прорисовки объектов. Это как раз те настройки, которые на форумах про хостинг советуют поднимать «ради красивой картинки». Не надо. Каждое увеличение означает больше объектов, реплицируемых каждому игроку в каждом кадре, и платит за это главный поток, который и так определяет ваш серверный FPS. Значения по умолчанию подобраны под стандартные карты. Единственная веская причина их менять - конкретная проблема, которую вы измерили, причём сначала на тестовом инстансе.

Блок миссии и cfggameplay.json#

Файл заканчивается блоком, который выбирает карту и экономику:

serverDZ.cfg
enableCfgGameplayFile = 1;class Missions{    class DayZ    {        template = "dayzOffline.chernarusplus";    };};

template - это имя папки в mpmissions, написанное точно, с учётом заглавных букв. Chernarus - это dayzOffline.chernarusplus, Livonia - dayzOffline.enoch; карты сообщества поставляются со своими папками миссий, как описано в статье запуск Deer Isle или Namalsk. Неверное имя не откатывается на Chernarus - сервер просто не может загрузить миссию.

enableCfgGameplayFile = 1 говорит серверу читать cfggameplay.json из папки миссии. Bohemia добавила этот файл для игровых настроек, которые раньше требовали скриптового мода: выносливость, передвижение, ограничения строительства баз, наборы стартового снаряжения, температура и освещение. Некоторые значения есть в обоих местах - disablePersonalLight, lightingConfig, disableBaseDamage, disableContainerDamage, disableRespawnDialog, - и при включённом json документация Bohemia считает, что задаются они именно в json. Если вы его включаете, задавайте эти значения там, а копии в .cfg оставьте по умолчанию, чтобы на вопрос «где это настроено» был только один ответ.

Фрагмент - как иллюстрация структуры, а не полный файл:

cfggameplay.json
{  "GeneralData": {    "disableBaseDamage": false,    "disableContainerDamage": false,    "disableRespawnDialog": false  },  "PlayerData": {    "disablePersonalLight": false  },  "WorldsData": {    "lightingConfig": 1  }}

Начинайте с cfggameplay.json, который поставляется в вашей папке миссии, а не пишите файл сами: в нём есть поле версии и гораздо больше ключей, а структура меняется от обновления к обновлению. Проверяйте JSON на валидность перед перезапуском - одна лишняя запятая в конце, и сервер либо проигнорирует файл, либо остановится.

Чистая стартовая конфигурация#

Если собрать всё вместе, разумный публичный сервер выглядит так. Копируйте структуру, а не строки:

serverDZ.cfg
hostname = "EU | Chernarus | Vanilla+ | Restarts 00 03 06 09 12 15 18 21 CET";password = "";passwordAdmin = "replace-with-32-random-characters";enableWhitelist = 0;maxPlayers = 50;verifySignatures = 2;forceSameBuild = 1;allowFilePatching = 0;disableVoN = 0;vonCodecQuality = 20;disable3rdPerson = 0;disableCrosshair = 0;serverTime = "SystemTime";serverTimeAcceleration = 6;serverNightTimeAcceleration = 4;serverTimePersistent = 1;loginQueueConcurrentPlayers = 5;loginQueueMaxPlayers = 500;instanceId = 1;storageAutoFix = 1;respawnTime = 5;maxPing = 200;timeStampFormat = "Full";logAverageFps = 300;logMemory = 300;logPlayers = 300;logFile = "server_console.log";adminLogPlacement = 1;adminLogBuildActions = 1;enableDebugMonitor = 0;steamQueryPort = 2305;enableCfgGameplayFile = 1;class Missions{    class DayZ    {        template = "dayzOffline.chernarusplus";    };};

Прежде чем копировать, сделайте backup исходного файла. На RE:NODE редактор в браузере подсвечивает синтаксис, что ловит незакрытые кавычки ещё до перезапуска, а слоты для backup на каждом тарифе DayZ позволяют вернуть весь сервер одной кнопкой, если правка пошла не так. Query-порт и игровой порт выделяются автоматически и показаны на вкладке Network, так что steamQueryPort должен совпадать с указанным там.

Ошибки, которые ломают файл#

  • Типографские кавычки. При копировании с веб-страницы или из текстового процессора " превращается в фигурные кавычки, которые парсер не принимает. Редактируйте в простом текстовом редакторе или в редакторе панели.
  • Ключи из старых руководств. В руководствах 2018 года перечислены ключи, которые с тех пор удалены или переименованы. Неизвестные ключи игнорируются, поэтому сервер работает, а настройка ничего не делает. Сверяйтесь с файлом, поставляемым с вашей сборкой.
  • Имя шаблона. В Linux регистр имеет значение. dayzoffline.chernarusplus и dayzOffline.chernarusplus там - разные папки.
  • Две копии одной настройки. Значение, заданное и в serverDZ.cfg, и в cfggameplay.json, приводит к спорам о том, какое из них побеждает. Задавайте его в одном месте.
  • Правка не того файла. Если в строке запуска указано -config=serverDZ_live.cfg, правка serverDZ.cfg ничего не изменит. Сначала проверьте вкладку Startup или строку запуска.
  • Случайная смена `instanceId`. Мир выглядит вайпнутым. Это не так - старая папка storage на месте. Верните прежнее число.

FAQ#

Нужно ли перезапускать сервер после правки serverDZ.cfg?

Да. Файл читается один раз при запуске сервера. Изменения вступают в силу при следующем старте, а сервер не перезаписывает ваши правки при остановке, так что редактировать файл на работающем сервере безопасно - главное, перезапустить его потом.

Как сделать ночи короче на сервере DayZ?

Поднимите serverNightTimeAcceleration. Он умножает обычное ускорение только ночью, поэтому serverTimeAcceleration = 6 вместе с ночным значением 4 дают длинные дни и ночи, которые проходят в четыре раза быстрее дней.

Почему сервер игнорирует добавленную мной настройку?

Обычно дело в ключе с опечаткой или устаревшем ключе, который DayZ игнорирует без ошибки, или в пропущенной точке с запятой на строке перед ним. Сравните ключ с поставляемым файлом и проверьте лог .RPT на сообщения парсера.

Чем passwordAdmin отличается от пароля RCon?

passwordAdmin используется в игре вместе с #login и даёт несколько команд в чате. Пароль BattlEye RCon хранится в BEServer_x64.cfg, и именно по нему подключаются удалённые инструменты. Они независимы, и оба должны быть длинными и случайными.

Стоит ли поднимать дальность сети и обзора?

Нет, если только вы не измерили конкретную проблему. Более высокие значения реплицируют каждому игроку больше объектов и съедают серверный FPS. Значения по умолчанию подобраны под стандартные карты.

Можно ли запустить два сервера с одним serverDZ.cfg?

Без изменений - нет. Каждому нужны свои порты, свой steamQueryPort и свой instanceId, иначе второй не сможет занять порт или будет делить и портить persistence первого.


Комментарии

Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.

0/2000