4.8 KiB
4.8 KiB
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>>桥接到共享节点;共享节点名须与*.yarn中title:一致。
2. 状态变量约定(推荐)
| 用途 | 模式 |
|---|---|
| 流程阶段 | $gameStage(数字;仅在 Center 等少数节点切换,避免散落 set) |
| 某模块「本档首次插线检查完」 | $xxxChecked(如 $speakerChecked / $colorChecked / $emoChecked) |
| 多子任务计数 | $TaskToDo,完成时 --,跳转前务必保证不会重复减 |
| 同一 Stage 内「最终检查子项已完成」 | 独立布尔,如 $speakerFinalOK / $saleFinalOK,防止重复插线再次 complete_task 与 -- |
在 VarsInit(或等价入口)用 <<declare>> 初始化所有布尔/计数器,避免未定义行为。
3. 从自然语言 / 大纲生成 Yarn 时的必做项
- 列出插线入口:每个
*PlugIn→ 目标节点;与模块moduleName一致。 - 列出
$gameStage与文档步骤映射(如02_flow.md),每个共享检查节点有哪些elseif $gameStage==N。 - 任何会
<<jump>>换阶段的块:条件里加$gameStage==N,避免后期$xxxChecked仍为 true 时误触发旧结局(状态回退)。 - 同一
$gameStage内、同一模块第二次插线:- 首次:完整演出 +
complete_task+ 设$xxxChecked/$xxxFinalOK。 - 再次:
<<if $xxxChecked == true>>(或对应 FinalOK)→ 短总结 + 自言自语下一步(去查哪个模块、任务提示),不重复长对白、不重复任务完成副作用。
- 首次:完整演出 +
- 多分支共享「完成标记」:勿在
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.yarn(VarsInit)。 - 流程定义:
Docs/HuoShan/core/02_flow.md。 - C#:
Assets/Scripts/FixSystemNew/BodyModule/Modules/BodyModule.cs(PlugIn)。