Martin2112/windrose-buildings

GitHub: Martin2112/windrose-buildings

《风玫瑰》游戏建筑数据提取工具

Stars: 0 | Forks: 0

# 风玫瑰建筑 ## 简介 我最近一直在玩 Windrose,想知道它如何存储玩家在世界上创建的建筑。所以我花了一整天的时间挖掘世界数据库来找出答案。它并不完整,但我认为我会发布我现在所拥有的,以防它对任何人有所帮助。 免责声明:我与制作 Windrose 的人、制作 Python 或 RocksDB 的人,或任何人都没有关联。这仅是个人研究,仅供娱乐。 ## 数据存储 与建筑相关的数据存储在 `R5LargeObjects` 列族中,该列族还存储其他数据。键 "0" 包含数据索引,键 "1" 包含数据本身。我从另一个列族中的 BSON 数据中获得了这些数字,所以它们可能会改变,但我还没有找到任何它们不包含这些值的例子,所以目前是硬编码的。 索引包含每个建筑部件记录的偏移量和长度,以 16 字节记录的形式存储。在这个记录中还有其他我没有解码的内容。 主数据文件中的每个记录都有单个部件的属性。例如,如果你在一个新世界中创建了 3 个方块,那么数据中将有 3 个记录。 我没有解码所有字段的含义。我认为其中一些可能是标志,因为我只在记录中看到了 0x00 和 0xff。关于 "group" 字段,我不太确定。我以为它可能是相邻数据,但看起来是某种其他关系。标记为 "uX" 的字段目前未知。 数据中的另一个 ID 指向其他列族中的 BSON 数据记录。我认为你需要从上下文中知道它是哪一个。例如,如果有一个制作站,它将不同于帐篷,帐篷将指向一个特定的位置。 你可能无法在没有对其他 BSON 数据进行相应调整的情况下创建一些项目。这超出了我所做的范围。 一些 Z 坐标很奇怪。我认为这可能是因为位于主地图之外的事物。比如在洞穴中建造的火炬。 ## 前置条件 我尝试过的所有 Python rocksdb 库在 Fedora 上都无法正常工作。类似地,我尝试过的 Java 和 Go 库(两个)也未能正常工作。所以我将其分解为 shell 脚本 `readkeys.sh`,该脚本使用 `ldb` 从 RocksDB 中提取数据,以及一个 Python 脚本 `dumper.py`,该脚本将数据转换为 CSV 文件。这些可以很容易地合并。 ### Python 您需要 python 3 和 pip。检查以下包是否已安装。 ``` pip install pandas construct ``` ### RocksDB 您需要 RocksDB 工具中的 `ldb`。您可以自己构建它(尽管它最近出了问题,我放弃了)或安装您操作系统的相应包。 #### Fedora 示例 ``` sudo dnf install rockdsdb-tools ``` 为了好玩,这个包目前与 `mariadb-rocksdb-engine` 冲突,所以如果安装了它,上面的方法将不起作用。 ## 运行脚本 ### 从世界数据库中提取索引和数据 `readkeys.sh` 脚本需要两个参数。Windrose 世界数据库目录的位置以及用于输出文件的名称前缀。例如: ``` readkeys.sh E0B88268369043E0F4A9AC3A44F3EDCC dump ``` 这将生成四个文件,它们是索引和数据文件的十六进制和二进制格式。 ### 解码数据 `dumper.py` 脚本需要三个参数。二进制索引文件路径、二进制数据文件路径和输出 CSV 文件的名称。 ``` dumper.py dump0.bin dump.1.bin dump.csv ``` 输出将是一个 CSV 文件,每行一个记录。查看 `output_data` 中的示例以了解列。
标签:BSON数据, CSV格式, RocksDB, Windrose, 云资产清单, 便携式工具, 娱乐研究, 数据导出, 数据库解析, 数据提取, 数据结构, 数据解析, 游戏分析, 游戏开发, 游戏数据, 演示模式, 编程, 逆向工具, 逆向工程