每组条件都是由逗号分隔的一些条件语组成的,各条件不分前后次序。逻辑上,[target=]总是先发生作用,然后其他的条件才进行判定。逗号在这里可以理解为“并且”,也就是说各条件简是逻辑“与”的关系。比如[help, nodead, target=focus]的含义就是:我的焦点是友善的,并且是只活的。
注意:条件是对大小写敏感的,如果你把[help]写成了[Help],宏运行时会报错。
条件中有组合式的使用方式,比如nodead,同样对于help,你可以用nohelp表示相反的条件。但是nohelp不等于harm:首先,help和harm都要求目标存在才有可能成立;其次,有些目标,比如中立阵营NPC、非战斗宠物或者护送任务NPC等,既不算help,也不算harm。
还有些条件可以指定一些特定的参数。比如[stance],姿态,单独使用时表示“在任一姿态中”(显然这对战士来说是废话一句)。如果给它加上参数,就可以指定在某个姿态下,格式是在条件语后写上冒号(:),然后后面写上参数,每个参数间用斜线(/)分隔。综上所述,一个条件语的完整格式如下(<>表示其中的部分是可选的):
[<no>condition<:parameter</parameter</parameter<…>>>>]
下面举个例子,如果在战斗或防御姿态施放盾击,否则转入防御姿态:
/cast [stance:1/2] 盾击; 防御姿态
这个宏用伪代码写的话就是:
IF 当前在姿态1或姿态2
THEN 用盾击
ELSE 切换防御姿态
注意:“no”前缀是对整个条件和所有参数的修饰,即把原来的真变为假,假变为真。比如[nostance:1/2]表示“不在姿态1也不在姿态2中”。
对EBNF规范很熟悉的人,以上内容可以概括为:
command = "/", command-verb, [ {command-object, ";" } command-object] ]
command-verb = ? any secure command word ?
command-object = { condition } parameters
parameters = ? anything which may be passed to the command word ?
condition = "[" condition-phrase { "," condition-phrase } "]"
condition-phrase = [ "no" ], option-word, [ ":" option-argument { "/" option-argument } ]
option-argument = ? any one-word option, such as 'shift, 'ctrl', 'target', '1', '2' ?