Pterohost docs

Перенос мира Palworld: с одиночной игры на сервер и между хостингами

Как перенести мир Palworld из single-player и co-op на dedicated server и мигрировать сейв между хостингами: где лежит save, world-id, фикс привязки персонажей.

Перенос мира Palworld - одна из самых частых задач для админа: сначала люди играют вдвоём-вчетвером в co-op, упираются в лимит 4 игрока и привязку к хосту, а потом хотят перевести накопленный прогресс на полноценный dedicated server. Отдельная история - миграция между хостингами, когда меняется провайдер или тариф. В обоих случаях техника похожа (копируем файлы сейва), но подводные камни разные: single-player-мир тащит за собой известную проблему с персонажами, а dedicated-to-dedicated переезжает почти бесшовно. Разберём оба сценария по шагам, с путями к файлам, командами и фиксом привязки персонажей через community-утилиты.

Как устроен сейв Palworld

Прежде чем что-то копировать, важно понять структуру. Palworld хранит весь мир в одной папке с 32-символьным hex-идентификатором (WorldID):

SaveGames/<slot>/<WorldID>/
├── Level.sav          # весь мир: карта, базы, палы, инвентари игроков
├── LevelMeta.sav      # метаданные (имя мира, дата, превью)
├── WorldOption.sav    # настройки мира на момент создания
└── Players/
    ├── <PlayerUID>.sav
    └── <PlayerUID>.sav

Ключевой момент: Level.sav содержит не только мир, но и данные персонажей - уровень, характеристики, инвентарь. Файлы в папке Players/ - это лишь “паспорт” привязки конкретного PlayerUID к его записи внутри Level.sav. Именно рассинхрон между PlayerUID в single-player и на dedicated ломает миграцию персонажей.

<slot> в single-player равен вашему SteamID64, а на dedicated-сервере это всегда 0. Отсюда первое правило переноса: путь назначения на сервере - всегда SaveGames/0/.

Где лежит локальный сейв (single-player и co-op)

На Windows одиночные и co-op миры хранятся в профиле пользователя:

%LOCALAPPDATA%\Pal\Saved\SaveGames\<SteamID64>\<WorldID>\

Разворачивается это, например, в:

C:\Users\Ivan\AppData\Local\Pal\Saved\SaveGames\76561198000000000\A1B2C3D4E5F6A7B8C9D0E1F2A3B4C5D6\

Чтобы быстро попасть в папку, нажмите Win+R и вставьте:

%LOCALAPPDATA%\Pal\Saved\SaveGames

Внутри вы увидите папку с числовым именем (ваш SteamID64), а в ней - одну или несколько папок с hex-именами. Каждая hex-папка - отдельный мир. Если миров несколько, определить нужный проще всего по дате изменения Level.sav или по превью в самой игре (порядок в списке “Continue” совпадает с сортировкой по последнему запуску).

Свой SteamID64 можно подсмотреть прямо в имени родительской папки - он совпадает с числом из SaveGames\.

Pterohost - Palworld-хостинг с NVMe SSD, автобэкапами и DDoS-защитой: переносите мир без потери прогресса. Промокод 4START даёт -20% на первый заказ. Перенести мир на Palworld хостинг

Сценарий 1: перенос single-player или co-op мира на dedicated

Это самый востребованный, но и самый капризный сценарий. Мир, базы и палы переедут корректно, а вот с персонажами придётся повозиться - об этом ниже отдельная секция.

Шаг 1. Сделайте бэкап

Никогда не переносите мир без резервной копии обеих сторон. Полностью заархивируйте локальную папку мира и текущую серверную папку Saved. Подробно про схему бэкапов и ротацию - в статье бэкап Palworld-сервера. Минимум - руками:

# на сервере, перед любыми манипуляциями
tar -czf ~/pal-backup-before-migration.tar.gz \
  -C /home/palworld/palserver/Pal/Saved SaveGames Config

Шаг 2. Остановите сервер и найдите его WorldID

Dedicated server при первом запуске создаёт пустой мир в Pal/Saved/SaveGames/0/<WorldID>/. Остановите сервер (иначе он перезапишет файлы автосейвом каждые 30 секунд) и посмотрите текущий WorldID:

sudo systemctl stop palworld
ls /home/palworld/palserver/Pal/Saved/SaveGames/0/

Вы увидите одну hex-папку - это “чистый” мир, который сервер создал сам. Мы его заменим на ваш локальный.

Шаг 3. Скопируйте файлы мира

Скопируйте с Windows-машины на сервер три файла из корня локального мира - Level.sav, LevelMeta.sav, WorldOption.sav - плюс папку Players. Через scp с локального компьютера:

# из папки локального мира на Windows (Git Bash / WSL / PowerShell scp)
scp -r Level.sav LevelMeta.sav WorldOption.sav Players/ \
  palworld@SERVER_IP:/home/palworld/palserver/Pal/Saved/SaveGames/0/NEW_WORLD_ID/

