#文件读取器 #wz #线程安全 #maplestory #wzlib

wz_reader

一个用于线程安全解析wz文件的wz文件读取器

7个版本

0.0.10 2024年7月8日
0.0.9 2024年7月2日
0.0.7 2024年5月24日
0.0.4 2024年4月24日

#625 in 解析器实现

自定义许可协议

210KB
5K SLoC

wz-reader-rs

Maplestory *.Wz 文件读取器,用Rust编写,尝试从WzComparerR2.WzLibMapleLib移植相似代码

这是一个Rust学习项目,性能可能不如C#。

依赖项

  • 图像
    • flate2
    • image
  • 字符解密
    • aes
    • ecb
  • 数据
    • hashbrown - 哈希表
    • memmap2
  • 其他
    • rayon
    • scroll
    • thiserror

最低支持的Rust版本

wz_reader的最低支持版本是1.70.0

示例

use wz_reader::util::{resolve_base, walk_node};
// NodeCast trait provide try_as_* functions to casting WzNode
use wz_reader::NodeCast;

fn main() {
    // resolve wz files
    let base_node = resolve_base(r"D:\MapleStory\Data\Base.wz", None).unwrap();

    // try to parsing every nodes on the way
    walk_node(&base_node, true, &|node| {
        let node_read = node.read().unwrap();

        if let Some(sound_node) = node_read.try_as_sound() {
            let path = std::path::Path::new("./sounds").join(node_read.name.as_str());
            if sound_node.save(path).is_err() {
                println!("failed to extract sound: {}", node_read.get_full_path());
            }
        }
    });
}

您可以在示例文件夹中找到更多示例用法。

许可协议

本项目采用MIT许可协议

依赖项

~9MB
~138K SLoC