RE:NODE

Руководства13 мин чтения

Настройки сервера Palworld: все параметры PalWorldSettings.ini

Где на самом деле лежит PalWorldSettings.ini, что делает каждый параметр, разумные значения для закрытой группы и почему загруженный кооперативный мир игнорирует этот файл.

0 прочтений

Выделенный сервер Palworld настраивается одной строкой в одном файле: PalWorldSettings.ini в папке Pal/Saved/Config/LinuxServer/, и всё, что сервер знает о сложности, множителях, паролях, портах и лимитах, лежит внутри единственного кортежа OptionSettings=(...) на этой строке. Ошибётесь со скобкой - и вся строка молча отбрасывается: сервер поднимается с настройками по умолчанию, и ничто вам об этом не сообщает. Ещё две вещи сбивают людей раньше, чем они до этого доберутся: файл в корневой папке сервера - это шаблон, который сервер никогда не читает, а мир, загруженный из кооператива, несёт собственные настройки, которые полностью перекрывают файл. Ниже разобрано всё это, ключ за ключом.

Где лежат настройки#

Есть два файла с почти одинаковыми именами, и делает что-то только один из них.

code
<server root>/DefaultPalWorldSettings.ini      <- template, read-only reference<server root>/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini    <- the live file

На сервере под Windows рабочий путь другой: Pal/Saved/Config/WindowsServer/PalWorldSettings.ini. Рабочего файла нет, пока сервер хотя бы раз не запускался, поэтому обычный первый шаг такой: запустить сервер, остановить, а потом редактировать. Скопировать DefaultPalWorldSettings.ini поверх рабочего файла - стандартный способ получить полный список ключей для той версии, которую вы действительно запускаете, и в Palworld это важнее, чем в большинстве игр, потому что Pocketpair добавляет параметры почти с каждым обновлением. Какой бы список вы ни читали в интернете, включая этот, авторитетом остаётся файл из вашей сборки.

На хостинге с панелью тот же путь вы найдёте в файловом менеджере или по SFTP с учётными данными сервера, указанными на его странице. О том, как подключить редактор к этому пути, рассказано в статье SFTP и файловый менеджер. Редактируйте файл при остановленном сервере. Palworld записывает конфиг заново при завершении работы, поэтому правка, внесённая на работающем сервере, обычно затирается в тот момент, когда вы его останавливаете, и люди теряют на этом час, прежде чем понимают, в чём дело.

Часть настроек можно передать и в командной строке, и на этот запуск она перекроет файл. Это удобно на панели, где вкладка Startup открывает несколько переменных, и именно так меняют порт или число игроков, не трогая конфиг:

bash
$ ./PalServer.sh -port=8211 -queryport=27015 -players=16 -publiclobby \    -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS

Три флага производительности в конце Pocketpair не документирует, но их рекомендует практически каждый, кто держит сервер в серьёзном масштабе, и у большинства хостеров они включены по умолчанию.

Одна строка, все параметры#

В рабочем файле важны ровно две строки: заголовок секции и кортеж параметров.

PalWorldSettings.ini
[/Script/Pal.PalGameWorldSettings]OptionSettings=(Difficulty=None,DayTimeSpeedRate=1.000000,ExpRate=1.000000,PalCaptureRate=1.000000,ServerName="Longship Crew",AdminPassword="...")

Здесь строка перенесена, чтобы уместиться на странице. В настоящем файле это одна непрерывная строка. Поставьте перенос внутри скобок - и парсер бросает всё, что идёт после него. Из этого формата следуют такие правила:

  • Никаких пробелов после запятых и вокруг знаков =.
  • Строки берутся в двойные кавычки, числа - без кавычек, булевы значения - True или False с заглавной буквы.
  • Дробные числа по традиции пишутся с шестью знаками после запятой. 1.5 тоже работает, но держите единый стиль, чтобы различия в файле читались легко.
  • Ключи можно опускать. Всё отсутствующее берёт встроенное значение по умолчанию, так что короткий кортеж из десяти изменённых вами параметров вполне допустим и поддерживать его гораздо проще, чем чудовище из 90 ключей.
  • Ключ, которого сборка не знает, игнорируется. Именно так руководство, написанное для старого обновления, тихо перестаёт что-либо делать.

