当前位置:首页 > 魔兽世界宏命令完全教程(考格威尔版)
/petdefensive /petfollow /petpassive /petstay /startattack /stopattack /stopcasting /stopmacro /swapactionbar /target
/targetenemy /targetfriend /targetlasttarget /targetparty /targetraid /use
/userandom
注1:#show和#showtooltip不是真正意义上的安全化命令,但是它和/use以及/cast的内部机制相仿。
注2:/equip和/equipslot逻辑上也不算是安全化命令,因为它们的功能是可以通过插件和脚本实现的。
当然,如果你希望在常规命令中使用命令条件语,就需要安装专门的插件。MacroTalk,这是我的一个作品,通过在非安全化命令前添加/opt,然后在/opt中处理各类条件来实现对不同命令的调用(当然只能是非安全化命令)。最新版的SuperMacro中应该也有类似的功能。
3. [target=]条件语
该条件语使得宏命令除了可以对条件进行判断外,还可以设置动作的目标。例如,下面这个宏运行时,无论当前目标是谁,玩家只会给自己绑绷带:
/use [target=player] 厚灵纹绷带 Target条件语在指定动作目标的同时,也指定了进行条件判断的目标。下面这个垃圾宏是一个纯教学例子,看我的说明: /cast [help] [target=targettarget, help] [target=player] 快速治疗 这个宏运行的时候,首先会检查[help]条件。如果条件为真,那么就开始吟唱快速治疗。否则就跳至第二个条件,[target=targettarget, help]。此时,判断目标和技能目标都被设定为你当前目标的目标,然后进行help条件判断。如果条件成立就对你当前目标的目标施放快速治疗,否则再跳至第三个条件。而第三个条件总是成立的,所做的只是把你自己当作施法目标。
4. 语法
命令条件语是按什么规则生效的?恐怕要回答这个问题很容易引起混乱。所以,趁还没有正式开始讲,我先用一些现实生活的例子做类比。看不懂不要紧,这只是些概念,技术性的内容后面都还会再提到的。
i.条件语语法简介
所有的宏命令的基本工作方式是相同的:一个命令,后面带上一个或多个参数(取决于命令的要求,有些甚至不需要任何参数)。看下面这些例子:
/cast 猛击 \\___/ \\___/ | | | 参数 | 命令 /petattack \\_______/ \\/ | | | 参数(为空) | 命令 /castsequence reset=target 献祭, 腐蚀术, 痛苦诅咒, 生命虹吸 \\_________/ \\_______________________________________/ | | 命令 参数 而命令条件语可以通过对一组条件进行的判断来选择命令的实际参数。首先,可以用分号分隔出若干个“若干组条件+参数”这样的子句,逻辑上,分号就相当于高级语言中的else或是elseif。条件的组数不定,也可以没有,同一组条件用一个方括号括在一起。而每组条件中有可以包含多个条件。就像这样: /命令 [一组条件] [另一组条件] 参数1; [又一组条件] 参数2; ?? 前面的例子已经说明了,宏命令的解释过程是从左至右的。当一组条件被判定成立时,命令就会采用其对应的条件。如果某一个子句中不包含条件,那么就被无条件判定为成立。像/cast XXX这种简单的宏命令就可以理解为一个只有一个子句的宏,而这个子句又不包含条件。而如果一个宏的任何一组条件都不为真,那么它就完全不会执行。
ii.条件语法
每组条件都是由逗号分隔的一些条件语组成的,各条件不分前后次序。逻辑上,[target=]总是先发生作用,然后其他的条件才进行判定。逗号在这里可以理解为“并且”,也就是说各条件简是逻辑“与”的关系。比如[help, nodead, target=focus]的含义就是:我的焦点是友善的,并且是只活的。
注意:条件是对大小写敏感的,如果你把[help]写成了[Help],宏运行时会报错。 条件中有组合式的使用方式,比如nodead,同样对于help,你可以用nohelp表示相反的条件。但是nohelp不等于harm:首先,help和harm都要求目标存在才有可能成立;其次,有些目标,比如中立阵营NPC、非战斗宠物或者护送任务NPC等,既不算help,也不算harm。
还有些条件可以指定一些特定的参数。比如[stance],姿态,单独使用时表示“在任一姿态中”(显然这对战士来说是废话一句)。如果给它加上参数,就可以指定在某个姿态下,格式是在条件语后写上冒号(:),然后后面写上参数,每个参数间用斜线(/)分隔。综上所述,一个条件语的完整格式如下(<>表示其中的部分是可选的): [
THEN 用盾击 ELSE 切换防御姿态 注意:“no”前缀是对整个条件和所有参数的修饰,即把原来的真变为假,假变为真。比如[nostance:1/2]表示“不在姿态1也不在姿态2中”。
iii.完整的EBNF语法
对EBNF规范很熟悉的人,以上内容可以概括为:
command = \command-verb = ? any secure command word ? command-object = { condition } parameters parameters = ? anything which may be passed to the command word ? condition = \condition-phrase = [ \option-argument = ? any one-word option, such as 'shift, 'ctrl', 'target', '1', '2' ? iv.参数为空
有些命令是可以没有参数的,这里就存在着一个陷阱。比如: /petattack [target=focus, harm]; 很多初学者一看,认为这个宏的含义应该就是判断焦点是否为敌对,如果是,就把宠物送上去咬。而实际上呢?让我们分析一下:
/petattack [target=focus, harm] ; \\________/ \\______________/ V V V | | | | | 命令 条件语1 | | 参数2 (为空) | | | 条件语2(为空) | 参数1 (为空) 现在看出来了吧?由于那个分号的存在,这个语句实际上包含两个子句,而一个条件语为空的子句是被当作条件成立处理的,因此即使前面的条件语1不成立,也会执行一个/petattack。
v.条件为空
有时我们需要在特定条件下对特定目标施放技能,并在条件不成立的情况下按常规施放。这中效果可以通过使用一组空条件来获得。下面例子中的宏在执行时会对你鼠标指向的友方单位施放圣光闪现。如果鼠标没有指向任何单位或者指向的目标不是友善的,那么就会按常规对当前目标施放,或者根据设置(如自动自我施法、自我施法功能键)对自己施放。 /cast [target=mouseover, help] [ ] 圣光闪现 vi.[target=]条件语与命令参数
很多命令的参数是可以直接指定目标的。比如/target party1就可以把小队中第一个队友作为你的目标。而用/target [target=party1]的话,虽然看起来别扭,但是效果也是一样的。但是宏的设计者不希望我们根据一个单位的状态而对另一个单位执行动作,因此大多数情况下[target=]条件和命令参数只能有一个发生作用。例如: /target [target=focus, dead] party1 客户端会把party1直接忽略掉——因为你已经指定了[target=focus]。不过这种情况也有例外,就是个别命令拥有一个“特殊单位”(其实也就是该命令会影响的单位标志符)。见下表:
命令
特殊单位
/target /focus /startattack /petattack target focus target pettarget 当在[target=]中使用的是该命令的“特殊单位”时,命令执行目标不会被设置为该单位,而命令参数中指定的目标也不会被忽略。例如
/focus [target=focus, dead] [target=focus, noharm] target 由于focus是/focus命令的特殊单位,所以/focus的目标就不会被[target=focus]设置成焦点,而是target,即当前目标。如果没有指定target,/focus就相当于没有参数,同样是把当前目标设为焦点。
5. 命令条件语
下面给出一张条件总表,每一个条件在后面我都会再给出更详细的介绍。
i.总表
WOW2.0在对宏命令系统的更新中,宗旨就是把玩家从按“一键万能宏”按到手抽筋的状态中“解脱”出来。不过有一些宏的用法是被官方认可了的,它们获得了“玻璃渣祝福”的效果——可以通过使用条件语来重现。
下面列出宏命令系统中支持的所有条件语。如果你需要的判断条件没有在此列出,那么就不可能通过该条件来执行安全化命令的动作。这是中央的死龟腚,谁都没办法,不过以后也有可能会再增加一些。
? help 目标可以接受增益法术 ? harm 目标可以受到攻击 ? exists 目标存在 ? dead 目标已经挂了 ? stance:0/1/2../n 玩家在某姿态下 ? stealth 玩家在潜行状态下 ? modifier:shift/ctrl/alt 某功能键被按下 ? button:1/…/5/<虚拟按键号> 宏通过某键点击执行 ? equipped:<装备类型> 玩家装备了某类型物品,参见《装备类型》 ? channeling:<法术名称> 玩家正在引导某法术 ? actionbar:1/…./6 当前技能栏为某动作栏 ? pet:<宠物名称或类型> 玩家当前宠物为某宠物 ? combat 玩家正在战斗状态 ? mounted 玩家在骑乘状态 ? swimming 玩家在游泳 ? flying 玩家在飞行状态 ? flyable 玩家正处在一个允许飞行的地界 ? indoors 玩家在室内 ? outdoors 玩家在户外 ? party 目标在玩家的小队中 ? raid 目标在玩家的小队或团队中 ? group:party/raid 玩家在某集体中(小队/团队)
ii.敌/友(help / harm)
没什么好说的,保留空地一块,等待补充。
共分享92篇相关文档