MAATRIX GAMES / Блог / Project Zomboid — sandbox-vars.lua полностью

Project Zomboid — sandbox-vars.lua полностью

MAATRIX GAMES

Рано или поздно каждый админ Project Zomboid долистывает пресеты «Apocalypse» и «Survivor» до кастомных настроек — и упирается в sandbox-vars.lua, где сотня строк без единого комментария. Проблема не в том, чтобы найти нужный параметр, а в том, что половина из них работает только в связке с другими: подняли PopulationMultiplier — упёрлись в лаги, включили RespawnHours — а зомби не респавнятся, потому что забыли про RespawnUnseenHours. Разберём файл по блокам и покажем, что на что реально влияет.

Где лежит sandbox-vars.lua и как его редактировать

На выделенном сервере файл называется по имени вашего сервера: ~/Zomboid/Server/<имя_сервера>_SandboxVars.lua (Linux: /home/<user>/Zomboid/Server/, Windows: C:\Users\<user>\Zomboid\Server\). Создаётся автоматически при первом запуске на основе выбранного пресета (Apocalypse, Survivor, Builder, Initial Infection или Custom) — даже если вы просто указали пресет при старте, файл появится и его можно редактировать вручную.

Структура — обычная Lua-таблица: общие настройки прямо в корне (VERSION, Zombies, Distribution, StatsDecrease...), а поведение зомби разнесено на два вложенных блока — ZombieLore (характеристики зомби: скорость, сила, слух) и ZombieConfig (плотность и респавн популяции). Разделение сбивает с толку новичков: люди ищут «скорость зомби» в ZombieConfig и не находят — она в ZombieLore.

Практика: перед правкой остановите сервер, сделайте копию файла (cp <имя>_SandboxVars.lua <имя>_SandboxVars.lua.bak), после — полный рестарт: часть общих опций можно докрутить на лету через админ-панель, но ZombieLore и ZombieConfig применяются только при перезапуске. И учтите: правка ZombieLore не ретроактивна — уже заспавненные зомби доживут по старым правилам, новые появятся по новым.

Если сервера у вас ещё нет — гайд по разворачиванию сервера Project Zomboid закрывает базовую установку и первый запуск.

Плотность зомби: Population* и Distribution

Плотность толпы регулируется четырьмя параметрами в ZombieConfig:

ZombieConfig = {
    PopulationMultiplier = 1.0,
    PopulationStartMultiplier = 1.0,
    PopulationPeakMultiplier = 1.5,
    PopulationPeakDay = 28,
}
  • PopulationMultiplier — базовый множитель итоговой численности, диапазон 0–4. Это не «число зомби на карте», а коэффициент к внутренней плотности каждого чанка. На 1.0 уже достаточно плотно в городах вроде Луисвилля; 2.0+ ощутимо просаживает TPS на слабом железе, особенно при высоком ZombieAttractionMultiplier (звук сильнее притягивает толпы).
  • PopulationStartMultiplier — множитель именно на старте игры (день 1), отдельно от базовой и пиковой плотности. Полезно занизить (0.5–0.7), чтобы дать новым игрокам спокойный старт, не трогая общую сложность.
  • PopulationPeakMultiplier и PopulationPeakDay — популяция растёт от Start к Peak линейно до указанного дня (по умолчанию 28-й), дальше держится на уровне Peak × PopulationMultiplier — симулирует постепенное стягивание зомби из соседних регионов.

Отдельно — Distribution: 1 = Urban Focused (зомби изначально гуще в городах, дефолт), 2 = Uniform (равномерно по всей карте, включая дикие зоны). На RP-сервере с застройкой за пределами городов Uniform логичнее, иначе окраины остаются пустыми весь ранний гейм.

Плотность — это не только про баланс, но и про производительность: каждый активный зомби в загруженных чанках — это тик AI. Если после роста PopulationMultiplier сервер подлагивает при большом онлайне в одном городе, проверьте мониторинг TPS и лагов — часто узкое место не в самих зомби, а в связке с высоким view distance и числом загруженных чанков.

Поднять сервер Project Zomboid за пару минут

Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.

Создать сервер

Respawn и миграция: как зомби на самом деле возвращаются

Здесь у большинства путаница, потому что несколько параметров работают только вместе:

