帕鲁存档读不出来怎么办:用 palworld-save-tools 把 Level.sav 转成 JSON,改完再原样还原
2026/8/18 21:01:35 网站建设 项目流程

帕鲁存档读不出来怎么办:用 palworld-save-tools 把 Level.sav 转成 JSON,改完再原样还原

【免费下载链接】palworld-save-toolsTools for converting Palworld .sav files to JSON and back项目地址: https://gitcode.com/gh_mirrors/pa/palworld-save-tools

palworld-save-tools 是一款把 Palworld 的二进制 .sav 存档转换成可读 JSON、改完再转回去的开源命令行工具,主打"无损往返":SAV → JSON → SAV 能得到比特级一致的文件。这篇文章按"翻车现场 → 拆解原理 → 上手操作 → 实战改档 → 救急修复"的顺序带你走一遍,全程不依赖任何第三方库,装好 Python 3.9+ 就能用。

一、先讲一个真实的翻车现场

凌晨两点,服务器维护群里有人甩来一张截图:基地围墙消失了,两个满级帕鲁躺在公会仓库里"失联",更离谱的是,有人把公会名字改成了乱码,改不回去。原因是某次游戏更新后,有人手动改坏了Level.sav,而Level.sav不是普通的存档文件——它是一坨压缩过的二进制数据,直接用记事本打开,满屏都是乱码和看不见的字节。

这种时刻,能救场的不是"重开新档",而是把存档翻译成人话、找到出错的那一小块数据、改好、再翻译回二进制。palworld-save-tools 干的就是这件事:它把Level.sav解压、解析成结构清晰的 JSON,你改完 JSON 后再转回.sav,游戏就能正常读出来。下面从"为什么这个工具能做到"讲起。

二、存档文件不是"文件",是三层包装的礼物盒

想不翻车,先要知道对手长什么样。Palworld 的存档走的是 Unreal Engine 的 GVAS 格式,外面又套了 zlib 压缩层。拆开来看大致是三层:

  1. 外层:带PlZ魔数的压缩头,记录解压后长度、压缩后长度和压缩方式。部分版本还会有CNK头,多包一层信息。这部分逻辑在palworld_save_tools/palsav.py里,负责解压和反向压缩。
  2. 中层:GVAS 文件本体,包含版本号、引擎版本、自定义版本列表等头部信息,解析引擎在palworld_save_tools/gvas.py
  3. 内层:真正有价值的数据,比如公会、角色、背包、据点。这些数据对普通编辑器是"天书",所以工具用palworld_save_tools/paltypes.py里注册的类型提示和解析器,把它们逐一翻译成可读结构,解析代码放在palworld_save_tools/rawdata/目录下。

这一步看明白有个直接好处:以后遇到"存档转换失败"的报错,你能听懂报错在说哪一层。比如提示"not a compressed Palworld save",说明文件开头魔数不对,多半是你把文件拖错了,或者文件本身已损坏。

三、装环境:五分钟上手,一个依赖都没有

palworld-save-tools 最省心的地方是零依赖——不需要 pip 装任何第三方库,只要本机有 Python 3.9 或更新版本。Windows 用户可以到 python.org 或微软商店装个 3.12,Linux/macOS 一般自带。

装好 Python 后,拉取项目源码:

git clone https://gitcode.com/gh_mirrors/pa/palworld-save-tools cd palworld-save-tools

不 clone 也行:项目发布在 PyPI 上,pip install palworld-save-tools一步到位。不过作者在 README 里提醒过,工具迭代快、可能有破坏性变更,建议锁版本号再升级。

验证是否装好,跑一句版本命令即可,不报错就说明环境 OK。到这里你已经完成 80% 的准备工作,接下来是真正动手的时刻。

四、两条路把存档变成 JSON:拖拽党和命令行党

路线 A:Windows 用户直接拖拽

项目里的convenience_tools/convert.cmd就是为懒人准备的:把.sav文件直接拖到convert.cmd图标上,脚本会自动找到python并执行转换,全程不用敲一行命令。单人游戏存档一般在%LOCALAPPDATA%\Pal\Saved\SaveGames\<SteamID>\<SaveID>,把里面的Level.sav拖进去就行。转换完成后,同目录会多出一个Level.sav.json。想还原时,把这个 JSON 再拖一次,就得到新的Level.sav

如果拖拽后弹窗报错,多半是 Windows 的"应用执行别名"抢占了python命令,去系统设置里关掉它,或者改用下面的命令行方式。

路线 B:命令行,一劳永逸

命令行更直观,也更好控制。在项目目录下执行:

python -m palworld_save_tools.commands.convert Level.sav

工具会按扩展名自动判断方向:输入.sav就转 JSON,输入.json就转回 SAV。如果文件名不带扩展名,可以用--to-json--from-json强制指定方向。默认输出文件是<原名>.json或去掉.json的原名,想改输出位置就用--output

为什么推荐先备份?因为默认情况下,如果输出文件已存在,工具会停下来问你"是否覆盖"。而--force会跳过询问直接覆盖。建议永远别用--force覆盖原始存档,先把原始.sav复制一份到别的目录,再拿副本开刀。

五、实战一:改公会名字,给新手的第一份"开胃菜"

