条件判断
基本结构
最常见的写法如下:
#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 B | A < B |
LARGE A B | A > B |
EQUAL A B | A = 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。
