Palworld存档转换完整指南:用palworld-save-tools把SAV变成可读JSON(附实操与避坑要点)
【免费下载链接】palworld-save-toolsTools for converting Palworld .sav files to JSON and back项目地址: https://gitcode.com/gh_mirrors/pa/palworld-save-tools
玩《幻兽帕鲁》(Palworld)玩到深处,几乎人人都会撞上同一堵墙:想改点数值、想挪服务器、想救回一个快坏掉的存档,结果发现存档全是.sav二进制文件,记事本打开一片乱码。palworld-save-tools 正是为这件事而生的开源工具——它能把 Palworld 的 SAV 存档文件完整解析成人类可读的 JSON,你改完再转回去,文件可以做到比特级无损,堪称"存档界的同声传译"。
一个让我深夜破防的场景
先讲我自己的故事。有一次我在联机房养了一只 4 词条的稀有帕鲁,结果好友手滑把基地拆了,顺手把我唯一一只闪光帕鲁连带传送到了地图边缘。我气得想直接改存档把它"传送"回来,但打开Level.sav一看,满屏的二进制乱码直接劝退。当时网上能找到的存档工具,要么只能读不能写,要么会把存档改坏,折腾一整晚,最后只能老实重抓。
后来我找到了 palworld-save-tools,前后不到十分钟就搞定了:把存档转成 JSON → 找到对应数据改数值 → 转回 SAV → 丢进游戏。从此我养成了一个习惯:任何改动之前先备份,改坏了也能一键回滚。这篇文章就把我摸索出来的完整流程和踩过的坑一次讲清楚。
它是谁:把"天书"翻译成"账本"的存档翻译官
一句话定位:palworld-save-tools 是一个将 Palworld 的.sav存档文件与 JSON 格式互转的命令行工具,面向三类人:
- 普通玩家:想微调帕鲁数值、改物品数量、修复坏档;
- 服务器管理员:批量处理玩家存档、迁移联机档到专用服务器;
- 开发者:把存档解析能力封装进自己的工具(社区里不少帕鲁服务器管理工具就是基于它做的)。
它的工作链路可以想象成一次"翻译—修改—回译":.sav是游戏写的"天书",JSON 是你能看懂的"账本",你只需要在账本上改数字,工具会负责把修改后的账本重新"翻译"回天书,让游戏照常读取。
三条路上手:3 分钟跑通第一次存档转换
路线 A:Windows 用户,拖拽文件就能用
Windows 下最快的方式几乎不需要记任何命令。把工具包解压后,你会看到一个convert.cmd批处理脚本:
- 找到你的存档目录(Steam 版通常在
%LOCALAPPDATA%\Pal\Saved\SaveGames\<SteamID>\<SaveID>下); - 把
Level.sav直接拖到这个脚本图标上,松手; - 等终端跑完,同目录下就会出现一个
Level.sav.json; - 改完 JSON 后,再把这个
.json文件拖回脚本上,就能还原成.sav。
脚本会自动依次尝试python3、python、py三种命令,直到找到可用的 Python 解释器,省去了手动配置环境变量的麻烦。
路线 B:命令行一行搞定
如果你习惯用终端,流程同样简单。先确认 Python 3.9 或更高版本已安装,然后执行:
# SAV 转 JSON python convert.py "路径/Level.sav" # JSON 转回 SAV python convert.py "路径/Level.sav.json"它默认根据文件扩展名自动判断转换方向:.sav就转 JSON,.json就转回 SAV,不需要额外参数。
路线 C:当成 Python 库装进你的项目
需要二次开发的场景,可以直接从 PyPI 安装:
pip install palworld-save-tools安装后会多出一个palworld-save-tools命令行入口,等价于上面的convert.py;同时你也可以在代码里直接 import 它的转换函数,后文"进阶玩法"会给出示例。想追最新版代码,也可以克隆仓库到本地研究:
git clone https://gitcode.com/gh_mirrors/pa/palworld-save-tools把俄罗斯套娃一层层拆开:SAV 文件里到底藏着什么
想用得安心,得稍微知道它"翻译"的到底是什么。Palworld 的存档基于虚幻引擎的 GVAS 格式,而且外面还套了压缩壳,整个过程可以理解成拆俄罗斯套娃:
- 最外层是压缩数据:文件开头有
PlZ三个魔数(部分新版本存档会先多一层CNK头),随后是压缩方式标记。目前主流有两种:0x31表示单层 zlib 压缩,0x32表示双层 zlib 压缩——也就是压缩过的数据再压一遍。工具第一步就是按标记逐层解压,校验长度无误后取出原始 GVAS 字节流; - 中层是 GVAS 结构:解压后的数据是虚幻引擎的序列化格式,里面塞满了头部信息、版本号、以及一棵巨大的属性树;
- 最内层才是游戏数据:公会、角色、物品、基地、工作分配等,全部以二进制属性形式埋在树里。
转换回 SAV 时则完全逆着走一遍:JSON → GVAS 字节流 → 按原压缩方式(单层或双层 zlib)重新压好,并补上长度头与魔数。正因为这个流程是可逆的,工具才能承诺"SAV 转 JSON 再转回 SAV,压缩前的字节一模一样"。
它能"读懂"的九大存档数据结构
普通 Unreal 存档编辑器只能把数据当作一团未知字节囫囵吞下,而 palworld-save-tools 额外为以下九类数据写了专门的解析逻辑,这也是它区别于同类工具的核心价值:
| 数据结构 | 对应游戏内容 |
|---|---|
| GroupSaveDataMap | 公会、组织等团体信息 |
| CharacterSaveParameterMap | 玩家与帕鲁的角色数据 |
| MapObjectSaveData | 地图上摆放的物件 |
| ItemContainerSaveData | 物品容器(箱子、背包等) |
| CharacterContainerSaveData | 角色容器(如帕鲁终端) |
| DynamicItemSaveData | 动态物品(带独立属性的装备等) |
| FoliageGridSaveDataMap | 植被网格数据 |
| BaseCampSaveData | 据点 / 基地信息 |
| WorkSaveData | 工作分配与工作台状态 |
简单说:别人只能看到"这里有一坨数据",它能告诉你"这坨数据里哪个字节是公会名、哪个字节是帕鲁等级"。以公会数据为例,转换后的 JSON 大致长这样(具体字段随游戏版本略有差异,以你导出的实际文件为准):
{ "worldSaveData": { "GroupSaveDataMap": { "Value": { "RawData": { "GroupType": "EPalGroupType::Guild", "GuildName": "我的第一座牧场", "PlayerUIds": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"] } } } } }看到这种可读结构,你就知道该去哪一行改名字、该去哪一段找角色了。
为什么敢把存档交给它:两条设计底线
工具的作者在项目里写明了两个开发原则,我建议所有用户在动手前都先看一眼:
- 正确性优先于性能。转换过程宁可慢一点、吃内存多一点,也要保证
SAV → JSON → SAV之后(压缩前)逐字节一致。这意味着一份存档哪怕只是来回转换不改动任何内容,得到的文件也和原来完全相同,游戏不会因为"格式变了"而拒绝读取; - 零外部依赖。整个工具只依赖 Python 3.9+ 标准库,装完 Python 就能跑,不需要 pip 装任何第三方包。可选依赖(比如提升性能的
recordclass)只在需要时才会引入。对普通用户来说,这意味着部署极简,也不会遇到依赖冲突的连环坑。
实战:三个高频场景从零跑通
场景一:给帕鲁"体检"并调整数值
- 先把
Level.sav转成 JSON; - 用支持大文件的编辑器打开(VS Code 或 JetBrains 系列 IDE 均可),搜索
CharacterSaveParameterMap; - 顺着层级找到目标帕鲁的
RawData,里面就是它的各项属性、词条、等级经验; - 直接改数字,保存 JSON;
- 转回 SAV,放回存档目录启动游戏验证。
小提示:改存档前一定把原
Level.sav复制一份到别的文件夹,改坏了随时换回去,这是成本最低的后悔药。
场景二:把联机存档迁移到专用服务器
联机房和专用服务器的存档在某些数据上不互通,常见痛点是玩家 ID 对不上。这类迁移本质上就是"批量修改 JSON 里的 ID 字段":转成 JSON 后,搜索并替换玩家 UID,再把文件转回 SAV。社区里很多"联机档转服务器档"的工具,底层干的就是这件事。
场景三:存档疑似损坏时的抢救流程
遇到进不去游戏、怀疑存档损坏的情况,别急着删档:
- 先把
Level.sav转 JSON,观察转换过程是否报错; - 如果转换成功,用编辑器检查 JSON 里是否有异常值(比如缺失的大段数据、明显不合理的负值);
- 修好或删掉异常片段后转回 SAV,重新进游戏测试;
- 如果转换阶段就报"not a compressed Palworld save"之类的错,说明文件本身已经坏了,这时候只能靠你之前的备份来恢复。
顺带一提,工具专门区分了Level.sav、LevelMeta.sav、LocalData.sav、WorldOption.sav等文件,通常需要处理的是体积最大的Level.sav。
参数速查表:把这几个选项记熟就够了
命令行提供了不少开关,实际高频用到的基本就这几个:
| 参数 | 作用 |
|---|---|
--to-json | 强制按 SAV 转 JSON 处理,无视扩展名 |
--from-json | 强制按 JSON 转 SAV 处理,无视扩展名 |
--output或-o | 指定输出文件路径,默认是"原文件名+.json" |
--force或-f | 输出文件已存在时不再询问,直接覆盖 |
--minify-json | 输出压缩后的 JSON(去掉缩进与空格),文件更小、后续程序处理更快 |
--custom-properties | 只解析指定的数据结构,其余跳过,显著提速 |
--convert-nan-to-null | 把 NaN / Inf 浮点数转成 null,代价是可能丢失信息,默认关闭 |
其中--custom-properties是最实用的加速手段。比如我只关心公会和角色数据,就可以这样限制解析范围:
palworld-save-tools Level.sav --custom-properties .worldSaveData.GroupSaveDataMap,.worldSaveData.CharacterSaveParameterMap.Value.RawData这样工具会跳过其他所有结构的深度解析,大存档的转换耗时和内存占用都能明显下降。
避坑指南:把别人踩过的坑提前绕开
以下几条是我和不少玩家用下来最常踩的坑,提前知道能省一整晚:
- 大 JSON 文件别用普通记事本打开。
Level.sav转出来的 JSON 动辄几百 MB,Windows 记事本基本打不开,务必用 VS Code 这类现代编辑器,否则会卡死甚至闪退; - 内存不够是常态。转换过程会把整份存档读进内存再重建,小内存机器处理后期大存档时可能直接内存不足。缓解办法:升级 64 位 Python、用
--minify-json减小输出、用--custom-properties只解析需要的部分; - 覆盖前一定要看提示。默认情况下,如果输出文件已存在,工具会问你
y/n确认是否覆盖;配合--force可以跳过确认,但也意味着误操作时没有缓冲机会,所以我个人只在脚本化批量处理时才加--force; - 游戏版本与工具版本要匹配。帕鲁更新频繁,存档结构也会跟着变。如果转换报错,先看看工具是否有新版本、有没有适配你当前游戏版本的说明;
- 双向转换 ≠ 乱改保险箱。虽然往返转换是比特级无损的,但你在 JSON 里"瞎改"造成的逻辑错误(比如把数量改成负数、把 ID 改成不存在的值)工具不会帮你兜底,改完记得进游戏实测。
进阶玩法:把转换能力嵌进你自己的脚本
如果你会一点 Python,还能把它的转换能力直接拿来用。比如批量把整个目录的存档转成 JSON,代码可以精简到几行:
from pathlib import Path from palworld_save_tools.commands.convert import convert_sav_to_json for sav in Path("save_games").glob("*.sav"): convert_sav_to_json( str(sav), str(sav) + ".json", force=True, minify=True, # 压缩输出,给下游程序提速 )想深度定制解析逻辑的开发者,则可以基于gvas、palsav这两个模块自建解析管线:前者负责 GVAS 结构读写,后者负责 SAV 的压缩与解压,二者组合就能实现"读入存档 → 自定义处理 → 写回存档"的完整闭环。
结语:现在就去备份一份存档试试
回顾一下全文要点:
- 是什么:palworld-save-tools 是一个 SAV 与 JSON 互转的 Palworld 存档工具,能把二进制天书翻译成可读账本;
- 怎么用:Windows 拖拽
convert.cmd、命令行python convert.py、或pip install三选一,3 分钟即可跑通; - 为什么可靠:正确性优先 + 零依赖,往返转换比特级无损;
- 怎么避坑:大 JSON 用专业编辑器、注意内存占用、改档前永远备份、留意游戏版本兼容。
如果你正被某个帕鲁数值、某次服务器迁移或某个"打不开的存档"困扰,现在就可以先去存档目录把Level.sav复制一份,然后跑一次转换,亲眼看一看你辛苦经营的世界在 JSON 里长什么样。相信我,看到那行可读的"GuildName"时,你会觉得这一切都值了。
【免费下载链接】palworld-save-toolsTools for converting Palworld .sav files to JSON and back项目地址: https://gitcode.com/gh_mirrors/pa/palworld-save-tools
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考