> ## Documentation Index
> Fetch the complete documentation index at: https://guide.moyostory.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 触发器规则与规则组

> 根据渲染、进入帧、解析指令或玩家操作，更新变量、切换帧、跳转页面或请求 AI。

触发器规则定义“发生某件事后执行哪些动作”。它负责把指令参数写入变量，也负责响应按钮点击。

<img src="https://mintcdn.com/moyostory/2W8JKWEaiXD_6ckV/assets/quickstart/screenshots/story-rules.png?fit=max&auto=format&n=2W8JKWEaiXD_6ckV&q=85&s=a54e59fec15a3bfe248cdb42f022a574" alt="“剧情页”模板中的多条触发器规则" width="570" height="930" data-path="assets/quickstart/screenshots/story-rules.png" />

## 规则组

一个模板可以保存多套规则组。页面节点从模板中选择一套规则组，并在运行时使用其中的规则。

规则组适合处理同一页面外观下的行为差异。例如，同一个对话模板可以为普通剧情、自由对话和结局页面分别建立规则组。

右侧“触发器规则”区域支持新建、复制、重命名和删除规则组。规则组名称只用于模板内展示和页面节点选择。

## 四种触发时机

| 触发时机 | 什么时候执行       | 常见用途                    |
| ---- | ------------ | ----------------------- |
| 渲染前  | 每次组装当前画面前    | 计算画面需要的初始值或派生值          |
| 进入帧  | 当前帧开始显示时     | 清空上一帧的正文和选项，设置初始值       |
| 解析指令 | 读取到指定指令时     | 把指令参数写入 Frame 变量        |
| 用户交互 | 玩家点击匹配的页面元素时 | 切换帧、更新 State、跳转页面或触发 AI |

“渲染前”会在每次渲染前重复执行，只应用于更新变量。不要在这类规则中配置切换帧、跳转界面或触发 AI 回复。

选择“解析指令”后，需要再选择指令名。界面会列出该指令参数的引用方式。

选择“用户交互”后，再选择事件类型：点击、值变化、表单提交或按下回车。填写 Element Selector（CSS 选择器）后，点击“验证”可以检查当前作品实时预览中是否匹配到元素。

## 四类动作

| 动作       | 结果                                                       |
| -------- | -------------------------------------------------------- |
| 更新变量     | 通过 `set`、`append`、`merge` 或 `remove` 修改 State / Frame 变量 |
| 切换帧      | 按指定数量前进或后退                                               |
| 跳转界面     | 进入另一个页面节点                                                |
| 触发 AI 回复 | 根据当前上下文请求下一批 AI 内容                                       |

一条规则可以包含多个动作。动作从上到下执行，可以拖动排序。

“更新变量”的四种操作分别适用于不同数据：

| 操作       | 结果           |
| -------- | ------------ |
| `set`    | 用新值替换原值      |
| `append` | 向数组末尾加入一项    |
| `merge`  | 把对象字段合并到现有对象 |
| `remove` | 从数组中移除匹配项    |

值的类型可以选“文本”或“数值/表达式”。例如，好感度增加 1 不是单独的操作；应选择 `set`，并把值填写为 `state.affection + 1`。

<img src="https://mintcdn.com/moyostory/2W8JKWEaiXD_6ckV/assets/editor/screenshots/trigger-rule-dialog.jpg?fit=max&auto=format&n=2W8JKWEaiXD_6ckV&q=85&s=cca614c8fdfde12324edb4235a4c23f6" alt="固定选项规则依次更新 State、跳转页面并触发 AI" width="2327" height="1090" data-path="assets/editor/screenshots/trigger-rule-dialog.jpg" />

上图的顺序表示：

1. 记录玩家选择的调查方向；
2. 跳转到对应 AI 页面节点；
3. 请求该节点生成内容。

“触发 AI 回复”在同一规则中至多出现一次，并且必须放在动作序列末尾。编辑器会标出不合法顺序，保存接口也会拒绝。

## 为单个动作设置执行条件

动作下方的“+ 执行条件”用于决定这一项是否执行。条件可以读取 State 或 Frame 变量，并使用等于、不等于、大小比较、`contains` 或 `includes`。`contains` 检查文本是否包含指定内容，`includes` 检查数组是否包含指定项。多个条件可以选择 AND 或 OR。

执行条件只控制它所属的动作，不会阻止同一规则中的其他动作。没有执行条件时，该动作每次都会执行。

## CSS 选择器怎样对应页面按钮

页面代码需要给可点击元素提供稳定选择器。例如：

```tsx theme={null}
<button className="story-next">继续</button>
```

触发器规则中的 Element Selector 填写：

```text theme={null}
.story-next
```

分支按钮可以通过属性区分：

```tsx theme={null}
<button className="story-choice" data-route="letter">追问信件</button>
```

对应选择器：

```text theme={null}
.story-choice[data-route="letter"]
```

先在页面代码中确定稳定的类名或属性，再使用规则中的“验证”检查匹配结果。

## 连线与跳转规则

流程蓝图中的连线展示页面关系，“跳转界面”动作执行跳转。保存模板和流程后，连线会显示相关规则名称。

删除连线不会自动删除模板中的触发器规则。删除页面节点或改名后，应检查所有“跳转界面”动作。

## 保存和调试

规则组、规则和动作属于模板草稿。点击“保存作品”或模板标签的“保存并关闭”后写入作品。

切换右上角“调试”，可以查看当前 State / Frame 变量和规则执行记录。页面按钮点击后没有反应时，按这个顺序检查：

1. Element Selector 是否能匹配当前页面；
2. 页面节点是否选择了这条规则所在的规则组；
3. 动作目标和顺序是否正确；
4. 保存后在运行预览中重新触发。

<Tip>
  MoMo：一条规则有多个动作时，先写数据，再跳转，最后触发 AI 回复。
</Tip>
