В DayZ есть две системы, с которыми новые администраторы знакомятся не в том порядке: моды, с которых все начинают, и центральная экономика, от которой зависит, есть ли на карте хоть что-нибудь, что стоит найти. Сервер с идеально подобранными модами и нетронутой экономикой - пустой сервер. Чтобы сделать всё правильно, нужно примерно 6 ГБ памяти на сервер на 40 слотов, три UDP-порта, аккаунт Steam, владеющий игрой, и готовность править XML и перезапускать. В этом руководстве весь путь: установка, serverDZ.cfg, порты, моды и их ключи, файлы экономики, администрирование и сбои, из-за которых приходят обращения в поддержку.
Что вы на самом деле запускаете#
Сервер DayZ - это отдельное приложение Steam, DayZ Server, app id 223350, и в отличие от большинства игр оно недоступно для анонимного входа в SteamCMD. Нужен аккаунт Steam, которому принадлежит DayZ, и при первом входе SteamCMD запросит у него подтверждение Steam Guard. Хостеры, которые устанавливают DayZ за вас, делают это с вашими учётными данными именно поэтому. Возьмите запасной аккаунт, где есть игра и больше ничего ценного: игровому серверу нечего делать с аккаунтом, которым вы покупаете вещи.
Из коробки сервер даёт меньше, чем ожидают:
- Одна папка миссии в
mpmissions, которая одновременно и карта, и экономика. Chernarus - этоdayzOffline.chernarusplus, Livonia -dayzOffline.enoch, у более поздних карт свои папки: смотрите в каталог, а не угадывайте имя. - Файл конфигурации
serverDZ.cfgпримерно с сорока настройками. - BattlEye, который отвечает за античит, баны и удалённое администрирование.
- Никакого внутриигрового меню администратора. Нет наблюдения, телепортации, создания предметов и списка игроков. Любой административный инструмент, который вы видели на сервере DayZ, - это мод или внешний клиент RCon.
- Персистентный мир, хранящийся отдельно от файлов миссии, так что править экономику можно, не стирая базы игроков - в большинстве случаев.
Папка миссии - главная идея. Когда вы правите лут, вы правите файлы внутри mpmissions/dayzOffline.chernarusplus/, а эти файлы читаются при запуске. Ничего из сделанного там не вступит в силу, пока сервер не перезапустят, поэтому у администрирования DayZ такой ритм: правка, перезапуск, проверка, снова правка.
Требования и потребление ресурсов#
Для своего числа игроков DayZ - тяжёлый сервер. Он моделирует зомби, животных, транспорт и экономику предметов на карте в 225 квадратных километров и сильно упирается в один поток.
| Игроки | RAM | CPU | Примечания |
|---|---|---|---|
| 10-20, ваниль | 4-6 GB | 2 ядра | Комфортно; подходит для закрытой группы |
| 30-40, ваниль | 6-8 GB | 2-3 ядра | Обычный публичный сервер |
| 40-60, ваниль | 8-10 GB | 3+ ядра | Ограничением становится server FPS, а не память |
| 30-50, много модов | 10-12 GB | 3+ ядра | Списки модов масштаба Expansion, торговцы, ИИ |
- CPU определяет, как ощущается полный сервер. Смотреть нужно на server FPS, он пишется в лог, если задать
logAverageFps. Здорово, когда значение выше 30; ниже примерно 15 игроки начинают жаловаться на рывки, рассинхронизацию лута и двери, которые открываются дважды. - Память растёт со списком модов гораздо быстрее, чем с числом игроков. Ванильный сервер на 60 слотов занимает меньше, чем сервер на 30 слотов с большой сборкой Expansion.
- Диск: установка сервера занимает примерно 3 ГБ, и каждый мод добавляет своё. Список из двадцати модов легко даёт ещё 10-15 ГБ, поэтому тарифы для DayZ начинаются с большего диска, чем можно ожидать от такой старой игры.
- Сеть нетребовательна, несколько сотен килобайт в секунду на игрока, но это UDP, и он чувствителен к задержкам. Общее правило из статьи CPU или RAM для игровых серверов применимо здесь сильнее, чем в большинстве игр: люди покупают память, когда на самом деле упирается одно ядро.
Тарифы DayZ в RE:NODE начинаются с 6 ГБ и трёх выделенных портов - это правильная конфигурация для ванильного или слегка модифицированного сервера на 40 слотов. Большому серверу Expansion нужна верхняя ступень.
Установка сервера и строка запуска#
На вашей машине - SteamCMD с настоящим входом:
$ steamcmd +force_install_dir /home/dayz/server +login <steam_account> \ +app_update 223350 validate +quitЗатем сервер запускается с длинной строкой параметров. Вот параметры, которые важны; в панели они выглядят как поля на вкладке Startup, а не как текст, который вы набираете:
| Параметр | Назначение |
|---|---|
-config=serverDZ.cfg | Какой файл конфигурации читать |
-port=2302 | Игровой порт |
-profiles=profiles | Куда пишутся логи, BattlEye и дампы сбоев |
-mod=@CF;@Mod2 | Моды для клиента и сервера, через точку с запятой, порядок важен |
-servermod=@AdminTool | Только серверные моды, которых у клиентов быть не должно |
-doLogs | Писать логи скриптов и ошибок |
-adminLog | Писать журнал активности игроков .ADM |
-netLog | Логирование сетевого трафика: один раз полезно, постоянно - шум |
-freezeCheck | Сохранить лог, если сервер завис |
-cpuCount=2 | Сколько ядер разрешено использовать движку |
Разместите -profiles там, куда можно попасть через SFTP или файловый менеджер, потому что в этой папке лежат ответы на все вопросы «почему он так сделал». Если вы новичок в SteamCMD, app id и не знаете, чем validate отличается от обычного обновления, всё это разобрано в статье SteamCMD простыми словами.
serverDZ.cfg, ключ за ключом#
Файл - это список строк вида key = value; с точкой с запятой на конце и блоком миссии в конце. Значения ниже - те, что поставляются в примере от Bohemia; это разумная отправная точка, а не рекомендация.
hostname = "Chernarus - vanilla, no KOS in trader";password = "";passwordAdmin = "a-long-random-string";maxPlayers = 60;verifySignatures = 2;forceSameBuild = 1;disableVoN = 0;vonCodecQuality = 20;disable3rdPerson = 0;disableCrosshair = 0;serverTime = "SystemTime";serverTimeAcceleration = 12;serverNightTimeAcceleration = 1;serverTimePersistent = 0;loginQueueConcurrentPlayers = 5;loginQueueMaxPlayers = 500;instanceId = 1;storageAutoFix = 1;steamQueryPort = 2305;respawnTime = 5;timeStampFormat = "Short";logAverageFps = 300;logMemory = 300;logPlayers = 300;logFile = "server_console.log";adminLogPlayerHitsOnly = 0;enableDebugMonitor = 0;allowFilePatching = 0;multithreadedReplication = 1;speedhackDetection = 1;class Missions{ class DayZ { template = "dayzOffline.chernarusplus"; };};Над этими параметрами стоит подумать, а не копировать их:
verifySignatures = 2отклоняет любой мод,.bikeyкоторого нет в папкеkeysсервера. Оставьте 2. Опустить до 0 - это верный способ получить сервер, на котором работают чужие изменённые PBO.forceSameBuild = 1отклоняет клиентов с другой сборкой игры. Если выключить, устаревший клиент не заработает, он просто споткнётся позже и менее понятно.allowFilePatching = 0блокирует клиентов, запущенных с-filePatching, а именно так приходит немало мелкого читерства. Включать его нужно только разработчикам модов.serverTimeAccelerationумножает внутриигровые часы.12даёт двухчасовые сутки.serverNightTimeAccelerationумножает ещё раз в течение ночи, так чтоserverTimeAcceleration = 12приserverNightTimeAcceleration = 4даёт длинный день и короткую ночь - самое востребованное изменение на любом публичном сервере.serverTimePersistent = 1заставляет мировые часы переживать перезапуск, а не сбрасываться кserverTime. При четырёх перезапусках в день и значении 0 на вашем сервере одно и то же утро наступает четыре раза.instanceIdвыбирает папку персистентности,storage_1для экземпляра 1. Два сервера на одной машине не должны использовать один и тот же instance id.disableVoN = 0сохраняет внутриигровой голос. Его отключение меняет игру сильнее, чем большинство других настроек в файле.
Порты и подключение#
| Порт | Протокол | Назначение |
|---|---|---|
2302 | UDP | Игровой трафик, задаётся через -port= |
2303-2304 | UDP | Резерв рядом с игровым портом; хостеры выделяют блок целиком |
2305 | UDP | Запросы Steam, задаётся через steamQueryPort |
| Порт RCon | UDP | BattlEye RCon, задаётся в BEServer_x64.cfg |
Порт запросов - тот, на котором чаще всего попадаются. Игра работает, подключиться по IP можно, а в списке DayZ Launcher сервер так и не появляется - значит, steamQueryPort закрыт или указан неверно. Оба порта UDP; правило файрвола, открывающее только TCP, здесь вообще ничего не даёт. В статье порты игровых серверов разобрано, зачем порт запросов существует отдельно от игрового и как выглядит каждый из сбоев.
Почти никто не заходит на модифицированный сервер DayZ из внутриигрового браузера. Все пользуются DayZ Launcher: он читает список модов, который объявляет сервер, подписывается на эти элементы Workshop и запускает игру с подходящей строкой -mod=. Именно поэтому порядок загрузки модов и ключи должны быть верными: лаунчер автоматизирует клиентскую сторону и громко сдаётся, когда стороны расходятся.
Моды: ключи, порядок загрузки и два флага#
Моды из Workshop скачиваются через SteamCMD с app id клиента, 221100, а не сервера:
$ steamcmd +force_install_dir /home/dayz/server +login <steam_account> \ +workshop_download_item 221100 1559212036 +quitЗатем должны произойти три вещи, и пропуск любой из них даёт свой запутанный симптом:
- Папка мода с именем
@SomeModлежит в корне сервера. - Файл
keys/*.bikeyиз неё скопирован в папкуkeysсервера. Если пропустить этот шаг, BattlEye выкинет клиентов на экране загрузки с ошибкой подписи, хотя всё остальное сделано правильно. - Папка указана в
-mod=в порядке зависимостей. Сначала фреймворки:-mod=@CF;@DayZ-Expansion-Core;@DayZ-Expansion-Bundle. Community Framework (@CF) - зависимость очень многих модов, и загружаться он должен раньше них.
Через -servermod= подключайте всё, чего у клиента быть не должно: инструменты администратора, спавнеры лута, серверные правки. Моды из -servermod= лаунчеру не объявляются, поэтому игроков не просят их скачивать. Если по ошибке положить серверный мод в -mod=, каждый заходящий игрок будет скачивать то, что ему не нужно.
Две привычки спасают целые серверы. Первая: фиксируйте список модов и обновляйте его осознанно, а не автоматически - патч DayZ делает недействительным каждый мод, пока автор его не пересоберёт, и сервер с автообновлением в день патча - это сервер, на который в день патча никто не может зайти. Статью что делать, когда обновление мода всё сломало стоит прочитать до того, как она понадобится. Вторая: перед каждым обновлением сохраняйте копию рабочей папки мода и своих XML. В статье моды Steam Workshop на выделенных серверах разобрано, как скачивание из Workshop ведёт себя на стороне сервера в разных играх.
types.xml и центральная экономика#
Именно эта часть определяет, стоит ли играть на вашем сервере. Лут не разбрасывается случайно. Центральная экономика хранит целевое количество каждого предмета на карте и пополняет его до этой цифры, а правила лежат в XML внутри папки миссии.
| Файл | Что определяет |
|---|---|
db/types.xml | Каждый предмет: сколько его существует, как долго живёт, как быстро возвращается |
db/events.xml | Транспорт, крушения вертолётов, появление зомби и животных |
db/globals.xml | Общемировые лимиты вроде ZombieMaxCount и таймеры очистки |
db/messages.xml | Плановые объявления, включая то, что выключает сервер |
db/economy.xml | Какие подсистемы экономики вообще загружаются |
cfgeconomycore.xml | Какие XML-файлы читаются, включая ваши собственные |
cfgspawnabletypes.xml | С какими навесками и содержимым появляется предмет |
cfgeventspawns.xml | Координаты, которые разрешено использовать событиям |
cfgplayerspawnpoints.xml | Где появляются новые игроки и возрождающиеся |
Запись в types.xml выглядит так. Числа условные - настоящие смотрите в поставляемом файле:
<type name="M4A1"> <nominal>8</nominal> <lifetime>7200</lifetime> <restock>1800</restock> <min>4</min> <quantmin>-1</quantmin> <quantmax>-1</quantmax> <cost>100</cost> <flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/> <category name="weapons"/> <usage name="Military"/> <value name="Tier4"/></type>Каждый элемент выполняет свою задачу, и пять из них решают почти всё:
nominal- целевое количество на карте.min- нижняя граница: когда живое количество падает до неё, экономика ставит в очередь пополнение.lifetime- сколько секунд нетронутый предмет живёт до того, как его заберёт очистка. Если предмет подобрать и снова положить, отсчёт начинается заново.restock- задержка, до истечения которой экономика не вправе заменять то, что забрали.0означает «как только сможет».cost- приоритет появления от 0 до 100: какой из подходящих предметов займёт слот.usageиvalueопределяют, где предмет может появиться:usage- тип здания (Military, Police, Medic, Farm, Industrial, Town, Village, Hunting),value- уровень лута, и чем выше уровень, тем дальше от побережья. Предмет без usage и без value не появляется нигде - это самая частая рана, которую администраторы DayZ наносят себе сами.- Атрибуты
flagsопределяют, что засчитывается вnominal.count_in_cargo="1"означает, что предметы внутри контейнеров тоже считаются, так что клан-накопитель может лишить карту предмета, и при этом ничего не будет сломано.
Из такого механизма следуют три вывода. Опустевший город - это обычно проблема nominal, а не настройки скорости появления, которую вы никак не найдёте. Повышение nominal во всём файле не умножает лут бесконечно, потому что общее количество ограничено ещё и точками лута на карте. А предмет с коротким lifetime исчезает из базы, которую вы оставили на неделю, - используйте контейнер, у которого свой lifetime.
Модам, добавляющим предметы, тоже нужны их записи. Мод оружия, который будто бы ничего не делает, - это почти всегда мод, предметы которого так и не зарегистрировали в экономике: мод загружен, оружие есть в файлах игры, а появлять его некому. Правильное решение - не вставлять записи мода в ванильный types.xml, который перезапишет обновление игры. Вместо этого зарегистрируйте собственную папку в cfgeconomycore.xml:
<ce folder="custom"> <file name="mod_types.xml" type="types"/></ce>Теперь ваши дополнения лежат в mpmissions/dayzOffline.chernarusplus/custom/mod_types.xml и переживают обновления поверх. В статье types.xml и экономика лута вся система разобрана подробно.
Персистентность существует отдельно от всего этого. Базы игроков, тайники, транспорт и данные персонажей лежат в storage_<instanceId> рядом с папкой миссии. Правка экономики их не стирает. Удаление этой папки стирает - это и есть вайп, причём единственный надёжный. Сначала сделайте копию и храните её не на сервере: статья бэкапы, которые действительно восстанавливаются существует потому, что бэкап, который никто не восстанавливал, - это гипотеза.
Администрирование: RCon, логи и перезапуски#
Администрирование - это BattlEye RCon плюс тот админ-мод, который вы выбрали. passwordAdmin в serverDZ.cfg должен быть длинным и случайным, хотя ванильная игра почти ничего с ним делать не позволяет; пароль RCon - отдельный, и лежит он в BEServer_x64.cfg в папке BattlEye внутри каталога profiles.
Собственный набор команд BattlEye, который вводится в клиенте RCon или в консоли панели, невелик:
| Команда | Действие |
|---|---|
players | Подключённые игроки с их ID и пингом |
kick <id> <reason> | Выгнать по id сессии |
ban <id> <minutes> <reason> | Забанить подключённого игрока, 0 - навсегда |
addBan <GUID> <minutes> <reason> | Забанить того, кто не подключён |
bans / removeBan <n> | Показать и снять баны |
say -1 <message> | Сообщение всем |
loadBans / loadEvents | Перечитать файлы BattlEye без перезапуска |
#shutdown | Остановить сервер |
Баны хранятся в bans.txt как GUID BattlEye, которые получаются из SteamID, но не совпадают с ним. Копируйте их из логов, а не пересчитывайте вручную. Если вы вообще открываете RCon наружу, сначала прочитайте безопасный RCON: протокол работает по UDP, вся аутентификация - это пароль, а серверы DayZ сканируют постоянно.
Логи в папке profiles - вторая половина работы:
server_console.log- всё, что печатала консоль; именно здесь появляются ошибки запуска из ваших XML.*.ADM- журнал администратора: подключения, отключения, позиции, смерти, попадания, кто кого убил и чем. Этот файл вы читаете после каждого спора о рейде на базу.script*.log- ошибки скриптов, в том числе из модов.crash_*и*.mdmp- то, что нужно отправлять автору мода.
Серверы DayZ перезапускают по расписанию, обычно каждые три-четыре часа, потому что server FPS деградирует по ходу сессии и потому что плановый перезапуск - это контролируемое сохранение. Сделать это можно одним лишь db/messages.xml, где запись сообщения может нести выключение, а вкладка Schedules в панели может выполнить перезапуск и бэкап по cron-выражению - какой интервал действительно стоит того, разбирает статья расписания перезапусков, которые помогают. В RE:NODE кнопка Restart - это чистая остановка, а наблюдатель замечает сервер, который сам постоянно перезапускается, и открывает обращение, а не оставляет его в цикле; сервер, дошедший до лимита памяти, останавливается и запускается заново, а не уходит в своп.
Диагностика#
Сервер работает, но его нет в списке DayZ Launcher. Порт запросов. Проверьте, что steamQueryPort совпадает с выделенным UDP-портом и что его не занимает ничто другое на машине.
Игроков выкидывает с ошибкой подписи BattlEye. В папке keys нет .bikey, либо мод обновился и принёс новый ключ. После каждого обновления мода копируйте ключи всех модов заново.
«You cannot play/edit this mission; it is dependent on downloadable content that has been deleted.» Список модов клиента не совпадает со списком сервера - обычно это мод, который лаунчер не скачал, или несовпадение версий. Пусть игрок выполнит проверку через лаунчер, а не через Steam.
Лут не изменился после правки `types.xml`. Либо вы не перезапустили сервер, либо файл не разобрался, и экономика откатилась. Прочитайте server_console.log сначала: некорректный XML-файл назван там вместе с элементом, на котором он сломался.
Предметы добавленного мода не появляются. У них нет записей в экономике, либо записи есть, но без usage и без value. См. выше.
Всё тормозит, когда сервер заполняется. Посмотрите залогированный server FPS, прежде чем покупать память. Большое число зомби, длинные списки модов и десятки постоянных машин стоят процессорного времени, а не RAM.
После обновления пропали базы. Персистентность в storage_<instanceId> сбросилась, либо изменился instance id. Без бэкапа этой папки восстановить ничего нельзя.
Мировые часы сбрасываются при каждом перезапуске. serverTimePersistent = 0.
FAQ#
Можно ли запустить сервер DayZ, не владея DayZ?
Нет. Приложение сервера недоступно для анонимного входа в SteamCMD, поэтому для установки нужно использовать аккаунт Steam, которому принадлежит игра. Возьмите запасной аккаунт, а не основной.
Сколько игроков вмещает сервер DayZ?
maxPlayers спокойно уходит за 60, но практический предел - CPU. Большинство публичных серверов держат 40-60 и начинают терять server FPS выше этого, особенно с большим списком модов. Сервер DayZ редко ломается из-за числа игроков; ломает его список модов.
Нужно ли перезапускать сервер каждые несколько часов?
Строго говоря, нет. Сервер продолжит работать. Но server FPS постепенно падает за долгую сессию, перезапуск - это чистое сохранение, и большинство серверов с большим числом модов после него заметно лучше. Три-четыре часа - норма сообщества; объявляйте о нём через db/messages.xml, чтобы никто не потерял из-за него рейд.
Сотрёт ли правка экономики лута карту?
Нет. Лут и персистентность разделены. Правка types.xml и других файлов экономики меняет то, что появляется после следующего перезапуска; базы игроков, тайники и персонажи в storage_<instanceId> остаются нетронутыми. Вайп - это намеренное удаление этой папки storage.
Почему мод работает у меня, а у остальных нет?
Мод есть у вас локально, а сервер его не объявляет, либо он лежит в -servermod=, хотя должен быть в -mod=. Моды для клиента и сервера относятся к -mod= вместе с ключом в keys; в -servermod= место только по-настоящему серверным модам.
Куда смотреть в первую очередь, когда что-то не так?
В server_console.log и файл .ADM в папке profiles, именно в таком порядке. Половина администрирования DayZ - это XML, а вторая половина - чтение лога, который сообщает, в какой строке вы ошиблись.




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