Files
Genarrative/server-rs/crates/module-runtime-item/src/domain.rs

72 lines
2.1 KiB
Rust

//! 运行时物品领域模型。
//!
//! 本文件承载宝箱、奇遇和奖励物品的稳定值对象;背包落库由外层事务 adapter 编排。
use serde::{Deserialize, Serialize};
#[cfg(feature = "spacetime-types")]
use spacetimedb::SpacetimeType;
pub const TREASURE_RECORD_ID_PREFIX: &str = "treasure_";
#[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum TreasureInteractionAction {
Inspect,
Leave,
Secure,
}
#[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))]
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct RuntimeItemRewardItemSnapshot {
pub item_id: String,
pub category: String,
pub item_name: String,
pub description: Option<String>,
pub quantity: u32,
pub rarity: RuntimeItemRewardItemRarity,
pub tags: Vec<String>,
pub stackable: bool,
pub stack_key: String,
pub equipment_slot_id: Option<RuntimeItemEquipmentSlot>,
}
#[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum RuntimeItemRewardItemRarity {
Common,
Uncommon,
Rare,
Epic,
Legendary,
}
#[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum RuntimeItemEquipmentSlot {
Weapon,
Armor,
Relic,
}
#[cfg_attr(feature = "spacetime-types", derive(SpacetimeType))]
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct TreasureRecordSnapshot {
pub treasure_record_id: String,
pub runtime_session_id: String,
pub story_session_id: String,
pub actor_user_id: String,
pub encounter_id: String,
pub encounter_name: String,
pub scene_id: Option<String>,
pub scene_name: Option<String>,
pub action: TreasureInteractionAction,
pub reward_items: Vec<RuntimeItemRewardItemSnapshot>,
pub reward_hp: u32,
pub reward_mana: u32,
pub reward_currency: u32,
pub story_hint: Option<String>,
pub created_at_micros: i64,
pub updated_at_micros: i64,
}