Files
Genarrative/docs/technical/RPG_BATTLE_DETERMINISTIC_END_FLOW_2026-04-26.md
2026-04-26 20:50:58 +08:00

2.4 KiB

RPG 战斗确定性结束流程

更新时间:2026-04-26

背景

旧战斗单行为 PRD 允许在逃跑成功或战斗结束后再触发一次剧情推理。新的运行时规则改为:战斗过程与战斗结果都不再请求剧情推理,所有胜负出口都由确定性状态与固定选项驱动。

落地规则

  1. 战斗中的 battle_attack_basic / battle_use_skill / battle_recover_breath / inventory_use / battle_escape_breakout 只结算数值、血量、冷却、物品与战斗状态,不再请求 generateNextStep 或 Rust generate_action_story_payload 的战斗推理。
  2. 玩家血量小于等于 0 时,先展示死亡动画;三秒后复活到当前世界的第一个场景第一幕。
  3. 复活状态必须清理战斗、遭遇、NPC 交互、战斗特效、当前 NPC 战斗结果,并把生命与灵力恢复到最大值。
  4. 战斗胜利或切磋结束时,弹出固定选项:
    • 若当前场景仍有下一幕:只显示“继续前进”,并把下一幕运行时状态与可用选项挂到 deferredRuntimeState / deferredOptions,点击后只揭开下一幕选项,不触发剧情推理。
    • 若当前场景已是最后一幕:显示可前往的其他场景选项,每个选项透传 runtimePayload.targetSceneId
  5. “继续前进”和“前往其他场景”都是本地状态推进,不展示额外说明面板,不把规则描述写入 UI。

工程落点

  1. src/hooks/rpg-runtime-story/postBattleFlow.ts
    • 生成死亡复活状态。
    • 生成战斗胜利后的固定 StoryMoment
    • 解析下一幕或其他场景选项。
  2. src/hooks/rpg-runtime-story/storyChoiceContinuation.ts
    • 本地 fallback 胜利分支不再调用 generateStoryForState(...)
    • 玩家死亡分支播放死亡态并延迟复活。
  3. src/hooks/rpg-runtime-story/storyChoiceRuntime.ts
    • 服务端 runtime action 回包若是战斗死亡或胜利,同样覆盖为固定流程。
  4. server-rs/crates/api-server/src/runtime_story/compat/ai.rs
    • 战斗 outcome 不再触发 reasoned story payload。

验收

  1. 战斗中普通攻击、技能、恢复、物品、逃跑不会触发剧情推理。
  2. 玩家被打到 0 血时先播放死亡动画,约三秒后复活到第一个场景第一幕。
  3. 战斗胜利后只出现“继续前进”;最后一幕后出现其他场景入口。
  4. 服务端 runtime action 与本地 fallback 两条链表现一致。