MAATRIX GAMES / Блог / Enshrouded — enshrouded_server.json

Enshrouded — enshrouded_server.json

MAATRIX GAMES

Базовый enshrouded_server.json из коробки — это имя сервера, пара паролей и восемь слотов. Как только команда разрастается и появляются вопросы вроде "как сделать так, чтобы новички не могли ломать чужие базы" или "почему сервер жрёт диск при каждом автосейве" — приходится лезть глубже в файл, а там десятки полей без единой встроенной документации. Разбираем enshrouded_server.json по слоям: что реально делает каждая секция, какие поля стоит трогать, а какие лучше не редактировать руками.

Структура файла целиком

Файл лежит рядом с исполняемым файлом сервера и состоит из трёх смысловых блоков: общие параметры сервера, массив userGroups с правами доступа и объект gameSettings с игровым балансом. Актуальный костяк выглядит так:

{
  "name": "Мой сервер Enshrouded",
  "saveDirectory": "./savegame",
  "logDirectory": "./logs",
  "ip": "0.0.0.0",
  "queryPort": 15637,
  "slotCount": 8,
  "loadAutoSave": true,
  "saveInterval": 120,
  "autoSaveCount": 20,
  "syncInterval": 4.0,
  "userGroups": [ ... ],
  "gameSettings": { ... }
}

Верхнеуровневые поля name, slotCount, queryPort и базовая пара групп доступа — это то, что нужно для первого запуска, и мы разбирали их в статье про установку сервера Enshrouded. Здесь — то, что идёт после: тонкая настройка сохранений, детальные права и весь gameSettings.

Важная оговорка: Keen Games регулярно добавляет и переименовывает поля gameSettings между патчами, а официальной схемы файла нет. Самый надёжный источник актуального списка — файл, который сервер сам пересоздаёт при первом запуске новой версии, и внутриигровое меню настроек (если у вашей группы есть право canEditGameSettings, в меню Escape → Server Settings). Ниже — поля, которые стабильно встречаются в сборках последних сезонов, но перед массовой правкой сверьтесь со своим актуальным файлом.

saveInterval, autoSaveCount и syncInterval: как сервер пишет прогресс на диск

Три поля отвечают за то, как часто и насколько надёжно сохраняется мир:

  • saveInterval — интервал автосохранения в секундах. По умолчанию около 120 (две минуты). Чем меньше значение, тем меньше данных потеряется при краше, но тем чаще сервер пишет на диск — а запись немаленького мира с постройками игроков это ощутимый I/O-всплеск, во время которого возможен короткий фриз для всех подключённых.
  • autoSaveCount — сколько последних автосохранений хранится в ротации, прежде чем самые старые начнут перезаписываться. Это встроенная защита от одного повреждённого сейва: если последний автосейв побился при краше во время записи, можно откатиться на предыдущий из той же папки saveDirectory.
  • syncInterval — частота синхронизации состояния между сервером и клиентами (в секундах, дробное значение вроде 4.0). Меньше — отзывчивее для игроков, но выше нагрузка на сеть и CPU сервера; больше — экономнее, но заметнее рассинхрон позиций у других игроков на слабом канале.

Практика для сервера на 4-8 человек: saveInterval в диапазоне 120-300 секунд и autoSaveCount от 10 и выше — этого достаточно, чтобы не терять больше пары минут прогресса и иметь запас откатов на случай битого сейва. Снижать saveInterval ниже минуты стоит только на SSD/NVMe — на HDD-хостинге это будет ощутимо тормозить сервер при каждом автосейве.

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

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

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

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

userGroups: права доступа по группам, а не общий пароль

У Enshrouded нет единого "серверного пароля" — вместо этого массив userGroups, где у каждой группы свой пароль и свой набор прав. Игрок вводит пароль нужной группы при подключении и получает соответствующие права на весь сеанс. Расширенный набор полей одной группы:

