serverDZ.cfg - это файл, который любой сервер DayZ читает раньше всего остального: имя, пароли, число игроков, время суток, строгость античита, логи, очередь на вход и то, какую папку миссии загружать. В нём примерно пятьдесят строк вида key = value; и блок class Missions, и для большинства серверов значение имеют лишь около десятка из них. Остальное - либо безопасные значения по умолчанию, либо сетевые тонкости, которые без причины лучше не трогать. В этом руководстве файл разобран по группам, для каждой строки указано, какое значение стоит выставить, а в конце собраны синтаксические ошибки, из-за которых сервер игнорирует ваши правки или вовсе не запускается.
Если вы поднимаете сервер с нуля, начните с полного руководства по серверу DayZ - там описаны установка, порты и моды. Этот пост - справочник, который удобно держать открытым, пока вы редактируете файл.
Где лежит файл и как он читается#
Файл находится в корне сервера, рядом с DayZServer_x64.exe в Windows или DayZServer в Linux, а путь к нему передаётся параметром запуска:
$ ./DayZServer -config=serverDZ.cfg -port=2302 -profiles=profilesИмя файла - это соглашение, а не требование. -config= может указывать на любой файл, и именно так держат две конфигурации рядом - тестовую и боевую. На хостинге с панелью параметр обычно зафиксирован на вкладке Startup, и вы редактируете только сам файл - в браузере или по SFTP.
Три факта о том, как сервер читает файл, объясняют большую часть путаницы:
- Он читается один раз, при старте. Правка файла на работающем сервере ничего не меняет до следующего перезапуска. В отличие от некоторых игр, DayZ не перезаписывает файл при остановке, так что правка, сделанная на работающем сервере, не теряется - она просто ещё не действует.
- Неизвестные ключи молча игнорируются. Ключ с опечаткой или ключ из старого руководства, который Bohemia с тех пор убрала, не вызывает никакой ошибки. Сервер просто берёт значение по умолчанию. Если настройка будто бы ничего не делает, сверьте написание с файлом, который Bohemia поставляет с текущей сборкой.
- Синтаксические ошибки молчат не всегда. Пропущенная точка с запятой или незакрытая кавычка могут заставить парсер проглотить следующую строку или остановить сервер при запуске. Ошибка, если она есть, будет ближе к началу файла
.RPTсервера в папке профилей.
Самый надёжный порядок работы - самый скучный: остановить сервер, отредактировать, сохранить, запустить и прочитать первый экран лога.
Имя сервера и доступ#
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 слотов с длинным списком модов - часто нет. Цифры есть в таблице требований основного руководства, а общая логика описана в статье сколько игроков помещается на сервер.
Античит, сборки и ограничения клиента#
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 немного добавляет трафика на каждого говорящего игрока, и разницу почти никто не замечает.
Время суток и смена дня и ночи#
serverTime = "SystemTime";serverTimeAcceleration = 6;serverNightTimeAcceleration = 4;serverTimePersistent = 1;| Ключ | Диапазон | Что делает |
|---|---|---|
serverTime | "SystemTime" или "YYYY/MM/DD/HH/MM" | Начальные дата и время |
serverTimeAcceleration | от 0 до 24 | Множитель внутриигровых часов |
serverNightTimeAcceleration | от 0.1 до 64 | Дополнительный множитель ночью |
serverTimePersistent | 0 или 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, возрождение и урон базам#
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 - они описаны в руководстве по экономике лута.
Очередь на вход, пинг и сообщения#
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#
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 и репликация#
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#
Файл заканчивается блоком, который выбирает карту и экономику:
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 оставьте по умолчанию, чтобы на вопрос «где это настроено» был только один ответ.
Фрагмент - как иллюстрация структуры, а не полный файл:
{ "GeneralData": { "disableBaseDamage": false, "disableContainerDamage": false, "disableRespawnDialog": false }, "PlayerData": { "disablePersonalLight": false }, "WorldsData": { "lightingConfig": 1 }}Начинайте с cfggameplay.json, который поставляется в вашей папке миссии, а не пишите файл сами: в нём есть поле версии и гораздо больше ключей, а структура меняется от обновления к обновлению. Проверяйте JSON на валидность перед перезапуском - одна лишняя запятая в конце, и сервер либо проигнорирует файл, либо остановится.
Чистая стартовая конфигурация#
Если собрать всё вместе, разумный публичный сервер выглядит так. Копируйте структуру, а не строки:
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. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.