关于 rpfd
rpfd 是用于 GTA V 等 RAGE 游戏 RPF7 归档的 Rust 工具链,面向需要检查和修改游戏归档的开发者。它提供命令行、JSON-RPC 守护进程和 VS Code 扩展,并支持多种 RPF7 加密变体。
主要功能
- 01读取、写入和重建 RPF7 归档
- 02提取、打包和校验归档
- 03以 XML 查看或编辑条目
- 04通过 JSON-RPC 管理编辑
- 05VS Code 工作区式归档编辑
适用场景
- 01检查 GTA V 游戏归档内容
- 02修改并重新打包服务器资源
- 03在 VS Code 中编辑嵌套归档
MCP 相关
README 提及可将 MCP 服务注册到编辑器或 Agent,并提供远程发现信息;此处 MCP 服务端仅用于发现,不执行归档操作。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
一套依赖精简的 Rust 工具链,用于读取、编辑和重建 RPF7 归档——包括 RAGE Multiplayer 和 FiveM 服务端交给客户端的 dlc.rpf 文件,以及 Grand Theft Auto V 自带的归档。它是一个无需运行时前置条件的命令行二进制程序,同一套代码也用于 JSON-RPC 守护进程和 VS Code 扩展。
编辑器扩展可从商店安装,因此会自动获取更新:在
VS Code Marketplace
和 Open VSX 上搜索 molchalih.rpfd,或运行
code --install-extension molchalih.rpfd。
有人请你安装这个吗? Agent 可按照
INSTALL.md 中的流程操作:
先将二进制程序加入 PATH,然后为这台机器上的每个客户端注册 rpf。
格式
| 版本 | 变体 | 使用方 | 支持情况 |
|---|---|---|---|
| RPF7 | OPEN,未加密 | RAGE MP 和 FiveM 服务端资源包 | 读取、写入 |
| RPF7 | AES-256,0x0FFFFFF9 | GTA V,des_* 和 script_* 等嵌套归档 | 读取、写入——密钥来自游戏可执行文件 |
| RPF7 | AES-256,0x0FFFFFF7 | Rockstar Games Launcher | 读取、写入——密钥来自 Launcher.exe |
| RPF7 | NG,0x0FEFFFFF | GTA V Legacy 和 Enhanced,所有顶层归档 | 读取、写入——两者都需要内存映像 |
| RPF8 | — | Red Dead Redemption 2 | 不支持 |
| RPF6 | — | Red Dead Redemption,2010 和 2023 | 不支持 |
| RPF4 | — | Max Payne 3 | 不支持 |
| RPF3 | — | GTA IV 音频、Midnight Club: LA | 不支持 |
| RPF2 | — | GTA IV,主归档 | 不支持 |
| RPF0 | — | Table Tennis | 不支持 |
RPF7 之前版本的归属信息取自其他实现,并非在此测定;相关分歧已记录在格式说明中。所有非 RPF7 版本都会根据其魔数识别,并按版本号拒绝处理。
加密既针对每个条目,也针对整个归档:标签覆盖目录表和名称数据块,而每个条目的记录会标明其载荷是否经过该变换。
安装
INSTALL.md 介绍了安装方式,并分别回答三个问题:如何从 VS Code Marketplace 或 Open VSX 安装编辑器扩展(也可使用 .vsix 作为备用方案);如何向编辑器或 Agent 注册 MCP 服务;以及如果只需要二进制文件,该把它放在哪里。
最后还介绍了 Agent 如何在一台机器上完成这三项操作。
每个版本都附有适用于 macOS、Windows 和 Linux 的预编译二进制文件。
如果要从源代码构建,工具链版本固定在 rust-toolchain.toml 中。
克隆仓库,然后在克隆仓库的根目录构建,无论你把它放在哪里:
git clone https://github.com/molchalih/rpfd.git
cargo build --release # target/release/rpf
加密归档需要密钥材料,从你自己的安装中提取:
rpf keys extract GTA5.exe # the AES key and the hash lookup table
rpf keys extract Launcher.exe # the second AES key, carried by no game executable
rpf keys extract <memory image> # the NG expanded keys and decrypt tables
这里不会附带任何密钥材料,以后也不会。每份材料都会按自身字节的哈希值缓存,存放在平台配置目录中的 rpf 目录下的 keys 目录中:Linux 上为 $XDG_CONFIG_HOME 或 ~/.config,macOS 上为 ~/Library/Application Support,Windows 上为 %APPDATA%。每条命令都会自动使用该缓存,无需指定标志;rpf keys cache 会显示缓存位置和其中的材料数量:
$ rpf keys cache
cache /Users/you/Library/Application Support/rpf/keys
entries 2
--cache-dir 可选择其他缓存,这是将多个安装彼此隔离的唯一方式;rpf keys invalidate 可清空某个缓存。任何命令都不会打印密钥,只会显示偏移量、长度、数量和路径。NG 材料仅以明文形式存在于运行中游戏的内存映像中,因此这是获取 NG 归档材料的唯一途径;如何获取不在本文讨论范围内。缺少相应材料的归档会直接报错,不会进行猜测。
用法
列出归档内容,并递归展开其中的归档:
$ rpf ls -R dlc.rpf
binary xml 2199 content.xml
directory - 3 data
binary xml 1445 data/carvariations.meta
binary xml 191 data/dlctext.meta
binary xml 5100 data/vehicles.meta
binary xml 559 setup2.xml
directory - 2 x64
directory - 1 x64/vehiclemods
binary - 2544128 x64/vehiclemods/meringls63amg24_mods.rpf
resource - 262144 x64/vehiclemods/meringls63amg24_mods.rpf/meringls63amg24_brabus_diffuser_1.yft
... 20 more rows: the rest of the mods archive, and x64/vehicles.rpf
第二列说明条目中存放的内容;pso、rbf 和 meta 支持 XML 视图:
$ rpf cat --as xml des_hosp_ceil2.rpf des_hosp_ceil2.ytyp
<?xml version="1.0" encoding="UTF-8"?>
<hash_D98BB561 pso:struct="hash_D98BB561">
<hash_F17E7F28 pso:array="atarray"/>
<hash_018A3B1B pso:array="atarray">
<pso:item pso:struct="hash_82D6FC83">
<hash_BF74DFA7 pso:float="100.0"/>
<hash_67D26872 pso:uint="0"/>
<hash_6C1523E4 pso:uint="0"/>
<hash_D9EF8236 pso:float3="-2.80584, -2.95097, 0.0"/>
<hash_E78AA618 pso:float3="2.80584, 2.95097, 3.0961"/>
<hash_D61872FF pso:float3="0.0, 0.0, 1.54805"/>
<hash_82E8C5DE pso:float="4.356308"/>
<hash_AD5D5B4C pso:float="5.0"/>
<hash_E6E17F14 pso:string.counted="DES_Hosp_Ceil2"/>
<hash_75D215A1 pso:string.counted="DES_Hosp_Ceil2_txd"/>
<hash_19471791 pso:null="string.counted"/>
<hash_FC1FB6FB pso:null="string.counted"/>
<hash_D3C717FC pso:hashstring="hash_00000000"/>
<hash_F17E7F28 pso:array="atarray"/>
</pso:item>
</hash_018A3B1B>
<hash_E6E17F14 pso:hashstring="hash_334D5CB2"/>
<hash_3C6F8844 pso:array="atarray"/>
<hash_069ADF93 pso:array="atarray"/>
<hash_65E9D4EB pso:array="atarray"/>
</hash_D98BB561>
rpf put --as xml 会以条目自身的编码将编辑后的文档写回。先查看写入的开销,再执行写入——字节数取决于你的 edited.meta,并非固定值;使用 --dry-run 可以在写入任何内容之前了解开销:
$ rpf put dlc.rpf data/vehicles.meta edited.meta --dry-run
would patch 1632 bytes in place at 2048 (room for 2048)
$ rpf put dlc.rpf data/vehicles.meta edited.meta
patched 1632 bytes in place at 2048 (room for 2048)
put --create、rm、mv 和 mkdir 会移动标头之后的所有偏移量,因此总会重建归档,并会事先说明。重建是原子操作:归档旁的临时文件会一步替换原文件。
拆解归档、重新构建并检查结果:
$ rpf extract dlc.rpf tree/
7 files and 3 directories into tree/
$ rpf pack tree/ rebuilt.rpf
11 entries, 65160704 bytes
$ rpf verify rebuilt.rpf --against tree/
27 entries read back; 7 of 7 recorded checksums checked against tree/
20 entries carry no recorded checksum: an entry inside a nested archive is covered by the checksum of the entry that holds it
所有报告命令都支持 --json;其余选项请查看 rpf --help。
clients/agent/README.md 介绍如何通过程序调用工具:JSON 结构、失败对象,以及用于输出无人会阅读的负载的 cat --out。
守护进程
rpf serve --stdio 使用 JSON-RPC 协议,每行处理一个对象。它支持二进制文件的所有功能,会将编辑保留到 commit 时再提交,并会通过可取消的通知报告耗时较长的重建进度。
$ echo '{"jsonrpc":"2.0","id":1,"method":"open","params":{"path":"/tmp/dlc.rpf"}}' | rpf serve --stdio
{"id":1,"jsonrpc":"2.0","result":{"entries":11,"handle":1,"len":144504832,"path":"/private/tmp/dlc.rpf"}}
编辑器扩展
clients/vscode 会将归档挂载为工作区文件夹:文件可以像其他文件一样打开、编辑和保存,嵌套归档则会作为文件夹中的文件夹显示。归档只会通过一次明确操作写入,并会预览补丁或重建内容。请参阅 clients/vscode/README.md。
退出代码
退出代码保持稳定,因此调用方无需阅读消息即可判断失败类型:0 表示成功,每个非零代码都对应一种失败类型。守护进程会在 JSON-RPC 的 error.code 中报告相同数字,并在 error.data.reason 中提供对应的符号名称。
代码表位于 clients/agent/README.md,由该文档负责维护,其中还说明了每个代码会提示调用方接下来采取什么操作。
构建和测试
cargo build --release
持续集成会运行以下检查;前三项会在 macOS、Linux 和 Windows 上运行。在本地通过这些检查,更有可能让持续集成顺利通过:
cargo fmt --all -- --check
cargo clippy --all-targets --all-features -- -D warnings
cargo test --all
cargo test -p rpf-core --test oracle -- --nocapture
RUSTDOCFLAGS='-D warnings' cargo doc --no-deps --workspace
cargo deny check
./tools/docgate/docgate.sh
它还会检查每条提交消息;运行 git config core.hooksPath .githooks 即可在本地执行相同检查。
测试套件无需游戏数据:需要游戏数据的测试会被跳过。RPF_CORPUS、RPF_GAME_EXE、RPF_GAME_IMAGE 和 RPF_METADATA 分别用于指定归档、游戏可执行文件、运行中游戏的内存映像以及提取出的元数据负载;对应的 RPF_REQUIRE_* 变量会将跳过测试改为测试失败。
许可证
可任选 MIT OR Apache-2.0。请参阅 LICENSE-MIT 和 LICENSE-APACHE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。