У выделенного сервера Sons of the Forest два вида настроек, и путаница между ними - источник большей части недоразумений. Настройки сервера в dedicatedserver.cfg - имя, пароль, интервал сохранения, поведение при простое - применяются при каждом запуске. Правила игры - GameMode и всё в CustomGameModeSettings - читаются только при создании сохранения, а затем хранятся внутри самого сохранения в GameSetupSaveData.json. Поэтому изменить сложность существующего мира можно либо начав новый слот, либо аккуратно отредактировав этот файл, а перенос мира между машинами означает копирование целой пронумерованной папки слота, потому что правила путешествуют вместе с ней. В этом руководстве разобраны выбор правил для вашей группы, содержимое папки сохранения, изменение существующего мира и перенос сохранений на сервер, с него и между слотами.
Установка, каждый ключ dedicatedserver.cfg, порты и список владельцев описаны в руководстве по выделенному серверу Sons of the Forest. Эта статья опирается на него.
Какие настройки когда применяются#
| Настройка | Где хранится | Когда вступает в силу |
|---|---|---|
ServerName, Password, MaxPlayers, порты | dedicatedserver.cfg | При каждом запуске |
SaveSlot, SaveMode | dedicatedserver.cfg | При каждом запуске |
SaveInterval, IdleDayCycleSpeed, целевая частота кадров | dedicatedserver.cfg | При каждом запуске |
GameSettings (восстановление деревьев, урон постройкам) | dedicatedserver.cfg | При каждом запуске |
GameMode | dedicatedserver.cfg, затем копируется в сохранение | Только при создании нового сохранения |
CustomGameModeSettings | dedicatedserver.cfg, затем копируется в сохранение | Только при создании нового сохранения |
| Владельцы | ownerswhitelist.txt | При каждом запуске |
На практике это значит вот что: имя сервера или интервал сохранения можно менять когда угодно, с перезапуском. Восстановление деревьев или урон постройкам на существующем мире тоже переключаются перезапуском. А вот агрессию врагов, длину сезонов или штрафы выживания для существующего мира через конфиг не поменять, и сервер не предупредит, что проигнорировал вас.
Ещё два момента, которые стоит знать до выбора:
- Любой ключ `dedicatedserver.cfg` можно переопределить в командной строке с префиксом
-dedicatedserver., например-dedicatedserver.SaveSlot "2". Вкладка Startup в панели часто задаёт значения именно так, и значение из командной строки сильнее файла. Если правка файла будто ничего не меняет, проверьте команду запуска. - Файл - строгий JSON. Никаких комментариев, никакой запятой после последнего ключа, только прямые кавычки. Неправильно оформленный файл останавливает запуск с ошибкой конфигурации, а не тихо откатывается к значениям по умолчанию.
Рецепты настроек для реальных групп#
Пресеты - Peaceful, Normal, Hard, HardSurvival, Creative - подходят многим группам. Custom - для тех случаев, когда не подходит ни один. Ниже отправные точки в виде значимого фрагмента dedicatedserver.cfg. Если регистр значений в вашем сгенерированном файле отличается, берите его оттуда: документация и сгенерированный файл не всегда совпадали.
Группа, которая играет урывками и в основном строит
Каннибалы всё равно приходят, но никто не умирает с голоду, пока все на работе, а база защищена от самых тяжёлых набегов.
"GameMode": "Custom","IdleDayCycleSpeed": 0.0,"SaveInterval": 300,"GameSettings": { "Gameplay.TreeRegrowth": true, "Structure.Damage": false},"CustomGameModeSettings": { "GameSetting.Vail.EnemyAggression": "low", "GameSetting.Survival.PlayerStatsDamage": "off", "GameSetting.Survival.ColdPenalties": "off", "GameSetting.Environment.SeasonLength": "long", "GameSetting.Environment.DayLength": "long"}IdleDayCycleSpeed со значением 0.0 останавливает часы, когда никого нет онлайн, и для группы, которая играет дважды в неделю, это важнее любого ползунка сложности. Восстановление деревьев не даёт окрестностям долгоживущей базы превратиться в поле пней.
Обычное кооперативное прохождение сюжета
"GameMode": "Normal" с GameSettings по умолчанию - это игра в том виде, в каком её задумали, и правильный выбор для группы, которая вместе проходит сюжет. Единственное, что стоит поменять, - SaveInterval: 600 секунд по умолчанию означают, что вылет может стоить десяти минут, а в сюжетном прохождении больше сцен, где это особенно обидно.
Хардкорный сервер на выживание
"GameMode": "HardSurvival" - пресет для групп, которым нужен полный гринд. Если хочется чуть менее жёсткого, используйте Custom с "GameSetting.Survival.ConsumableEffects": "hard", "GameSetting.Survival.PlayerStatsDamage": "hard", "GameSetting.Vail.EnemyHealth": "high" и "GameSetting.Survival.ReducedFoodInContainers": true, оставив штрафы за холод на normal. Жёсткие настройки с длинными сезонами превращают зиму в настоящее событие, а не в короткое неудобство.
Сервер для строительства
"GameMode": "Creative" убирает затраты ресурсов, либо Custom с "GameSetting.Survival.CreativeMode": true и "GameSetting.Vail.EnemySpawn": false, если хотите сохранить какие-то другие свои настройки. Творческие миры с большими постройками - самое тяжёлое, что можно попросить у этого сервера, так что ждите роста потребления памяти вместе с числом построек.
Что бы вы ни выбрали, запишите это вместе с датой создания мира. Через полгода никто не вспомнит, создавался ли этот мир с низкой агрессией, а конфиг может уже говорить другое.
Что внутри слота сохранения#
На сервере каждый мир - это папка в каталоге пользовательских данных:
Saves/DedicatedServer/Multiplayer/0000000001/Имя папки - номер слота, дополненный нулями до десяти цифр, и SaveSlot выбирает, какой из них загрузится. Внутри набор JSON-файлов и миниатюра. Имена файлов от сборки к сборке немного различаются, но в актуальных сборках вы найдёте вот что:
| Файл | Что в нём |
|---|---|
GameSetupSaveData.json | Правила, с которыми создан мир: режим и пользовательские настройки |
GameStateSaveData.json | Общее состояние игры, включая тип игры и прогресс сюжета |
SaveData.json | Основная часть мира: предметы, постройки, состояние NPC, Kelvin и Virginia |
PlayerInventorySaveData.json | Данные инвентаря |
PlayerStateSaveData.json | Позиция и характеристики игрока |
WeatherSystemSaveData.json | Состояние погоды и сезона |
WorldItemManagerSaveData.json | Предметы, размещённые или выброшенные в мире |
Слот - это единое целое. Не копируйте отдельные файлы между мирами: они ссылаются друг на друга, и мир, собранный из двух сохранений, - это мир, который вылетает при загрузке. Копируйте, бэкапьте и восстанавливайте папки целиком.
Часть данных конкретного игрока хранится не на сервере, а на машине самого игрока, в папке MultiplayerClient среди его локальных сохранений. Поэтому инвентари и позиции иногда ведут себя неожиданно после переноса мира: мир переехал, а сторона каждого игрока - нет.
Изменение правил существующего мира#
Поддерживаемого способа поменять GameMode или пользовательские настройки существующего мира нет. Есть неподдерживаемый, которым сообщество пользуется широко: прямая правка JSON сохранения. Он работает, потому что правила хранятся в слоте обычным текстом.
- Остановите сервер и дождитесь в консоли строки о финальном сохранении.
- Сделайте бэкап всей папки слота. Это не по желанию.
- Откройте
GameSetupSaveData.jsonв редакторе, который не переформатирует файл. Найдите значение режима игры - например"StringValue":"Normal"- и отдельные настройки, каждая из которых хранится записью с именем настройки и её значением. - Если вы меняли режим, поменяйте и соответствующее значение
"GameType"вGameStateSaveData.json, чтобы файлы не противоречили друг другу. - Запустите сервер и прочитайте лог. Зайдите и убедитесь, что изменение применилось.
Редакторы сохранений от сообщества, например SOTFEdit, оборачивают те же правки в интерфейс, и для большинства изменений это надёжнее ручной правки. В любом случае действуют три предупреждения. Формат внутренний, и Endnight может изменить его любым патчем. Некоторые изменения посреди игры не имеют смысла - переключение на Peaceful не уберёт каннибалов, уже записанных в состояние мира. А сломанная правка делает слот незагружаемым - для этого и нужен шаг 2.
Перенос миров на сервер, с него и между слотами#
Из своей игры на сервер
Мультиплеерный мир, который вы хостили из клиента игры, лежит на вашем ПК здесь:
%USERPROFILE%\AppData\LocalLow\Endnight\SonsOfTheForest\Saves\<SteamID64>\Multiplayer\<world id>\Остановите сервер, загрузите эту папку в Saves/DedicatedServer/Multiplayer/, переименуйте её в свободный номер слота с нулями, например 0000000002, поставьте SaveSlot в 2, а SaveMode в Continue, и запустите. Постройки, прогресс сюжета и мир переедут. Предупредите группу, что по названной выше причине они могут появиться с меньшим, чем уходили.
Одиночные миры
Одиночные сохранения лежат в папке SinglePlayer рядом с Multiplayer. Перенос такого мира на выделенный сервер - не документированный путь. Люди сообщают, что им удавалось таким же образом скопировать одиночный слот в мультиплеерную папку сервера, с переменным успехом в зависимости от сборки. Если пробуете, делайте это в запасном слоте, сохранив оригинал, и поиграйте час, прежде чем решить, что мир в порядке.
С сервера обратно на ПК
Чтобы поиграть в мир с сервера офлайн или передать его кому-то для хостинга, проделайте всё в обратном порядке. Остановите сервер, чтобы слот сохранился, скачайте папку слота и положите её в свою Saves\<SteamID64>\Multiplayer\ с числовым именем папки. Мир появится в списке загрузки игры для хостинга мультиплеера. Это ещё и самый чистый способ закрыть сервер, не потеряв мир: скачайте последний слот до того, как сервер исчезнет, потому что удаление сервера у большинства хостеров удаляет вместе с ним сохранения и бэкапы.
Между слотами на одном сервере
Слоты делают эксперименты дешёвыми. Скопируйте текущий слот в следующий свободный номер, направьте SaveSlot на копию и пробуйте мод, правку или рискованный бой с боссом. Если что-то пойдёт не так, верните SaveSlot обратно. Оригинал не менялся.
Время сохранений, бэкапы и откат#
Мир записывается каждые SaveInterval секунд и при чистой остановке. Убитый процесс, вылет или остановка из-за нехватки памяти теряют всё с последнего сохранения. Встроенный механизм каждый раз перезаписывает тот же слот, так что это не бэкап: мир, сохранённый в сломанном состоянии, заменяет хороший.
План бэкапов для этой игры состоит из трёх вещей:
- Копия папки сохранений по расписанию, хранящаяся вне сервера, - каждую ночь для активной группы. Чаще бессмысленно, если ночью никто не играет.
- Ручная копия перед любым риском - обновлением игры, правкой сохранения, модом, сюжетным боссом.
- Восстановление, которое вы действительно выполнили. Один раз восстановите бэкап в запасной слот, загрузите его и пройдитесь по миру. Почему это важнее расписания, объясняют статьи бэкапы, которые действительно восстанавливаются и проверка восстановления до того, как оно понадобится.
Чтобы откатиться, остановите сервер, замените папку слота копией из бэкапа - всю папку, а не отдельные файлы - и запустите. Игроки теряют всё с момента бэкапа, так что сначала предупредите их.
На RE:NODE бэкапы делаются вручную или по расписанию, хранятся вне машины, которую защищают, и восстанавливаются одной кнопкой; их также можно скачать, что закрывает пункт «держать копию дома». Запись в Schedules может делать бэкап в четыре утра и сразу за ним перезапуск, каждое действие отдельной задачей по порядку. Кнопка Restart отправляет чистую остановку, так что мир сначала сохраняется. Если сервер упирается в лимит памяти, его останавливают и чисто перезапускают, а не уводят в своп, - это как раз случай остановки без сохранения и ещё одна причина снизить SaveInterval до 300 на большом мире. Удаление сервера удаляет и его бэкапы, включая заблокированные, так что скачайте последний перед отменой.
Вайпы и новый старт#
Начать новый мир можно двумя способами, и один из них уничтожает старый.
SaveMode со значением New заново генерирует текущий слот при каждом запуске. Это опасный способ: забудете вернуть Continue, и следующий перезапуск снова сотрёт мир.
Безопаснее новый слот. Поставьте SaveSlot на неиспользуемый номер с SaveMode New, запустите один раз, чтобы мир сгенерировался, и сразу же верните SaveMode в Continue. Старый мир остаётся нетронутым в своей папке, и вернуться к нему можно, поменяв одно число. Это ещё и единственный чистый способ применить новые правила игры, ведь они читаются при создании мира. Общая картина по разным играм - в статье файлы сохранений игровых серверов.
Решение проблем#
Пользовательские настройки, изменённые в конфиге, не действуют. Они применяются только к новому сохранению. Начните новый слот или отредактируйте GameSetupSaveData.json на копии, для которой сделан бэкап.
После перезапуска мир сбросился. SaveMode стоит в New, изменился SaveSlot, или одно из них задано переопределением в командной строке. Старый слот по-прежнему на диске.
Загруженный мир не загружается, и генерируется новый. Имя папки не совпадает с дополненным нулями номером слота из SaveSlot, или файлы лежат на одну папку глубже. JSON-файлы должны лежать прямо в папке слота.
Сервер не запускается после правки сохранения. JSON повреждён. Восстановите бэкап и повторите правку в редакторе, который не трогает форматирование.
Игроки потеряли инвентарь после переноса. В какой-то мере это ожидаемо: часть данных каждого игрока хранится на его собственной машине. Приготовьте сундук с припасами на первую сессию в перенесённом мире.
Сохранение длится так долго, что игроки это замечают. Большой мир с множеством построек. Держите SaveInterval на значении, которое группа терпит, и перезапускайте сервер ежедневно, чтобы потребление памяти не росло, - см. расписания перезапусков, которые помогают.
FAQ#
Можно ли изменить сложность существующего мира на сервере Sons of the Forest?
Не через dedicatedserver.cfg - он применяет правила только при создании сохранения. Можно отредактировать GameSetupSaveData.json и GameStateSaveData.json в слоте при остановленном сервере и сделанном бэкапе или начать новый слот с нужными правилами.
Какие настройки можно менять, не начиная новый мир?
Всё, кроме GameMode и CustomGameModeSettings: имя, пароль, число игроков, интервал сохранения, скорость часов при простое и два переключателя GameSettings - восстановление деревьев и урон постройкам. Применяются они перезапуском.
Как скачать свой мир с сервера?
Остановите сервер, чтобы слот сохранился, затем скачайте пронумерованную папку слота из Saves/DedicatedServer/Multiplayer/. Положите её в свою Saves\<SteamID64>\Multiplayer\, чтобы хостить мир или играть в него из игры.
Можно ли держать два мира на одном сервере?
По одному за раз. Каждый слот - отдельный мир, и SaveSlot выбирает, какой загрузится. Переключение - это остановка, смена одного числа и запуск, и ни один из миров не страдает.
Почему мой конфиг игнорируется?
Либо JSON повреждён, и сервер сообщает об ошибке конфигурации, либо значение переопределяет аргумент командной строки -dedicatedserver.. Значения из командной строки побеждают файл.
Хранит ли сервер собственные бэкапы?
Он хранит только текущее сохранение, которое перезаписывается каждый интервал. Бэкапы - это то, что делаете вы, копируя папку слота в другое место или пользуясь функцией бэкапов хостера.




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