ZombieConfig = {
    RespawnHours = 72.0,
    RespawnUnseenHours = 16.0,
    RespawnMultiplier = 0.1,
    RedistributeHours = 12.0,
}
  • RespawnHours — сколько игровых часов должно пройти с момента последнего респавна в клетке карты, прежде чем там снова смогут появиться зомби. Триггер по времени, не гарантия.
  • RespawnUnseenHours — вторая обязательная проверка: клетка должна быть невидима (никто из игроков её не наблюдает) непрерывно столько часов. Оба условия не выполнены одновременно — респавна не будет, сколько бы ни крутили RespawnHours.
  • RespawnMultiplier — сколько процентов от «полной» плотности региона довозится за один цикл (по умолчанию 0.1 = 10%). Поэтому зачищенный город не заполняется мгновенно даже при коротком RespawnHours.
  • RedistributeHours — как часто уже существующие зомби мигрируют между регионами карты, выравнивая плотность. Не создание новых зомби, а перераспределение живых.

Цель «зачистил город — он должен оставаться чистым» — ставьте RespawnHours = 0, останутся только миграция через RedistributeHours и звуковое привлечение (FollowSoundDistance/ZombieAttractionMultiplier). Классический выживач без расслабона — держите RespawnHours около 72 и не занижайте RespawnUnseenHours сильно ниже 12–16, иначе респавн будет триггериться прямо за углом от игроков.

Блок Rally* отвечает за толпы (herds): RallyGroupSize — до скольки особей группируются в одну толпу, RallyTravelDistance — на какое расстояние толпа готова целенаправленно двигаться, RallyGroupSeparation/RallyGroupRadius — насколько плотно она держится. Увеличив RallyGroupSize вместе с высоким PopulationMultiplier, можно получить толпы в сотни особей — это уже не только про сложность, но и снова про производительность.

ZombieLore: сложность самого зомби

Блок ZombieLore определяет, каким именно ИИ и физикой обладает каждый отдельный зомби:

ZombieLore = {
    Speed = 2,
    Strength = 2,
    Toughness = 2,
    Cognition = 3,
    Memory = 2,
    Sight = 2,
    Hearing = 2,
    Smell = 2,
}
  • Speed (1–4): Sprinters / Fast Shamblers / Shamblers / Random — самый ощутимый рычаг сложности из всех.
  • Strength (1–4): Superhuman / Normal / Weak / Random — влияет на урон по игроку и скорость выламывания дверей/окон.
  • Toughness (1–4): Tough / Normal / Fragile / Random — сколько ударов нужно, чтобы уложить зомби; завязано на InjurySeverity и оружии в руках игроков.
  • Cognition (1–4): Navigate + Doors / Navigate / Basic / Random — умеют ли зомби открывать двери и осмысленно огибать препятствия. На «Navigate + Doors» баррикады перестают быть гарантией безопасности.
  • Memory (1–5): Long / Normal / Short / None / Random — сколько зомби «помнит», где видел или слышал игрока, прежде чем потерять интерес.
  • Sight, Hearing, Smell — дальность и точность органов чувств (Eagle/Normal/Poor для зрения и слуха, Bloodhound/Normal/Poor для нюха). Именно Smell делает бесполезным отсиживание на крыше без укрытия от запаха при долгом нахождении в одной точке.

Cognition и Memory работают в связке с толпами из предыдущего блока: толпа с высоким Cognition, которая ещё и подолгу держит игрока в Memory, продолжит методично искать вход, даже если вы сменили этаж. На PvE-серверах с новичками разумно держать Cognition ближе к «Basic», а Memory — к «Short», иначе баррикадная тактика из большинства гайдов не сработает.

Заражение: Transmission, Mortality, Reanimate

Самый спорный блок для PvP/RP-серверов — от него зависит, как игроки относятся к укусам и смерти персонажа:

  • Transmission (1–4): 1 — Blood + Saliva (укусы заражают всегда, царапины/порезы — с шансом; дефолт Apocalypse-пресета), 2 — Saliva Only (заражают только укусы), 3 — Everyone's Infected (любая смерть приводит к реанимации), 4 — None (вирус полностью отключён).
  • Mortality — сколько проживёт заражённый персонаж до смерти от инфекции: от почти мгновенной до пары недель, есть и значение «никогда не умрёт от инфекции» (статус остаётся, но не убивает).
  • Reanimate — отдельно от Mortality: как быстро уже умершее тело (по любой причине) превращается в зомби, от мгновенного до пары недель.

Разница принципиальна: Mortality — когда умрёт заражённый живой персонаж, Reanimate — когда встанет уже мёртвое тело (заражённое, а при Transmission = 3 — вообще любое). «Отключить зомбификацию игроков» напрямую нельзя — единственный надёжный способ сделать это полностью — выставить Transmission = 4.