Здесь NEW_WORLD_ID - это hex-папка, которую сервер создал в шаге 2. Проще заменить её содержимое, чем менять имя. Альтернатива - удалить пустую папку сервера, залить свою локальную папку целиком (с её исходным WorldID) и прописать этот ID вручную (см. следующий шаг).

Шаг 4. Переименование world-id и привязка в конфиге

Dedicated server грузит не первую попавшуюся папку, а ту, чьё имя указано в Pal/Saved/Config/LinuxServer/GameUserSettings.ini:

[/Script/Pal.PalGameLocalSettings]
DedicatedServerName=NEW_WORLD_ID

Значение DedicatedServerName должно точно совпадать с именем hex-папки в SaveGames/0/. Логика простая:

  • Оставили папку сервера и залили файлы внутрь - ничего в конфиге менять не нужно.
  • Залили свою папку с исходным (локальным) WorldID - впишите этот WorldID в DedicatedServerName и удалите пустую серверную папку.

Проверьте права доступа, иначе сервер не прочитает файлы:

sudo chown -R palworld:palworld /home/palworld/palserver/Pal/Saved/SaveGames/0/

Запустите сервер и зайдите в мир - карта, базы, палы и постройки будут на месте.

Проблема миграции персонажей

Вот здесь начинается главная боль. Palworld хранит персонажа игрока внутри Level.sav и привязывает его к PlayerUID, который в single-player выводится из SteamID хоста. На dedicated PlayerUID при первом заходе генерируется по-другому, из-за чего клиент не находит “свою” запись.

Что происходит на практике:

ПерсонажЧто переноситсяИтог
Host (владелец single-player мира)Мир, базы, палы - да; сам персонаж - нетЗаходит “новичком”, уровень и инвентарь сброшены
Гостевые (co-op invite)Только их постройки и палы в общей гильдииПерсонажи теряются полностью

Мир, гильдии, базы и пойманные палы остаются в целости - это общий прогресс. Теряется именно личный прогресс персонажа: уровень, статы, содержимое рюкзака и слоты команды палов у конкретного игрока. Палы, оставленные в базах и на пастбищах, никуда не денутся - пропадают только те, что были “на руках” у персонажа.

Почему так

В co-op гостевые персонажи технически принадлежат сессии хоста и не имеют самостоятельного PlayerUID-файла, пригодного для dedicated. При переезде движок не может сопоставить старого гостя с новым Steam-подключением, поэтому создаёт чистого персонажа. Host-персонаж существует в Level.sav, но его UID нужно вручную “пересадить” на новый серверный UID.

Ручной обходной путь без утилит

Если правкой сейва заниматься не хочется, самый надёжный путь такой:

  1. Перенесите только мир (Level.sav + WorldOption.sav), приняв, что все зайдут новыми персонажами.
  2. Через RCON выдайте игрокам стартовые ресурсы или используйте admin-команды, чтобы компенсировать сброс.
  3. Палы из старых баз остаются - их можно забрать из ящиков и пастбищ.

Это грубо, но не требует стороннего софта и не рискует повредить сейв.

Community save-tools для фикса привязки персонажей

Чтобы сохранить уровень и инвентарь персонажей, сообщество написало конвертеры сейвов. Они разбирают бинарный GVAS-формат Palworld (.sav - это сжатый zlib GVAS) и умеют переназначать UID.

Популярные утилиты:

  • palworld-save-tools - базовый Python-конвертер .sav в JSON и обратно. Даёт возможность вручную отредактировать любые поля.
  • PalWorld-Save-Editor / save-editor-форки - надстройки с командами вида “перенести персонажа host на dedicated”, “сменить владельца гильдии”, “починить осиротевшие постройки”.

Типичный сценарий фикса host-персонажа:

# 1. Распаковать серверный Level.sav в JSON
python3 convert.py Level.sav

# 2. В Level.sav.json найти запись старого персонажа по его PlayerUID
#    и переназначить на новый UID, который dedicated присвоил игроку
#    (UID виден в имени файла в папке Players/ после первого захода)

# 3. Собрать обратно
python3 convert.py Level.sav.json

Порядок работ на практике:

  1. Дайте каждому игроку один раз зайти на новый сервер - создастся его файл Players/<NewUID>.sav.
  2. Остановите сервер, сделайте бэкап.
  3. Через save-editor перепривяжите старую запись персонажа из Level.sav к этому NewUID.
  4. Запустите сервер - игрок войдёт со старым уровнем и инвентарём.

Важные оговорки: утилиты community-уровня, при мажорных апдейтах Palworld формат сейва меняется и конвертеры отстают на несколько дней. Всегда работайте на копии, а не на живом Level.sav. Гостевые co-op персонажи восстановить сложнее всего - иногда проще пересоздать их и добавить в гильдию заново. Детали настройки самого сервера после переноса - в гайде Palworld dedicated server, а параметры мира в настройке PalWorldSettings.ini.

