RE:NODE

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

Настройки сервера Project Zomboid, которые действительно важны

Какие из сотен серверных и sandbox-настроек Zomboid определяют характер сервера: ini, SandboxVars, респавн зомби, моды, память и куча Java.

Обновлено

0 прочтений

В Project Zomboid несколько сотен настроек в трёх файлах, и примерно шесть из них решают, каким будет ваш сервер. Всё остальное - детали, которые можно не трогать, пока кто-нибудь не попросит. Беда в том, что эти шесть разбросаны по разным местам: две лежат в ini, три - в файле Lua, одна - в базе данных, а правка не той копии любого из файлов - самая частая причина, по которой изменение «ничего не делает».

В этом руководстве: где лежит каждая настройка, какие из них важны, каковы значения по умолчанию, чем моды отличаются от элементов workshop, почему куча Java должна быть меньше вашего тарифа и какие ошибки встречаются на самом деле.

Где сервер Zomboid хранит настройки#

Выделенный сервер - это приложение на Java, устанавливаемое через SteamCMD как приложение с id 380870. В отличие от большинства серверов Steam, анонимно он не скачивается: нужен вход под аккаунтом Steam. Заведите для этого запасной аккаунт, на любом хосте, потому что учётные данные сохраняются в том виде, в каком вы их вводите.

bash
$ steamcmd +force_install_dir /home/pz/server +login your_spare_account \    +app_update 380870 validate +quit

Всё, что сервер помнит, лежит в папке Zomboid пользователя, и каждый файл в ней назван по имени сервера:

code
Zomboid/  Server/    servertest.ini                 ports, PVP, safehouses, mods, backups    servertest_SandboxVars.lua     zombies, loot, time, weather    servertest_spawnregions.lua    where new characters appear  db/    servertest.db                  accounts, whitelist, admin password, bans  Saves/Multiplayer/servertest/    the world, one file per explored cell  backups/                         the server's own zipped backups

servertest - имя сервера по умолчанию, оно задаётся параметром -servername в стартовом скрипте. Измените его - и получите другой ini, другой sandbox-файл и другой мир. Это вполне нормальный способ запустить два сервера из одной установки и отличный способ провести вечер за правкой настроек, которых никто не читает. Прежде чем отлаживать что-либо ещё, убедитесь, с каким именем сервер запускается на самом деле.

пишет по мере исследованияservertest.iniпорты, PVP, убежищаSandboxVars.luaзомби, лут, времяservertest.dbаккаунты, админ, баныИгровой серверчитает все три при стартеSaves/Multiplayerкарта в том виде, как в игре
Какой файл что определяет

Файл ini: важные ключи#

КлючПо умолчаниюЧто делает
DefaultPort16261Основной порт UDP
UDPPort16262Второй порт UDP
PublicfalseПоказывать сервер в публичном списке
PublicName-Название в списке
Password-Пароль для входа. Отдельный от пароля администратора
MaxPlayers32Слоты
OpentrueПри false вход только по whitelist
PVPtrueРешайте до запуска, а не после
PingLimit400Миллисекунды до отключения игрока
PauseEmptytrueЗамораживать мир, когда никого нет онлайн
SaveWorldEveryMinutes0Периодическое полное сохранение. 0 - выключено
BackupsCount5Сколько архивных копий в Zomboid/backups хранить
BackupsOnStarttrueДелать копию при каждом запуске сервера
BackupsPeriod0Минут между копиями. 0 - выключено
RCONPort27015RCON, если задан пароль
ResetIDчислоИзмените, чтобы клиенты сбросили кэшированный мир
MapMuldraugh, KYПорядок загрузки карт, сначала карты из модов
Mods-Id модов для загрузки, через точку с запятой
WorkshopItems-Id элементов workshop для скачивания, через точку с запятой
DoLuaChecksumtrueОтключать клиентов, чей Lua не совпадает

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

