最经典 魔兽世界宏命令完全教程 2011年修正版


考格威尔(Cogwheel's)宏命令完全指南 2011 年 Cogwheel 著 WOWWiki 共享维护 Subelf 译 版权所有 请勿用于商业用途

一、.................................................................................... 基本宏命令 5 1. 什么是宏? .................................................................................5 2. 怎样写宏? .................................................................................6 3. 施放法术 .....................................................................................7 i. 关于技能名称和等级的说明 ..............................................9 4. 使用物品或者饰品 .....................................................................9 i. /use <装备栏> .....................................................................10 ii. /use <背包> <栏> ...............................................................10 5. 集成多个动作 ........................................................................... 11 6. 选择目标 ...................................................................................12 i. 其他选择命令 ....................................................................13 7. 控制宠物 ...................................................................................14 i. /petattack ..............................................................................15 ii. /petfollow ............................................................................15 iii. /petpassive, /petdefensive 和 /petaggressive ...................15 iv. /petautocaston 和 /petautocastoff.....................................15 8. 宏在动作栏的显示控制 ...........................................................15 9. 其他的命令 ...............................................................................17

i. 装备物品 ............................................................................17 ii. 队列施法或使用物品 .......................................................17 iii. 随机施法或使用物品 ......................................................19 iv. 攻击...................................................................................19 v. 技能栏控制 ........................................................................19 vi. 移除增益效果 ..................................................................20 vii. 退出形态 .........................................................................20 viii. 中止施法 ........................................................................20 ix. 终止一个宏:/stopmacro ................................................20 x. 解散坐骑 ...........................................................................21 xi. 保存一个目标用于后续动作 ..........................................21 xii. 模拟点击 .........................................................................21 10. 进阶:脚本 ......................................................................23 i. 脚本有哪些限制? ............................................................23 ii. 什么是脚本? ...................................................................23 二、.................................................................................... 命令条件语 25 1. 什么是命令条件语? ...............................................................25 2. 可以使用条件语的命令 ...........................................................25 3. [target=]条件语 .........................................................................28 4. 语法 ...........................................................................................28 i. 条件语语法简介 ................................................................29 ii. 条件语法 ...........................................................................30 iii. 完整的 EBNF 语法 ..........................................................31

iv. 参数为空...........................................................................31 v. 条件为空 ............................................................................32 vi. [target=]条件语与命令参数 .............................................32 5. 命令条件语 ...............................................................................33 i. 总表 ....................................................................................33 ii. 敌/友(help / harm) .............................................................35 iii. 存在(exists) ......................................................................35 iv. 死亡(dead) ........................................................................35 v. 姿态(stance:0/1/2/…/n) .....................................................36 vi. 潜行(stealth) .....................................................................36 vii. 功能键状态(modifier:shift/ctrl/alt) .................................37 viii. 功能键变量 ....................................................................37 ix. 点击状态(button:1/2/…/5/<虚拟按键号>) .....................38 x. 装备(equipped:<物品类型>) ............................................39 xi. 引导中(channeling:<技能名称>) ....................................39 xii. 技能条(actionbar:1/…/6) ................................................40 xiii. 宠物(pet:<宠物名称或类型>) .......................................40 xiv. 战斗(combat) ..................................................................40 xv. 行动方式、室内外状态(mounted, swimming, flying, indoors & outdoors) .............................................................................40 xvi. 允许飞行 (flyable) ........................................................40 xvii. 小队/团队队友(party/raid) ............................................41 xviii. 在小队/团队中(group:party/raid) ................................41

6. 命令条件语的应用 ...................................................................41 i. 设置焦点(focus) .................................................................41 ii. 用/click 进行分支判定 .....................................................43 三、.................................................................................................附录 45 1. 自定义图标 ...............................................................................45 2. 宏的移植 ...................................................................................45 3. 更多信息 ...................................................................................45 4. 鸣谢 ...........................................................................................46 5. 译者注 .......................................................................................46

一、 基本宏命令
1. 什么是宏?

宏是由一组宏命令组成的。以下是一些普通宏命令: ? /say (/s) ? /whisper(/w, /talk, /t) ? /emote(/e, /em, /me) ? /dance ? 喜爱 PVP 的人,应该不会忘了这个:/spit 利用宏,我们可以把这些宏命令放到技能栏上点击使 用,而且可以同时做多个动作。写宏的时候,每条动作写 在一行上,就像在聊天界面中输入的一样。比如,让你的 角色喊一声 “Everybody, dance now!” 然后开始跳舞的宏: /y Everybody, dance now! /dance 一个基本完整的宏命令列表可以参考这里: 《宏命令 全表》 不过个别新添加的宏命令还没有被收录。 , WoWWiki 有很多关于宏的资料,尤其是脚本和/run 命令 (后面将会提到) 。 注:我先在此说一下,宏的执行是立即进行的。这意 味着当你点击技能栏上的一个宏时,宏命令会一条接一条 地执行,执行完后才会返回游戏控制。这将会产生两个重 要问题:第一,如果写了一个会执行很长时间的宏(如: /run for i=1, 1000000000 do end) ,游戏会被卡死,直到它

执行结束;第二,也是更重要的一点,那就是宏命令不可 能具有延时功能。 这一现象在我们熟悉/cast 之类的命令后 就可以很清楚地感觉到。而一些提供了延时执行命令功能 的插件,只能是能执行一些所谓的“良性命令” ,如交谈、 表情和对于其他插件命令的调用(不过战斗中更换武器是 可以进行的) 。
2. 怎样写宏?

首先,打开你的宏窗口:单击主菜单上的“宏”按钮, 或者在聊天界面中输入/macro(/m)回车。在宏窗口的顶 端,可以看见两个标签: “通用宏”和“<你的角色名>的 专用宏” 。通用宏被存储在账号专有的文件夹中,被所有 角色共享。而角色专用宏则存储在角色自己的文件夹下, 是角色专用的(废话??囧) 。在标签下面是 18 个存放宏 的栏位。再往下是一个栏位,用于显示当前选中的宏;还 有一个“修改名称/图标”的按钮,用于修改选中的宏。然 后是一个用于显示、编辑当前宏的文本框。最下面是三个 按钮,傻子也能看出它们是干什么的。 如果要创建一个宏,首先单击窗口下方的“新建”按 钮,这时窗口旁边会显示一个对话框,用于选择图标和输 入宏的名称。如果选择了第一个图标(就是那个很红很暴 力的问号) WoW 会自动根据你宏命令中涉及的技能或物 , 品选择图标。选好图标,输入完名称,就可以单击“确定” 按钮了。

顺便提几点:1.使用问号图标的宏,可以通过使用 #show 指定显示的图标。2.虽然可以给不同的宏起相同的 名字,但是最好不要这样做。因为有些插件和宏命令是通 过宏名称来调用宏的。3.在图标列表中可以添加自定义的 图标。 现在,你选择的宏图标被显示在栏位中了(还会显示 部分宏名称) 。同时,新建的宏被选中,图标显示在当前 选中宏的栏位中:现在你可以写你的宏了。单击编辑文本 框,然后输入吧。 注:宏限定为 255 个字符,传闻这样做是为了以后可 以把用户的宏上传到服务器中。不过??现在能做的就是 遵循这个限定,至于想要把宏移植到其他机器上使用,请 参见第三部分的宏的移植。 写完宏以后,只要把它的图标拖放到技能栏中就可以 了。当你执行一个宏,或者是关闭宏窗口的时候,宏都会 自动保存的。现在点击宏的图标,看看效果吧!
3. 施放法术

在正常游戏过程中,很多宏命令通过聊天窗口输入使 用似乎并不好用, 但是在宏中就不一样了。 在特定场合下, 简简单单的表情宏也可以产生有趣的角色扮演效果哦,那 么,继续看?? 这个:/cast,它是最常见的宏命令了。作用嘛,就是 施放一个技能书中的技能(包括宠物的) 。最简单的用法

就是这样: /cast 暗言术:痛 把这个宏放到技能栏上点击,将会对目标施放你最高 级的痛。这和把技能书中的痛拖到技能栏上,然后点击的 效果是一样的。我们制作的宏同样会在技能栏显示你的技 能冷却状态和射程状态,点击后同样能正确的施放痛。如 果宏使用了问号图标,那么还同样会显示痛原有的图标。 那直接用技能不就行了么,何必用宏呢?继续看,在 宏中通过集成多条命令可以产生什么效果吧,这才是宏的 价值所在。 比如说你是个法师, 想让队友知道你要羊掉谁, 你该怎么办?用宏吧,一个简单的/p 命令加上一个/cast 就可以了(使用这个无耻的插件可以达到更好的效果: CCWarn,不过我们现在需要的只是这个简单易懂的教学 例子) : /cast 变形术 /p 我羊了%t!谁打谁扛着哈! 注:由于宏的执行是立即进行的,所以不管目标是否 有效技能是否冷却,宏被点击时/p 命令就执行了,也就是 说这两行命令的顺序颠倒后效果是相同的。如果你想在确 定成功施放一个技能后才执行某条命令,你可以试试这个 插件:AfterCast。AfterCast 可以设定在施放某个技能后 执行一条宏命令,当然,是在第 1 节末尾所提到的限制之 下的。如: /aftercast /p 请队友点门,把懒猪%t 揪过来! /cast 召唤仪式

i.关于技能名称和等级的说明

/cast 命令对技能名称是十分严格的,文字、标点、空 格,一个都不能错。为了防止出错,编辑宏时,你可以打 开你的技能书,按下 Shift 然后单击你的技能图标,技能 名称和等级就会被正确地输入到你的宏编辑文本框中, 如: /cast 暗言术:痛(等级 5) 如果把“(等级 5)”删掉,宏在执行时就会自动选择 你最高级别的技能执行;不过在很多场合下,还是需要指 定级别的技能,比如术士放逐就需要根据时间来选择技 能。另外要注意,等级指示中使用的括号是英文的半角括 号,等级与数字间有一个半角空格。而一些技能名称中的 括号,比如“精灵之火(野性) ”中的括号,是中文的全 角括号。以下宏命令不能正常执行: /cast 精灵之火(野性) /cast 精灵之火(野性) (等级 1) 而以下的命令是正确的: /cast 精灵之火(野性) /cast 精灵之火(野性)() 空的括号效果和没有括号是一样的。由于 255 字符限 制的存在,空间还是要节省的 ,所以空括号可以删掉 了??
4. 使用物品或者饰品

使用物品和饰品和施放法术是类似的。用于使用物品 的命令是/use,后面只需要加上物品的名字就可以了。例

如: /use 绿色机械陆行鸟 另外,还有以下其它的使用格式:
i./use

<装备栏>

这种格式可以使用指定装备栏中的物品。具体使用请 参见《装备栏编号方式》 。例如: /use 13 使用第一个饰品。
ii./use

<背包> <栏>

这种形式是在指定背包中确定物品栏的,比如你总是 把猫食狗粮放在行囊的第一个栏位中,那么你就可以用这 样的宏来喂养宠物: /cast 喂养宠物 /use 0 1 背包的编号为 0-4,顺序是从右到左,即 0 是行囊。 物品栏则是从上到下从左到右,从 1 开始依次编号的(与 书写顺序相同) : 1 2 3 4 5 6 7 8 ?? 或者是: 1 2 3 4 5 6 7 8 9 10 ?? 如果怕把/cast 和/use 的用法混淆了,那就彻底搞混 吧, 因为它们其实本来就是完全一样。 /cast 可以使用物品, 而/use 也可以施放技能。 这一点在目前看来似乎没有什么, 但是到后面,介绍命令条件语和施法队列时,你会发现能

把物品和技能混合在同一条命令中是多么爽的一件事。
5. 集成多个动作

首先,在一个宏中想一键释放多个法术是不行的。大 多数技能和很多物品会触发公共冷却(GCD) ,防止你同 时做太多的动作。即使一个技能释放失败,如果它可以触 发 GCD,那么它也会阻止后续/cast 命令的执行。这是 2.0 版本之后的设定,之前可能看到这样的宏: /cast 压制 /cast 斩杀 /cast 致死打击 /cast 破甲 但是现在,记住,这种宏已经不能正常执行了。如果 压制施放失败,虽然没有触发 GCD,客户端也不会继续 执行后续的技能施放。不过令人欣慰的是部分技能还是可 以集成到一个宏中。任何不触发 GCD 的瞬发技能后面可 以接上另一个技能( “下次近战攻击”型的技能,如英勇 打击也归于此类) 。一个技能可以通过看说明知道它是否 瞬发,至于是它是否触发 GCD 通过实验就可以知道。 2.3 版本之前, 在这个瞬发无 GCD 技能之后需要加上 一个/stopcasting 才可以施放其后的技能。 施放第一个技能 后,游戏客户端会认为当前在施法状态,而/stopcasting 就可以解除这个状态,就可以解决后续技能不能释放的问 题。 但是由于技能是瞬发, /stopcasting 实际上并不能取消 技能的施放。 而现在这里可以不用/stopcasting 了,例如:

/use 短暂能量护符 /cast 奥术强化 //stopcasting /cast 气定神闲 //stopcasting /cast 炎爆术
6. 选择目标

选择目标是宏的另一个主要作用。此类功能可以用专 门的目标选择命令实现,改变当前的目标;也可以在一些 命令中用[target=]命令条件语实现,临时指定施法或使用 物品的目标,而不改变当前目标。命令条件语在第二部分 将会讲到到。现在我先介绍目标选择命令。 最基本的命令是/target,用法如下: /target Cogwheel /target 的选择是经过最佳相近匹配的,也就是说,如 果我正站在你附近(并且附近没有谁叫 Cog 的) ,你执行 /target Cog,我就会变成你的当前目标。至于这种机制是 利是弊??那就取决于实际情况了,因为这个东东貌似不 稳定,有时会得到莫名其妙的结果。比如下面这个宏就可 能不是很好用: /target 黑翼法师 /cast 痛苦诅咒 如果附近没有黑翼法师呢?或许结果就是:选中了团 里的某个人,因为他的名字在某种意义上比较相近。虽然 你的诅咒不会真对他们放出来,但还是够囧的。另外一个 问题是,它可能会选择你身后一个离你 100 码的单位—— 根本不是你想选中的那一个??不过在 2.3 版之后,增加 了一个/targetexact 命令,第一个问题得到解决了。

除了用人名进行选择之外,还可以通过单位标识符进 行选择。单位标识符(Unit ID)是用于标识特定单位的字 符串。比如你的当前的目标就可以用“target”来表示, 而你自己对应的标识符是“player” ,如果你有宠物,那么 它的标识符是“pet” 。另外,通过在一个正确的标识符后 加上 target,就可以获取他的目标。如此变态也可以: /target targettargettargettargettargettarget 这里是一个可用 ID 的全表: 《单位标识符》 。
i.其他选择命令

以下是其他的目标选择命令: ? /assist 不加任何其他参数时效果是选择你目标的目标,如果 在其后加上人物名称,那么就会选择对应人物的当前目 标。例如: /assist Cogwheel 另外,在客户端的界面选项中有一个选项,可以设置 用/assist 选中一个敌对目标时是否自动进行攻击。 ? /cleartarget 清除当前目标。 ? /targetexact 准确选择,如果附近没有单位的名字和给出的参数完 全匹配,就不会切换目标。 ? /targetlasttarget, /targetlastenemy /targetlastfriend 和

顾名思义,分别用来选择上一个目标、上一个友方目 标和上一个敌对目标。如果你之前没有过任何目标,那么 这些命令不会产生任何影响。 ? /targetenemy 和 /targetfriend 选择敌方目标和选择友方目标。这两条命令是按一定 顺序循环选择指定类型的目标的, 和使用 Tab 键的效果类 似。如果在命令后加上一个 1 作为参数,那么就会按循环 的反方向进行选择。例如: /targetenemy 1 效果就和按下 Shift+Tab 键一样。 注:这两个宏命令每个宏中只能用一次。 ? /targetparty 和 /targetraid 按距离循环选择你附近的小队或团队队友,与 /targetenemy 类似,也可以用 1 作为参数改变选择的循环 方向。
7. 控制宠物

之前在讲施放技能的时候提到过, 使用/cast 命令可以 施放宠物的技能。玻璃渣把法师的水宝宝的霜星起名叫 “冰冻术”就是为了避免和法师自身的“冰霜新星”技能 冲突,从而导致不能在宏内使用。但是有宠物的职业会发 现,如果宏只能施放技能的话,甚至还不如宠物技能栏的 功能。别急,燃烧的远征中,新增了以下这些宏指令:

i./petattack

让你的宠物去攻击你的当前目标。当然,在命令后加 参数可以指定攻击的对象。
ii./petfollow

宠物切换到跟随状态,同时取消攻击。
iii./petpassive,

/petdefensive 和 /petaggressive

宠物切换被动、防御和主动攻击状态。同宠物技能栏 上的最后 3 个按钮。
iv./petautocaston

和 /petautocastoff

打开/关闭宠物技能的自动施放。例如: /petautocaston 折磨 /petautocastoff 受难 不过美中不足,没有直接切换自动施放状态的宏命 令,我将在后面“模拟点击”部分提到一个解决方法。
8. 宏在动作栏的显示控制

如果一个宏使用问号图标,魔兽世界客户端会默认把 宏内容中的第一个技能或物品的图标、冷却状态等信息显 示在技能栏上。比如前面所讲的这个例子:

/use 短暂能量护符 /cast 奥术强化 /cast 气定神闲 /cast 炎爆术 客户端会把奥术强化的状态信息作为宏的状态显示。 但是这恐怕不是我们所希望的,因为这个宏的目的是炎 爆,前几行的奥强气定都只是为了最后把一个大大的脸盆 给丢出来。如果在宏的前面加上这样一行,炎爆术就会被 当作宏的默认技能: #show 炎爆术 如果使用了问号图标的话,宏还会直接显示炎爆的图 标。#show 的参数机制和/cast 类似,可以使用技能名、物 品名、物品编号(如 item:12345) 、装备栏或者背包+物品 栏编号。 和#item 类似的还有#showtooltip。正常情况下,鼠标 指向宏的时候,提示信息显示的是宏的名字。而这在绝大 多数情况下是很不好用的(除非你用了 TheoryCraft 之类 的插件可以显示详细的技能信息) 而用#showtooltip 就可 。 以指定宏在鼠标指向时显示的信息,用法同#show。另外, 如果使用了#showtooltip 的话,就没必要再用#show 了。 如果客户端自动选择的技能符合你的要求,那么可以 只用#showtooltip 而不加参数来显示该技能的说明,这样 可以节约空间。 请注意: #show 和#showtooltip 与/开头的宏命令不同, 是大小写敏感的,也就是说只能用小写字母。

9. 其他的命令

现在有了足够的基础,以下这些命令我就只简要地讲 解一下了。有些命令看似没啥用,但如果配合将在第二部 分介绍的命令条件语,它将会产生惊人的效果。
i.装备物品

用于装备物品的命令有两个:/equip 和/equipslot。 /equip 的参数为物品名称,效果是把对应物品装备到默认 的装备栏中,类似在背包中右键单击物品(如:一件单手 武器就会被装备到主手上) 。而/equipslot 的参数为装备栏 编号和物品名称, 效果是把物品装备到指定栏位中去。 例: 装备武器: /equip 虚空角斧 把饰品装备在第二个饰品栏中: /equip 14 棍子上的胡萝卜 注意:即使是在战斗中,插件页是可以直接使用装备 命令的。因此在 AfterCast 和 Chronos 中可以使用装备命 令。如果插件内部会检查命令是否经过安全化可能就不那 么好用了,因为它属于“安全化”指令——但是事实上它 并没有受到安全限制。
ii.队列施法或使用物品

很多时候我们需要经常按一定顺序使用固定的一些 技能或物品。这样的操作是可用/castsequence 宏命令进行 傻瓜化的。/castsequence 命令用法是在后面写上一些技能

或物品的名称, 之间用英文的半角逗号分隔, 和/use、 /cast 类似。技能名、物品名、物品代号、装备栏代号和背包位 代号都可以混合使用。每次执行宏,就使用当前的技能或 物品(从第一个开始) ,如果成功,队列的当前位置就被 移至下一个技能或物品。也就是说需要反复执行宏来按顺 序使用这些技能或物品。当最后一个技能/物品成功使用 后,这个队列就被重置到开头。比如: /castesquence 献祭, 腐蚀术, 痛苦诅咒, 生命通道 这是痛苦术士起手的招牌动作。注意,如果献祭没有 施放成功(比如魔法不足,超出范围,被沉默了等等) , 这个队列不会继续执行,直到献祭放出去。所以下面这个 宏是屁用没有的: /castesquence 压制, 斩杀, 致死打击 在技能列表之前,可以插入一个条件语,用于另外指 定一些队列的重置条件。语法是: reset=n/target/combat/shift/alt/ctrl 以上的这些条件都可以任意共存。其中,n 是数字, 表示从某次执行宏开始, 经过 n 秒后没有再次执行这个宏, 那么队列就被重置到开头。这一点很重要,因为这意味着 无法利用 reset 条件语来精确计时(比如让某技能一冷却 就用)target 条件表示当目标切换时, 。 宏队列重置; combat 条件表示脱离战斗后重置;shift,alt 和 ctrl 表示当执行宏 时指定的键为按下状态时重置。例如: /castsequence reset=10/shift 第一个技能, 其他技能, 一些物品 如果这个宏图标使用的是问号,就会自动显示下一个

要施放技能的图标。但如果/castsequence 前面还有其他 /cast 和/uses 命令,这个功能就没有了,而且玻璃渣也没 有提供什么命令来解决这个问题。
iii.随机施法或使用物品

最常见的例子就是希望随机召唤一个坐骑来装 B,使 用/castrandom 或者/userandom 宏命令很容易实现这个功 能。用法和/castsequence 类似,如: /castrandom 迅捷绿色机械路行鸟, 军用黑色机械路 行鸟, 召唤恐惧战马
iv.攻击

以前的宏是/attack,后面可以写上单位名作为攻击对 象,无参数则以当前目标为对象。效果是切换当前的攻击 状态 (攻击/停止攻击) 但是这个宏从 2.2.3 开始就被废除 。 了,只能使用/startattack 和/stopattack 了。分别用来攻击 和停止攻击。如: /startattack Cogwheel
v.技能栏控制

有两个控制技能栏翻页的宏:/changeactionbar 和 /swapactionbar。前者接受一个数字作为参数,表示要切 换到的技能栏页码。常见的是猎人用来转换近战远程攻击 状态: /cast 雄鹰守护 /changeactionbar 1 和 /cast 灵猴守护 /changeactionbar 2

/swapactionbar 命令后面要写两个页码,表示来回切 换指定的两个技能页。如果当前技能页不是两个页码中的 一个,当前页就会被设置为第一个页码指定的技能栏页。 /swapactionbar 1 2
vi.移除增益效果

/cancelaura 命令可以移除自己不想要的增益效果 (BUFF),比如主坦需要移除身上的拯救祝福: /cancelaura 拯救祝福
vii.退出形态

除了战士,任何有“形态”概念的职业(德鲁伊、暗 牧)都可以用/cancelform 来退出当前形态: /cancelform /use 超强治疗药水 2.3 版本之前,上面这个宏由于形态取消有一个延迟, 为了达到效果需要执行两次。不过 2.3 版本后,小德可以 只点一次就产生效果了。
viii.中止施法

前面简单提到了/stopcasting 命令, 不过它存在的目的 顾名思义,是用来打断当前施法的。这对处理紧急情况很 有用,比如我的术士: /stopcasting /cast 暗影灼烧
ix.终止一个宏:/stopmacro

/stopmacro 如果不配合条件语来使用是没有什么意 义的。它一般用来实现条件执行的功能:如果满足了某些 条件,则中止宏继续运行。具体用例请参见 设置焦点

(focus) 。
x.解散坐骑

/dismount 不用再说什么了吧?
xi.保存一个目标用于后续动作

/focus 宏可以把一个目标设为焦点(focus) ,然后可 以在其他指令中使用这个 focus。比如你的老大指定了一 个目标让你羊着。你要做的就是选择它,然后输入/focus。 然后你就可以用这个宏羊着它了,而不用管你当前目标变 成了谁: /cast [target=focus] 变形术 注意,focus 的作用可不仅仅如此,具体还是请参见 设置焦点(focus)一节的内容,那里有更深入的剖析。
xii.模拟点击

/click 命令的参数为一个按钮(本质上来说是一个窗 口) 的名称, 执行的效果就相当于用鼠标点击了这个按钮。 默认情况下,它的效果相当于左键单击,也可以根据设置 成其他按键点击的效果。至于按钮名称可以通过一下方式 获知: ? 使用插件。某些插件,比如 MoveAnything,提供了 查看窗口名称的功能。 ? 查看界面的源代码。这一般是非常娴熟非常牛 B 的 插件制作者才能做到的。

? 用这样一个宏获取当前鼠标所指的窗口名称: /run local f=GetMouseFocus(); if f then DEFAULT_CHAT_FRAME:AddMessage(f:GetName() ) end /click 可以用于很多用途。比如利用它可以一次执行 很多宏。还有,假设你有一个宏太长了,远远超过 255 字 符限制。你就可以把后面写不下的代码写到另一个宏中, 而前面那个宏的末尾写上: /click MultiBarRightButton1 再把第二个宏拖到那个叫 MultiBarRightButton1 的 栏位中。这样执行第一个宏就相当于执行了所有的宏命 令。 另外,这个宏还可以用来做一些其他命令没法办到的 事。比如前面提到的切换宠物技能自动施放状态的功能, 就可以这样解决: /click PetAttackButton5 RightButton 这个命令的涵义就是右键单击一下宠物栏上第五个 按钮。 用于指定按键的参数还可以是 LeftButton(左键,默 认) ,MiddleButton(中键) ,Button4(4 号键)和 Button5 (5 号键,职业玩家的鼠标??) 。在掌握这些之后,第二 部分结尾处还会介绍更复杂的,利用/click 产生分支判定 效果的例子。

10. 进阶:脚本
i.脚本有哪些限制?

脚本是一个强大的工具,它按照 LUA 语言的语法执 行,利用客户端提供的接口可以产生强大的智能。所以玻 璃渣就给它加了限制,防止它被滥用而影响游戏平衡性。 我之所以要先讲脚本的限制,为的是让大家对它别抱太大 希望。虽然脚本还是很有用,但是不能用来施法、使用物 品、改换技能栏或改变当前目标。这些功能只能依靠那些 “安全化”的命令来实现。
ii.什么是脚本?

魔兽世界客户端的用户界面是可以通过 LUA 脚本控 制的。通过/run 和/script 命令就可以执行脚本(我个人推 荐使用/run, 节省字符数??)在命令后面书写脚本内容, 。 中间不能换行。不过一个宏中可以包含多个/run 命令。 过多关于 LUA 语言和编程的内容本文就不再赘述。 如果你有一定的编程经验,那么就可以访问 lua.org 学习 LUA 语言。如果没有什么基础,那么请先看《编程入门》 了解一些基本概念。 玻 璃 渣 提 供 了 很 多 API 函 数 ( Application Programming Interface) 可以在 LUA 脚本中调用来实现 , 对界面的控制。 关于 API 函数和相关的内容可以看看这篇 文章: 《界面 DIY》 (如果你打算花时间好好研究魔兽世界 插件的话, WoWWiki 是最优选择) 我不可能把所有关于 。

用户界面的细节都讲到,因此我只打算用我最常用的一个 宏做例子,简单地讲一下。想了解得可以看上面给出的链 接,或者这里: 《Mod Author Resources sticky》 。 下面这个宏是我给出的例子,它会向所有和你目标相 同的人发送悄悄话,通知他们改变目标(我的插件 CCWarn 也是就是基于这段代码的) 。这样就可以防止已 被羊的人受到攻击。 /cast 变形术 /run for i=1,GetNumRaidMembers()-1 do local u,t="raid"..i,"target"if UnitIsUnit(u..t,t)then SendChatMessage("Change targets! Trying to sheep...","WHISPER",nil,UnitName(u))end end 呃??貌似看起来有些乱??不过没办法??首先, 宏是有 255 字符数限制的,所以常常要用一些不美观的方 式去写代码。其次,脚本要写在一行中。这两个条件导致 代码的可读性很低。如果把代码单独拿出来美化一下的 话,应该是这个样子: for i = 1, GetNumRaidMembers() - 1 do local unit = "raid"..i if UnitIsUnit(unit.."target", "target") then SendChatMessage("Change targets! Trying to sheep...", "WHISPER", nil, UnitName(unit)) end end

二、 命令条件语
1. 什么是命令条件语?

命令条件语是插入在宏命令中,使宏根据条件执行不 同功能的语句。举个例子,下面这个宏的作用是,如果是 友方目标就施放恢复,如果是敌方目标就上痛: /cast [help] 恢复; [harm] 暗言术:痛 当这个宏执行时,首先检查[help]条件,判断当前目 标是否是一个可以接受治疗/增益法术的目标。如果[help] 条件成立,那么就施放恢复并执行下一条命令,否则(即 没有目标, 或目标不接受有益技能) 继续执行下一个子句, 也就是分号后[harm]那里,再判断[harm]条件。[harm]条 件和[help]条件相反,判断目标是否接受敌对法术。同上, 如果条件成立就释放“暗言术:痛”并执行下一条命令。 如果条件不成立,由于后面没有其他子句,这条宏命令就 算执行完了,但是什么动作都没有做。 注:如果没有写[harm]条件,实际运行效果是差不多 的。 不过, 如果你没有目标或者当前目标不接受任何法术, 那么屏幕上将会出现错误信息,或者对于某些技能,鼠标 将会变成选择施放目标的状态。
2. 可以使用条件语的命令

只有那些“安全化”命令可以接受命令条件语。其实 正是经过安全化的命令才需要条件语。常规命令,比如说

聊天、表情之类的,可以通过脚本来实现命令条件语的功 能。而且暴雪不想限制大家在聊天时使用分号(;) 。如果 /s 命令可以使用命令条件语的话,那么下面这个命令就会 只说 hello: /say Hello; I’m a n00b 以下是当前客户端中安全化命令的列表: #show1 #showtooltip1 /assist /cancelaura /cancelform /cast /castrandom /castswquence /changeactionbar /clearfocus /cleartarget /click /dismount /equip2 /equipslot2 /focus /petagressive /petattack

/petautocastoff /petautocaston /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], 姿态,单独使用时表示“在任一姿态中” (显然这对战士 来说是废话一句) 。如果给它加上参数,就可以指定在某

