World of Warcraft Wiki
探索
首页
所有页面
社区页
交互式地图
最新博文
页面
最新页面
宏完全指南
World of Warcraft API
指令
魔兽世界接口函数(wow API)
人物
UI Beginners Guide
职业
最新博客
分类
含有损坏文件链接的页面
职业色
Inlinegfx
Wow-inline
隐藏分类
BlogListingPage
损坏的文件的链接的页面
社区
社区首页
社区中心
帮助中心
FANDOM
游戏
电影
电视
wiki
探索wiki
社区中心
创建wiki
尚未注册?
注册
登录
登录
注册
World of Warcraft Wiki
37
个页面
探索
首页
所有页面
社区页
交互式地图
最新博文
页面
最新页面
宏完全指南
World of Warcraft API
指令
魔兽世界接口函数(wow API)
人物
UI Beginners Guide
职业
最新博客
分类
含有损坏文件链接的页面
职业色
Inlinegfx
Wow-inline
隐藏分类
BlogListingPage
损坏的文件的链接的页面
社区
社区首页
社区中心
帮助中心
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
编辑“
宏完全指南
”(章节)
返回页面
编辑
可视化编辑器
查看历史
讨论 (0)
正在编辑
宏完全指南
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
==语法== 命令条件语是按什么规则生效的?恐怕要回答这个问题很容易引起混乱。所以,趁还没有正式开始讲,我先用一些现实生活的例子做类比。看不懂不要紧,这只是些概念,技术性的内容后面都还会再提到的。 ===条件语语法简介=== 所有的宏命令的基本工作方式是相同的:一个命令,后面带上一个或多个参数(取决于命令的要求,有些甚至不需要任何参数)。看下面这些例子: /cast 猛击 \___/ \___/ | | | 参数 | 命令 /petattack \_______/ \/ | | | 参数(为空) | 命令 /castsequence reset=target 献祭, 腐蚀术, 痛苦诅咒, 生命虹吸 \_________/ \_______________________________________/ | | 命令 参数 而命令条件语可以通过对一组条件进行的判断来选择命令的实际参数。首先,可以用分号分隔出若干个“若干组条件+参数”这样的子句,逻辑上,分号就相当于高级语言中的else或是elseif。条件的组数不定,也可以没有,同一组条件用一个方括号括在一起。而每组条件中有可以包含多个条件。就像这样: /命令 [一组条件] [另一组条件] 参数1; [又一组条件] 参数2; …… 前面的例子已经说明了,宏命令的解释过程是从左至右的。当一组条件被判定成立时,命令就会采用其对应的条件。如果某一个子句中不包含条件,那么就被无条件判定为成立。像/cast XXX这种简单的宏命令就可以理解为一个只有一个子句的宏,而这个子句又不包含条件。而如果一个宏的任何一组条件都不为真,那么它就完全不会执行。 ===条件语法=== 每组条件都是由逗号分隔的一些条件语组成的,各条件不分前后次序。逻辑上,[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语法=== 对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' ? ===参数为空=== 有些命令是可以没有参数的,这里就存在着一个陷阱。比如: /petattack [target=focus, harm]; 很多初学者一看,认为这个宏的含义应该就是判断焦点是否为敌对,如果是,就把宠物送上去咬。而实际上呢?让我们分析一下: /petattack [target=focus, harm] ; \________/ \______________/ V V V | | | | | 命令 条件语1 | | 参数2 (为空) | | | 条件语2(为空) | 参数1 (为空) 现在看出来了吧?由于那个分号的存在,这个语句实际上包含两个子句,而一个条件语为空的子句是被当作条件成立处理的,因此即使前面的条件语1不成立,也会执行一个/petattack。 ===条件为空=== 有时我们需要在特定条件下对特定目标施放技能,并在条件不成立的情况下按常规施放。这中效果可以通过使用一组空条件来获得。下面例子中的宏在执行时会对你鼠标指向的友方单位施放圣光闪现。如果鼠标没有指向任何单位或者指向的目标不是友善的,那么就会按常规对当前目标施放,或者根据设置(如自动自我施法、自我施法功能键)对自己施放。 /cast [target=mouseover, help] [ ] 圣光闪现 ===[target=]条件语与命令参数=== 很多命令的参数是可以直接指定目标的。比如/target party1就可以把小队中第一个队友作为你的目标。而用/target [target=party1]的话,虽然看起来别扭,但是效果也是一样的。但是宏的设计者不希望我们根据一个单位的状态而对另一个单位执行动作,因此大多数情况下[target=]条件和命令参数只能有一个发生作用。例如: /target [target=focus, dead] party1 客户端会把party1直接忽略掉——因为你已经指定了[target=focus]。不过这种情况也有例外,就是个别命令拥有一个“特殊单位”(其实也就是该命令会影响的单位标志符)。见下表: 命令 特殊单位 /target target /focus focus /startattack target /petattack pettarget 当在[target=]中使用的是该命令的“特殊单位”时,命令执行目标不会被设置为该单位,而命令参数中指定的目标也不会被忽略。例如 /focus [target=focus, dead] [target=focus, noharm] target 由于focus是/focus命令的特殊单位,所以/focus的目标就不会被[target=focus]设置成焦点,而是target,即当前目标。如果没有指定target,/focus就相当于没有参数,同样是把当前目标设为焦点。
摘要:
请注意在World of Warcraft Wiki上的所有贡献都将依据CC-BY-SA进行发布。
取消
编辑帮助
(在新窗口中打开)
Follow on IG
TikTok
Join Fan Lab