Ключи убежищ - те, которые ищут в sandbox-файле и не находят, потому что они здесь: PlayerSafehouse, AdminSafehouse, SafehouseAllowTrepass, SafehouseAllowLoot, SafehouseAllowFire, SafehouseAllowRespawn, SafehouseDaySurvivedToClaim и SafeHouseRemovalTime. Убежища - настройка скорее социальная, чем механическая: они определяют, могут ли игроки запирать друг друга вне зданий, а значит, можно ли на вашем сервере ограбить незнакомца. Задавайте их осознанно.

Есть ещё блок пронумерованных проверок античита, от AntiCheatProtectionType1 до AntiCheatProtectionType24, у каждой - свой множитель порога. Они существуют потому, что Zomboid доверяет клиенту немалую часть логики движения и инвентаря. Моды, особенно добавляющие транспорт или меняющие движение, срабатывают на них и вызывают необъяснимые кики. В логе указан тип, который сработал: отключайте именно его, а не все.

Шесть настроек, которые определяют характер сервера#

Исходное утверждение подтверждается: из всего, что есть в этих файлах, сервер определяют шесть решений.

  1. Популяция зомби. Сколько их вообще. Это разница между игрой на выживание и хоррором.
  2. Респавн. Остаются ли зачищенные места зачищенными, а значит, насколько прогресс постоянен, а не сизифов.
  3. Редкость лута. Разница между собирательством и походом по магазинам.
  4. Длина дня. Сколько реального времени стоит один игровой день, а значит, как быстро идут навыки, земледелие и болезни.
  5. Правила убежищ. В ini, выше. Могут ли игроков запереть снаружи.
  6. PVP. В ini. Решите до запуска, потому что позднее изменение меняет состав игроков, а не только манеру игры.

Первые четыре лежат в servertest_SandboxVars.lua - это таблица Lua, а не файл «ключ-значение»:

servertest_SandboxVars.lua
SandboxVars = {    VERSION = 5,    Zombies = 3,    Distribution = 1,    DayLength = 3,    StartYear = 1,    StartMonth = 7,    StartDay = 9,    StartTime = 2,    WaterShut = 2,    ElecShut = 2,    ZombieLore = {        Speed = 2,        Strength = 2,        Toughness = 2,        Transmission = 1,        Mortality = 5,        Reanimate = 3,        Cognition = 3,        Memory = 2,        Sight = 2,        Hearing = 2,    },    ZombieConfig = {        PopulationMultiplier = 1.0,        PopulationStartMultiplier = 1.0,        PopulationPeakMultiplier = 1.5,        PopulationPeakDay = 28,        RespawnHours = 72.0,        RespawnUnseenHours = 16.0,        RespawnMultiplier = 0.1,        RedistributeHours = 12.0,    },}

В этом файле две ловушки. Первая: Zombies работает наоборот - 1 это Insane, 2 High, 3 Normal, 4 Low и 5 None. Тот, кто ставит 1 в расчёте на тихий сервер, получает противоположное тому, о чём просил, и со стороны это всегда смешнее. Вторая: большинство остальных пронумерованных параметров - это позиции на шкале, которые по числу не угадать.

Поэтому надёжный способ получить sandbox-файл - настроить его во встроенном sandbox-редакторе игры: запустите одиночную или размещённую игру с нужными настройками, а затем скопируйте сгенерированный Lua на сервер, вместо того чтобы вписывать числа в файл и надеяться. DayLength = 3 - это один час реального времени на игровой день; это значение по умолчанию и разумная отправная точка: если день короче, земледелие превращается в работу на полный день.

Популяция зомби, респавн и lore#

ZombieConfig - то место, где на самом деле живёт сложность сервера, и его стоит понимать, а не копировать.

