主题:个人总结的CWOW2.0宏编辑大众教程
说明:本教程只讲解动作指令和条件判定语句,不包括条件引用(例如对话判定、识别)部分。
全教程共分三篇:第一篇讲解2.0版本宏(以下简称“2宏”)的构成,包括宏的格式,宏的意义以及可实现和不可实现的功能等等;第二篇将详细介绍2宏的指令分类及各指令的意义及经典实例;第三篇将针对一些特殊的指令及参数进行一些实例讲解,还将列出一些可引用的宏参数代码。
第一篇:原来这就是2宏
对于宏的定义我就不多说了,玩过WOW的玩家都知道个大概。我主要说说2宏与1.0版本的宏之间的区别和共性,也就是说2宏现在能做什么,不能做什么。
首先说系统对宏的执行判定改变。在1.0时代,系统对宏指令的执行判定规则是“顺序平行”。也就是说,无论你写多少条指令,系统都会按照宏里所编写的指令顺序平行的执行,此判定方式的结果就是多条平行指令将按从上到下的顺序执行,直到有某一指令执行成功或者无任何指令执行成功。举个例子,经典的BWL红龙MT傻瓜宏:
/cast 英勇打击
/cast 盾牌猛击
/cast 复仇
/cast 破甲
此宏在1.0时代执行的效果是:连续点击宏时,不断的施放英勇打击,有盾牌猛击施放盾牌猛击,无盾牌猛击施放复仇,无盾牌猛击也无复仇则施放破甲。也就是从上到下,有什么技能出什么技能,上一个技能无法使用就出下一个技能。
到了2.0时代,系统对宏的执行判定完全改变了,其规则是“平行同类优先”。简单的说,就是无论你写多少条指令,系统都将同时对所有指令进行执行,但同类指令会优先执行最上面的。此结果将导致同类的动作指令中,只有一个能被系统执行,其他的都会被屏蔽掉。这也就是所谓的“有公共CD技能无法实现一宏施放”。虽然这一改动将导致以往的傻瓜逻辑宏无法实现,但也增加了同一宏的多判定执行的可能,也就出现了现在按alt、shift、ctrl以至鼠标左右中键执行不同指令的判定(SS一键三吸的宏没了,可是出现了一键六招,福兮祸兮)。
然后说系统对数值状态逻辑判定的改变。1.0时代,游戏支持宏语句对任意目标某一属性和状态的数值调用,也就是说可根据某单位的某一数值信息(血量,蓝量,能量,怒气以至连击点数)来进行指令的执行判定。到了2.0时代,系统则关闭了此功能,只向UI端口开放,而且封闭了非被动状态的属性判定调用,也就是BUFF和DOT的判定。于是SS三吸、战士斩杀、盗贼冷剔、猎人双钉子、牧师快速罩等等一系列宏就没了,经典的一键解业变成了打地鼠。不过无论怎么改,去了旧的也才会来新的。2宏的命令跟1.0时代相比,更加简单易懂了,编写起来也容易了很多。
最后说说2宏的格式。这里就不再与1.0比较了,没有实际意义。直接说明2宏的格式构成。其基本构成方式为:
/<动作指令> [<条件指令A1>,<条件指令A2>,<条件指令A3>,……] <法术A(物品A)>; [<条件指令B1>,<条件指令B2>,<条件指令B3>,……] <法术B(物品B)>; [<条件指令C1>,<条件指令C2>,<条件指令C3>,……] <法术C(物品C)>;……宏命令中[]以内的“,”表示条件指令的并列关系,也就是“并且”,与其对应的是“/”,意思是“或者”。不同法术间的“;”表示选择关系,也就是“否则”,与其有相同用法但意义不同的是“,”意思是“然后”,这个用在特殊的动作指令宏里,后面会详细讲到。
对于此格式,有个特殊的说明,就是如果针对不同的选择性条件指令进行判断,但施放的是同一法术时,可以将[]条件指令进行直接并列,而无需再用“;”进行相同法术的分隔,当然,也可以重复写成标准格式。比如2.0的牧师一键治疗命令:
/cast [modifier:alt, target=player]治疗术;[help]治疗术;[help, target=targettarget]治疗术
也可写成:
/cast [modifier:alt, target=player][help][help, target=targettarget]治疗术
其执行效果均为:当目标友善,或者目标的目标友善,则施放治疗术,按住alt则对自己施放治疗术。
宏内<动作指令>与[<条件指令>]间一定要空格,但[<条件指令>]与[<条件指令>]之间,[<条件指令>]与<法术(物品)>间可不空格。
到目前为止,我还没有发现网上有对2宏指令进行分类整理的帖子,这也是让很多宏自编者觉得困惑的主要原因之一。根据我自己的归纳和整理,将所有的2宏指令分成三大类,每一大类中再分几个小类。具体说明和列举如下:
第一大类:动作指令,即宏命令里“/”后面的指令,是最一般的用来执行动作的命令。这是一条可执行的宏命令的躯体,可以说是一个宏语句想要实现的意图。又可分为直接动作指令和条件动作指令两类。
1、直接动作指令:也就是编写后可直接执行某一动作的动作指令,可追加条件指令,但后面不用再接法术名称或物品名称。此类指令很简单,包括:
/startattack 开始攻击
/stopattack 停止攻击
/stopcasting 停止施放(此动作指令后可追加某一法术名称,但实际意义不大,所以这里依然作为直接动作指令)
/stopmacro 停止喊话
/assist 协助
/focus 设置焦点目标
/clearfocus 清除焦点目标
/cleartarget 清除目标
/petattack 宠物攻击
/petfollow 宠物跟随
/petstay 宠物原地停留
/petpassive 宠物被动姿态
/petdefensive 宠物防御姿态
/petagressive 宠物主动姿态
/dismount 下马
这些都是直接动作指令,执行效果就是直接开始或终止某一动作或状态。后面均可追加条件指令,表示符合某一或某些条件时进行此动作。
2、条件动作指令:也就是需要接法术名称或者物品,并可依靠条件指令进行选择执行的一些动作指令。这类指令最常用到,也是使得宏多样化的基本指令。此类指令很常见,包括:
/cast 施放
/castrandom 随机施放
/castsequence 顺序施放
/cancelaura 取消BUFF
/cancelform 取消姿态
/equip 装备
/equipslot 装备到指定位置
/use 使用
/userandom 随机使用
/changeactionbar 切换动作条
/swapactionbar 顺序切换动作条
/petautocaston 宠物自动施放技能开
/petautocastoff 宠物自动施放技能关
/click 点击
这一类指令的共同特点就是后面必须追加某一法术,物品或者某一参数代码,当然也可以用条件指令来进行判断,表示符合某一或某些条件执行某一法术(使用某一物品或执行某一动作)。这类命令里有些需要使用参数代码,在最后我会给出常用的参数代码列表。
第二大类:条件指令,即宏命令里[]中间的部分,是否执行某一动作指令所依据的条件。这是一条可执行的宏命令的灵魂,它告诉系统宏的某一动作指令什么情况下是可行的,什么情况下是不可行的。这类指令又分成两类:状态条件指令和指针条件指令。
1、状态条件指令:顾名思义,就是指明某一状态作为动作执行条件的指令。这一条件指令是2宏里最有特点的一个指令群它使得宏的功能更加实用和多样。此类命令很多,包括:
help 目标友善
harm 目标敌对
exists 目标存在
dead 目标已死
stance:<X> 处于某个姿态
stealth 潜行状态
modifier:<X> <X>可以是shift/ctrl/alt,shift/ctrl/alt被按下状态
button:<X> <X>可以是1/2/……5/<系统定义按键>,用鼠标的某个按键点的宏
equipped:<X> <X>可以是某个物品种类/身上某个装备格/某物品的类型/或者子类型,装备此(类)物品
channeling:<X> <X>为某法术名,某法术正在引导中
actionbar:<X> <X>为1到6的某一个参数代码,指定的动作条页面已被显示
pet:<X> <X>可为宠物种类或指定宠物的名字,指定宠物存在
combat 处于战斗状态
mounted 骑乘状态
swimming 游泳状态
flying 飞行状态
indoors 在室内
outdoors 在户外
group:party/raid 正在一个小队/团队中
这些命令指明在某状态下,宏定义动作指令可施放。所有状态条件指令前面都可以加个“no”,表示相反的状态,比如nostealth表示非潜行状态,nodead表示没死。在宏语句中,此类指令都写在[]中间,前面交代过,可以用“,”或者“/”来分隔,表明选择条件指令之间的关系是“并且”还是“或者”。
2、指针条件指令:即表明动作指令所针对的对象。此条件指令很特殊,只有一个,就是target。其实与其说target是条件指令,不如说是指针指令。但是由于其应用在宏里的tine是写在[]之间的,所以把它归结在条件指令里,以方便记忆宏的书写格式。此指令格式为:
target=<X> <X>可以为player/target/pettarget/targettarget/<某人或宠物的名字>……,动作施放目标为玩家/当前目标/宠物目标/目标的目标/某人或宠物……
注意在此条件指令后有个“=”,这也是target指令的特殊标志。在使用target指令的语句里,不表示目标为某某的状态,而是表明此动作指令将向某某发出。
另外,最近开始流行多指针条件指令判定了,也就是为了追求战斗时的效率,用最快的方法来施放技能。最突出的一个条件指令就是target=mouseover。简单说明一下目前WOW可以实现的目标指针条件指令种类,常用的就不说了,不常用有focus,即焦点目标,这是个可以脱离选择而独立进行监视的目标,需要使用/focus动作指令或指定系统快捷键来完成设置。还有就是mouseover。target=mouseover意思就是将动作指令的指针指向鼠标停留目标上,此时你无需选中这个目标,只要鼠标停留在目标的身上,使其显示高亮就可以了。
第三大类:辅助指令,即用来辅助完善宏的功能的指令。常用的有两个:
#show 在宏图标上显示指定图标
#showtooltip 在宏图标上显示说明
这两条指令后面均可追加技能或者物品名,则在宏图标选择界面里选择了“?”图标的时候,会显示指定的图标和说明。关于“?”图标,在游戏升级补丁说明中有详细讲解,这里就不再赘述了。只说两点,一是这两条指令要和“?”配合使用才能发挥最大的作用,其次是#showtooltip指令一定要放在宏的最开头,否则会失效。另外多说一句,“#”后面有无空格均可。
三大类指令说完了,最后说说比较特殊的一个条件动作指令:
/castsequence 顺序施放
这个动作指令虽然被归入条件动作指令,但大部分条件指令都不适用于对其进行约束,因为此动作指令所要执行的内容其实是一个动作序列,每点击此宏一次,系统将按编写好的动作序列顺序施放法术。/castsequence指令本身有个专用的条件限定指令reset=<X>。意思是在<X>条件下,宏序列重置到最初状态。当<X>是数字的时候,则表示宏序列在<X>秒后重置。此命令初看时会觉得比较鸡肋,但其实如果用特定的方法去使用,则作用很大,效果很出人意料。后面将有例子可以参考。