restructure
This commit is contained in:
121
cursebreaker-parser/README.md
Normal file
121
cursebreaker-parser/README.md
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
# Cursebreaker Parser
|
||||||
|
|
||||||
|
A Rust library for parsing and managing game data from the Cursebreaker game. This crate provides tools to extract, load, and query game data from Unity scenes and XML files.
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Cursebreaker Parser is designed to:
|
||||||
|
- Parse Unity scenes and extract game objects using the unity-parser library
|
||||||
|
- Load game data from XML files (Items, NPCs, Quests, Harvestables, Loot tables)
|
||||||
|
- Provide in-memory databases for efficient querying of game data
|
||||||
|
- Serialize game data to SQL format for database storage
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- **Item Database**: Load and query items with support for filtering by ID, category, slot, and other attributes
|
||||||
|
- **NPC Database**: Manage NPC data including stats, levels, animations, and quest markers
|
||||||
|
- **Quest Database**: Handle quest definitions, phases, and rewards
|
||||||
|
- **Harvestable Database**: Track harvestable resources and their drop tables
|
||||||
|
- **Loot Database**: Manage loot tables and drop configurations
|
||||||
|
- **XML Parsing**: Robust XML parsing with error handling
|
||||||
|
- **SQL Export**: Prepare data for SQL database insertion
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Loading Items from XML
|
||||||
|
|
||||||
|
```rust
|
||||||
|
use cursebreaker_parser::ItemDatabase;
|
||||||
|
|
||||||
|
// Load all items from XML
|
||||||
|
let item_db = ItemDatabase::load_from_xml("Data/XMLs/Items/Items.xml")?;
|
||||||
|
println!("Loaded {} items", item_db.len());
|
||||||
|
|
||||||
|
// Get item by ID
|
||||||
|
if let Some(item) = item_db.get_by_id(150) {
|
||||||
|
println!("Found: {}", item.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Query items by category
|
||||||
|
let weapons = item_db.get_by_category("bow");
|
||||||
|
println!("Found {} bows", weapons.len());
|
||||||
|
|
||||||
|
// Query items by slot
|
||||||
|
let consumables = item_db.get_by_slot("consumable");
|
||||||
|
for item in consumables {
|
||||||
|
println!("Consumable: {}", item.name);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Preparing Data for SQL
|
||||||
|
|
||||||
|
```rust
|
||||||
|
use cursebreaker_parser::ItemDatabase;
|
||||||
|
|
||||||
|
let item_db = ItemDatabase::load_from_xml("Data/XMLs/Items/Items.xml")?;
|
||||||
|
|
||||||
|
// Prepare data for SQL insertion
|
||||||
|
// Returns Vec<(id, name, json_data)>
|
||||||
|
let sql_data = item_db.prepare_for_sql();
|
||||||
|
|
||||||
|
for (id, name, json) in sql_data.iter().take(5) {
|
||||||
|
println!("INSERT INTO items VALUES ({}, '{}', '{}')", id, name, json);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Project Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
cursebreaker-parser/
|
||||||
|
├── src/
|
||||||
|
│ ├── lib.rs # Library entry point and public API
|
||||||
|
│ ├── main.rs # Binary entry point
|
||||||
|
│ ├── xml_parser.rs # XML parsing utilities
|
||||||
|
│ ├── item_loader.rs # Item loading logic
|
||||||
|
│ ├── databases/ # Database implementations
|
||||||
|
│ │ ├── item_database.rs
|
||||||
|
│ │ ├── npc_database.rs
|
||||||
|
│ │ ├── quest_database.rs
|
||||||
|
│ │ ├── harvestable_database.rs
|
||||||
|
│ │ └── loot_database.rs
|
||||||
|
│ └── types/ # Type definitions
|
||||||
|
│ ├── cursebreaker/ # Game-specific types (Items, NPCs, Quests, etc.)
|
||||||
|
│ └── monobehaviours/ # Unity MonoBehaviour types
|
||||||
|
├── examples/ # Example usage
|
||||||
|
├── Cargo.toml # Package configuration
|
||||||
|
└── XML_PARSING.md # XML parsing documentation
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
- **unity-parser**: For parsing Unity scene files
|
||||||
|
- **quick-xml**: XML parsing
|
||||||
|
- **serde**: Serialization/deserialization
|
||||||
|
- **serde_json**: JSON support
|
||||||
|
- **serde_yaml**: YAML support
|
||||||
|
- **sparsey**: ECS (Entity Component System) support
|
||||||
|
- **diesel**: Optional SQL database support
|
||||||
|
- **thiserror**: Error handling
|
||||||
|
|
||||||
|
## Building
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build the library
|
||||||
|
cargo build
|
||||||
|
|
||||||
|
# Run tests
|
||||||
|
cargo test
|
||||||
|
|
||||||
|
# Build with SQL support
|
||||||
|
cargo build --features diesel
|
||||||
|
```
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
|
||||||
|
For detailed XML parsing information, see [XML_PARSING.md](XML_PARSING.md).
|
||||||
|
|
||||||
|
Generate API documentation:
|
||||||
|
```bash
|
||||||
|
cargo doc --open
|
||||||
|
```
|
||||||
11
cursebreaker-parser/src/databases/mod.rs
Normal file
11
cursebreaker-parser/src/databases/mod.rs
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
mod item_database;
|
||||||
|
mod npc_database;
|
||||||
|
mod quest_database;
|
||||||
|
mod harvestable_database;
|
||||||
|
mod loot_database;
|
||||||
|
|
||||||
|
pub use item_database::ItemDatabase;
|
||||||
|
pub use npc_database::NpcDatabase;
|
||||||
|
pub use quest_database::QuestDatabase;
|
||||||
|
pub use harvestable_database::HarvestableDatabase;
|
||||||
|
pub use loot_database::LootDatabase;
|
||||||
@@ -50,19 +50,17 @@
|
|||||||
//! ```
|
//! ```
|
||||||
|
|
||||||
pub mod types;
|
pub mod types;
|
||||||
|
pub mod databases;
|
||||||
mod xml_parser;
|
mod xml_parser;
|
||||||
mod item_loader;
|
mod item_loader;
|
||||||
mod item_database;
|
|
||||||
mod npc_database;
|
|
||||||
mod quest_database;
|
|
||||||
mod harvestable_database;
|
|
||||||
mod loot_database;
|
|
||||||
|
|
||||||
pub use item_database::ItemDatabase;
|
pub use databases::{
|
||||||
pub use npc_database::NpcDatabase;
|
ItemDatabase,
|
||||||
pub use quest_database::QuestDatabase;
|
NpcDatabase,
|
||||||
pub use harvestable_database::HarvestableDatabase;
|
QuestDatabase,
|
||||||
pub use loot_database::LootDatabase;
|
HarvestableDatabase,
|
||||||
|
LootDatabase,
|
||||||
|
};
|
||||||
pub use types::{
|
pub use types::{
|
||||||
// Items
|
// Items
|
||||||
Item,
|
Item,
|
||||||
|
|||||||
32
cursebreaker-parser/src/types/cursebreaker/mod.rs
Normal file
32
cursebreaker-parser/src/types/cursebreaker/mod.rs
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
mod item;
|
||||||
|
mod npc;
|
||||||
|
mod quest;
|
||||||
|
mod harvestable;
|
||||||
|
mod loot;
|
||||||
|
|
||||||
|
pub use item::{
|
||||||
|
// Main types
|
||||||
|
Item,
|
||||||
|
ItemStat,
|
||||||
|
CraftingRecipe,
|
||||||
|
CraftingRecipeItem,
|
||||||
|
AnimationSet,
|
||||||
|
GenerateRule,
|
||||||
|
// Enums
|
||||||
|
ItemType,
|
||||||
|
ItemCategory,
|
||||||
|
Tool,
|
||||||
|
SkillType,
|
||||||
|
StatType,
|
||||||
|
// Nested structs
|
||||||
|
Stat,
|
||||||
|
ItemXpBoost,
|
||||||
|
PermanentStatBoost,
|
||||||
|
CustomItemName,
|
||||||
|
// Constants
|
||||||
|
MAX_STACK,
|
||||||
|
};
|
||||||
|
pub use npc::{Npc, NpcStat, NpcLevel, RightClick, BarkGroup, Bark, QuestMarker, NpcAnimationSet};
|
||||||
|
pub use quest::{Quest, QuestPhase, QuestReward};
|
||||||
|
pub use harvestable::{Harvestable, HarvestableDrop};
|
||||||
|
pub use loot::{LootTable, LootDrop};
|
||||||
@@ -1,34 +1,5 @@
|
|||||||
mod interactable_resource;
|
pub mod monobehaviours;
|
||||||
mod item;
|
pub mod cursebreaker;
|
||||||
mod npc;
|
|
||||||
mod quest;
|
|
||||||
mod harvestable;
|
|
||||||
mod loot;
|
|
||||||
|
|
||||||
pub use interactable_resource::InteractableResource;
|
pub use monobehaviours::*;
|
||||||
pub use item::{
|
pub use cursebreaker::*;
|
||||||
// Main types
|
|
||||||
Item,
|
|
||||||
ItemStat,
|
|
||||||
CraftingRecipe,
|
|
||||||
CraftingRecipeItem,
|
|
||||||
AnimationSet,
|
|
||||||
GenerateRule,
|
|
||||||
// Enums
|
|
||||||
ItemType,
|
|
||||||
ItemCategory,
|
|
||||||
Tool,
|
|
||||||
SkillType,
|
|
||||||
StatType,
|
|
||||||
// Nested structs
|
|
||||||
Stat,
|
|
||||||
ItemXpBoost,
|
|
||||||
PermanentStatBoost,
|
|
||||||
CustomItemName,
|
|
||||||
// Constants
|
|
||||||
MAX_STACK,
|
|
||||||
};
|
|
||||||
pub use npc::{Npc, NpcStat, NpcLevel, RightClick, BarkGroup, Bark, QuestMarker, NpcAnimationSet};
|
|
||||||
pub use quest::{Quest, QuestPhase, QuestReward};
|
|
||||||
pub use harvestable::{Harvestable, HarvestableDrop};
|
|
||||||
pub use loot::{LootTable, LootDrop};
|
|
||||||
|
|||||||
3
cursebreaker-parser/src/types/monobehaviours/mod.rs
Normal file
3
cursebreaker-parser/src/types/monobehaviours/mod.rs
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
mod interactable_resource;
|
||||||
|
|
||||||
|
pub use interactable_resource::InteractableResource;
|
||||||
Reference in New Issue
Block a user