脚本基础

条件判断

说明 Blue 引擎脚本中的判断结构、分支写法和常用比较命令,作为流程控制的核心基础之一。

基本结构

最常见的写法如下:

#IF
;这里写判断条件
#ACT
;这里写条件满足后要执行的内容

条件成立时,会继续执行后面的命令;条件不成立时,这一段通常不会继续往下执行。

多条件判断

#IF(X) 用于多条件判断。

括号里的数字表示:下面连续写出的多个条件里,只要满足 X 条,这个 #IF 就成立。

#IF(1)

#IF(1) 表示多个条件里只要满足 1 条即可成立。

#IF(1)
EQUAL M职业 1
EQUAL M职业 2
EQUAL M职业 3
#ACT
GOTO @职业入口

这类写法适合处理“多个条件命中任意一个就继续执行”的场景。

#IF(2)

#IF(2) 表示多个条件里至少满足 2 条才成立。

#IF(2)
CHECK [101] 1
CHECK [102] 1
CHECK [103] 1
#ACT
MESSAGEBOX 已满足两项条件

这类写法适合处理“多项条件至少达标若干项”的场景。

使用这类写法时,应把同一组判断条件连续写在同一个 #IF(X) 下面,不要把无关条件混进来。

常见分支结构

条件判断通常会和 #ELSEIF、#ELSEACT、#ELSESAY 一起使用。

例如:

#IF
LARGE M剩余次数 0
#ACT
DEC M剩余次数
MAPMOVE 3 330 330
#ELSESAY
剩余次数不足

这类结构适合处理“满足条件就执行,不满足就提示”的场景。

判断结果取反

在 #IF 里,如果你要判断“条件不成立”时再继续执行,可以在命令前加 !。

这样写以后,原本成立的条件会改为“不成立时才算成立”。

例如:

#IF
!Random 10
#ACT
SendMsg 5 "这次随机判定未命中。"

这类写法适合处理“没有命中就继续执行”“不满足条件才进入下一步”这类反向判断场景。

! 应直接写在 #IF 下的命令前面,不要写到参数里,也不要放到 #ACT、#ELSEACT 这类执行块中。

#ACT、#ELSEACT 和 #ELSESAY 怎么分

在条件分支里,这几个块最容易混:

  • #ACT:条件成立后要执行的动作
  • #ELSEACT:条件不成立后,仍然要继续执行的动作
  • #ELSESAY:条件不成立后,直接给玩家显示提示

如果当前分支的目标是“做事”,优先写 #ACT 或 #ELSEACT;如果当前分支的目标是“告诉玩家为什么没继续执行”,优先写 #ELSESAY。

如果只是拦截条件不满足并提示原因,实际业务里也经常直接在 #ACT 或 #ELSEACT 分支中使用 MessageBox、SENDMSG 这类轻提示,而不是专门切到一页新的 #SAY 页面。

比较命令

这一页主要使用四类比较命令:SMALL、LARGE、EQUAL、COMPVAL。

SMALL

SMALL 用于判断左侧变量是否小于右侧值。

#IF
SMALL M剩余次数 1
#ACT
MessageBox 剩余次数不足

需要判断“次数是否已经不足”“值是否低于下限”时,可优先使用这条写法。

LARGE

LARGE 用于判断左侧变量是否大于右侧值。

#IF
LARGE M剩余次数 0
#ACT
DEC M剩余次数

需要判断“是否还有次数”“当前值是否高于某个门槛”时,可优先使用这条写法。

EQUAL

EQUAL 用于判断左侧变量是否等于右侧值。

#IF
EQUAL M剩余次数 1
#ACT
GOTO @Success

需要根据固定值进入某个分支时,可使用这条写法。

这组三个关键字比较命令的含义如下:

写法含义
SMALL A BA < B
LARGE A BA > B
EQUAL A BA = B

COMPVAL 多功能比较

COMPVAL 适合处理更灵活的比较,尤其是字符串比较和部分扩展比较。

#IF
COMPVAL <$TARINFO_FNAME> = 蜈蚣

这类写法常用于:

  • 判断字符串是否相等
  • 判断名称是否匹配
  • 判断结果是否以某段字符开头或结尾

COMPVAL 的常见运算符如下:

运算符作用
?大于等于
=等于
!不等于
>大于
<小于
&与运算
`是否以某个字符结尾
^是否以某个字符开头

示例:

#IF
COMPVAL <$USERNAME> ^ 测试
#ACT
SENDMSG 5 名称以前缀“测试”开头
#IF
COMPVAL <$TARINFO_FNAME> ` 首领
#ACT
SENDMSG 5 目标名称以后缀“首领”结尾

?、!、&、^、` 这类扩展运算符,优先按 COMPVAL 的参数说明来写,不要当成所有判断命令都通用。

使用建议

  • 数值大小比较优先使用 SMALL、LARGE、EQUAL。
  • 字符串匹配、前后缀判断、扩展比较优先使用 COMPVAL。
  • 条件成立后执行什么、条件不成立后提示什么,要先把分支方向写清楚,再补 #ACT 或 #ELSESAY。

相关阅读