Вариант отказа стоит повторить, потому что это самое частое обращение в поддержку по Palworld: синтаксическая ошибка не порождает никакой ошибки. Сервер запускается, мир загружается, все множители возвращаются к 1.0, а пароль пропадает. Если ваши настройки «сами сбрасываются», сначала ищите лишний пробел, «умные» кавычки, вставленные с веб-страницы, или пропущенную закрывающую скобку и только потом смотрите куда-то ещё.

копируете один разсильнее файласильнее всегоDefaultPalWorldSettingsшаблон в корнеАргументы запуска-port, -playersWorldOption.savвнутри импортаPalWorldSettings.iniпапка LinuxServerРаботающий серверзначения в силе
Какие настройки сервер использует на деле

Название сервера, пароли и порты#

Эти ключи вы задаёте до того, как кто-либо подключится.

КлючПо умолчаниюЧто делает
ServerNameDefault Palworld ServerПоказывается в списке сообществ
ServerDescriptionпустоПроизвольный текст под названием
ServerPasswordпустоПароль для входа. Пусто - заходит любой
AdminPasswordпустоНужен для админ-команд, RCON и REST API
PublicIPпустоЗадавайте, только если сервер объявляет не тот адрес
PublicPort8211Порт, объявляемый в списке
ServerPlayerMaxNum32Жёсткий предел числа подключённых игроков
CoopPlayerMaxNum4Только для кооператива. На выделенном сервере ничего не делает
bUseAuthTrueАутентификация платформы. Оставьте включённой
RegionпустоМетка региона для списка сообществ
RCONEnabledFalseSource RCON на порту RCONPort
RCONPort25575TCP
RESTAPIEnabledFalseАдминистративный HTTP API
RESTAPIPort8212TCP
BanListURLСписок PocketpairГлобальный список банов, который сервер загружает при старте

ServerName - это ещё и то, как вас находят, поэтому сделайте его удобным для поиска: фильтр списка в игре - это обычное совпадение подстроки, а серверов в нём десятки тысяч. Если вы вообще не хотите попадать в список, не добавляйте -publiclobby в командную строку.

Порты:

ПортПротоколНазначение
8211UDPИгровой трафик. Единственный, который нужен игрокам
27015UDPSteam query, задаётся через -queryport
25575TCPRCON, только если вы его включили
8212TCPREST API, только если вы его включили

Игровой трафик Palworld идёт по UDP, поэтому правило файрвола, открывающее только TCP, даёт сервер, который прекрасно работает, но к которому нельзя подключиться. Вторая половина этой пары, порт запросов, разобрана в статье порты игрового сервера: именно он решает, появитесь ли вы в списке вообще. RCON и REST API никогда не должны быть открыты в интернет со слабым паролем; оба подробно описаны в статье админ-команды Palworld, RCON и REST API.

Сложность и множители#

Difficulty принимает значения None, Casual, Normal и Hard. Оставьте None и задайте отдельные множители сами. Именованная сложность и таблица множителей, выставленная вручную, - это два источника истины для одного и того же числа, и вы потратите больше времени на выяснение, какой из них победил, чем ушло бы на ввод значений.

Всё ниже - множители около 1.000000.

КлючПо умолчаниюЧто меняет
DayTimeSpeedRate1.0Чем выше, тем быстрее проходит светлое время
NightTimeSpeedRate1.0Поставьте 2.0, если ваша группа не любит темноту
ExpRate1.0От 1.5 до 2.0 подходит группе, которая играет несколько вечеров в неделю
PalCaptureRate1.0Шанс, что сфера попадёт
PalSpawnNumRate1.0Плотность диких палов. Ещё и рычаг производительности
WorkSpeedRate1.0Как быстро работают палы на базе
CollectionDropRate1.0Добыча с руды, деревьев и камня
CollectionObjectHpRate1.0Сколько ударов нужно, чтобы разбить залежь
CollectionObjectRespawnSpeedRate1.0Скорость возрождения залежей
EnemyDropItemRate1.0Добыча с побеждённых палов и людей
PalEggDefaultHatchingTime72Часы, а не множитель. Обычно меняют на 1

