#dat #io #xiv #config #file-content #binary-file #file

libxivdat

读取和写入最终幻想XIV .DAT文件

2个不稳定版本

0.2.0 2021年7月15日
0.1.0 2021年6月29日

#11 in #dat

每月32次下载
用于export-ffxiv-macros

Apache-2.0

200KB
3K SLoC

libxivdat

Crates.io Doc.rs Apache-2.0 Build Status

用于操作最终幻想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.DATCONTROL0.DATCONTROL1.DAT)实际上只是 UTF-8 纯文本,并不与二进制 DAT 文件共享相同的格式。

将来可能支持与纯文本 DAT 文件一起工作,但目前并不是优先事项。

独特的二进制 DAT 文件

两种二进制文件类型(ADDON.DATFFXIV_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-featurescargo clippy --all-featuresrustfmt -v --check **/*.rs 的测试。

无运行时依赖