{
  "name": "Admin",
  "password": "сложный-пароль",
  "canKickBan": true,
  "canAccessInventories": true,
  "canEditBase": true,
  "canExtendBase": true,
  "canDestroyBase": true,
  "canEditGameSettings": true,
  "reservedSlots": 0
}

Что делает каждое поле:

  • canKickBan — право кикать и банить игроков через игровое меню списка игроков.
  • canAccessInventories — доступ к чужим сундукам и контейнерам. На публичном сервере это право стоит держать только у доверенной группы: с ним технически можно вынести чужой склад.
  • canEditBase / canExtendBase — редактирование существующих построек группы/базы и право расширять территорию застройки за пределы уже занятой.
  • canDestroyBase — снос чужих построек целиком. Самое чувствительное право с точки зрения гриферства — выдавайте его так же осторожно, как canAccessInventories.
  • canEditGameSettings — доступ к внутриигровому меню Server Settings, которое напрямую правит gameSettings в файле. По сути, это право редактировать баланс сервера прямо из игры, без остановки процесса.
  • reservedSlots — количество слотов, зарезервированных именно за этой группой: даже если сервер набит до slotCount, участник с паролем этой группы всё равно сможет зайти.

Рабочая схема для большинства команд — три группы: Admin (все права, пароль знают 1-2 человека), Friend/Trusted (сборка баз и доступ к общим сундукам, без кика/бана и без canEditGameSettings) и Guest (только canAccessInventories: false, canEditBase: false, для случайных гостей). Не выдавайте canEditGameSettings группе с публично расшаренным паролем — через это меню при желании можно обнулить сложность или лут-баланс всему серверу.

gameSettings: баланс выживания

gameSettings — самый большой объект в файле, и именно он определяет ощущение от игры на сервере. Ключевые рычаги, которые реально трогают админы:

{
  "playerHealthFactor": 1.0,
  "playerManaFactor": 1.0,
  "playerStaminaFactor": 1.0,
  "playerBodyHeatFactor": 1.0,
  "enableDurability": true,
  "enableStarvingDebuff": true,
  "tombstoneMode": "AddBackpackMaterials",
  "shroudTimeFactor": 1.0,
  "weatherFrequency": "Normal",
  "resourceDropStackAmountFactor": 1.0
}
  • playerHealthFactor / playerManaFactor / playerStaminaFactor — множители максимальных пулов здоровья, маны и стамины относительно ванильных значений. 1.0 — стандарт; выше — мягче для новичков, ниже — хардкорнее.
  • enableDurability — включает ли деградацию прочности снаряжения при использовании. Отключение популярно на казуальных серверах, чтобы не отвлекаться на постоянный ремонт.
  • enableStarvingDebuff — штрафы от голода. Выключение полезно для чисто билд-серверов, где выживание не в приоритете.
  • tombstoneMode — что происходит с вещами игрока при смерти. Значения, которые встречаются в конфигах: полный дроп всего инвентаря, частичный (только материалы из рюкзака) и отключённая потеря вещей вовсе. Точное название enum-значений может отличаться между версиями — сверяйтесь со своим файлом или внутриигровым меню перед правкой руками, чтобы не поймать невалидное значение.
  • shroudTimeFactor — множитель того, как быстро истощается ресурс пребывания в Пелене (Shroud) без специального снаряжения. Меньше — комфортнее для исследования опасных зон, больше — рискованнее.
  • weatherFrequency — частота погодных событий; влияет скорее на атмосферу и периодические дебафы от непогоды, чем на производительность.
  • resourceDropStackAmountFactor — множитель количества ресурсов с одного добывания. На него стоит смотреть не только с точки зрения баланса, но и производительности: чем больше отдельных стаков падает с одного удара, тем больше временных объектов сервер держит в мире одновременно.

Полный список полей gameSettings длиннее и меняется от патча к патчу — быстрее всего свежий список смотреть прямо в JSON после обновления сервера (jq 'keys' gameSettings через jq '.gameSettings | keys' для всего файла) или через внутриигровое меню с подсказками к каждой настройке.

