脚本基础
循环与分支
说明 Blue 引擎脚本中常见的循环与分支控制写法,包括
说明
循环与分支用于控制一段逻辑要执行几次,以及在不同结果下进入哪一条分支。
需要批量处理、重复执行、按编号分支、按结果切换处理逻辑时,可先看这一页。
#FOR 循环
#FOR 用于重复执行一段脚本。
常见写法如下:
#FOR (D0 = 0, D0 < 10, D0 + 1)
#IF
TRUE
#ACT
SENDMSG 5 测试消息
#~FOR
这类结构通常包含三部分:
- 初始值
- 循环条件
- 每轮执行后的变化
FOR 下标
循环过程中,可通过 <$LoopCursor> 获取当前循环下标。
#SAY
当前循环下标:<$LoopCursor>
需要在循环里按序号处理内容、输出编号或拼接结果时,可直接使用这个值。
BREAKLOOP 跳出当前 FOR
BREAKLOOP 用于提前结束当前 #FOR 循环。
#FOR (D0 = 0, D0 < 10, D0 + 1)
#IF
SMALL M次数 1
#ACT
BREAKLOOP
#~FOR
需要在某个条件成立后停止当前循环时,应使用 BREAKLOOP。
这类写法表示“当前次数已经不足,应直接跳出循环”。
BREAK 中止当前流程
BREAK 用于中止当前流程。
这一类写法常见于:
- 前置条件不满足时直接结束
- 命中某个分支后不再继续往下执行
- 防止后面的脚本被继续触发
BREAK 和 BREAKLOOP 不同:
BREAKLOOP只结束当前循环BREAK会直接中止当前流程
#CASE 分支
#CASE 适合根据整数结果进入不同分支。
常见写法如下:
#CASE(M结果)
#1:
#ACT
GOTO @Result1
#2:
#ACT
GOTO @Result2
#~CASE
这类写法适合处理:
- 不同编号进入不同标签
- 不同结果执行不同逻辑
- 多个固定值对应不同处理方式
#IF 和 #CASE 的区别
两者都可以做分支,但适用场景不同:
| 写法 | 适用场景 |
|---|---|
#IF | 条件判断、范围判断、真假判断 |
#CASE | 固定编号分支、固定结果分支 |
需要判断“大于、小于、等于、是否满足条件”时,优先使用 #IF。
需要根据 1、2、3 这类固定结果跳不同分支时,优先使用 #CASE。
在 #IF 里,循环页沿用条件判断页里的关键字比较写法:
SMALL M剩余次数 1
需要范围判断时,继续用 #IF;需要按固定结果拆分多个出口时,再切到 #CASE。
常见场景
批量执行固定次数
#FOR (D0 = 0, D0 < 3, D0 + 1)
#ACT
SENDMSG 5 第 <$LoopCursor> 次执行
#~FOR
这类写法用于固定执行多次相同逻辑。
条件满足后停止循环
#FOR (D0 = 0, D0 < 10, D0 + 1)
#IF
SMALL M剩余次数 1
#ACT
BREAKLOOP
#ELSEACT
DEC M剩余次数
#~FOR
这类写法用于循环执行到某个条件成立后停止。
根据结果跳不同标签
#CASE(M结果)
#1:
#ACT
GOTO @战士奖励
#2:
#ACT
GOTO @法师奖励
#3:
#ACT
GOTO @道士奖励
#~CASE
这类写法适合把多个固定分支拆开处理。
使用建议
- 重复逻辑达到
3次以上时,可优先考虑是否应改成#FOR。 - 循环体里要写退出条件,避免把无效逻辑重复执行过多次。
- 只结束当前循环时使用
BREAKLOOP,直接结束当前流程时使用BREAK。 - 分支结果是固定编号时,优先考虑
#CASE;仍然需要范围判断时,继续使用#IF。 - 循环和分支嵌套开始变多时,应及时拆标签,避免单段脚本过长。