НастройкаПо умолчаниюЧто делает
PopulationMultiplier1.0Общая плотность, применяется поверх Zombies
PopulationStartMultiplier1.0Плотность в первый день
PopulationPeakMultiplier1.5Плотность на пике
PopulationPeakDay28На какой день приходится пик
RespawnHours72.0Часов до того, как ячейка сможет заселиться заново. 0 отключает респавн
RespawnUnseenHours16.0Как долго ячейку никто не должен видеть, прежде чем это произойдёт
RespawnMultiplier0.1Доля исходной популяции, которая возвращается
RedistributeHours12.0Как часто зомби перемещаются между ячейками

RespawnHours = 0 - самое большое улучшение качества жизни, доступное мультиплеерному серверу, и именно его в итоге делает большинство администраторов. При настройках по умолчанию город, который вы неделю зачищали, постепенно заселяется снова: в одиночной игре это напряжение, а на сервере из восьми человек, каждый из которых зачистил по улице, - повод бросить играть. Полностью отключённый респавн делает карту конечным ресурсом, который группа вырабатывает, и это меняет долгую игру: через два месяца безопасная территория - это то, что вы построили, а не то, что вы обороняете.

ZombieLore.Speed - второй заголовочный параметр: 1 - бегуны, 2 - быстрые шаркуны, 3 - шаркуны. 2 стоит по умолчанию и соответствует тому, что большинство называет «обычным Zomboid». Бегуны на публичном сервере с полной картой - это сервер-новинка, и населения у него будет один человек.

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

Порты и подключение#

ПортПротоколНазначение
16261UDPDefaultPort - игровой трафик и запросы к серверу
16262UDPUDPPort - второй канал, который нужен клиенту
27015TCPRCON, если задан RCONPassword

Оба игровых порта - UDP, и нужны оба: если файрвол открывает только один, вы получаете сервер, который виден в списке и не даёт завершить подключение. Старые сборки также использовали 8766 и 8767 для Steam, они задаются через SteamPort1 и SteamPort2, так что если вы следуете старому руководству и у вас есть свободные порты, открыть их ничего не стоит. В статье порты игрового сервера рассказано, как проверить их снаружи как следует, а это быстрее, чем гадать.

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

Администраторы, уровни доступа и изменения на лету#

Пароль администратора не хранится в ini. Он задаётся при первом запуске - запрашивается в консоли или передаётся стартовому скрипту - и хранится в db/<servername>.db вместе со всеми аккаунтами, записями whitelist и банами. В RE:NODE он генерируется для каждого сервера, а не поставляется по умолчанию, и это правильный порядок: пароль администратора по умолчанию на публичном сервере - это инцидент с грифингом, у которого уже тикает таймер.

Уровни доступа, от высшего к низшему: admin, moderator, overseer, gm, observer. Повысить можно командой /setaccesslevel "PlayerName" moderator.

КомандаЧто делает
/playersКто подключён
/kick "name" -r "reason"Удалить игрока
/banuser "name" -ip -r "reason"Забанить, по желанию и по адресу
/unbanuser "name"Отменить бан
/saveПринудительно сохранить мир
/quitЧистое завершение с предварительным сохранением
/servermsg "text"Сообщение всем
/changeoption Key=ValueИзменить параметр ini на работающем сервере
/reloadoptionsПрименить ini с диска без перезапуска
/showoptionsВывести текущие значения
/checkModsNeedUpdateСпросить Steam, изменились ли ваши моды из workshop
/addusertowhitelist "name"Добавить существующий аккаунт в whitelist
/releasesafehouseОсвободить убежище, чей владелец ушёл

/changeoption и /reloadoptions вместе - возможность, о которой никто не знает: большинство параметров ini можно менять на живом сервере, никого не отключая. Переменные sandbox - нельзя. Они читаются при загрузке мира, а часть из них, заложенные в карту при генерации, существующий мир не изменят вообще. В статье команды администратора Project Zomboid разобран полный список и то, до чего дотягивается каждый уровень доступа.

Моды, элементы workshop и порядок загрузки#

