45 lines
1.3 KiB
Rust
45 lines
1.3 KiB
Rust
//! runtime story 领域模型。
|
|
//!
|
|
//! 当前 crate 用于运行时剧情主链的纯规则收口。后续迁移时仍只能保留 JSON 规则、
|
|
//! 选项生成和视图模型转换,不引入 Axum、LLM 或 SpacetimeDB。
|
|
|
|
use serde_json::Value;
|
|
use shared_contracts::runtime_story::{
|
|
RuntimeBattlePresentation, RuntimeStoryOptionView, RuntimeStoryPatch,
|
|
};
|
|
|
|
pub const CONTINUE_ADVENTURE_FUNCTION_ID: &str = "story_continue_adventure";
|
|
pub const MAX_TASK5_COMPANIONS: usize = 2;
|
|
|
|
pub struct StoryResolution {
|
|
pub action_text: String,
|
|
pub result_text: String,
|
|
pub story_text: Option<String>,
|
|
pub presentation_options: Option<Vec<RuntimeStoryOptionView>>,
|
|
pub saved_current_story: Option<Value>,
|
|
pub patches: Vec<RuntimeStoryPatch>,
|
|
pub battle: Option<RuntimeBattlePresentation>,
|
|
pub toast: Option<String>,
|
|
}
|
|
|
|
pub struct GeneratedStoryPayload {
|
|
pub story_text: String,
|
|
pub history_result_text: String,
|
|
pub presentation_options: Vec<RuntimeStoryOptionView>,
|
|
pub saved_current_story: Value,
|
|
}
|
|
|
|
pub struct CurrentEncounterNpcQuestContext {
|
|
pub npc_id: String,
|
|
pub npc_name: String,
|
|
}
|
|
|
|
pub struct PendingQuestOfferContext {
|
|
pub dialogue: Vec<Value>,
|
|
pub turn_count: i32,
|
|
pub custom_input_placeholder: String,
|
|
pub quest: Value,
|
|
pub quest_id: String,
|
|
pub intro_text: Option<String>,
|
|
}
|