个姿态下,格式是在条件语后写上冒号(:) ,然后后面写 上参数,每个参数间用斜线(/)分隔。综上所述,一个条 件语的完整格式如下(<>表示其中的部分是可选的) : [<no>condition<:parameter</parameter</parameter< …>>>>] 下面举个例子,如果在战斗或防御姿态施放盾击,否 则转入防御姿态: /cast [stance:1/2] 盾击; 防御姿态 这个宏用伪代码写的话就是: IF 当前在姿态 1 或姿态 2 THEN 用盾击 ELSE 切换防御姿态 注意: “no”前缀是对整个条件和所有参数的修饰, 即把原来的真变为假,假变为真。比如[nostance:1/2]表示 “不在姿态 1 也不在姿态 2 中” 。
iii.完整的

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' ?
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 target /focus focus /startattack target /petattack 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)

没什么好说的,保留空地一块,等待补充。
iii.存在(exists)

如果目标存在条件为真。比如[exists],如果你没有目 标,该条件就不成立。而对于[target=focus, exists],如果 你设置了焦点目标,条件就成立。不过很多情况下该条件 用不到,因为[help],[harm],[dead],[party]和[raid]条 件成立的情况下,[exists]条件是必定成立的。
iv.死亡(dead)

如果判断对象已经挂了,条件就成立。