Для RP-серверов с балансом «страшно, но не безнадёжно» обычно берут такую комбинацию: Saliva Only + Mortality на 2–3 игровых дня (время отыграть сцену прощания, а не мгновенная смерть) + короткий Reanimate (пара минут), чтобы труп у ног не оставался безопасным долго.

Метаболизм: голод, жажда, усталость и порча еды

Скорость деградации характеристик персонажа не разбросана по десяткам полей — это в основном два параметра в корне таблицы плюс несколько про еду:

StatsDecrease = 3,
EndRegen = 3,
FoodRotSpeed = 3,
FridgeFactor = 3,
Nutrition = true,
HoursForCorpseRemoval = 216.0,
DaysForRottenFoodRemoval = -1,
  • StatsDecrease (1–4): Very Fast / Fast / Normal / Slow — общая скорость падения голода, жажды и усталости одновременно. Это не три отдельных ползунка, а один общий множитель на все три статы разом — замедлить именно голод, не трогая усталость, штатным способом в vanilla sandbox нельзя, это территория модов.
  • EndRegen (1–5): Very Fast / Fast / Normal / Slow / Very Slow — отдельно скорость восстановления выносливости во время отдыха, независимо от StatsDecrease. Можно сделать голод/жажду медленными, а усталость — быстро восстанавливающейся, чтобы бои были динамичнее.
  • FoodRotSpeed (1–5) — скорость порчи еды вне холодильника, завязана на FridgeFactor (насколько холодильник замедляет тот же процесс; при выключенном электричестве — ElecShut/ElecShutModifier — разница исчезает).
  • Nutrition — булево, включает ли систему КБЖУ, которая влияет на статы персонажа тоньше, чем просто число «голод».
  • HoursForCorpseRemoval — через сколько часов трупы (в том числе убитых зомби) удаляются движком с карты. На серверах с большим PopulationMultiplier заниженное значение (48–72 вместо дефолтных 216) экономит ресурсы — горы неубранных трупов после стычек реально нагружают память, разбор такой ситуации есть в статье про переполнение памяти сервера Project Zomboid.
  • DaysForRottenFoodRemoval — то же для сгнившей еды на земле; -1 означает «никогда не удалять», что на долгоживущем сервере тоже копит мусорные объекты.

Метаболизм и заражение напрямую в коде не связаны, но сильно влияют друг на друга через геймплей: быстрый StatsDecrease заставляет чаще выходить в лут-раны, а при высоком PopulationMultiplier и Urban Focused Distribution это резко повышает шанс контакта с толпой. Ориентировочно: казуальный PvE — StatsDecrease на Slow, PopulationMultiplier 0.7–1.0, RespawnHours ненулевой; хардкор — StatsDecrease на Fast/Very Fast, PopulationMultiplier 1.5+, RespawnHours = 0. Это не «магические» цифры, а отправная точка для подгонки под свой онлайн.

Поднять сервер Project Zomboid за пару минут

Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.

Создать сервер

Частые вопросы

Можно ли поменять sandbox-vars.lua без потери прогресса игроков?

Да. Но правки в ZombieLore/ZombieConfig применятся только к новым зонам и новым зомби — уже существующие в загруженных чанках сохранят старое поведение до естественной замены.

Почему выключили RespawnHours, а зомби всё равно появляются в зачищенном городе?

Скорее всего работает RedistributeHours — это не респавн, а миграция уже существующих зомби с соседних непосещённых территорий. Отдельного выключателя для миграции нет, можно только увеличить интервал.

Что сильнее всего влияет на производительность — Speed, PopulationMultiplier или RallyGroupSize?

В первую очередь PopulationMultiplier и RallyGroupSize вместе — они определяют, сколько сущностей одновременно считает AI. Speed и Cognition нагружают меньше, но сильнее повышают субъективную сложность.

Как временно упростить игру новичкам, не трогая настройки для остальных?

Через sandbox-vars.lua нельзя — файл общий для всего мира. Рабочий вариант — RCON-команды для конкретного игрока или отдельный тестовый сервер со щадящим пресетом.

Нужно ли перезапускать сервер после каждой правки?

Да, для блоков ZombieLore и ZombieConfig — обязательно. Часть общих настроек можно менять через админ-панель на лету, но для боевых серверов безопаснее короткий рестарт с предупреждением игрокам.