2 个版本
0.2.3 | 2024年5月6日 |
---|---|
0.2.2 | 2024年4月29日 |
#846 in 游戏开发
在 2 crates 中使用
87KB
2K SLoC
RyOT Tibia
一个专门用于管理和集成Tibia特定遗留资产的crate,确保兼容性并增强针对受Tibia启发的游戏的特化功能。
此crate封装了Tibia外观数据的协议定义,提供了一个结构化的接口来访问Tibia外观资产。它主要包含从协议缓冲定义自动生成的Rust代码,确保类型安全并便于与Rust代码库集成。
结构
-
协议定义:核心定义是从Tibia的
.proto
文件生成的,提供了匹配外观protobuf规范的Rust结构体。这是在构建时完成的,生成的代码直接包含在crate中。 -
转换模块:包含将原始Tibia外观数据转换为更易用的内部格式的实现。此子模块在Ryot系统中的应用特定数据结构之间架起桥梁。
使用
此crate用于内部解码以Tibia特定格式接收的外观数据。它允许Ryot系统直接使用定义良好的Rust结构体,而不是处理原始二进制数据,从而简化数据处理和集成任务。
示例
以下是如何使用此crate解码外观数据的示例
use ryot_core::prelude::VisualElements;
use ryot_tibia as tibia;
fn main() {
// Vec::new() simulates raw bytes received from Tibia's appearance data
let visual_elements: VisualElements = tibia::from_bytes(&Vec::new()).unwrap();
println!("{:?}", visual_elements);
}
构建
实际的.proto
定义以及从这些定义生成Rust代码的工作在crate构建脚本中处理,如果启用了ci_assets功能。这确保了生成的代码始终是最新的,并且与最新的Tibia外观定义保持同步。
目录
Tibia资产存储在content-catalog.json文件中,列出了客户端需要的资源。已知有5种Tibia内容类型:外观、静态数据、静态地图数据、地图和精灵。我们只在这个库中使用精灵和外观。
[
{
"type": "appearances",
"file": "appearances.dat"
},
{
"type": "staticdata",
"file": "staticdata.dat"
},
{
"type": "staticmapdata",
"file": "staticmapdata.dat"
},
{
"type": "map",
"file": "map.otbm"
},
{
"type": "sprite",
"file": "spritesheet.png",
"spritetype": 0,
"firstspriteid": 100,
"lastspriteid": 200,
"area": 64
}
]
依赖
~46–85MB
~1.5M SLoC