v.姿态(stance:0/1/2/…/n)

姿态是指对技能能否施放有影响的状态,比如战士的 姿态,小德、萨满、暗牧的形态,盗贼的潜行状态。而骑 士的光环、 猎人的守护都算是姿态。 单独用[stance]是指在 任意一种姿态下,就相当于[stance:1/2/…/n]这样把所有姿 态列出来,对战士来说就是永远成立的。而[stance:0]就相 当于[nostance]表示不在任何形态下。 而[stance:0/3]就表示 在形态 3 下或者不在任何形态下。 姿态的编号和面板上的顺序是对应的。下面给出各职 业的姿态表: 编号 小德 战士 暗牧 盗贼 萨满 1 熊形态 战斗姿态 暗影形态 潜行 幽灵狼 2 海豹形态 防御姿态 3 豹形态 4 旅行形态 5 枭兽/树形态 6 飞行形态 注意:上面给出的是全表。如果少了某个姿态,其下 方的形态就依次上移。我承认,我这话是针对小德说 的?? 下面给出例子: /cancelform [nostance:0/1/3] /cast [stance:1/3] 精灵之火(野性);[nostance] 精灵之 火 如果在熊/猫形态,施放精灵之火(野性) ;在人形态, 施放精灵之火;在其他形态就先退出,然后施放精灵之火 (WOW2.3 以后可以这样,2.3 之前该宏只能退出形态) 。
vi.潜行(stealth)

