109 lines
4.0 KiB
Rust
109 lines
4.0 KiB
Rust
use cursebreaker_parser::TraitDatabase;
|
|
use std::env;
|
|
|
|
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
// Load all traits from XML
|
|
let cb_assets_path = env::var("CB_ASSETS_PATH").unwrap_or_else(|_| "/home/connor/repos/CBAssets".to_string());
|
|
let trait_db = TraitDatabase::load_from_xml(
|
|
&format!("{}/Data/XMLs/Traits/Traits.xml", cb_assets_path),
|
|
)?;
|
|
|
|
println!("=== Trait Database Statistics ===");
|
|
println!("Total traits: {}", trait_db.len());
|
|
println!("Trainer traits: {}", trait_db.get_trainer_traits().len());
|
|
println!("Ability traits: {}", trait_db.get_ability_traits().len());
|
|
println!("Novice traits: {}", trait_db.get_novice_traits().len());
|
|
println!("Experienced traits: {}", trait_db.get_experienced_traits().len());
|
|
println!("Master traits: {}", trait_db.get_master_traits().len());
|
|
println!();
|
|
|
|
// Show all skills
|
|
println!("=== All Skills ===");
|
|
let mut skills = trait_db.get_all_skills();
|
|
skills.sort();
|
|
for skill in &skills {
|
|
let count = trait_db.get_by_skill(skill).len();
|
|
println!(" {} ({} traits)", skill, count);
|
|
}
|
|
println!();
|
|
|
|
// Show traits for a specific skill
|
|
println!("=== Woodcutting Traits (sorted by level) ===");
|
|
let woodcutting = trait_db.get_sorted_by_level("woodcutting");
|
|
for trait_obj in woodcutting.iter().take(10) {
|
|
if let Some(level) = trait_obj.get_required_level() {
|
|
let tier = if trait_obj.is_novice() {
|
|
" (Novice)"
|
|
} else if trait_obj.is_experienced() {
|
|
" (Experienced)"
|
|
} else if trait_obj.is_master() {
|
|
" (Master)"
|
|
} else {
|
|
""
|
|
};
|
|
println!(" [Lvl {}] {}{}", level, trait_obj.name, tier);
|
|
}
|
|
}
|
|
println!("... and {} more", woodcutting.len().saturating_sub(10));
|
|
println!();
|
|
|
|
// Show master tier traits
|
|
println!("=== Master Tier Traits ===");
|
|
let masters = trait_db.get_master_traits();
|
|
for trait_obj in &masters {
|
|
if let (Some(skill), Some(level)) = (trait_obj.get_required_skill(), trait_obj.get_required_level()) {
|
|
println!(" {} - {} (Level {})", trait_obj.name, skill, level);
|
|
}
|
|
}
|
|
println!();
|
|
|
|
// Show ability traits
|
|
println!("=== Traits that Teach Abilities (first 10) ===");
|
|
let abilities = trait_db.get_ability_traits();
|
|
for trait_obj in abilities.iter().take(10) {
|
|
if let Some(ability_id) = trait_obj.learnability {
|
|
println!(
|
|
" {} - teaches ability {}",
|
|
trait_obj.name, ability_id
|
|
);
|
|
if let (Some(skill), Some(level)) = (trait_obj.get_required_skill(), trait_obj.get_required_level()) {
|
|
println!(" Requires: {} level {}", skill, level);
|
|
}
|
|
}
|
|
}
|
|
println!("... and {} more", abilities.len().saturating_sub(10));
|
|
println!();
|
|
|
|
// Show traits by level range
|
|
println!("=== Combat Traits (Levels 15-25) ===");
|
|
let combat_traits = trait_db.get_by_skill_and_level("swordsmanship", 15, 25);
|
|
for trait_obj in &combat_traits {
|
|
if let Some(level) = trait_obj.get_required_level() {
|
|
println!(" [Lvl {}] {}", level, trait_obj.name);
|
|
}
|
|
}
|
|
println!();
|
|
|
|
// Show details of a specific trait
|
|
if let Some(trait_obj) = trait_db.get_by_id(272) {
|
|
println!("=== Trait Details (ID 272) ===");
|
|
println!("Name: {}", trait_obj.name);
|
|
println!("Description (plain): {}", trait_obj.get_plain_description());
|
|
if let Some(ref trainer) = trait_obj.trainer {
|
|
println!("Skill: {}", trainer.skill);
|
|
println!("Level: {}", trainer.level);
|
|
if let Some(tier) = trainer.tier_icon {
|
|
println!("Tier: {}", tier);
|
|
}
|
|
}
|
|
if let Some(ability_id) = trait_obj.learnability {
|
|
println!("Teaches ability: {}", ability_id);
|
|
}
|
|
if let Some(ref comment) = trait_obj.comment {
|
|
println!("Comment: {}", comment);
|
|
}
|
|
}
|
|
|
|
Ok(())
|
|
}
|