跳到主要内容

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)case1caseNDefault
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 ImageFound / Not found
Check RegionPassed / Not passed
Read TextHas text / No text
IfCondition true / false
CaptchaCaptcha solved / unsolved
其余一切Succeeded / Failed

这是在几步之前的检测上分支的方式,无需保持变量同步。

设置

设置类型范围备注
Condition type选择上述五种模式决定显示哪些其他字段
Conditions列表1–50 行Compare Values 模式
Logic选择and / or各行如何组合
Expressionstring≤ 1000 字符Expression 模式
Branches列表1–20Multiple Branches 模式
Text source节点引用或表达式Match Text 模式
Match mode选择contains, exact, startsWith, endsWith, regex, fuzzyMatch Text 模式
Values列表1–500Match Text 候选
Case sensitivebooleanMatch Text 模式
Fuzzy thresholdnumber0–1模糊匹配严格度
Source node + Outcome节点引用 + 选择Node outcome 模式

端口

端口取决于模式:

端口模式必接
True / FalseCompare Values, Expression, Node outcome两者都必接
Match / No matchMatch Text可选——未接路径优雅结束
case1…caseN / DefaultMultiple Branches可选
Fatal全部永不被走
为何有的模式必接两端口、有的不必

Compare/Expression/Node-outcome 是真正的二元决策——留一侧不接几乎总是错误,所以校验要求两者。

switch 的 case 或文本匹配分支不同:只接你在意的 case 是合法的创作选择,所以未接的 case 只是结束该路径。

基础示例

达到目标数就停:

  • Condition type:Expression
  • Expression:{{items_done}} >= {{max_per_trip}}
  • TrueStop: 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——重复而非一次性决定

相关页面