Два ключа ini, и это не одно и то же. Это самая частая проблема с модами на любом сервере Zomboid.

servertest.ini
WorkshopItems=2392709985;2169435993;1299328280Mods=Authentic Z - Current;ImprovedBuildMenu;HydrocraftMap=RavenCreek;Muldraugh, KY

Эти три строки выполняют три разные задачи.

  • `WorkshopItems` принимает числовой id из Steam Workshop. Он говорит серверу, что скачать.
  • `Mods` принимает id мода из его собственного файла mod.info. Он говорит серверу, что загрузить.

В одном элементе workshop может быть несколько модов, а id у них совсем не похожи, поэтому если вписать число в оба места, мод скачается, а не загрузится ничего. Порядок в Mods важен: более поздние записи переопределяют более ранние, так работают патчи совместимости, и поэтому патч, указанный раньше мода, который он патчит, ничего не делает.

Map - третий список, для карт из модов, и базовая карта идёт последней. Всё, что перед ней, накладывается сверху.

Другое, на чём попадаются серверы, - мод из workshop, обновившийся во время работы сервера. Клиенты скачивают новую версию из Steam, а сервер всё ещё на старой, и вход не удаётся с несоответствием, о котором ничего внятного не сказано. /checkModsNeedUpdate сообщает об этом, а перезапуск это исправляет. В статье моды и workshop на сервере Zomboid подробно разобраны коллекции и порядок загрузки, а что делать, когда обновление мода всё ломает - это общая версия той же проблемы.

Память, ячейки карты и куча Java#

Zomboid держит в памяти загруженные ячейки карты, а игроки разбредаются. Десять игроков в одном городе обходятся дешевле, чем четыре игрока в четырёх городах: сервер загружает, симулирует и сохраняет четыре отдельных региона вместо одного. Поэтому советы по подбору тарифа по числу игроков для Zomboid неверны в обе стороны.

СерверПамять тарифа-XmxПримечания
2-4 игрока, ванильный, один город3 GB2gС запасом
8-16 игроков, разбросаны4-6 GB3g - 4gТипичный случай
16-32 игрока, моды и моды карт8-10 GB6g - 7gДороже всего обходятся моды карт

Третий столбец - не украшение. Сервер - это JVM, и её куча задаётся в ProjectZomboid64.json:

ProjectZomboid64.json
{    "mainClass": "zombie/network/GameServer",    "classpath": ["."],    "vmArgs": [        "-Djava.awt.headless=true",        "-Xms2g",        "-Xmx6g"    ]}

В поставляемом файле аргументов больше; меняйте только строки -Xms и -Xmx. И оставляйте запас: куча JVM - это не весь процесс, потому что metaspace, стеки потоков и нативные буферы находятся вне её, а лимит контейнера учитывает всё это вместе. Если задать -Xmx равным памяти тарифа, вы получите сервер, который убивают, пока Java ещё считает, что у неё есть запас. Правило такое: от семидесяти до восьмидесяти процентов лимита.

На RE:NODE сервер, дошедший до лимита памяти, останавливается и чисто перезапускается, а не уходит в своп, что лучше и для узла, и для ваших соседей, но означает, что заниженная куча проявляется резким перезапуском, а не медленной деградацией. В статье CPU или RAM для игровых серверов разобрано, как определить, чего именно вам не хватает, прежде чем что-то покупать.

Диск растёт незаметно. В папке сохранений один файл на каждую исследованную ячейку карты, поэтому сервер, который работает год на хорошо исхоженной карте, измеряется в гигабайтах. Тарифы Project Zomboid здесь начинаются с 3 GB и трёх выделенных портов, от $9 в месяц, а вход в Steam, нужный для установки, указывается на вкладке Setup.

Бэкапы, сбросы и папка сохранений#