对于盗贼来说由于[stance]的存在反而显得多余。 这个

是给暗夜、法师、猫德用的,我的意思是它可以用来判断 影遁、隐形和猫的潜行。
vii.功能键状态(modifier:shift/ctrl/alt)

它是节省技能栏的好帮手,可以让一个宏对不同功能 键做不同动作,比如: /cast [modifier, help] [modifier, target=targettarget, help] 快速治疗; [help] [target=targettarget] 强效治疗 术 该宏会依次判断你的目标和目标的目标是否友善,条 件成立的话,如果按下了某功能键,施放快速治疗,否则 施放强效治疗术。 当然也可以指定特定的功能键。[modifier:shift/ctrl] 表示 Shift 或者 Ctrl 被按下;如果想表示两个键同时按下 则可以这样实现:[modifier:shift, modifier:ctrl]。 但是要注意这样一种情况, 比如你的宏是通过 A 键执 行的,然后根据 Shift 来做判断。但是你的 Shift+A 被设 置了另外一个动作,那么你按下 Shift+A 的时候,执行的 就是其对应的动作,而不是你的宏。另外,modifier 可以 被简写做 mod 以节省空间。
viii.功能键变量

虽然说 mod 指定的只能是 shift、ctrl 或 alt,但是还 可以通过一些系统变量来间接指定。比如 SELFCAST 这 个系统变量,是指“自我施法功能键” ,默认值为 alt,可 以通过某些插件修改,表示按下该键后执行的动作都是针