Два из них требуют предупреждения. CollectionObjectRespawnSpeedRate, по многочисленным сообщениям, работает наоборот относительно своего названия: меньшие значения возрождают залежи раньше, поэтому меняйте его за один шаг и сходите посмотреть на камень, а не верьте подписи. А PalEggDefaultHatchingTime - это реальные часы настенного времени, есть кто-нибудь в сети или нет, и именно поэтому почти на каждом закрытом сервере там стоит 1 или 0.

Множители выживания устроены так же, но с названиями там минное поле. Pocketpair выпустила Decreace вместо Decrease и так и не исправила, а между ключами ещё и смешиваются HP и Hp. Копируйте их в точности:

КлючПо умолчаниюЧто меняет
PlayerDamageRateAttack1.0Урон, который наносите вы
PlayerDamageRateDefense1.0Урон, который получаете вы
PalDamageRateAttack1.0Урон, который наносят ваши палы
PalDamageRateDefense1.0Урон, который получают ваши палы
PlayerStomachDecreaceRate1.0Скорость голода. Чем ниже, тем мягче
PlayerStaminaDecreaceRate1.0Расход выносливости
PlayerAutoHPRegeneRate1.0Пассивное лечение
PlayerAutoHpRegeneRateInSleep1.0Лечение в кровати
PalStomachDecreaceRate1.0Как быстро голодают палы на базе
PalAutoHPRegeneRate1.0Пассивное лечение палов
BuildObjectDamageRate1.0Урон, который получают постройки
BuildObjectDeteriorationDamageRate1.0Обветшание. 0 отключает его

PalStomachDecreaceRate где-нибудь около 0.3 - это настройка, которая не даёт вашей базе развалиться, пока никого нет в сети, а BuildObjectDeteriorationDamageRate=0.000000 не даёт базе гнить между сессиями. На сервере, который компания друзей навещает по выходным, эти два параметра делают для настроения больше любого множителя опыта.

Штраф за смерть, PvP, гильдии и рейды#

КлючПо умолчаниюПримечания
DeathPenaltyAllNone, Item, ItemAndEquipment, All
bEnablePlayerToPlayerDamageFalseИгроки могут ранить друг друга
bEnableFriendlyFireFalseУрон внутри гильдии
bIsPvPFalseРежим PvP
bCanPickupOtherGuildDeathPenaltyDropFalseЗабирать мешки смерти других гильдий
bEnableDefenseOtherGuildPlayerFalseЗащита базы стреляет по чужакам
bEnableInvaderEnemyTrueРейды на вашу базу
bEnableNonLoginPenaltyTrueШтраф, применяемый к игрокам не в сети
bEnableFastTravelTrueТочки быстрого перемещения
bIsStartLocationSelectByMapTrueВыбор места появления на карте
bExistPlayerAfterLogoutFalseВаше тело остаётся в мире после выхода
GuildPlayerMaxNum20Участников в гильдии
bAutoResetGuildNoOnlinePlayersFalseУдалять гильдии, где давно никого нет
AutoResetGuildTimeNoOnlinePlayers72Через сколько часов это происходит
bActiveUNKOFalseПалы оставляют помёт

DeathPenalty=All означает, что вы роняете весь инвентарь вместе со снаряжением, а на публичном сервере с bCanPickupOtherGuildDeathPenaltyDrop=True это PvP с полным лутом. Для закрытой группы обычный компромисс - Item (выпадает сумка, надетое остаётся), а None - это то, к чему приходит большинство серверов на шестерых после первого раза, когда кто-нибудь погиб в вулкане.

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

Пара параметров автосброса гильдий рассчитана на публичные серверы. bAutoResetGuildNoOnlinePlayers=True при значении по умолчанию в 72 часа удалит гильдию и базы каждого, кто взял длинные выходные, так что если вы включаете её, поднимите таймер до чего-нибудь вроде 336 (две недели) и предупредите людей.

