[ide-config] chore(cursor): 添加 Yarn 插线流程 skill 与审阅命令

Made-with: Cursor
This commit is contained in:
2026-04-14 16:10:47 +08:00
parent cc62d4d73f
commit 1aadabe0d2
2 changed files with 120 additions and 0 deletions
+17
View File
@@ -0,0 +1,17 @@
# Yarn 插线维修对话 — 快速审查
`FP_Huoshan1` 或同类 **BodyModule 插线 + `$gameStage` 多阶段**`.yarn` 做一轮检查。
## 用法
在对话里说明「按 yarn-plug-review 审查某文件/目录」或直接粘贴节点片段。
## 审查项(简版)
1. **跳转条件**:会 `jump` 结束/换阶段的块是否带 `$gameStage==…`,避免后期变量仍为 true 时回退阶段。
2. **重复插线**:同一 stage、同一模块第二次插线是否为短总结 + 下一步提示,而非全长对白与重复 `complete_task`
3. **TaskToDo**`TaskToDo--` 是否与「首次完成」绑定(如 `$speakerFinalOK` / `$saleFinalOK`),避免重复递减。
4. **无序插线**:是否已去掉「分支外无条件 set 完成标记」导致跳剧情。
5. **EventNode**`*PlugIn` 名称与 `moduleName`、目标 `title:` 一致。
完整说明与模式见:`.cursor/skills/yarn-plug-in-flow/SKILL.md`
+103
View File
@@ -0,0 +1,103 @@
---
name: yarn-plug-in-flow
description: >-
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 时的必做项
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 片段)
**防跨阶段误触发结局:**
```yarn
<<if $gameStage==2 && $speakerChecked==true && $colorChecked==true>>
// 波形对比 → 结束本阶段
<<endif>>
```
**同 Stage 重复插线(短总结):**
```yarn
<<if $gameStage==2>>
<<if $speakerChecked == true>>
me: (总结结论)…
me: (下一步该做什么)…
<<else>>
// 首次完整流程
<<set $speakerChecked = true>>
<<endif>>
<<endif>>
```
**Stage7 双任务防重复:**
```yarn
<<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`)。