先选对值的类型
例如,指令参数“内容”的引用方式是
$内容:
$参数名。需要把多个值整理成一句话时,再使用宏嵌入文本。
宏嵌入文本
宏嵌入文本会保留你输入的普通文字,并替换其中的{{…}}:
完整示例:
true 得到的是文字 "true",不是布尔值;输入 [] 得到的是文字 "[]",不是数组。
动态表达式
动态表达式使用 JavaScript 表达式计算一个值。它可以直接读取:state.x:State 变量;frame.x:当前 Frame 字段;$参数名:当前“解析指令”规则的具名参数;Math、JSON、Array、Object、String、Number、Boolean、Date、RegExp等安全内置对象。
表达式只有一行时直接填写结果表达式,不写
return。对象字面量外层加圆括号,避免被解释成代码块。
虽然运行时也能把部分裸名称先按 State、再按 Frame 查找,例如 affection + 1,文档示例统一写完整的 state.affection 或 frame.speaker,避免同名字段造成歧义。
在表达式中读取页面输入
输入引用仍写在双花括号中。运行时会先把它替换成字符串,再计算表达式:Number(),否则 "8" + 1 会得到 "81"。
指令参数怎样进入规则
选择“解析指令”后,触发条件区域会列出每个参数的引用方式。例如指令“台词”定义:- 单行参数:
角色、背景、立绘; - 跨行参数:
内容。
$。同一指令内不能重名。
修改参数名后,旧规则中的 $旧名称 不会自动变成 $新名称。
四种变量操作
变量目标必须以frame. 或 state. 开头。
set
设置文字:append
把同一帧中的多条“选项”指令保存成数组:append 不会执行。先在“进入帧”规则中把瞬态列表设为 [],再追加内容。
merge
把部分字段合并进对象:merge 只合并对象的第一层,不会递归合并内部对象。
remove
从数组删除一个基本值:id 等于 1 的项目。
不要直接写数组下标路径
不要把目标写成state.items[0].done。当前规则写入器不把数组下标当作可编辑路径。需要修改数组内部某项时,使用 set 替换整个数组:
从页面元素读取值
“用户交互”规则先用 Element Selector 找到触发元素,再按值中的输入引用采集内容。
例如页面代码提供:
.story-choice,触发 AI 回复的“自定义用户输入”填:
执行条件
“+ 执行条件”只控制它所在的那一个动作。条件左侧虽然标为“变量名”,实际可以填写变量或表达式;右侧仍可选择“宏嵌入文本”或“动态表达式”。
布尔值和数字比较时,右侧使用动态表达式:
true,比较的是字符串,不是布尔值。
动作顺序
一条规则中的动作从上到下执行,后面的表达式可以读取前面刚写入的值。例如:- 更新
state.selected_route; - 跳转到目标页面节点;
- 触发 AI 回复。