Базы, палы и настройки, которые стоят памяти#

Расход памяти в Palworld определяется числом симулируемых объектов, а не числом игроков, и об этом статья почему серверу Palworld нужно больше памяти, чем вы думаете. Четыре из этих ключей решают, сколько таких объектов будет.

КлючПо умолчаниюВлияние на нагрузку
BaseCampMaxNum128Всего баз на сервере
BaseCampWorkerMaxNum15Палов, работающих на одной базе
PalSpawnNumRate1.0Диких палов, живущих в мире
DropItemMaxNum3000Одновременно отслеживаемых выпавших предметов
DropItemMaxNum_UNKO100Одновременно отслеживаемого помёта
DropItemAliveMaxHours1.0Часов до исчезновения выпавшего предмета
SupplyDropSpan180Минут между сбросами припасов
ChatPostLimitPerMinute10Ограничение частоты сообщений в чате
bIsUseBackupSaveDataTrueХранить скользящие копии сохранения
LogFormatTypeTextText или Json

Порядок в этом списке примерно соответствует порядку, в котором к ним стоит тянуться. BaseCampWorkerMaxNum выше 20 - это то место, где люди сообщают о проблемах: игра примет большее число, а база станет вести себя странно. BaseCampMaxNum в 128 щедро для закрытого сервера, и его можно снизить до 20 или 30, чтобы никто не заметил, а заодно один игрок не построит двенадцать аванпостов по всей карте. PalSpawnNumRate на уровне 0.7 заметно разрежает дикую местность на испытывающем трудности сервере, а веселья отнимает меньше, чем вы ожидаете, потому что плотность подобрана под одиночную игру.

DropItemMaxNum=3000 - это очень много отслеживаемых объектов. Вдвое меньшее значение и DropItemAliveMaxHours в 0.5 - бесплатная производительность на загруженном сервере. Честная картина того, что эти ручки могут и чего не могут, есть в статье CPU или RAM для игровых серверов: если контейнер упёрся в потолок памяти, никакой множитель его не спасёт, и ответом будет тариф побольше.

Оставьте bIsUseBackupSaveData=True. Он записывает скользящие копии сохранения рядом с рабочим: они не переживут исчезновение диска, зато спасут от повреждённого Level.sav, а именно от повреждённых сохранений миры Palworld обычно и гибнут. Настоящие резервные копии вне машины по-прежнему обязательны - см. резервные копии, которые действительно восстанавливаются.

Сохранения, WorldOption.sav и перенос кооперативного мира#

Мир лежит в папке сохранений, по одному каталогу на мир, с именем из 32 шестнадцатеричных символов:

code
Pal/Saved/SaveGames/0/<WorldID>/    Level.sav          the world: bases, pals, structures    LevelMeta.sav      name and metadata shown in the list    WorldOption.sav    settings baked into the world (co-op saves only)    Players/<id>.sav   one file per character

Сервер выбирает мир по -worldname или, если ничего не задано, берёт единственную найденную папку. Загрузка кооперативного мира - это четыре шага: остановить сервер, скопировать всю папку <WorldID>, удалить из неё WorldOption.sav, запустить сервер. Третий шаг - тот, о котором никто не упоминает. WorldOption.sav записывается, когда мир создаётся в кооперативе, в нём лежат настройки, с которыми мир был создан, и пока он существует, выделенный сервер читает его вместо вашего аккуратно отредактированного ini. Удалите его - и PalWorldSettings.ini вступит в права.

Сохранения игроков привязаны к персонажу и к миру. Файл Players/<id>.sav связан с идентификатором платформы игрока, так что при переносе мира между серверами персонажи переезжают вместе с ним, а удаление одного файла игрока сбрасывает этого человека на первый уровень, оставляя базу его гильдии на месте.

