变量、函数与流程控制

← 返回所有分类
变量是什么?怎么在节点中使用变量?通用

变量就是一个"有名字的盒子",用来存储运行时的数据(如图像查找的结果坐标、OCR 识别的文字、计数器等)。

使用步骤:

  1. 在设置变量节点的"变量名"框里直接输入名字(如 count),就得到一个局部变量,不需要预先定义
  2. 需要跨动作共享时,先在"变量"标签页(Ctrl+3)定义,再回到"设置变量"节点点变量名框右侧的 ◎ 选中它,就得到一个全局变量
  3. 在下游节点中读取变量:条件判断里写表达式引用,或"输入文本"节点中插入变量值

局部变量 vs 全局变量:

  • 局部变量(默认)— 直接输入名字即可。它属于本次运行,每个动作各自独立,多个动作同时运行也互不干扰;同一次运行内可以跨函数访问
  • 全局变量 — 用 ◎ 选"变量"标签页里的项,跨动作共享,用于动作之间传递数据

没有"作用域 local/global"开关,作用域由是否用 ◎ 选 Tab 变量决定。变量名不选、也不与 Tab 变量同名时,一律按局部变量处理(这样旧脚本打开运行的行为不变)。

典型用法:

  • 图像查找的结果自动存入变量(如 result),包含坐标和置信度
  • 用"设置变量"节点做计数器:每循环一次 count + 1
  • 在"输入文本"节点中引用变量,实现动态输入

注意:变量不做持久化——每次运行都会重新取"变量"标签页里设的默认值,所以不能靠变量实现"累计次数""今日已领奖"这类跨运行的统计,需要的话请用自定义代码节点读写文件。

"条件判断"节点怎么用?成功时/失败时/自定义条件是什么?通用

条件判断让脚本"根据情况走不同的路"。每个节点都可以设置执行条件(在节点配置底部):

  • 无条件(默认)— 不管前面怎样都执行
  • 成功时 — 只有上一个节点执行成功才执行。如:图像找到了 → 才点击
  • 失败时 — 只有上一个节点执行失败才执行。如:图像没找到 → 走备选方案
  • 自定义条件 — 写一个表达式,为 true 才执行。如:count >= 5(循环超过5次才执行)

"成功/失败"怎么定义?

  • 图像查找:找到 = 成功,没找到 = 失败
  • OCR 比对:文字一致 = 成功,不一致 = 失败
  • 等待变化:检测到变化 = 成功,超时 = 失败
  • 调用函数:函数返回 false = 失败,返回 true/其他值,或没返回(内部无失败)= 成功
  • 等待/点击/日志:永远成功
"循环"节点有几种模式?怎么用?通用

循环节点是一个容器,你把其他节点拖进去,它们就会被重复执行。三种模式:

  • 固定次数 — 循环 N 次。如:点击 10 次 → 设次数为 10。
  • 无限循环 — 永远重复,直到脚本被手动停止。如:持续监控血条、持续刷怪。
  • 遍历数组 — 依次取出数组中的每个元素执行。如:依次点击列表中的每个按钮。

使用方法:

  1. 添加"循环"节点
  2. 双击配置,选择循环模式和参数
  3. 把要重复执行的节点拖入循环容器内(视觉上会缩进显示)

提示:无限循环中建议加一个短"等待"节点(如 100ms),避免 CPU 占用过高。

函数是什么?什么时候需要把一段流程做成函数?通用

函数是把一组节点"打包"成一个可复用的模块。定义一次,可以在主流程中多次调用。

什么时候用?

  • 同一段操作在流程中出现了 2 次以上 → 做成函数,避免重复
  • 一段操作有独立含义(如"回城""补充弹药""翻页")→ 做成函数让流程更清晰
  • 想从自定义动作中调用一段流程 → 必须先做成函数

使用方法:

  1. 在"函数"标签页(Ctrl+5)中创建函数,编辑其内部节点
  2. 可以给函数填一段说明,会显示在函数列表里,也会作为"调用函数"节点的标题,方便在长流程里分辨相近的函数
  3. 在主流程中添加"调用函数"节点,选择要调用的函数
  4. 函数可以带参数,调用时传入不同的值
  5. 需要返回值时,在函数内添加"返回"节点(流程控制分组);新建的"调用函数"节点会自动带一个结果变量 call_result 接收返回值,可在配置里改名,清空则表示不接收

函数之间也可以互相调用。函数内可以直接读写本次运行的局部变量(同一次运行内跨函数可见);需要跨动作共享时才用全局变量。

函数的"返回"节点怎么用?return false 是什么意思?通用

函数需要把结果交回给调用方时,在函数内加一个返回节点(流程控制分组),在"返回值"里填变量名、表达式或字面量;留空则返回 nil。

返回值约定:

  • return false — 业务失败:脚本没报错,但事情没办成(目标没出现、奖励没领到)。任务判为失败,不计完成次数,并按任务设置自动重试
  • return true 或其他值 — 成功
  • 不加"返回"节点(返回 nil)— 维持原行为,按技术层判定(没报错就算成功)

这条约定只对任务直接调用的那个函数(入口函数)生效,用来把"技术成功但业务失败"反馈给任务系统。

两个注意点:

  • "返回"节点必须放在所在块(函数体 / 循环 / 条件)的最后一条,放在它后面的节点永远不会执行,代码预览里能看到生成的 Lua
  • 返回值只在同一个函数内可见(同函数内的后续节点用那个变量名引用)。要传给别的函数或别的动作,请用全局变量
表达式是什么?哪些地方可以用表达式?通用

表达式是一段 Lua 代码片段,运行后产生一个值。让你可以做计算、拼接、判断等灵活操作。

可以用表达式的地方:

  • 条件判断的自定义条件:count >= 10 and hp < 30
  • 设置变量时勾选"表达式":count + 1、name .. "_done"
  • 日志输出时勾选"表达式":"第" .. count .. "次循环"
  • 自定义代码节点(Pro)里可以写任意 Lua,需要随机等待等动态值时用 wait(math.random(500, 1500))

注意:等待节点的时间是固定毫秒数,不支持表达式。

常用语法:

  • 数字运算:a + b、a * 2、a % 3
  • 字符串拼接:"hello" .. name
  • 比较:x > 100、name == "test"
  • 逻辑:a and b、a or b、not a

不需要勾选"表达式"时,输入框的内容会被当作纯文本/数字处理。