В Project Zomboid несколько сотен настроек в трёх файлах, и примерно шесть из них решают, каким будет ваш сервер. Всё остальное - детали, которые можно не трогать, пока кто-нибудь не попросит. Беда в том, что эти шесть разбросаны по разным местам: две лежат в ini, три - в файле Lua, одна - в базе данных, а правка не той копии любого из файлов - самая частая причина, по которой изменение «ничего не делает».
В этом руководстве: где лежит каждая настройка, какие из них важны, каковы значения по умолчанию, чем моды отличаются от элементов workshop, почему куча Java должна быть меньше вашего тарифа и какие ошибки встречаются на самом деле.
Где сервер Zomboid хранит настройки#
Выделенный сервер - это приложение на Java, устанавливаемое через SteamCMD как приложение с id 380870. В отличие от большинства серверов Steam, анонимно он не скачивается: нужен вход под аккаунтом Steam. Заведите для этого запасной аккаунт, на любом хосте, потому что учётные данные сохраняются в том виде, в каком вы их вводите.
$ steamcmd +force_install_dir /home/pz/server +login your_spare_account \ +app_update 380870 validate +quitВсё, что сервер помнит, лежит в папке Zomboid пользователя, и каждый файл в ней назван по имени сервера:
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 backupsservertest - имя сервера по умолчанию, оно задаётся параметром -servername в стартовом скрипте. Измените его - и получите другой ini, другой sandbox-файл и другой мир. Это вполне нормальный способ запустить два сервера из одной установки и отличный способ провести вечер за правкой настроек, которых никто не читает. Прежде чем отлаживать что-либо ещё, убедитесь, с каким именем сервер запускается на самом деле.
Файл ini: важные ключи#
| Ключ | По умолчанию | Что делает |
|---|---|---|
DefaultPort | 16261 | Основной порт UDP |
UDPPort | 16262 | Второй порт UDP |
Public | false | Показывать сервер в публичном списке |
PublicName | - | Название в списке |
Password | - | Пароль для входа. Отдельный от пароля администратора |
MaxPlayers | 32 | Слоты |
Open | true | При false вход только по whitelist |
PVP | true | Решайте до запуска, а не после |
PingLimit | 400 | Миллисекунды до отключения игрока |
PauseEmpty | true | Замораживать мир, когда никого нет онлайн |
SaveWorldEveryMinutes | 0 | Периодическое полное сохранение. 0 - выключено |
BackupsCount | 5 | Сколько архивных копий в Zomboid/backups хранить |
BackupsOnStart | true | Делать копию при каждом запуске сервера |
BackupsPeriod | 0 | Минут между копиями. 0 - выключено |
RCONPort | 27015 | RCON, если задан пароль |
ResetID | число | Измените, чтобы клиенты сбросили кэшированный мир |
Map | Muldraugh, KY | Порядок загрузки карт, сначала карты из модов |
Mods | - | Id модов для загрузки, через точку с запятой |
WorkshopItems | - | Id элементов workshop для скачивания, через точку с запятой |
DoLuaChecksum | true | Отключать клиентов, чей Lua не совпадает |
PauseEmpty заслуживает отдельного абзаца, потому что меняет характер небольшого сервера. Когда параметр включён, время останавливается, как только последний игрок выходит: посевы не растут, генераторы не сжигают топливо, и пока вы на работе, ничего не портится. Когда выключен, мир продолжает жить, и две недели вашего отсутствия - это две недели разложения. Для компании друзей, которые играют вместе, почти всегда правильно включить. Для постоянного публичного сервера смысл как раз в том, чтобы выключить.
Ключи убежищ - те, которые ищут в sandbox-файле и не находят, потому что они здесь: PlayerSafehouse, AdminSafehouse, SafehouseAllowTrepass, SafehouseAllowLoot, SafehouseAllowFire, SafehouseAllowRespawn, SafehouseDaySurvivedToClaim и SafeHouseRemovalTime. Убежища - настройка скорее социальная, чем механическая: они определяют, могут ли игроки запирать друг друга вне зданий, а значит, можно ли на вашем сервере ограбить незнакомца. Задавайте их осознанно.
Есть ещё блок пронумерованных проверок античита, от AntiCheatProtectionType1 до AntiCheatProtectionType24, у каждой - свой множитель порога. Они существуют потому, что Zomboid доверяет клиенту немалую часть логики движения и инвентаря. Моды, особенно добавляющие транспорт или меняющие движение, срабатывают на них и вызывают необъяснимые кики. В логе указан тип, который сработал: отключайте именно его, а не все.
Шесть настроек, которые определяют характер сервера#
Исходное утверждение подтверждается: из всего, что есть в этих файлах, сервер определяют шесть решений.
- Популяция зомби. Сколько их вообще. Это разница между игрой на выживание и хоррором.
- Респавн. Остаются ли зачищенные места зачищенными, а значит, насколько прогресс постоянен, а не сизифов.
- Редкость лута. Разница между собирательством и походом по магазинам.
- Длина дня. Сколько реального времени стоит один игровой день, а значит, как быстро идут навыки, земледелие и болезни.
- Правила убежищ. В ini, выше. Могут ли игроков запереть снаружи.
- PVP. В ini. Решите до запуска, потому что позднее изменение меняет состав игроков, а не только манеру игры.
Первые четыре лежат в servertest_SandboxVars.lua - это таблица 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 - то место, где на самом деле живёт сложность сервера, и его стоит понимать, а не копировать.
| Настройка | По умолчанию | Что делает |
|---|---|---|
PopulationMultiplier | 1.0 | Общая плотность, применяется поверх Zombies |
PopulationStartMultiplier | 1.0 | Плотность в первый день |
PopulationPeakMultiplier | 1.5 | Плотность на пике |
PopulationPeakDay | 28 | На какой день приходится пик |
RespawnHours | 72.0 | Часов до того, как ячейка сможет заселиться заново. 0 отключает респавн |
RespawnUnseenHours | 16.0 | Как долго ячейку никто не должен видеть, прежде чем это произойдёт |
RespawnMultiplier | 0.1 | Доля исходной популяции, которая возвращается |
RedistributeHours | 12.0 | Как часто зомби перемещаются между ячейками |
RespawnHours = 0 - самое большое улучшение качества жизни, доступное мультиплеерному серверу, и именно его в итоге делает большинство администраторов. При настройках по умолчанию город, который вы неделю зачищали, постепенно заселяется снова: в одиночной игре это напряжение, а на сервере из восьми человек, каждый из которых зачистил по улице, - повод бросить играть. Полностью отключённый респавн делает карту конечным ресурсом, который группа вырабатывает, и это меняет долгую игру: через два месяца безопасная территория - это то, что вы построили, а не то, что вы обороняете.
ZombieLore.Speed - второй заголовочный параметр: 1 - бегуны, 2 - быстрые шаркуны, 3 - шаркуны. 2 стоит по умолчанию и соответствует тому, что большинство называет «обычным Zomboid». Бегуны на публичном сервере с полной картой - это сервер-новинка, и населения у него будет один человек.
RedistributeHours - тонкая настройка, и трогать её стоит только тогда, когда вы знаете зачем. Именно она заставляет орды бродить, а на мультиплеерном сервере ещё и переносит последствия выстрела одного игрока в город другого.
Порты и подключение#
| Порт | Протокол | Назначение |
|---|---|---|
16261 | UDP | DefaultPort - игровой трафик и запросы к серверу |
16262 | UDP | UDPPort - второй канал, который нужен клиенту |
27015 | TCP | RCON, если задан 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.
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 GB | 2g | С запасом |
| 8-16 игроков, разбросаны | 4-6 GB | 3g - 4g | Типичный случай |
| 16-32 игрока, моды и моды карт | 8-10 GB | 6g - 7g | Дороже всего обходятся моды карт |
Третий столбец - не украшение. Сервер - это JVM, и её куча задаётся в 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 в другом месте и время от времени восстанавливайте один, чтобы убедиться, что он работает: аргументы приведены полностью в статье бэкапы, которые действительно восстанавливаются.
Чтобы правильно стереть мир:
- Остановите сервер командой
/quit, чтобы текущее состояние было записано. - Сделайте backup, к которому можно будет вернуться.
- Удалите
Zomboid/Saves/Multiplayer/<servername>/. - Увеличьте
ResetIDв ini - это говорит клиентам выбросить кэшированную копию старого мира. - Запустите сервер. При первой загрузке сгенерируется новая карта.
Аккаунты игроков хранятся в базе данных, а не в мире, так что стирание карты оставляет нетронутыми логины, записи 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. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.