对玩家自身的。下面看这个例子: /cast [modifier:SELFCAST, target=player] [target=mouseover] [ ] 强效治疗术 这样的话,不管你系统设置的自我施法键是什么,宏 命令都会正常执行。下面给出其他的一些系统变量,括号 内为默认值,后面为中文含义: ? AUTOLOOTTOGGLE(shift) ? STICKYCAMERRA(ctrl) ? SPLITSTACK(shift) ? PICKUPACTION(shift) ? COMPAREITEMS(shift) ? OPENALLBAGS(shift) 自动拾取键 镜头跟随 物品堆叠分离 拖动技能栏按钮 物品比较 打开所有背包

? QUESTWATCHTOGGLE(shift) 任务追踪
ix.点击状态(button:1/2/…/5/<虚拟按键号>)

与[modifier]类似,[botton]可以根据不同的鼠标点击 按钮做不同动作。1 为左键,2 为右键,3 为中键,4 和 5 则对应五键鼠标上另外两个扩展键。如果是通过键盘触发 宏,那么也相当于左键点击。比如我的坐骑宏: #show 迅捷绿色机械陆行鸟 /userandom [nobutton:2, flyable, nomounted] 黑色狮 鹫; [nomounted] 黑色战豹, 迅捷绿色机械陆行鸟 /dismount [noflying] [button:2] 非右键键点击时,如果没在坐骑上就召唤坐骑;如果 右键点击并且不在飞行状态则取消坐骑。而虚拟按键号一 般可以忽略,有些动作条插件可以在不同条件下向宏按钮 提供不同的虚拟按键号,具体情况请查看插件说明,我们