Сценарий 2: перенос между хостингами и dedicated-серверами

Хорошая новость: миграция dedicated-to-dedicated почти беспроблемна, потому что формат сейва на обоих концах одинаковый - никакой конвертации UID не требуется, персонажи переезжают вместе с миром.

Шаг 1. Остановите оба сервера

# на старом хостинге
sudo systemctl stop palworld
# убедитесь, что процесс не пишет автосейв

Останавливать нужно оба конца: старый - чтобы получить консистентный сейв, новый - чтобы он не перезаписал залитые файлы.

Шаг 2. Скопируйте всю папку мира

Копируем целиком папку 0/<WorldID>/ со всеми файлами и папкой Players:

# со старого хостинга на новый напрямую (rsync сохраняет права)
rsync -avz \
  /home/palworld/palserver/Pal/Saved/SaveGames/0/ \
  palworld@NEW_HOST:/home/palworld/palserver/Pal/Saved/SaveGames/0/

Заодно перенесите конфиги, чтобы настройки мира совпали:

rsync -avz \
  /home/palworld/palserver/Pal/Saved/Config/LinuxServer/ \
  palworld@NEW_HOST:/home/palworld/palserver/Pal/Saved/Config/LinuxServer/

Шаг 3. Проверьте DedicatedServerName и права

На новом хостинге убедитесь, что DedicatedServerName в GameUserSettings.ini указывает на тот же WorldID, что вы залили. Если копировали конфиг целиком - значение уже правильное. Поправьте владельца файлов:

sudo chown -R palworld:palworld /home/palworld/palserver/Pal/Saved/
sudo systemctl start palworld

Между dedicated-серверами не меняйте имя WorldID без необходимости: PlayerUID-привязки завязаны на структуру, и переименование папки без правки конфига приведёт к тому, что сервер просто создаст новый пустой мир рядом.

Про IP, порты и подключение игроков

После переезда сменится адрес сервера. Игрокам нужно заново прописать IP:8211 в Join Multiplayer Game - про это подробно в подключении к Palworld-серверу. App ID серверного билда не меняется (2394010), игровой порт остаётся 8211/UDP, RCON - 25575/TCP, REST API - 8212/TCP.

Чеклист безопасного переноса

Короткий список, чтобы ничего не забыть:

  • Бэкап обоих концов до начала - обязательно.
  • Оба сервера остановлены на время копирования.
  • Скопированы Level.sav, LevelMeta.sav, WorldOption.sav и папка Players.
  • Имя WorldID-папки совпадает с DedicatedServerName.
  • Владелец файлов - пользователь, под которым работает сервис (chown).
  • Для single-player: заранее предупредите игроков о возможном сбросе персонажей.
  • Для dedicated-to-dedicated: WorldID не переименован.

Pterohost - готовая инсталляция Palworld и помощь с миграцией мира: DDoS-защита, ежедневные бэкапы, поддержка 24/7. Промокод 4START даёт -20% на первый заказ. Заказать Palworld сервер

Часто задаваемые вопросы

Можно ли перенести одиночный мир Palworld на dedicated server?

Да, мир (Level.sav и WorldOption.sav) переносится копированием папки в SaveGames/0/. Но персонажи мигрируют плохо: гостевые персонажи co-op теряются, а host-персонаж требует ручного пересоздания или конвертации через community save-tools.

Где хранится локальный сейв Palworld на Windows?

В %LOCALAPPDATA%\Pal\Saved\SaveGames\<SteamID64>\<WorldID>\. SteamID64 - это ваш числовой Steam-идентификатор, WorldID - 32-символьный hex-код мира. Внутри лежат Level.sav, LevelMeta.sav, WorldOption.sav и папка Players.

Почему после переноса мира пропадает персонаж и прогресс?

Палы, базы и постройки хранятся в Level.sav и переносятся нормально. Инвентарь и уровень игрока привязаны к записи в Level.sav по внутреннему UID персонажа. На dedicated этот UID генерируется заново, поэтому старый персонаж не подхватывается без правки save-editor.

Как перенести мир между двумя хостингами Palworld?

Остановите оба сервера, скопируйте всю папку Pal/Saved/SaveGames/0/<WorldID>/ со старого хостинга на новый, сохранив имя WorldID. Персонажи здесь мигрируют корректно, так как формат dedicated-to-dedicated идентичен. Обязательно сделайте бэкап перед переносом.

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

При переносе single-player на dedicated можно оставить исходный WorldID или задать свой - главное, чтобы имя папки совпадало со значением, которое сервер запишет в DedicatedServerName. Между dedicated-серверами имя WorldID лучше не менять, чтобы не сломать привязки.