2个不稳定版本
0.2.0 | 2021年7月15日 |
---|---|
0.1.0 | 2021年6月29日 |
#11 in #dat
每月32次下载
用于export-ffxiv-macros
200KB
3K SLoC
libxivdat
用于操作最终幻想XIV .DAT文件的库。这些文件存储客户端游戏配置,包括宏、快捷键和UI设置。
这还是一个正在进行中的项目,对全部DAT文件的支持还不完整。有关更多信息,请参阅未来计划。
最低支持的Rust版本
此库已针对Rust >=1.52.0进行测试。早期版本可能也能工作,但请自行承担风险。
CI构建在构建时针对当前稳定版和夜间版运行。
DATFile
DATFile
提供了一种通用的、低级别的操作二进制DAT文件的方法。DATFile
模拟了Rust std库中的File
,但只从.DAT文件的内部内容块读取和写入,根据需要自动处理头部更新、填充和掩码。
高级模块
对特定文件类型的高级支持按类型逐个实现,作为可选功能。请参阅下表以获取更多信息及功能名称。
高级模块允许在资源级别(例如,宏或装备组)上操作DAT文件,而不是从DATFile
操作原始字节流。
DAT数据内容
大多数DAT文件(不包括支持表中标记为“唯一”的文件)具有一个常见的文件结构,包括头部、内容块和尾部。
内部,一些DAT文件的内容块使用一个称为“部分”的可变长度数据结构。在库中,部分由一个UTF-8字符类型标签、u16le大小和一个以null结尾的UTF-8字符串组成。然后,单个资源(例如,一个宏)由一个部分的重复模式组成。在section
子模块中提供了用于处理部分的工具包。
其他DAT文件使用固定大小的资源块,每个资源紧随上一个资源之后。这些被称为“块DAT”。
纯文本DAT文件
一些 DAT 文件(例如 COMMON.DAT
、CONTROL0.DAT
和 CONTROL1.DAT
)实际上只是 UTF-8 纯文本,并不与二进制 DAT 文件共享相同的格式。
将来可能支持与纯文本 DAT 文件一起工作,但目前并不是优先事项。
独特的二进制 DAT 文件
两种二进制文件类型(ADDON.DAT
和 FFXIV_CHARA_XX.DAT
文件)不使用其他 DAT 文件的通用共享结构。目前没有计划支持这些文件。
未来计划
这个库的目标是完全抽象 DAT 文件的数据结构,并为每种文件类型创建基于资源的、高级接口(即,宏或装备组),而不是原始的字节流。每个文件都有自己的内部数据类型,因此这些层将分阶段作为可选功能实现。
我对这个库的关注主要集中在宏、装备组和 UI 配置上。除非你自己构建它,否则对其他 DAT 类型的支持可能需要很长时间。
DAT 类型支持
符号 | 描述 |
---|---|
✅ | 完全支持 |
🌀 | 部分支持 |
❌ | 无支持 |
文件 | 包含 | 类型 | DATFile 读写 | 高级模块 |
---|---|---|---|---|
ACQ.DAT | 最近的 /tell 历史 | 部分 | ✅ | 🌀 - section |
ADDON.DAT | ? | 独特 | ❌ | ❌ |
COMMON.DAT | 角色配置 | 纯文本 | ❌ | ❌ |
CONTROL0.DAT | 游戏手柄控制配置 | 纯文本 | ❌ | ❌ |
CONTROL1.DAT | 键盘/鼠标控制配置 | 纯文本 | ❌ | ❌ |
FFXIV_CHARA_XX.DAT | 角色外观预设 | 独特 | ❌ | ❌ |
GEARSET.DAT | 装备组 | 块 | ✅ | ❌ |
GS.DAT | 黄金酒杯配置(三合会牌组) | 块 | ✅ | ❌ |
HOTBAR.DAT | 热键布局 | 块 | ✅ | ❌ |
ITEMFDR.DAT | "搜索物品"索引? | 块 | ✅ | ❌ |
ITEMODR.DAT | 包中物品的顺序 | 块 | ✅ | ❌ |
KEYBIND.DAT | 键绑定 | 部分 | ✅ | 🌀 - section |
LOGFLTR.DAT | 聊天日志过滤器? | 块 | ✅ | ❌ |
MACRO.DAT | 特定角色的宏 | 部分 | ✅ | ✅ - macro |
MACROSYS.DAT | 系统级宏 | 部分 | ✅ | ✅ - macro |
UISAVE.DAT | UI 配置 | 块 | ✅ | ❌ |
特别感谢
EmperorArthur/FFXIV_Settings 是我在开发这个库时进行研究时的起点。
贡献
欢迎贡献。请在提交拉取请求之前确保代码通过了 cargo test --all-features
、cargo clippy --all-features
和 rustfmt -v --check **/*.rs
的测试。