在此不作讨论。
x.装备(equipped:<物品类型>)

[equipped]条件可以判断指定类型的物品是否被装 备。物品类型号可以是装备栏名称,物品类别或者物品子 类别。比如我根据盾牌装备状态判断该用盾击还是拳击: #show [equipped:Shields] 盾击; 拳击 /cast [equipped:Shields,stance:1/2] 盾击; [equipped:Shields] 防御姿态; [stance:3] 拳击; 狂暴姿 态 利用[equipped]这里的#show 可以根据装备显示不同 的图标。下面的伪代码用来解释上面/cast 命令的执行过 程: if 装备了盾牌 and 在防御姿态 then /cast 盾击 else if 装备了盾牌 then /cast 防御姿态 else if 在狂暴姿态 then /cast 拳击 else /cast 狂暴姿态 下面再给出一个变态的压制宏作例子: /equip [noequipped:Two-Handed Axes] 水晶熔铸战斧 /cast [nostance:1] 战斗姿态; [equipped:Two-Handed Axes] 压制
xi.引导中(channeling:<技能名称>)

在引导法术的状态下,如果施放另外一个法术将会打 断施法。这个条件语就是用来防止这一情况的。当然,它 还有些其他的用途,比如只打断特定的引导技。 只用 [channeling]的话表示正在引导任意技能, 或者后面可以指 定任意个引导技能的名称表示正在引导其中一个。 注意: 引导和吟唱是两码事, [channeling]条件只对引 导技能,如奥书飞弹、吸取生命、精神鞭笞等有用。