В отличие от Valheim, Palworld записывает мир часто, а не по длинному таймеру, так что сбой стоит секунд прогресса, а не получаса. Риск другой: запись большая и идёт, пока мир продолжает работать, поэтому остановка посреди неё может оставить усечённый Level.sav. Всегда останавливайте сервер штатно, держите bIsUseBackupSaveData включённым и делайте настоящую резервную копию перед каждым обновлением игры. На RE:NODE кнопка Stop в панели - это штатное завершение, слоты резервных копий входят в каждый тариф Palworld, а вкладка Schedules по cron-выражению запускает за вас ночной backup и перезапуск.

Диагностика#

Все настройки вернулись к значениям по умолчанию. Синтаксис. Проверьте, нет ли переноса строки внутри OptionSettings=(...), пропущенной ), изогнутой кавычки из браузера или пробела после запятой. А ещё убедитесь, что вы правили файл в Pal/Saved/Config/LinuxServer/, а не шаблон в корне.

Изменения игнорируются, а остальная часть файла работает. Либо такого ключа нет в вашей сборке, либо у мира есть WorldOption.sav. Сверьте имена ключей с DefaultPalWorldSettings.ini из той же сборки, символ за символом, включая Decreace.

Сервера нет в списке сообществ. В командной строке должен быть -publiclobby, оба UDP-порта должны быть доступны, а списку нужно несколько минут. Сначала проверьте прямое подключение по IP:8211; если оно работает, с сервером всё в порядке.

Игроки подключаются и сразу отключаются. Обычно не совпадает пароль или включён bUseAuth=True во время сбоя платформы. Прежде чем винить конфиг, посмотрите вывод консоли: чтение консоли - кратчайший путь к нужной строке.

Память растёт всю неделю, а потом сервер сам перезапускается. Это контейнер упирается в свой предел. Palworld растёт вместе с числом палов и построек, а не игроков, так что на долго живущем мире это ожидаемо. Ночной перезапуск держит график ровным; постоянно заполненный график памяти означает, что тариф мал.

Мир пропал, а появился новый. Сервер не смог прочитать папку сохранений и создал рядом свежий мир. Ваша старая папка <WorldID> на месте. Остановите сервер, проверьте, что -worldname в точности совпадает с именем папки, и удалите новый пустой мир.

FAQ#

Сколько игроков выдержит выделенный сервер Palworld?

ServerPlayerMaxNum доходит до 32, и это поддерживаемый максимум. Разумно ли 32 - вопрос другой: каждый игрок строит базы, на каждой базе работают палы, поэтому полному серверу нужно куда больше памяти, чем подсказывает число игроков. Шестнадцать - комфортная цель на правильно подобранном тарифе.

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

Да. PalWorldSettings.ini читается один раз при запуске, а работающий сервер перезаписывает его при завершении, так что правки, внесённые во время работы, теряются. Остановите, отредактируйте, запустите.

Какие настройки нельзя менять в существующем мире?

Почти все можно. Множители, урон, штрафы и лимиты применяются со следующего запуска. Нельзя задним числом изменить лишь то, что уже построено или поймано: если снизить BaseCampWorkerMaxNum ниже числа палов, уже закреплённых за базой, эта база останется сверх лимита, пока кто-нибудь не поправит её вручную.

Чем отличаются AdminPassword и ServerPassword?

ServerPassword игроки вводят, чтобы войти. AdminPassword вводит администратор, чтобы открыть набор команд, и это же учётные данные для RCON и REST API. Это не должна быть одна и та же строка.

Могут ли игроки Xbox и Steam делить один сервер?

Свежие сборки открывают кроссплей через список платформ в настройках, а точное имя ключа менялось между обновлениями, так что смотрите DefaultPalWorldSettings.ini в своей сборке, а не копируйте ключ из руководства. Неизменно одно: на серверы с кроссплеем заходят через список в игре, а не вводя IP.

Стоит ли включать RCON?

Только если вы им будете пользоваться. Это практичный способ запускать объявления и сохранения по расписанию, но протокол не шифруется и защищён одним общим паролем, поэтому его место за правилом файрвола, а не открытым в интернет. Минимум описан в статье RCON без риска.


Комментарии

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

0/2000