101 lines
3.4 KiB
Rust
101 lines
3.4 KiB
Rust
use cursebreaker_parser::PlayerHouseDatabase;
|
|
use std::env;
|
|
|
|
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
// Load all player houses from XML
|
|
let cb_assets_path = env::var("CB_ASSETS_PATH").unwrap_or_else(|_| "/home/connor/repos/CBAssets".to_string());
|
|
let ph_db = PlayerHouseDatabase::load_from_xml(
|
|
&format!("{}/Data/XMLs/PlayerHouses/PlayerHouses.xml", cb_assets_path),
|
|
)?;
|
|
|
|
println!("=== Player House Database Statistics ===");
|
|
println!("Total houses: {}", ph_db.len());
|
|
println!("Visible houses: {}", ph_db.get_visible_houses().len());
|
|
println!("Hidden houses: {}", ph_db.get_hidden_houses().len());
|
|
println!();
|
|
|
|
// Show all houses sorted by price
|
|
println!("=== All Houses (sorted by price) ===");
|
|
let sorted = ph_db.get_sorted_by_price();
|
|
for house in &sorted {
|
|
let visibility = if house.hidden { "(hidden)" } else { "" };
|
|
println!(
|
|
" [{}] {} - {} gold {}",
|
|
house.id, house.name, house.price, visibility
|
|
);
|
|
}
|
|
println!();
|
|
|
|
// Show price tiers
|
|
println!("=== Houses by Price Tier ===");
|
|
println!("Free houses (tier 0):");
|
|
for house in ph_db.get_by_price_tier(0) {
|
|
println!(" - {}", house.name);
|
|
}
|
|
|
|
println!("\nCheap houses (tier 1, < 5000 gold):");
|
|
for house in ph_db.get_by_price_tier(1) {
|
|
println!(" - {} ({} gold)", house.name, house.price);
|
|
}
|
|
|
|
println!("\nModerate houses (tier 2, 5000-10000 gold):");
|
|
for house in ph_db.get_by_price_tier(2) {
|
|
println!(" - {} ({} gold)", house.name, house.price);
|
|
}
|
|
|
|
println!("\nExpensive houses (tier 3, 10000+ gold):");
|
|
for house in ph_db.get_by_price_tier(3) {
|
|
println!(" - {} ({} gold)", house.name, house.price);
|
|
}
|
|
println!();
|
|
|
|
// Show cheapest and most expensive
|
|
println!("=== Price Extremes ===");
|
|
if let Some(cheapest) = ph_db.get_cheapest() {
|
|
println!(
|
|
"Cheapest house: {} - {} gold",
|
|
cheapest.name, cheapest.price
|
|
);
|
|
}
|
|
if let Some(most_expensive) = ph_db.get_most_expensive() {
|
|
println!(
|
|
"Most expensive: {} - {} gold",
|
|
most_expensive.name, most_expensive.price
|
|
);
|
|
}
|
|
println!();
|
|
|
|
// Show houses in a specific price range
|
|
println!("=== Houses between 3000-5000 gold ===");
|
|
let mid_range = ph_db.get_by_price_range(3000, 5000);
|
|
for house in mid_range {
|
|
println!(" - {} ({} gold)", house.name, house.price);
|
|
}
|
|
println!();
|
|
|
|
// Show affordable houses
|
|
println!("=== Affordable Houses (< 5000 gold) ===");
|
|
let affordable = ph_db.get_affordable_houses();
|
|
for house in &affordable {
|
|
println!(" - {} ({} gold)", house.name, house.price);
|
|
}
|
|
println!("Total affordable: {}", affordable.len());
|
|
println!();
|
|
|
|
// Show details of a specific house
|
|
if let Some(house) = ph_db.get_by_id(8) {
|
|
println!("=== House Details (ID 8) ===");
|
|
println!("Name: {}", house.name);
|
|
println!("Description: {}", house.description);
|
|
println!("Price: {} gold", house.price);
|
|
println!("Position: {}", house.position);
|
|
if let Some((x, y, z)) = house.get_position() {
|
|
println!("Coordinates: ({:.2}, {:.2}, {:.2})", x, y, z);
|
|
}
|
|
println!("Hidden: {}", house.hidden);
|
|
println!("Price tier: {}", house.get_price_tier());
|
|
}
|
|
|
|
Ok(())
|
|
}
|