1个不稳定版本
0.1.0 | 2024年1月20日 |
---|
在 数据库接口 中排名 1817
34KB
741 行
一个用于解析MMORPG Regnum冠军 游戏资产文件的crate。
目录
关于
本crate提供了一套工具,用于从您本地安装的Regnum冠军中的资产文件集中检索信息。
基本用法
Regnum冠军包含两种类型的资产文件:索引文件和数据库文件。这两种文件都位于游戏安装文件夹中,分别使用.idx
和.sdb
扩展名。每个文件都包含一组资产文件,可能是声音、音乐、纹理等。对于每个索引文件都有一个对应的数据库文件。索引文件不包含资产,但提供有关从数据库文件检索特定资产的信息。
从资产文件检索数据的过程包括使用ResourceIndex
解析索引文件以生成一系列书签,每个书签都指向数据库文件中的特定资产。书签可以稍后用于从数据库文件中检索资产数据。
以下示例说明了如何从相应的索引文件检索声音列表
use anyhow::Result;
use regnumassets::{AssetType, ResourceIndex};
use std::fs::File;
fn main() -> Result<()> {
let f = File::open("data2.idx")?;
let index = ResourceIndex::new(f).unwrap();
let sounds = index.filter_by_type(AssetType::Sound);
for sound in &sounds {
println!(
"Resource #{}: {}",
sound.resource_id,
sound.name.as_deref().unwrap_or("(unnamed)".into())
);
}
Ok(())
}
ResourceIndex
结构提供了API,用于通过资源ID或资产类型检索资产。调用这些方法将返回一个AssetBookmark
实例。要从数据库文件获取数据,我们使用具有数据库文件句柄和&AssetBookmark
构造函数的AssetData
结构。
以下示例显示了如何通过其ID获取声音并将其内容保存到新文件中
use anyhow::Result;
use regnumassets::{AssetData, ResourceIndex};
use std::fs::File;
use std::io::Write;
fn main() -> Result<()> {
let f = File::open("data2.idx")?;
let index = ResourceIndex::new(f).unwrap();
let sound = index.get_by_resource_id(50677).unwrap();
let f = File::open("data2.sdb")?;
let asset = AssetData::new(&f, &sound).unwrap();
let filename = asset.filename.unwrap();
println!("Writing file to {}", filename);
let mut output = File::create(filename)?;
output.write_all(asset.bytes.unwrap().as_ref())?;
output.flush()?;
Ok(())
}
许可证
在MIT许可证下发布。
免责声明
Regnum冠军是Nimble Giant Entertainment的注册商标。我与该公司及其员工没有任何关系。
依赖关系
~3.5MB
~120K SLoC