If(如果)
做一个决定,把流程送上不同的路。
If 提供五种写同类条件的方式,所以几乎任何"如果这样、就那样"的分支都是一个节点。它们都经同一个表达式引擎解析,所以无代码与高级模式永不冲突。
用途
按条件为流程分支——值比较、原始表达式、多路 switch、OCR 文本匹配,或上游节点的真实结果。
何时用
- 按变量在两条路间选择。
- 分派到多个例程之一(switch/case)。
- 对 OCR 读到的内容作出反应。
- 对更早的检测是否找到东西作出反应。
何时不用
- 对你正要运行的检测立刻分支。 Find Image 已有 Success 和 Failure 端口——其后的 If 多余。
- 随机选路——用 Branch。
- 重复某物——用 Loop。
五种条件模式
| 模式 | 你写 | 端口 |
|---|---|---|
| Compare Values | 无代码构建器:值、运算符、值 | True / False |
| Expression | 原始 {{}} 公式 | True / False |
| Multiple Branches | 每分支一个表达式(switch/case) | case1…caseN、Default |
| Match Text (OCR) | 候选字符串列表与匹配模式 | Match / No match |
| Node outcome | 一个上游节点与一个通俗结果 | True / False |
Compare Values
每行是 Value A、运算符、Value B。每一侧是变量或固定值,比较前可施一步算术——所以 CASTLE_X > CURRENT_X - 5 无需写公式即可表达。
运算符:=、!=、>、>=、<、<=、Contains、Not Contains、Starts With、Ends With、Is Empty、Is Not Empty。
各行以单个 AND(全通过)或 OR(任一通过)组合。
Expression
必须求值为布尔的原始表达式:
{{gem_farmed_trip}} >= {{max_gem_per_trip}}
{{slot_1_current}} == {{slot_1_max}} || {{slot_2_current}} == {{slot_2_max}}
{{gold}} 是数字,不是条件。{{gold}} > 100 是条件。非布尔表达式路由 Fatal。
Multiple Branches(switch/case)
至多 20 个分支的有序列表,每分支一个表达式加可选标签。第一个表达式为真的分支走它的 Case 端口;都不匹配则走 Default。
分支自上而下尝试,把最具体的条件放前面。
Match Text (OCR)
从上游 Read Text 节点(或表达式)读文本,在一种匹配模式下与至多 500 个候选值测试:Contains、Exact、Starts With、Ends With、Regex 或 Fuzzy。任一值匹配即路由 Match。
500 值上限意味着一个节点可一次筛选大量已知消息。
Node outcome
通过通俗结果检查上游节点的真实执行结果,而非在内部字段名上写原始表达式。
| 源节点类型 | 结果 |
|---|---|
| Find Image | Found / Not found |
| Check Region | Passed / Not passed |
| Read Text | Has text / No text |
| If | Condition true / false |
| Captcha | Captcha solved / unsolved |
| 其余一切 | Succeeded / Failed |
这是在几步之前的检测上分支的方式,无需保持变量同步。
设置
| 设置 | 类型 | 范围 | 备注 |
|---|---|---|---|
| Condition type | 选择 | 上述五种模式 | 决定显示哪些其他字段 |
| Conditions | 列表 | 1–50 行 | Compare Values 模式 |
| Logic | 选择 | and / or | 各行如何组合 |
| Expression | string | ≤ 1000 字符 | Expression 模式 |
| Branches | 列表 | 1–20 | Multiple Branches 模式 |
| Text source | 节点引用或表达式 | — | Match Text 模式 |
| Match mode | 选择 | contains, exact, startsWith, endsWith, regex, fuzzy | Match Text 模式 |
| Values | 列表 | 1–500 | Match Text 候选 |
| Case sensitive | boolean | — | Match Text 模式 |
| Fuzzy threshold | number | 0–1 | 模糊匹配严格度 |
| Source node + Outcome | 节点引用 + 选择 | — | Node outcome 模式 |
端口
端口取决于模式:
| 端口 | 模式 | 必接 |
|---|---|---|
| True / False | Compare Values, Expression, Node outcome | 两者都必接 |
| Match / No match | Match Text | 可选——未接路径优雅结束 |
| case1…caseN / Default | Multiple Branches | 可选 |
| Fatal | 全部 | 永不被走 |
Compare/Expression/Node-outcome 是真正的二元决策——留一侧不接几乎总是错误,所以校验要求两者。
switch 的 case 或文本匹配分支不同:只接你在意的 case 是合法的创作选择,所以未接的 case 只是结束该路径。
基础示例
达到目标数就停:
- Condition type:Expression
- Expression:
{{items_done}} >= {{max_per_trip}} - True →
Stop: success - False → 继续
实际示例——用 switch 分派
一个变量持有更早选定的方向;一个节点路由到四种移动:
总给 switch 一个 Default。它是接住你没想到的情况的分支。
高级示例——在更早的检测上分支
十个节点之前,一个 Find Image 检查了弹窗是否在场。现在你需要那个答案:
- Condition type:Node outcome
- Source node:那个 Find Image
- Outcome:Not found
- True → 跳过关闭例程
- False → 关闭弹窗
无需维护变量,无与真实结果失同步的风险。
最佳实践
- 除非需要公式,用 Compare Values。 它无需语法,且选择器显示变量类型。
- 从下拉选变量而非手打名字——它显示类型,防"拿文本比数字"的 bug。
- 总给 switch 加 Default。
- switch 分支最具体的排前面。
- 优先 Node outcome 而非把结果镜像进变量。
- True 和 False 都接。 它们必接是有原因的。
性能笔记
- If 是纯计算——不抓帧、不输入。几乎免费。
- 永不为"减少 If"重构图;可读性远胜于其中的纳秒。
- 筛 500 候选的 Match Text 节点仍便宜于一次 OCR 读取,所以把候选合进一个节点是对的。
- Node outcome 读一个已记录的结果;它不重跑源节点。
内存笔记
- 求值不分配任何有意义的东西。
- Node-outcome 模式从运行的
nodeResults读,那里已持有每个执行过节点的结果——所以它不增加存储。
常见错误
| 错误 | 后果 | 修复 |
|---|---|---|
| 留 False 不接 | 校验错误(Compare/Expression/Outcome) | 两者都接 |
| 非布尔表达式 | Fatal | 比较它:{{gold}} > 100 |
| Node outcome 在源运行前 | Fatal | 同一分支上排对顺序 |
| 拿 OCR 文本当数字比 | 比较悄悄失败 | Read Text 用 Number 类型,或用 Variable 转换 |
| switch 无 Default | 不匹配的输入结束路径 | 加 Default |
| switch 分支顺序错 | 一般 case 遮住具体 case | 最具体的排前 |
故障排查
节点走 Fatal。 条件为空、非布尔、引用未知结果,或源节点未在此路径执行。
数值比较从不触发。 值是字符串。把 Read Text 类型设为 Number。
取了错误的 switch case。 分支自上而下求值,第一个为真者胜。把具体 case 排在一般 case 前。
Match Text 分支从不运行。 查大小写敏感和匹配模式。模糊模式还取决于阈值。
FAQ
最多几个 switch 分支? 20。
Match Text 最多几个候选? 500。
能在 Compare Values 里混用 AND 和 OR 吗? 一个节点里不能——各行共用一个 AND/OR。用 Expression,或接两个 If。
删一个 switch 分支会弄断接线吗? 尾部端口被移除,编辑器剪掉它的孤儿连线。
相关节点
- Branch——随机选择而非条件
- Variable——计算你比较的值
- Read Text——为 Match Text 模式提供文本
- Find Image——为 Node outcome 模式提供结果
- Loop——重复而非一次性决定