Собственные backup Zomboid настоящие и лучше, чем ничего: BackupsOnStart, BackupsPeriod и BackupsCount создают zip-файлы в Zomboid/backups. Но лежат они на том же диске, что и защищаемое, а значит, защищают от неудачного обновления и не защищают совсем от удалённого сервера. Держите настоящие backup в другом месте и время от времени восстанавливайте один, чтобы убедиться, что он работает: аргументы приведены полностью в статье бэкапы, которые действительно восстанавливаются.

Чтобы правильно стереть мир:

  1. Остановите сервер командой /quit, чтобы текущее состояние было записано.
  2. Сделайте backup, к которому можно будет вернуться.
  3. Удалите Zomboid/Saves/Multiplayer/<servername>/.
  4. Увеличьте ResetID в ini - это говорит клиентам выбросить кэшированную копию старого мира.
  5. Запустите сервер. При первой загрузке сгенерируется новая карта.

Аккаунты игроков хранятся в базе данных, а не в мире, так что стирание карты оставляет нетронутыми логины, записи whitelist и баны всех игроков. Удаляйте db/<servername>.db тоже, только если вам действительно нужно сбросить список игроков.

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

Устранение неполадок#

Изменённые настройки ничего не дали. Либо сервер запущен с другим -servername, либо вы правили копию в папке установки, а не ту, что лежит в Zomboid/Server/. Выполните /showoptions и сравните.

Игроки не могут подключиться, хотя сервер есть в списке. Закрыт UDP 16262. Список использует первый порт, а для входа нужны оба.

«Connection lost» через секунду после входа. Почти всегда несоответствие модов. Сверьте Mods с тем, на что подписаны клиенты, и выполните /checkModsNeedUpdate.

Клиент пишет, что версия не совпадает. Одна сторона на бета-ветке, другая на стабильной. Зафиксируйте обе.

Случайные кики с сообщением античита. Прочитайте номер типа в логе и отключите именно этот AntiCheatProtectionType. Обычно это вызывают моды, меняющие движение или транспорт.

Сервер сам перезапускается под нагрузкой. Куча Java задана слишком близко к лимиту тарифа, поэтому контейнер убивают раньше, чем JVM успевает выбраться сборкой мусора. Уменьшите -Xmx.

Зомби продолжают возвращаться в зачищенный город. Смотрите RespawnHours и RespawnMultiplier. Задайте RespawnHours = 0, если хотите, чтобы зачистка была постоянной.

Мир не загружается после изменения модов. Был удалён мод карты. Восстановите backup, верните мод и выведите игроков из этого региона, прежде чем удалять его как следует.

FAQ#

Сколько RAM нужно серверу Project Zomboid?

Три гигабайта тянут небольшую группу в одном городе, 4-6 GB хватает на восемь-шестнадцать игроков, разбросанных по карте, а 8-10 GB - это большой сервер с модами. Кучу Java задавайте примерно в три четверти от этого объёма, но никогда не весь.

Где хранится пароль администратора?

В Zomboid/db/<servername>.db, а не в ini. Он задаётся при первом запуске или передаётся стартовому скрипту и отличается от ключа Password, который игроки используют для входа.

Можно ли менять настройки sandbox на работающем сервере?

Большинство параметров ini - да, командами /changeoption и /reloadoptions. Переменные sandbox читаются при загрузке мира, поэтому им нужен перезапуск, а те, что заложены в карту при генерации, существующий мир не изменят вообще.

Чем отличаются Mods и WorkshopItems?

WorkshopItems - числовой id из Steam Workshop, он определяет, что будет скачано. Mods - id мода из mod.info, он определяет, что будет загружено. Нужны оба, и это разные строки.

Ломает ли игру отключение респавна зомби?

Нет, оно её меняет. Карта становится конечным ресурсом, который группа вырабатывает, а это подходит постоянному серверу с регулярными игроками гораздо лучше, чем медленное пополнение по умолчанию.

Почему сервер лагает, когда все разбегаются?

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


Комментарии

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

0/2000