xii.技能条(actionbar:1/…/6)

系统默认的界面中有一个主技能条,可以翻页。而用 这个条件就可以根据当前技能页作出不同反应。比如猎人 可以拿来把守护做成姿态: /swapactionbar 1 2 /cast [actionbar:1] 雄鹰守护; 灵猴守护 这样就可以切换 1 号和 2 号两个技能页,换到 1 页时 施放雄鹰守护,2 页时则施放灵猴守护。
xiii.宠物(pet:<宠物名称或类型>)

对任何有宠职业来说这个条件都很有用,它可以根据 你宠物状态来执行动作,可以根据宠物名字,也可以是类 型(比如 Voidwalker,Boar,Imp,Wolf 等) ,如果只用 [pet]的话表示带着任意宠物。比如法师可以根据是否有水 宝宝施放不同的霜星: /cast [pet] 冰冻术;冰霜新星
xiv.战斗(combat)

如果在战斗状态则条件成立。
xv.行动方式、室内外状态(mounted,

swimming, flying,

indoors & outdoors) 这些都无庸赘述,要说的就是它们都是对玩家自身状 态的判断,而不是目标。
xvi.允许飞行

(flyable)

用于判断是否处在可以使用飞行坐骑的地区。

xvii.小队/团队队友(party/raid)

判断目标是否是自己的小队或团队中的队友。
xviii.在小队/团队中(group:party/raid)

注意和前面的区别。这个用于判断玩家自己是否处在 小队或团队中,并且团队包括小队。这对加状态很有用, 比如: /cast [group, nomodifier] 奥术光辉; [help] [target=player] 奥术智慧 如果在队伍中,施放奥数光辉;如果按下功能键或者 不在队伍中则施放奥术智慧。
6. 命令条件语的应用

在第一部分中提到的很多命令,如果不配合条件语的 使用,是没有什么价值的。而上述内容也只给出了一小部 分的应用示例。作为本部分的压轴内容,下面两段将会把 你带入一个更高的境界。
i.设置焦点(focus)

focus 是一个单位标识符(参见《单位标识符》,就 ) 像 target、player、raidpet1target 一样。你可以将它设定 为某一个单位, 玩家或者 NPC。 比较简单的设置方法是通 过按键设置。在按键设置中有两个选项: “焦点目标”和 “目标焦点” 。我不知道这是哪个脑残翻译的,其实际含 义分别是“以目标为焦点”和“以焦点为目标” 。当你设 置了焦点以后,就可以用 focus 这个标识符了,也可以通