Сохранения, стаки ресурсов и производительность при плотной застройке

Отдельная головная боль на серверах с активными билдерами — просадки при большой концентрации построек в одной зоне. Сам enshrouded_server.json не даёт прямого рубильника "лимит построек на игрока", но несколько настроек всё же ослабляют нагрузку косвенно:

  • Снижение resourceDropStackAmountFactor уменьшает число временных предметов-стаков на земле в активно застраиваемых зонах.
  • Более редкий saveInterval (при большом мире с плотной застройкой каждое автосохранение тяжелее и дольше) снижает частоту дисковых фризов, но увеличивает риск потери прогресса при краше — здесь всегда компромисс, а не универсальное правильное число.
  • syncInterval стоит поднять на серверах, где основная просадка — не диск, а именно синхронизация состояния множества построек между клиентами.

Если проблема именно в лагах при заходе в зону с большой базой — это чаще упирается в RAM и CPU хоста, чем в JSON-настройки, и конфигом лечится лишь частично. Подробный разбор причин и практических фиксов — в статье про лаги Enshrouded при большой базе.

Сеть: ip, queryPort и публикация сервера

Сетевой блок в enshrouded_server.json небольшой, но ошибки в нём — самая частая причина "сервер запущен, а зайти не могу":

  • ip — адрес, на котором сервер слушает подключения. 0.0.0.0 (слушать на всех интерфейсах) — правильное значение для подавляющего большинства VPS; конкретный IP имеет смысл указывать только если на машине несколько сетевых интерфейсов и нужно явно выбрать один.
  • queryPort — порт для запросов статуса сервера (список серверов в игре, пинг). По умолчанию 15637/UDP. Игровой порт данных при этом фиксированно на единицу меньше — 15636/UDP — и явного поля под него в JSON нет: он вычисляется от queryPort. Если меняете queryPort на нестандартный, не забудьте, что игровой порт сдвинется вместе с ним, и оба нужно синхронно открыть в firewall.
  • slotCount — потолок одновременных подключений; напрямую не про сеть, но учитывается вместе с reservedSlots каждой группы при подсчёте свободных мест.

После смены портов не забудьте обновить правила на VPS-firewall и, если сервер за NAT, проброс на роутере — иначе игра будет молча не находиться в браузере серверов при полностью корректном JSON. Общий разбор настройки портов и firewall для игровых серверов — в статье про порты и firewall для игрового сервера.

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

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

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

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

После правки enshrouded_server.json сервер стартует с настройками по умолчанию, в чём дело?

Почти всегда невалидный JSON — лишняя запятая или незакрытая скобка. Проверьте файл перед запуском: python3 -m json.tool enshrouded_server.json покажет точную строку с ошибкой, если файл битый.

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

Да, для правок через сам файл — нужен рестарт процесса. Правки через внутриигровое меню Server Settings (при наличии canEditGameSettings) применяются без остановки сервера, потому что меню само пишет в тот же файл и подгружает изменения на лету.

Можно ли дать разным игрокам разные пароли без создания отдельных групп?

Нет, права привязаны именно к группе в userGroups, а не к конкретному игроку — модель именно ролевая: сколько ролей нужно, столько и групп с разными паролями.

Что будет, если в gameSettings оставить поле с неверным именем или опечаткой?

Само по себе это не сломает JSON как формат, но сервер либо проигнорирует незнакомое поле и применит дефолт, либо (реже) откажется грузить блок настроек целиком — поведение зависит от версии, поэтому проверяйте написание полей по своему актуально сгенерированному файлу, а не по старым гайдам из интернета.

Как понять, что resourceDropStackAmountFactor стоит снизить?

Если на сервере регулярные просадки именно в моменты массовой добычи ресурсов группой игроков (а не только при заходе в зону с базами), это симптом избыточного числа временных объектов-стаков в мире — стоит попробовать снизить множитель на 20-30% и понаблюдать.