34 个版本
0.8.2 | 2022年10月25日 |
---|---|
0.7.1 | 2022年7月8日 |
0.6.1 | 2022年3月20日 |
0.5.3 | 2021年7月4日 |
0.3.3 | 2020年11月10日 |
#894 in 游戏开发
73 每月下载量
190KB
5K SLoC
EU4 Save
EU4 Save 是一个库,用于以人体工程学的方式处理 EU4 存档(铁人模式 + 多人模式)。
use eu4save::{Eu4Extractor, Encoding, CountryTag};
use std::io::Cursor;
let data = std::fs::read("assets/saves/eng.txt.compressed.eu4")?;
let (save, encoding) = Eu4Extractor::extract_save(Cursor::new(&data[..]))?;
assert_eq!(encoding, Encoding::TextZip);
assert_eq!(save.meta.player, CountryTag::from("ENG"));
Eu4Extractor
将将明文(用于模组、多人模式、非铁人模式存档)和二进制(铁人模式)编码的存档反序列化为相同的结构。
查询
即使解码后,数据可能仍然过于底层。例如,一个国家可以有收入账本,看起来像这样
income = { 1.000 0 2.000 0.000 1.500 }
虽然结构成功解码为向量,但每个索引的含义的上下文缺失。哪个值代表贸易收入?
为了帮助解决这类问题,创建了 Query
API
use eu4save::{Eu4Extractor, Encoding, CountryTag, query::Query};
use std::io::Cursor;
let data = std::fs::read("assets/saves/eng.txt.compressed.eu4")?;
let (save, _encoding) = Eu4Extractor::extract_save(Cursor::new(&data[..]))?;
let save_query = Query::from_save(save);
let trade = save_query.save().game.countries.get(&CountryTag::from("ENG"))
.map(|country| save_query.country_income_breakdown(country))
.map(|income| income.trade);
assert_eq!(Some(17.982), trade);
铁人模式
默认情况下,铁人模式存档将无法正确解码。
要启用支持,必须提供一个环境变量(EU4_IRONMAN_TOKENS
),该变量指向一个包含令牌描述的换行符分隔的文本文件。例如
0xffff my_test_token
0xeeee my_test_token2
PDS 已宣布,为了遵守 EU4 的使用条款,令牌列表不得共享。我也被限制不得透露如何推导令牌列表。
您可以参考其他 EU4 铁人模式项目,如 ironmelt 或 paperman,以获取灵感。
依赖关系
~1.9–2.8MB
~62K SLoC