Files
aibis-dream/.cursor/skills/yarn-plug-in-flow/SKILL.md
T

4.8 KiB
Raw Blame History

name, description
name description
yarn-plug-in-flow Yarn 维修插线对话:gameStage 调度、重复插线短总结、防状态回退与 TaskToDo 重复递减。 Use when 写 FixSystem/BodyModule 插线 Yarn、从自然语言生成维修对话、审阅 HuoShan 类流程、 检查 PlugIn 节点、重复执行、插线检查、或用户提到 yarn 插线/维修界面对话。

Yarn 插线维修对话(FixSystem

本 skill 适用于:BodyModule 通过 {moduleName}PlugIn 跳入 Yarn、同一节点内用 $gameStage 分支多阶段叙事(如 FP_Huoshan1)。

1. C# 侧事实(设计 Yarn 前必读)

  • 插线触发:BodyModule.PlugIn()DialogController.StartDialogNode(data.PlugInNodeName),节点名为 {moduleName}PlugIn(见 BodyModuleData.PlugInNodeTemplate)。
  • C# 一般不按阶段禁用插线;若某 Stage 实际不可插线,是场景/交互配置决定,但 Yarn 仍应防御性处理「错误阶段误入」。
  • EventNode 里用 <<jump 检查xxx>> 桥接到共享节点;共享节点名须与 *.yarntitle: 一致。

2. 状态变量约定(推荐)

用途 模式
流程阶段 $gameStage(数字;仅在 Center 等少数节点切换,避免散落 set
某模块「本档首次插线检查完」 $xxxChecked(如 $speakerChecked / $colorChecked / $emoChecked
多子任务计数 $TaskToDo,完成时 --跳转前务必保证不会重复减
同一 Stage 内「最终检查子项已完成」 独立布尔,如 $speakerFinalOK / $saleFinalOK,防止重复插线再次 complete_task--

VarsInit(或等价入口)用 <<declare>> 初始化所有布尔/计数器,避免未定义行为。

3. 从自然语言 / 大纲生成 Yarn 时的必做项

  1. 列出插线入口:每个 *PlugIn → 目标节点;与模块 moduleName 一致。
  2. 列出 $gameStage 与文档步骤映射(如 02_flow.md),每个共享检查节点有哪些 elseif $gameStage==N
  3. 任何会 <<jump>> 换阶段的块:条件里加 $gameStage==N,避免后期 $xxxChecked 仍为 true 时误触发旧结局(状态回退)。
  4. 同一 $gameStage 内、同一模块第二次插线
    • 首次:完整演出 + complete_task + 设 $xxxChecked / $xxxFinalOK
    • 再次:<<if $xxxChecked == true>>(或对应 FinalOK)→ 短总结 + 自言自语下一步(去查哪个模块、任务提示),重复长对白、重复任务完成副作用。
  5. 多分支共享「完成标记」:勿在 if/elseif 外无条件 set $colorChecked=true 等;否则乱序插线会跳过叙事(见此前 HuoShan Stage2 修复)。

4. 已完成 Yarn 的审查清单(可逐项打勾)

4.1 阶段与跳转

  • 会推进阶段或结束的 <<jump>>,外层条件是否包含正确的 $gameStage
  • Center / Stage 入口是否唯一或清晰,避免死循环、重复 set gameStage

4.2 重复插线(同 Stage、同模块)

  • Stage2 类:表达 / 销售 / 情绪等主流程,第二次插线是否为「短总结 + 下一步」而非全长?
  • Stage7 类双任务:是否用 FinalOK(或等价)避免第二次插线再次 TaskToDo-- / 重复 complete_task

4.3 变量与任务

  • complete_task$TaskToDo 递减是否一一对应、且只在「首次成功路径」执行?
  • $PlugCount 等统计是否与「首次访问」一致(可用 visited("NodeName")== false 包裹)?

4.4 文档与代码

  • EventNode 表与 title: 节点名一致(如 SalePlugIn 非过期的 ColorPlugIn)。

5. 最小代码模式参考(Yarn 片段)

防跨阶段误触发结局:

<<if $gameStage==2 && $speakerChecked==true && $colorChecked==true>>
    // 波形对比 → 结束本阶段
<<endif>>

同 Stage 重复插线(短总结):

<<if $gameStage==2>>
    <<if $speakerChecked == true>>
        me: (总结结论)…
        me: (下一步该做什么)…
    <<else>>
        // 首次完整流程
        <<set $speakerChecked = true>>
    <<endif>>
<<endif>>

Stage7 双任务防重复:

<<elseif $gameStage==7>>
    <<if $speakerFinalOK == true>>
        me: 已确认…若还有任务去查另一模块。
    <<else>>
        <<complete_task "...">>
        <<set $speakerFinalOK = true>>
        <<set $TaskToDo = $TaskToDo - 1>>
    <<endif>>
<<endif>>

6. 项目内参考

  • 实例:Assets/Resources/Yarn/FP_Huoshan1/Stage2.yarn检查表达 / 检查销售模块 / 检查情绪)、Center.yarnVarsInit)。
  • 流程定义:Docs/HuoShan/core/02_flow.md
  • C#Assets/Scripts/FixSystemNew/BodyModule/Modules/BodyModule.csPlugIn)。