转出来的 JSON 虽然很大,但结构其实有迹可循。想改公会名,搜guild_name就行。公会数据存在.worldSaveData.GroupSaveDataMap里,palworld_save_tools/rawdata/group.py会把每个公会解析成group_nameguild_nameadmin_player_uid、成员列表等字段。

操作三步走:

  1. 用 VS Code 打开Level.sav.json,搜索guild_name,会看到类似"guild_name": "旧名字"的字段。
  2. 把值改成你想要的新名字,保存。注意字符串要用英文引号包裹,别留中文全角引号。
  3. 命令行执行还原转换,得到新的Level.sav,放回存档目录,启动游戏验证。

避坑提示:JSON 里的字段顺序、类型、层级都不要乱动,只改"值"。这个工具的设计理念是"正确性优先于性能",只要你没动结构,还原出来的文件能和原来比特级一致;一旦你手滑删了字段或改了类型,还原大概率失败,所以改前备份、改后先转回试试。

六、实战二:给角色和帕鲁调属性,从"看得懂"到"改得动"

公会名只是热身。角色和帕鲁的数据在.worldSaveData.CharacterSaveParameterMap.Value.RawData,对应palworld_save_tools/rawdata/character.py。解析后的 JSON 里会有一个object块,里面是角色的各项属性:HP、攻击、等级、技能、个体值(IV)等,字段名基本能对上游戏内名词。

举例,你想把一只帕鲁的攻击力调高,流程是:

  1. 在 JSON 里定位到那只帕鲁(通过CharacterID或角色名)。
  2. 找到对应属性字段,把数值改大。
  3. 保存,转回 SAV,进游戏查看。

这里有个新手最容易踩的坑:改数值时手滑把整数改成了小数,或把 100 改成了 "100"。类型一变,还原阶段直接报错。改完多花十秒检查引号和数字格式,能省掉一晚上的排查时间。

如果只想解析角色数据、不想解析其他类型,可以用--custom-properties精确指定:

python -m palworld_save_tools.commands.convert Level.sav --custom-properties .worldSaveData.CharacterSaveParameterMap.Value.RawData

这样生成的 JSON 更小、转换更快,适合只想改角色的场景。

七、实战三:服务器搬家与存档修复,工具真正救命的时刻

场景一:单机转服务器

把单机存档挪到专用服务器,或者反过来,最麻烦的是玩家 ID 对不上。这类迁移本质上是对存档里的玩家 UID 做替换,社区里已有项目(如 palworld-host-save-fix)就是基于本工具做的。你可以把存档转成 JSON,全局搜索旧 UID,批量替换成新 UID,再转回去。注意替换时要保证新 UID 格式一致(GUID 的连字符位置不能错),并且只替换存档内引用的位置,别误伤其他数据。

场景二:存档损坏的诊断

遇到"存档无法读取",先别急着删档重来。把损坏的.sav转成 JSON,如果工具报"解压长度不对"或"魔数错误",基本可以判断是压缩层损坏,这个层级靠工具救不回来;但如果转换成功,只是 JSON 里某个数据块异常,你就有机会定点修复——把异常字段改回合理值,再转回 SAV。

场景三:批量处理多个存档

服务器管理员手上常有几十个玩家存档。写一个几行的循环脚本,对目录下所有.sav依次调用转换命令即可。配合--minify-json还能压缩输出体积,加快后续程序读取。这段脚本你自己用 shell 或 Python 都能写,核心就是调用上面那条命令,不需要引入额外依赖。

八、性能与内存:大存档的四个保命习惯

README 里有一句重要警告:Level.sav转 JSON 会生成非常大的文件,处理时可能吃掉大量内存。四个保命习惯直接给到:

  1. 用现代编辑器打开 JSON:VS Code 或 JetBrains 系 IDE,别用系统记事本,否则大文件直接卡死。
  2. 按需解析:用--custom-properties只解析关心的数据块,跳过据点、植被等无关数据,速度能快一个量级。
  3. 输出用--minify-json:工具默认输出带缩进的格式化 JSON,方便人读但体积大;机器处理或只想快速看数据时,压缩格式更合适。
  4. 大改动前先做往返验证:拿一份副本,先转 JSON 再立刻转回 SAV,对比前后文件是否一致(可用cmp命令对比)。这一步能确认工具版本与你当前游戏版本兼容,避免改了半天发现转不回去。

九、你已经能做什么,以及下一步值得试什么

走到这里,你已经掌握了一条完整的存档自救链路:找到存档 → 转 JSON → 看懂结构 → 定点修改 → 还原验证。具体来说,你现在可以:

  • 修改公会名、玩家名这类文本数据;
  • 调整角色和帕鲁的属性数值;
  • 在服务器迁移时替换玩家 UID;
  • --custom-properties精确控制解析范围,节省时间和内存;
  • 用往返转换验证存档健康度,作为定期体检手段。

下一步值得尝试的方向:一是把--minify-json和批量脚本组合,做一个自己的"存档自动备份+体检"工具;二是读一读palworld_save_tools/rawdata/下的解析代码,试着理解某个数据结构(比如base_camp.py里的据点字段),你可能会发现游戏里很多数值都能从这里摸到源头。存档是自己的,数据是死的,工具在手,主动权就在你手里。

【免费下载链接】palworld-save-toolsTools for converting Palworld .sav files to JSON and back项目地址: https://gitcode.com/gh_mirrors/pa/palworld-save-tools

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询