过“目标焦点”绑定的按键把你设的 focus 作为你的当前 目标。话说按键绑定也太小儿科了,下面来看看什么是职 业玩家的 focus 用法。 作为一个有控制技能的专业 DPS, 我们最常用的就是 控场宏。 我们可以预先把你的 “被监护人” 设为你的焦点, 然后用这种宏来调教他——而此过程中并不用切换目标: /cast [target=focus] 变形术 而作为一个灰常牛逼灰常娴熟的治疗,你可以把焦点 设为你的主坦。另外还可以通过一些头像增强插件,比如 FocusFrame 来观察你焦点的状态。 不过职业玩家一般不用按键绑定设置焦点,而是用 /focus 和/clearfocus 宏命令来设置或清除焦点。 /focus 直接 就可以达到按键绑定的效果了,而通过参数指定/focus 的 目标更是按键绑定所没有的功能: /focus party3target 上面的只不过是教学示例,实际上职业玩家是这样用 的: /focus [target=focus, noharm] [target=focus, dead] [modifier] /stopmacro [target=focus, noexists] /cast [target=focus] 变形术 第一行先判断以下三个条件,如果满足任意一个,就 把你的当前目标设为焦点(不要忘记,focus 是/focus 命令 的特殊单位,参见[target=]条件语与命令参数) : ? 你的当前焦点不是敌对目标(如果焦点不存在该条 件也成立)

? 你的焦点已经死了 ? 某个功能键被按下了 第二行判断你的焦点是否存在,如果不存在就终止宏 的运行。这样控场是不是很方便?我们注意到这里用了 /stopmacro 命令, 而不是在/cast 命令中对焦点是否存在进 行判断。这样的好处是我们可以在宏的最后加上更多的内 容,比如一个小队喊话。 下面这个宏也很有用,可以把你的目标和焦点互换: /cleartarget [target=target, dead] /clearfocus [target=focus, dead] /target focus /cleartarget [target=focus, noexists] /targetlasttarget /focus target /targetlasttarget 前两行的作用是把死亡的目标和焦点清除掉。第四行 的作用是防止你没有当前焦点,导致当前目标不变,以至 于在第五行选择了你以前的一个目标。
ii.用/click

进行分支判定

假如你想让一个按键根据不同的功能键施放不同的 技能,并且根据左键右键选择不同的施放目标,那么我可 以给你这样的一个例子: /cast [modifier:shift, button:1, target=party1] [modifier:shift, button:2, target=player] 强效治疗术; [modifier:ctrl, button:1, target=party1] [modifier:ctrl, button:2, target=player] 快速治疗; [nomodifier, button:1, target=party1] [nomodifier, button:2, target=player] 恢复 哦??对不起,不大好看??而且貌似超过 255 个字 符限制了。重新写一下: /cast [modifier:shift, button:1, target=party1] [modifier:shift, target=player] 强效治疗术

/cast [modifier:ctrl, button:1, target=party1] [modifier:ctrl, target=player] 快速治疗 /cast [button:1, target=party1] [target=player] 恢复 不过如果我们写一个宏根据不同按键点击分别选择 两个不同的宏,而把功能键状态的判断放到这两个宏中的 话,条理就会更清晰了: 主宏: /click [button:1] MultiBarLeftButton2; MultiBarLeftButton3 辅助宏 1: /cast [mod:shift, target=party1] 强效治疗术; [mod:ctrl, target=party1] 快速治疗; [target=party1] 恢复 辅助宏 2: /cast [mod:shift, target=player] 强效治疗术; [mod:ctrl, target=palyer] 快速治疗; [target=player] 恢复

三、 附录
1. 自定义图标

如果想自定义宏的图标,可以把做好的图标放在游戏 目录的 “.\Interface\Icons” 文件夹中 (可能需要自己新建) 。 文件格式应该是界面材质规定的.BLP 或 24 位无压缩的 TGA 文件。图片的长宽必须是 2 的自然数次幂,但不得 超过 512,比如可以是 32×32、512×128 等。注意:图片 如果不是正方形,在界面显示中是会走形的??
2. 宏的移植

玻璃渣目前还没有提供上传宏的服务,所以大家想把 宏转移到另外一台机器上的话还是要手动拷贝。个人账户 的角色通用设置都保存在游戏目录的“.\WTF\Account\账 户名称”文件夹下,每个角色分别的数据则保存在 “.\WTF\Account\账户名称\服务器名\角色名称”文件夹 下,包括自定义的宏 、按键设置、插件数据等 ,其中 macros-cache.txt 保存着宏的定义。
3. 更多信息

如果你有关于宏的疑问,并且在此找不到答案,可以 看看这里: 《Macro FAQ & Repository》 ,其中包含很多对 于常见问题的解答和一些很好的例子。而且最好多看看 wowwiki.com (不过在中国访问的话很可能需要代理) 可 ,

以获得很多东西,比如宏和脚本相关的文章,还有数据控 喜欢的关于游戏算法的研究。
4. 鸣谢

首先要感谢的是 Slouken,他在暴雪一直关注着我们 的反馈,如果没有他对广大玩家建议的重视就没有今天的 宏命令系统。 还要感谢的是 Iriel,Tem,Cladhaire 等很多高手与 大家分享知识。 还要感谢论坛上那些一直为大家做出贡献的朋友, Neuro,Shirik,Jelly,Lunessa,Troodi,Lealla,Aella, Valaron 等等,还有很多我不记得名字的朋友,感谢你们。
5. 译者注















http://www.wowwiki.com/Making_a_macro 这篇文章,原 文 链 接 自

http://forums.worldofwarcraft.com/thread.html?topicId= 96143900&sid=1 , 有 Wiki 维 护 改 动 , 当 前 版 本 为 [2008-03-25 15:44]。


相关文档

更多相关文档

魔兽世界宏命令完全教程
魔兽世界宏命令完全教程(考格威尔版)
魔兽世界宏命令的编写教程
魔兽世界实用宏命令
wow宏命令入门基础教程
魔兽世界宏命令全表
魔兽世界战士宏命令
魔兽世界宏命令设置
魔兽世界宏命令完全指南
魔兽世界宏命令完全教程
魔兽世界宏命令基础教学
魔兽世界宏命令普及教程(附送快捷键等新手知识集
魔兽世界宏命令教程
魔兽世界宏命令完全教程(考格威尔版)
电脑版