Sons of the Forest — dedicatedserver.cfg
Базовый запуск сервера Sons of the Forest — дело двадцати минут: SteamCMD, дефолтный конфиг, порты открыты, и вот уже можно заходить по прямому IP. Но дефолтные значения dedicatedserver.cfg — это в лучшем случае "сойдёт", а не "как я хочу". Если вы держите сервер для конкретной компании друзей или сообщества и хотите настроить именно сложность, видимость и сетевые нюансы под себя — придётся закопаться в поля конфига чуть глубже, чем показывает большинство быстрых гайдов. Разберём файл по частям: что реально трогать, а что лучше не менять руками.
Содержание
- Структура dedicatedserver.cfg: что где лежит
- Сложность: GameMode и тонкая настройка через CustomGameModeSettings
- Видимость сервера: кто и как может зайти
- Сетевые порты: GamePort, QueryPort и новая схема BlobSyncPort
- Установка и обновление через SteamCMD: актуальный путь и легаси-нюанс с -beta
- Производительность: SaveMode, SaveInterval и throttling кадровой частоты
Структура dedicatedserver.cfg: что где лежит
Файл dedicatedserver.cfg в папке сервера — это JSON, несмотря на расширение. Если открыть его после свежей установки через SteamCMD, увидите плоский список верхнеуровневых полей (имя сервера, порты, лимит игроков) плюс два вложенных объекта, которые чаще всего и определяют, каким получится игровой опыт: GameSettings и CustomGameModeSettings.
Важный момент для тех, кто правит конфиг впервые: если файл повреждён (сломан синтаксис JSON) или отсутствует вовсе, сервер при следующем запуске пересоздаст его с дефолтными значениями поверх того, что было. Это удобная подстраховка, но она же означает риск случайно потерять кастомные настройки при правке на живом сервере — сохраняйте бэкап конфига перед серьёзными правками, отдельно от бэкапа сейвов из базовой инструкции по установке.
Ещё нюанс: набор полей менялся между патчами игры — Endnight то добавляли переключатели в CustomGameModeSettings, то переименовывали сетевые поля (об этом ниже, в разделе про порты). Если гайд в интернете показывает поля, которых нет в вашем файле — это версия из другого билда игры, а не ошибка. Ориентируйтесь на то, что реально сгенерировал ваш сервер, а не на скриншот трёхлетней давности.
Сложность: GameMode и тонкая настройка через CustomGameModeSettings
Поле GameMode — это первое, что стоит решить перед тем, как звать людей на сервер. Доступные значения: normal, hard, hardsurvival (перманентная смерть без возрождения — аналог классического Perma-Death), peaceful (враги не нападают, упор на строительство и исследование), creative (безлимитные ресурсы, без выживания) и custom.
Первые пять — это готовые пресеты, менять их вручную нельзя, только выбирать целиком. А вот custom включает чтение блока CustomGameModeSettings, где можно настроить десятки параметров по отдельности. Условно они делятся на четыре группы:
- Враги:
EnemySpawn(вкл/выкл спавн врагов вообще),EnemyHealth,EnemyDamage,EnemyArmour,EnemyAggression,AnimalSpawnRate,EnemySearchParties— большинство принимают значенияLow/Normal/High. - Окружение:
StartingSeason,SeasonLength,DayLength,PrecipitationFrequency— влияют на смену времён года и погоду, что для survival-режима не косметика, а реально меняет темп игры (холод и осадки бьют по выживанию через параметры ниже). - Выживание:
ConsumableEffects,PlayerStatsDamage,ColdPenalties,BuildingResistance,ReducedFoodInContainers,SingleUseContainers,PlayersImmortalMode,OneHitToCutTree. - Мультиплеер:
Cheats(разрешить консольные команды/читы),PvpDamage(урон между игроками).
Пример рабочего фрагмента конфига под режим "полу-хардкор для опытной компании, но без вечного холода":
{
"GameMode": "Custom",
"CustomGameModeSettings": {
"EnemySpawn": true,
"EnemyHealth": "High",
"EnemyDamage": "Normal",
"EnemyAggression": "High",
"AnimalSpawnRate": "Normal",
"StartingSeason": "Fall",
"DayLength": "Normal",
"ColdPenalties": "Low",
"PlayersImmortalMode": false,
"OneHitToCutTree": false,
"Cheats": false,
"PvpDamage": true
}
}
Список не исчерпывающий — патчи добавляют новые переключатели, так что после обновления игры стоит открыть конфиг и посмотреть, не появилось ли что-то новое (сервер допишет их дефолтными значениями сам).
Практический совет: не выставляйте EnemyHealth и EnemyDamage на максимум одновременно, если часть игроков впервые в игре — это скорее фрустрирует новичков, чем создаёт честный челлендж. Разводите параметры: высокая агрессия и количество врагов при умеренном уроне держат напряжение, не превращая бой в лотерею.
Поднять сервер Sons of the Forest за пару минут
Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.
Создать серверВидимость сервера: кто и как может зайти
За то, кто видит и может подключиться к серверу, отвечает связка из нескольких полей, и их легко перепутать между собой.
ServerName— имя в списке серверов. Чисто косметика, но если сервер приватный, не пишите в название ничего, что раскрывает локацию или личные данные.Password— строка до 40 символов. Пустая строка""означает публичный сервер без пароля; любое значение делает сервер приватным по паролю (в отличие от полного скрытия из списка — сервер с паролем всё ещё виден в браузере серверов, просто не пустит без ввода пароля).LanOnly— булево значение, ограничивает видимость только локальной сетью. Для арендованного VPS с белым IP это поле почти всегда должно бытьfalse— иначе игроки извне физически не найдут сервер, даже с правильно открытыми портами.IpAddress— интерфейс, на котором слушает сервер. По умолчанию0.0.0.0(слушать на всех интерфейсах), и для подавляющего большинства случаев его не нужно трогать. Указывать конкретный IP имеет смысл только если на машине несколько сетевых интерфейсов или дополнительных IP и вы сознательно хотите привязать сервер к одному из них.
Практическая связка для приватного сервера "для своих": LanOnly: false (чтобы друзья извне могли зайти), непустой Password, и ServerName без опознавательных деталей. Для полностью публичного набора игроков — Password пустой, а модерацию решаете уже через whitelist или админ-права, если игра/моды это поддерживают.
Сетевые порты: GamePort, QueryPort и новая схема BlobSyncPort
Здесь чаще всего путаница между разными гайдами в сети, и вот почему. Актуальная (на момент написания статьи) схема портов, которую генерирует свежая установка через SteamCMD, выглядит так:
| Поле | Порт | Протокол | Назначение |
|---|---|---|---|
| GamePort | 8766 | UDP | основной игровой трафик |
| QueryPort | 27016 | UDP | запрос статуса, отображение в списке серверов |
| BlobSyncPort | 9700 | UDP | синхронизация состояния мира между сервером и клиентами |
Более старые гайды (и часть статей в этом же блоге) упоминают поле BlockingPort со значением 8767 вместо BlobSyncPort/9700 — это не два разных порта для одновременного открытия, а следствие того, что Endnight переименовали и изменили номер порта в одном из обновлений сетевого стека. Смотрите, что реально прописано в вашем dedicatedserver.cfg, и открывайте именно эти три порта на фаерволе — общий подход к настройке портов и файрвола для игрового сервера актуален, но конкретные номера сверяйте с файлом.
Рядом с портами полезно поле SkipNetworkAccessibilityTest. По умолчанию сервер при старте сам проверяет, что порты доступны снаружи, и это иногда подвешивает запуск в специфичных сетевых окружениях (некоторые NAT-конфигурации, виртуализированные сети у хостеров). Если вы уже вручную проверили доступность портов, можно выставить true — это уберёт внутреннюю проверку и ускорит старт, но тогда сами следите, что порты реально открыты, иначе получите сервер, который тихо не виден снаружи без предупреждения в логе.
Установка и обновление через SteamCMD: актуальный путь и легаси-нюанс с -beta
Сейчас стандартный и рекомендованный путь — устанавливать сервер как отдельное Steam-приложение с app id 2465200, анонимным логином, без покупки самой игры:
steamcmd +login anonymous +force_install_dir C:\sotf-server +app_update 2465200 validate +quit
Это тот же путь, что описан в базовой инструкции по установке сервера, и общие принципы работы с SteamCMD для игровых серверов разобраны в отдельной статье про установку и обновление через SteamCMD.
Но если гуглите старые гайды и натыкаетесь на команду вида +app_update 1326470 -beta dedicated (где 1326470 — app id самой игры, а не сервера) — это легаси-путь из первых месяцев после релиза, когда отдельного серверного приложения ещё не существовало и файлы раздавались через скрытую бета-ветку основного клиента. С появлением standalone app 2465200 этот путь стал не нужен и не поддерживается — не полагайтесь на него сейчас: ветка могла быть закрыта, а даже если формально ещё отвечает, версия файлов из неё не гарантированно совпадает с текущим клиентским билдом, что чревато рассинхроном протокола.
Если сомневаетесь, актуальна ли для вашей версии игры какая-то бета-ветка (например, тестовая ветка превью следующего патча), проверяйте текущий список веток на SteamDB по app id 2465200 перед тем, как что-то переключать: устаревшая ветка при -beta без валидной проверки просто откатит сервер на несовместимую версию.
Производительность: SaveMode, SaveInterval и throttling кадровой частоты
Отдельный блок полей влияет не на геймплей, а на то, сколько ресурсов сервер потребляет и как ведёт себя между сессиями игроков.
SaveMode—Continueпродолжает сохранение с текущего состояния мира (обычный режим для постоянного сервера),Newсоздаёт новый мир при следующем запуске. Перепутать эти два значения — частая причина паники в духе "сервер стёр весь прогресс", хотя на деле файл сейва никуда не делся, просто сервер стартовал новый.SaveInterval— интервал автосохранения в секундах, логика та же, что и в базовой инструкции: слишком частое сохранение на большом мире создаёт микро-паузы при записи на диск, слишком редкое — риск потерять прогресс при аварийном падении процесса.IdleTargetFramerateиActiveTargetFramerate— целевая частота обновления сервера, когда на нём нет игроков (idle) и когда есть хотя бы один активный (active). Разделение существует специально, чтобы не жечь CPU впустую, пока сервер простаивает ночью без единого игрока — по умолчанию idle-значение ниже active. Если сервер стоит на слабом тарифе и живёт бок о бок с другими процессами, не поднимайте idle-частоту без причины.IdleDayCycleSpeed— скорость смены игрового дня/ночи, пока сервер простаивает без игроков; может отличаться от той, что задана в игровых настройках сложности, и влияет на то, в какой момент суток застанут мир игроки, зашедшие после долгого простоя сервера.LogFilesEnabled,TimestampLogFilenames,TimestampLogEntries— управляют логированием: стоит держать включённым хотя бы базовое логирование, оно пригодится при разборе причин краша или лагов, подробнее в общей теме работы с конфигурационными файлами игрового сервера.
Разумная база для небольшого сервера на 4-6 игроков: SaveMode: Continue, SaveInterval в районе 60-120 секунд, IdleTargetFramerate заметно ниже ActiveTargetFramerate (экономия CPU в простое), логи включены.
Поднять сервер Sons of the Forest за пару минут
Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.
Создать серверЧастые вопросы
Можно ли сменить GameMode с готового пресета на custom без потери сейва?
Да, смена режима сложности не трогает сам файл сохранения — применяется к правилам симуляции с момента рестарта, старый прогресс по постройкам и предметам остаётся на месте.
Что будет, если оставить и старые, и новые поля портов в конфиге одновременно?
Ничего страшного не случится — сервер использует актуальный для своей версии набор полей, лишние (устаревшие) просто игнорируются. Но для чистоты лучше свериться, какие поля реально отвечают за порты в вашей версии, и открывать на фаерволе именно их.
Стоит ли включать SkipNetworkAccessibilityTest на арендованном VPS?
Обычно не обязательно — на VPS с белым IP встроенная проверка проходит быстро. Смысл включать её появляется, если старт сервера ощутимо подвисает именно на этапе проверки сети (видно в логе) и вы уже вручную убедились, что порты открыты.
Работает ли -beta dedicated в 2026 году?
Полагаться на неё не стоит — это путь до появления отдельного app id 2465200, официально уже не актуальный. Используйте стандартную установку через 2465200.
Нужно ли открывать BlockingPort (8767) и BlobSyncPort (9700) одновременно?
Нет, это последовательные версии одного и того же назначения порта в разных билдах игры, а не два независимых порта — открывайте то поле, которое реально указано в вашем текущем dedicatedserver.cfg.