#replay #公司 #解析器组合器 #英雄 #coh3 #coh

vault

Company of Heroes 回放文件的解析器

32 个版本 (10 个主要版本更新)

10.0.0 2024 年 8 月 15 日
9.0.1 2024 年 6 月 3 日
8.0.1 2024 年 7 月 16 日
8.0.0 2024 年 2 月 12 日
0.3.2 2015 年 11 月 29 日

游戏 中排名第 7

Download history 16/week @ 2024-05-03 35/week @ 2024-05-10 33/week @ 2024-05-17 23/week @ 2024-05-24 362/week @ 2024-05-31 116/week @ 2024-06-07 65/week @ 2024-06-14 10/week @ 2024-06-21 6/week @ 2024-06-28 17/week @ 2024-07-05 164/week @ 2024-07-12 35/week @ 2024-07-19 131/week @ 2024-07-26 109/week @ 2024-08-02 63/week @ 2024-08-09 314/week @ 2024-08-16

每月下载量 618

MIT 许可协议 MIT

100KB
2.5K SLoC

宝库

crates.io Documentation

vault 是一个用 Rust 编写的 Company of Heroes 回放解析库。它已被完全重写以支持 Company of Heroes 3,同时简化代码并利用 nom 的解析器组合器,以实现 Company of Heroes 3 回放文件的干净、快速解析。

该项目仍在开发中,请随时查看更新,如果您感兴趣的功能尚未被解析,请随时提出问题!

用法

Rust

如果您正在编写 Rust 应用程序,您可以从 crates.io 使用 vault

Cargo.toml:

[dependencies]
vault = "9"

src/main.rs:

fn main() {
    let data = include_bytes!("/path/to/replay.rec");
    let replay = vault::Replay::from_bytes(data);
    assert!(replay.is_ok())
}

Ruby

vault 通过 magnus 提供Ruby绑定,允许您直接从 Ruby 代码调用 vault。这可以通过 magnus 功能启用

Cargo.toml:

[dependencies]
vault = { version = "9", features = ["magnus"] }

src/lib.rs:

use magnus::{class, define_module, exception, function, method, prelude::*, Error};

#[magnus::init]
fn init() -> Result<(), Error> {
    let module = define_module("VaultCoh")?;

    let replay = module.define_class("Replay", class::object())?;
    replay.define_singleton_method("from_bytes", function!(from_bytes, 1))?;
    replay.define_method("version", method!(vault::Replay::version, 0))?;

    Ok(())
}

fn from_bytes(input: Vec<u8>) -> Result<vault::Replay, Error> {
    vault::Replay::from_bytes(&input)
        .map_err(|err| Error::new(exception::runtime_error(), err.to_string()))
}

irb:

require 'vault'

bytes = File.open('/path/to/replay.rec').read.unpack('C*')
replay = VaultCoh::Replay.from_bytes(bytes)
puts replay.version

请注意,所有类都必须绑定到 VaultCoh 命名空间,类名与其 Rust 对应项匹配。有关此功能的示例,请参阅 vault-rb

Serde

vault 为组成解析回放的所有数据结构实现了 serdeSerializeDeserialize 特性。这些可以通过 serde 功能访问

Cargo.toml:

[dependencies]
vault = { version = "9", features = ["serde"] }

src/main.rs:

fn main() {
    let data = include_bytes!("/path/to/replay.rec");
    let replay = vault::Replay::from_bytes(data).unwrap();

    // Convert the Replay to a JSON string.
    let serialized = serde_json::to_string(&replay).unwrap();

    // Convert the JSON string back to a Replay.
    let deserialized: Replay = serde_json::from_str(&serialized).unwrap();
}

Company of Heroes 2

vault 已从头开始重写以更好地支持未来的开发,这意味着 Company of Heroes 2 解析支持已被弃用。有关 Company of Heroes 2 解析器和用法说明,请参阅 此处。CoH2 回放解析将继续与 vault 的 v1.0.0 版本一起工作。

兼容性

官方支持的最低Rust版本是1.65.0,因为这是magnus所要求的版本。然而,在支持Rust 2021的任何编译器版本上构建,即使这不是官方支持的,也应该没有问题。

Ruby绑定有一些额外的兼容性要求,例如libclang和最低Ruby版本要求。更多信息请见magnus兼容性

文档

vault的文档可以在网上查看

或者,您可以使用cargo轻松地为自身构建文档离线副本。

$ cargo doc

对于包含magnus Ruby绑定的文档,请运行

$ cargo doc --features=magnus

生成的文档可以在vault/target/doc找到。

许可证

MIT

依赖

约2.5-4MB
约70K SLoC