《幻兽帕鲁》迁移合作存档到独立服务器

本文是根据 https://github.com/xNul/palworld-host-save-fix 的说明,对《幻兽帕鲁》从合作模式迁移存档到独立服务器的原理和流程的概括,如有问题请参考原文。

前置信息

同一个 Steam 用户,在不同平台的服务器上会得到不同的 GUID

Palworld save files are different depending on the type of server you are running. Co-op, Windows dedicated server, Linux dedicated server, SteamCMD dedicated server, all of these are different types of Palworld servers and if you try to migrate a save file from one type of server to another, you can run into a player save bug which forces you to create a new character.

The bug happens because players are identified and correlated to their save via their GUID. These different types of servers generate player GUIDs differently so when a player joins, the server generates a new GUID that doesn’t match the old save’s GUID and because of this, doesn’t realize the player already has a save.

https://github.com/xNul/palworld-host-save-fix

原文给的步骤比较繁琐,但是整体思路是,旧的服务器的用户加入新的服务器,得到 GUID,通过两个 GUID 的差异得到计算方法,更新其它所有用户存档的文件名。

合作模式存档位置和结构

存档位置:

C:\Users\<USERNAME>\AppData\Local\Pal\Saved

具体到特定世界:

C:\Users\<USERNAME>\AppData\Local\Pal\Saved\SaveGames\<STEAM_USER_ID>\<WORLD_ID>\

世界存档的详细结构:

backup/
Players/
  00000000000000000000000000000001.sav
  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.sav
Level.sav
LevelMeta.sav
LocalData.sav
WorldOption.sav

Linux Delicated Server 存档位置和结构

以此为例: https://github.com/jammsen/docker-palworld-dedicated-server

game/Pal/Saved/
  Config/
    LinuxServer/
      GameUserSettings.ini
  SaveGames/
    0/
      WORLD_ID/
	    backup/
        Players/
          00000000000000000000000000000001.sav
        Level.sav
		LevelMeta.sav
		LocalData.sav

其中 GameUserSettings.ini 中,有如下选项指定了要加载哪个世界:

DedicatedServerName=<WORLD_ID>

注意:如果是 Windows Delicated Server,那么 GameUserSettings.ini 位于 Config/ 下面的 WindowsServer/ 目录中,其它相同。

过程总结

所以存档的迁移过程分为以下几步:

  1. 从合作模式的存档文件夹中,复制想要的世界文件夹 <WORLD_ID>,到,服务器的存档文件夹的对应位置 SaveGames/0/ 下面
  2. 编辑服务器的 GameUserSettings.ini,把 DedicatedServerName 的值修改为世界文件夹的名字 <WORLD_ID>
  3. 启动服务器,原合作模式,主机 Steam 用户,加入新的服务器,稍微做点什么然后退出
  4. Delicated Server 上应当已经在 SaveGames/0/<WORLD_ID>/Players/ 下面生成了新的 .sav 文件,复制其文件名作为 new_guid
  5. 用 00000000000000000000000000000001 作为 old_guid。使用 palworld-host-save-fix 工具,根据说明更新旧的存档,得到修改后的 .sav 文件。注意对存档进行备份
  6. 把生成的 .sav 文件复制到服务器的 SaveGames/0/WORLD_ID/Players/ 下面。
  7. 重启服务器并测试连接