feat(save): 为存档锚点增加显式恢复标记并加固退出档

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-26 23:37:47 +08:00
co-authored by Cursor
parent a177fc8b16
commit a9bc442bc8
19 changed files with 488 additions and 192 deletions
+3 -1
View File
@@ -215,6 +215,8 @@ dn: 请使用检查设备继续操作。
- `interaction` 是一级类型,不与 `content` 等其他一级类型并列书写。
- 正常交互入口路径应直接结束 Dialogue;读档时只恢复状态,不重新运行该节点。
- 退出档仍会在 `anchor.nodeName` 中保留该节点名,并通过 `startDialogueOnRestore=false` 表示只加载 YarnProject。
- `DialogEnd` 初始化完成到下一帧快照捕获之间保持玩法输入锁定;快照进入写盘队列后才交出控制权。
- 允许某些条件分支 `<<jump>>` / `<<detour>>` 到其他 Yarn 节点;这些路径会取消退出档并记录告警。
- 节点结束前必须完成所有需要写入快照的状态命令。未等待的 fire-and-forget 命令不可作为可靠边界。
- 后续玩法必须能够完全通过 Snapshot Provider 恢复,包括输入、交互监听和玩法模式,而不只是视觉状态。
@@ -431,7 +433,7 @@ Center ◀─────────────────────┘
约定:
- **插入位置**:所有需要进快照的状态命令之后;`<<jump>>` / `<<detour>>` / `load_scene` **之前**(顺序即快照内容)。
- **anchor**默认 omit(读档不重进 Yarn;依赖 sections 还原画面与玩法状态。
- **anchor**保留来源节点,并写入 `startDialogueOnRestore=false`;依赖 sections 还原画面与玩法状态。
- **判定**:绕过 tag / `no_save`;读档中、暂停、SuppressAutoSave 仍拒绝。
- **async 命令**`change_actor_state_async` 等未等待的命令之后立刻 `<<save>>` 可能 capture 未完成态,save 前应 `<<wait>>` 或使用同步命令。