宏命令指引

目录

一、基本宏命令

1、什么是宏?

2、怎样写宏?

3、宏命令介绍

3.1 施放法术

3.2 使用物品或者饰品

3.3 目标选择

3.4 控制宠物

3.5 显示图标

3.6 装备物品

3.7 队列施法或使用物品

3.8 随机施法或使用物品

3.9 攻击

3.10 技能栏控制

3.11 移除增益效果

3.12 退出形态

3.13 中止施法

3.14 终止宏

3.15 上坐骑 | 解散坐骑

3.16 设置焦点

3.17 模拟点击

二、宏命令联用

三、脚本

四、命令条件语

(一)命令条件语概念

(二)可使用条件语的命令

(三)[target=]条件语

(四)语法

1、条件语法简介

2、条件语法

3、完整的EBNF语法

4、参数为空

5、条件为空

6、[target=] 条件语与命令参数

(五)命令条件语

1、总表

2、敌/友 (help / harm)

3、存在 (exists)

4、死亡 (dead)

5、姿态 (stance:0/1/2/…/n)

6、潜行 (stealth)

7、功能键状态 (modifier:shift/ctrl/alt)

8、功能键变量

9、点击状态 (button:1/2/…/5/<虚拟按键号>)

10、装备 (equipped:<物品类型>)

11、引导中 (channeling:<技能名称>)

12、技能条 (actionbar:1/…/6)

13、宠物 (pet:<宠物名称或类型>)

14、战斗 (combat)

15、行动方式、室内外状态 (mounted, swimming, flying, indoors & outdoors)

16、允许飞行  (flyable)

用于判断是否处在可以使用飞行坐骑的地区。17、小队/团队队友 (party/raid)

18、在小队/团队中 (group:party/raid)

(六)命令条件语的应用 [list]

1、设置焦点 (focus)

2、用 /click 进行分支判定

附录

一、自定义图标

二、宏的移植

三、更多信息

参考链接


一、基本宏命令

1、什么是宏?

宏是由一组宏命令组成的。以下是一些普通宏命令:

/say (/s)
/whisper(/w, /talk, /t)
/emote(/e, /em, /me)
/dance

合理利用宏,可以极大简化玩家操作。例如以下这两个宏:

/y Everybody, dance now!
/dance

/cast 变形术
/p 我羊了%t!谁打谁扛着哈!

注:宏的执行是立即进行的。当玩家执行一个宏时,宏命令会一条接一条地执行,执行完后才会返回游戏控制。这会产生两个重要问题:

  • 第一如果写了一个会执行很长时间的宏(例如 /run for i=1, 1000000000 do end),游戏会被卡死,直到它执行结束
  • 第二宏命令不具有延时功能
2、怎样写宏?
  • 首先,打开宏窗口
    • 单击主菜单上的“宏”按钮,或者在聊天界面中输入 /macro(/m) 回车
    • 在宏窗口顶端,有两个标签:“通用宏”和“<你的角色名>的专用宏”。通用宏被存储在账号专有的文件夹中,被所有角色共享。而角色专用宏则存储在角色自己的文件夹下,是角色专用的
  • 要创建一个宏,单击窗口下方的“新建”按钮,这时窗口旁边会显示一个对话框,用于选择图标和输入宏的名称。如果选择了第一个图标,WoW会自动根据所写宏命令涉及的技能或物品选择图标。选好图标,输入完名称后单击“确定”按钮
    • 使用问号图标的宏,可以通过使用 #show 指定显示的图标
    • 虽然可以给不同的宏起相同的名字,但是最好不要这样做,因为有些插件和宏命令是通过宏名称来调用宏的
    • 自定义宏的图标,请参阅附录部分
  • 在出现的文本框中输入宏
    • 宏限定为255个字符
    • 想要把宏移植到其他机器上使用,请参阅附录部分
  • 写完宏以后,只要把它的图标拖放到技能栏中即可。当玩家执行一个宏,或者是关闭宏窗口时,宏都会被自动保存
3、宏命令介绍
3.1 施放法术

宏命令为 /cast,它是最常见的宏命令,作用是施放一个技能。

/cast 暗言术:痛

执行上述宏将会对目标施放当前角色最高级的痛。制作的宏同样会在技能栏显示当前角色的技能冷却状态和射程状态,点击后同样能正确的施放。如果宏使用了问号图标,那么还同样会显示痛原有的图标。

/cast 命令对技能名称是十分严格的,文字、标点、空格,一个都不能错。为了防止出错,编辑宏时,可以打开你的技能书,按下 Shift 然后单击技能图标,技能名称和等级就会被正确地输入到你的宏编辑文本框中。

/cast 暗言术:痛(等级 5)

如果把“(等级5)”删掉,宏在执行时就会自动选择你最高级别的技能执行;不过在很多场合下,还是需要指定级别的技能,比如术士放逐就需要根据时间来选择技能。另外要注意,等级指示中使用的括号是英文的半角括号,等级与数字间有一个半角空格。而一些技能名称中的括号,比如“精灵之火(野性)”中的括号,是中文的全角括号。

  • 以下宏命令不能正常执行:
/cast 精灵之火(野性)
/cast 精灵之火(野性)(等级 1)
  • 以下宏命令可正常运行:
/cast 精灵之火(野性)
/cast 精灵之火(野性)()

空的括号效果和没有括号是一样的。由于255字符限制的存在,空间还是要节省的,所以空括号可以删掉。

3.2 使用物品或者饰品

宏命令为 /use,例如:

/use 绿色机械陆行鸟

/use 的其他用法

  • /use <装备栏>
    • 这种格式可以使用指定装备栏中的物品。具体使用请参见 装备栏编号方式,例如:使用第一个饰品
/use 13
  • /use <背包> <栏>
    • 指定使用背包中特定物品栏的物品,比如要使用行囊的第一个栏位的物品,可以使用以下宏
    • 背包的编号为 0 - 4,顺序是从右到左,即 0 是行囊。物品栏则是从上到下从左到右,从1开始依次编号的(与书写顺序相同)
/use 0 1

物品栏编号规则

1   2    3    4        |                1   2
5   6    7    8        |      3   4   5   6
9  10  11  12       |      7   8   9  10

……                    |      ……

3.3 目标选择

宏命令为 /target,例如:

/target player

除了用人名进行选择之外,还可以通过单位标识符进行选择。单位标识符(Unit ID)是用于标识特定单位的字符串。比如玩家当前的目标就可以用 target 来表示,而玩家自己对应的标识符是 player宠物的标识符是 pet。通过在一个正确的标识符后加上 target,就可以获取其目标。具体使用请参见 单位标识符 。

/target targettargettargettargettargettarget

其他选择命令:

  • /assist  不加任何其他参数时效果是选择你目标的目标,如果在其后加上人物名称,那么就会选择对应人物的当前目标
  • /cleartarget  清除当前目标
  • /targetexact  准确选择,如果附近没有单位的名字和给出的参数完全匹配,就不会切换目标
  • /targetlasttarget | /targetlastfriend | /targetlastenemy  分别用来选择上一个目标、上一个友方目标和上一个敌对目标。如果你之前没有过任何目标,那么这些命令不会产生任何影响
  • /targetenemy | /targetfriend  选择敌方目标和选择友方目标。这两条命令是按一定顺序循环选择指定类型的目标的,和使用Tab键的效果类似。如果在命令后加上一个1作为参数,那么就会按循环的反方向进行选择。注:这两个宏命令每个宏中只能用一次
  • /targetparty | /targetraid  按距离循环选择你附近的小队或团队队友,与 /targetenemy 类似,也可以用1作为参数改变选择的循环方向
3.4 控制宠物
  • /petattack  让宠物去攻击玩家的当前目标。在命令后加参数可以指定攻击的对象
  • /petfollow  宠物切换至跟随状态,同时取消攻击
  • /petpassive | /petdefensive | /petaggressive  宠物切换被动、防御和主动攻击状态
  • /petautocaston | /petautocastoff  打开/关闭宠物技能的自动施放,例如:
/petautocaston 折磨
/petautocastoff 受难
3.5 显示图标

宏命令为 #show,参数机制和 /cast 类似,可以使用技能名、物品名、物品编号(如item:12345)、装备栏或者背包+物品栏编号。

#show 炎爆术

如果一个宏使用问号图标,魔兽世界客户端会默认把宏的第一个技能或物品的图标、冷却状态等信息显示在技能栏上。

类似的还有 #showtooltip。正常情况下,鼠标指向宏的时候,提示信息显示的是宏的名字。而用 #showtooltip 可以指定宏在鼠标指向时显示的信息,用法同 #show。另外,如果使用 #showtooltip 的话,就没必要再用 #show。

3.6 装备物品

宏命令为 /equip | /equipslot

  • /equip 的参数为物品名称,效果是把对应物品装备到默认的装备栏中,类似在背包中右键单击物品
  • /equipslot 的参数为 装备栏编号和物品名称,效果是把物品装备到指定栏位
/equip 虚空角斧
/equipslot 14 棍子上的胡萝卜
3.7 队列施法或使用物品

宏命令为 /castsequence,参数为技能或物品的名称,之间用英文的半角逗号分隔,和 /use、/cast 类似。技能名、物品名、物品代号、装备栏代号和背包位代号可以混合使用。每次执行宏,就使用当前的技能或物品(从第一个开始),如果成功,队列的当前位置就被移至下一个技能或物品。也就是说需要反复执行宏来按顺序使用这些技能或物品。当最后一个技能/物品成功使用后,这个队列就会重置。

/castsequence 献祭, 腐蚀术, 痛苦诅咒, 生命通道

如果献祭没有施放成功(比如魔法不足,超出范围,被沉默了等等),则这个队列不会继续执行,直到献祭成功释放。

在技能列表之前,可以插入一个条件语,用于另外指定一些队列的重置条件。语法是:

reset=n/target/combat/shift/alt/ctrl

以上的这些条件可以任意共存。

  • n 表示数字,表示从某次执行宏开始,经过 n 秒后没有再次执行这个宏,那么队列就被重置
  • target 表示当目标切换时,宏队列重置
  • combat 表示脱离战斗后重置
  • shift,alt 和 ctrl 表示当执行宏时指定的键为按下状态时重置
/castsequence reset=10/shift 第一个技能, 其他技能, 一些物品

如果宏图标使用的是问号,就会自动显示下一个要施放技能的图标。但如果 /castsequence 前面还有其他 /cast 和 /uses 命令,则不会显示。

3.8 随机施法或使用物品

宏命令为 /castrandom | /userandom,用法和 /castsequence 类似,例如:

/castrandom 迅捷绿色机械路行鸟, 军用黑色机械路行鸟, 召唤恐惧战马
3.9 攻击

宏命令为 /startattack | /stopattack,例如:

/target player target
/startattack
3.10 技能栏控制

宏命令为 /changeactionbar | /swapactionbar,前者接受一个数字作为参数,表示要切换到的技能栏页码。/swapactionbar 命令后面要写两个页码,表示来回切换指定的两个技能页。如果当前技能页不是两个页码中的一个,当前页就会被设置为第一个页码指定的技能栏页。

/cast 雄鹰守护
/changeactionbar 1

/swapactionbar 1 2
3.11 移除增益效果

宏命令为 /cancelaura,作用是移除自己不想要的增益效果(BUFF),参数为技能名称。

/cancelaura 拯救祝福
3.12 退出形态

宏命令为 /cancelform,作用是任何有“形态”的职业(德鲁伊、暗牧)退出当前形态。

/cancelform
/use 超强治疗药水
3.13 中止施法

宏命令为 /stopcasting,作用是打断当前施法。

/stopcasting
/cast 暗影灼烧
3.14 终止宏

宏命令为 /stopmacro,作用是如果满足了某些条件,则中止宏继续运行。

3.15 上坐骑 | 解散坐骑

宏命令为 /mount | /dismount

3.16 设置焦点

宏命令为 /focus,作用是把一个目标设为焦点。

/cast [target=focus] 变形术
3.17 模拟点击

宏命令为 /click,作用是模拟点击设置的按钮,参数为一个按钮(本质上来说是一个窗口)的名称。默认情况下,它的效果相当于左键单击,也可以根据设置成其他按键点击的效果。按钮名称可以通过以下方式获知:

  • 使用插件。某些插件,比如 MoveAnything,提供了查看窗口名称的功能
  • 查看界面的源代码
  • 利用宏获取当前鼠标指向的窗口名称
/run local f=GetMouseFocus(); if f then DEFAULT_CHAT_FRAME:AddMessage(f:GetName()) end

/click 有很多用途,例如利用它一次执行很多宏。一条宏命令的长度有不能超过255字符的限制,可以把后面写不下的代码写到另一个宏中,并在前面那个宏的末尾写上以下指令,再把第二个宏拖到名叫 MultiBarRightButton1 的栏位中,这样执行第一个宏就相当于执行了所有的宏命令。

用于指定按键的参数还可以是 LeftButton(左键,默认),MiddleButton(中键),Button4(4号键)和Button5(5号键,职业玩家的鼠标……)。

/click MultiBarRightButton1  --- 写到第一个宏末尾

/click PetAttackButton5 RightButton  --- 右键单击一下宠物栏上第五个按钮

二、宏命令联用

  • 在一个宏命令中,一键释放多个法术是不行的。大多数技能和很多物品会触发公共冷却(GCD)。即使一个技能释放失败,如果它可以触发GCD,那么它也会阻止后续 /cast 命令的执行
  • 可以通过查看技能说明了解技能是否可以瞬发,通过实际测试可知是否会触发GCD

三、脚本

魔兽世界客户端的用户界面可以通过LUA脚本控制。通过 /run 和 /script 命令可以执行脚本。在命令后面书写脚本内容,中间不能换行,脚本要写在一行中。一个宏中可以包含多个 /run 命令。

如果有一定的编程经验,那么就可以访问 lua.org 学习LUA语言。如果没有什么基础,那么请先看 编程入门 了解一些基本概念。

暴雪提供了很多API函数(Application Programming Interface),可以在LUA脚本中调用来实现对界面的控制。关于API函数和相关的内容可以看看这篇文章:界面DIY。

/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
--- 向所有和你目标相同的人发送悄悄话,通知他们改变目标,这样就可以防止已被羊的人受到攻击

四、命令条件语

(一)命令条件语概念

命令条件语是插入在宏命令中,使宏根据条件执行不同功能的语句。

/cast [help] 恢复; [harm] 暗言术:痛  --- 如果是友方目标就施放恢复,如果是敌方目标就上痛

当这个宏执行时,首先检查 [help] 条件,判断当前目标是否是一个可以接受治疗/增益法术的目标。如果 [help] 条件成立,那么就施放恢复并执行下一条命令,否则(即没有目标,或目标不接受有益技能)继续执行下一个子句,也就是分号后的 [harm],再判断 [harm] 条件。[harm] 条件和 [help] 条件相反,判断目标是否接受敌对法术。同上,如果条件成立就释放“暗言术:痛”并执行下一条命令。如果条件不成立,由于后面没有其他子句,这条宏命令就算执行完了,但是什么动作都没有做。

如果没有写 [harm] 条件,实际运行效果也差不多。不过,如果你没有目标或者当前目标不接受任何法术,那么屏幕上将会出现错误信息,或者对于某些技能,鼠标将会变成选择施放目标的状态。

(二)可使用条件语的命令

只有那些“安全化”命令可以接受命令条件语。其实正是经过安全化的命令才需要条件语。常规命令,比如说聊天、表情之类的,可以通过脚本来实现命令条件语的功能。而且暴雪不想限制大家在聊天时使用分号(;)。如果/s命令可以使用命令条件语的话,那么下面这个命令就会只说hello:

/say Hello; I’m a n00b

以下是当前客户端中安全化命令的列表:

#show  ① /petautocaston
#showtooltip  ① /petdefensive
/assist /petfollow
/cancelaura /petpassive
/cancelform /petstay
/cast /startattack
/castrandom /stopattack
/castsequence /stopcasting
/changeactionbar /stopmacro
/clearfocus /swapactionbar
/cleartarget /target
/click /targetenemy
/dismount /targetfriend
/equip  ② /targetlasttarget
/equipslot  ② /targetparty
/focus /targetraid
/petagressive /use
/petattack /userandom
/petautocastoff
  • ①  #show 和 #showtooltip 不是真正意义上的安全化命令,但是它和 /use 以及 /cast 的内部机制相仿
  • ②  /equip 和 /equipslot 逻辑上也不算是安全化命令,因为它们的功能是可以通过插件和脚本实现
(三)[target=]条件语

该条件语使得宏命令除了可以对条件进行判断外,还可以设置动作的目标。

/use [target=player] 厚灵纹绷带  --- 无论当前目标是谁,玩家只会给自己绑绷带

Target 条件语在指定动作目标的同时,也指定了进行条件判断的目标。

/cast [help] [target=targettarget, help] [target=player] 快速治疗

这个宏运行时,首先会检查 [help] 条件。如果条件为真,那么就开始吟唱快速治疗。否则就跳至第二个条件,[target=targettarget, help]。此时,判断目标和技能目标都被设定为你当前目标的目标,然后进行 help 条件判断。如果条件成立就对你当前目标的目标施放快速治疗,否则再跳至第三个条件。而第三个条件总是成立的,所做的只是把你自己当作施法目标。

(四)语法
1、条件语法简介

所有的宏命令的基本工作方式是相同的:一个命令,后面带上一个或多个参数(取决于命令的要求,有些甚至不需要任何参数)。

/cast 猛击
\___/ \___/
 |   |
命令  参数


/petattack
\_______/\__/
  |    |
 命令  参数(为空)


/castsequence reset=target 献祭, 腐蚀术, 痛苦诅咒, 生命虹吸
\__________/  \_​_​_​_​_​_​_​_​_​_​_​_​_​_​_​_​_​_​_​_​_​_​_​_​_​_​_​_​_​__​__​__​__​_​_​_​/
   |              |
  命令             参数

 命令条件语可以通过对一组条件进行的判断来选择命令的实际参数。

  • 可以用分号分隔出若干个“若干组条件+参数”这样的子句,逻辑上,分号就相当于高级语言中的 else 或是 elseif
  • 条件的组数不定,也可以没有,同一组条件用一个方括号括在一起
  • 每组条件中有可以包含多个条件
  • 宏命令的解释过程是从左至右的。当一组条件被判定成立时,命令就会采用其对应的条件。如果某一个子句中不包含条件,那么就被无条件判定为成立。像 /cast XXX 这种简单的宏命令就可以理解为一个只有一个子句的宏,而这个子句又不包含条件。如果一个宏的任何一组条件都不为真,那么它就不会执行
/命令 [一组条件] [另一组条件] 参数1; [又一组条件] 参数2; ……
2、条件语法

每组条件都是由逗号分隔的一些条件语组成的,各条件不分前后次序。逻辑上,[target=]总是先发生作用,然后其他的条件才进行判定。逗号在这里可以理解为“并且”,也就是说各条件是逻辑“与”的关系。例如:[help, nodead, target=focus] 的含义就是:我的焦点是友善的,并且是只活的。

注意:条件对大小写是敏感的,如果把 [help] 写成了 [Help],宏运行时会报错。

条件中有组合式的使用方式,比如 nodead,同样对于 help,你可以用 nohelp 表示相反的条件。但是 nohelp 不等于 harm:首先,help 和 harm 都要求目标存在才有可能成立;其次,有些目标,比如中立阵营 NPC、非战斗宠物或者护送任务 NPC 等,既不算 help,也不算 harm。

还有些条件可以指定一些特定的参数。比如 [stance],姿态,单独使用时表示“在任一姿态中”。如果给它加上参数,就可以指定在某个姿态下,格式是在条件语后写上冒号(:),然后后面写上参数,每个参数间用斜线(/)分隔。综上所述,一个条件语的完整格式如下(<>表示其中的部分是可选的):

[condition<:parameter>>>]

/cast [stance:1/2] 盾击; 防御姿态  --- 如果在战斗或防御姿态就施放盾击,否则转入防御姿态

注意:“no” 前缀是对整个条件和所有参数的修饰,即把原来的真变为假,假变为真。比如[nostance:1/2] 表示“不在姿态1也不在姿态2中”。

3、完整的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' ?
4、参数为空

由于分号的存在,下面这个语句实际上包含两个子句,而一个条件语为空的子句是被当作条件成立处理的,因此即使前面的条件语1不成立,也会执行一个 /petattack。

/petattack [target=focus, harm] ;
\________/ \________________/V V V
  |        |       | | |
 命令      条件语      | | 参数(为空)
                  | |
                 | 条件语(为空)
                  |
                 参数(为空)
5、条件为空

有时我们需要在特定条件下对特定目标施放技能,并在条件不成立的情况下按常规施放。这中效果可以通过使用一组空条件来获得。下面例子中的宏在执行时会对鼠标指向的友方单位施放圣光闪现。如果鼠标没有指向任何单位或者指向的目标不是友善的,那么就会按常规对当前目标施放,或者根据设置(如自动自我施法、自我施法功能键)对自己施放。

/cast [target=mouseover, help] [ ] 圣光闪现
6、[target=] 条件语与命令参数

很多命令的参数是可以直接指定目标。比如 /target party1 就可以把小队中第一个队友作为你的目标。而用 /target [target=party1] 的话,虽然看起来别扭,但是效果也是一样的。但是宏的设计者不希望我们根据一个单位的状态而对另一个单位执行动作,因此大多数情况下 [target=] 条件和命令参数只能有一个发生作用。

/target [target=focus, dead] party1

客户端会把 party1 直接忽略掉——因为你已经指定了[target=focus]。不过这种情况也有例外,就是个别命令拥有一个“特殊单位”(其实也就是该命令会影响的单位标志符)。当在[target=]中使用的是该命令的“特殊单位”时,命令执行目标不会被设置为该单位,而命令参数中指定的目标也不会被忽略。

/focus [target=focus, dead] [target=focus, noharm] target

由于 focus 是 /focus 命令的特殊单位,所以 /focus 的目标就不会被 [target=focus] 设置成焦点,而是 target,即当前目标。如果没有指定 target,/focus 就相当于没有参数,同样是把当前目标设为焦点。

宏命令 特殊单位
/target target
/focus focus
/startattack target
/petattack pettarget
(五)命令条件语
1、总表

下面列出宏命令系统中支持的所有条件语。如果你需要的判断条件没有在此列出,那么就不可能通过该条件来执行安全化命令的动作。

  • 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  
玩家在某集体中(小队/团队)
2、敌/友 (help / harm)

如果判断对象是友善/敌对,条件就成立。

3、存在 (exists)

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

4、死亡 (dead)

如果判断对象已死亡,条件就成立。

5、姿态 (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] 精灵之火

--- 如果在熊/猫形态,施放精灵之火(野性);在人形态,施放精灵之火;在其他形态就先退出,然后施放精灵之火
6、潜行 (stealth)

对于盗贼来说由于 [stance] 的存在反而显得多余。这个是给暗夜、法师、猫德用的,它可以用来判断影遁、隐形和猫的潜行。

7、功能键状态 (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 以节省空间。

8、功能键变量

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

/cast [modifier:SELFCAST, target=player] [target=mouseover] [ ] 强效治疗术

这样的话,不管你系统设置的自我施法键是什么,宏命令都会正常执行。下面给出其他的一些系统变量,括号内为默认值,后面为中文含义:

  • AUTOLOOTTOGGLE (shift)
  • STICKYCAMERA (ctrl)
  • SPLITSTACK (shift)
  • PICKUPACTION (shift)
  • COMPAREITEMS (shift)
  • OPENALLBAGS (shift)
  • QUESTWATCHTOGGLE (shift)
9、点击状态 (button:1/2/…/5/<虚拟按键号>)

与 [modifier] 类似,[botton] 可以根据不同的鼠标点击按钮做不同动作。1为左键,2为右键,3为中键,4和5则对应五键鼠标上另外两个扩展键。如果是通过键盘触发宏,那么也相当于左键点击。例如:

#show迅捷绿色机械陆行鸟
/userandom [nobutton:2, flyable, nomounted] 黑色狮鹫; [nomounted] 黑色战豹, 迅捷绿色机械陆行鸟
/dismount [noflying] [button:2]

非右键键点击时,如果没在坐骑上就召唤坐骑;如果右键点击并且不在飞行状态则取消坐骑。而虚拟按键号一般可以忽略,有些动作条插件可以在不同条件下向宏按钮提供不同的虚拟按键号,具体情况请查看插件说明。

10、装备 (equipped:<物品类型>)

[equipped] 条件可以判断指定类型的物品是否被装备。物品类型号可以是装备栏名称,物品类别或者物品子类别。比如我根据盾牌装备状态判断该用盾击还是拳击,利用 [equipped] 这里的 #show 可以根据装备显示不同的图标。

#show [equipped:Shields] 盾击; 拳击
/cast [equipped:Shields,stance:1/2] 盾击; [equipped:Shields] 防御姿态; [stance:3] 拳击; 狂暴姿态

下面再给出一个变态的压制宏作例子:

/equip [noequipped:Two-Handed Axes] 水晶熔铸战斧
/cast [nostance:1] 战斗姿态; [equipped:Two-Handed Axes] 压制
11、引导中 (channeling:<技能名称>)

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

12、技能条 (actionbar:1/…/6)

系统默认的界面中有一个主技能条,可以翻页。而用这个条件就可以根据当前技能页作出不同反应。比如猎人可以拿来把守护做成姿态:

/swapactionbar 1 2
/cast [actionbar:1] 雄鹰守护; 灵猴守护

这样就可以切换1号和2号两个技能页,换到1页时施放雄鹰守护,2页时则施放灵猴守护。

13、宠物 (pet:<宠物名称或类型>)

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

/cast [pet] 冰冻术;冰霜新星
14、战斗 (combat)

如果在战斗状态则条件成立。

15、行动方式、室内外状态 (mounted, swimming, flying, indoors & outdoors)

它们都是对玩家自身状态的判断,而不是目标。

16、允许飞行  (flyable)
用于判断是否处在可以使用飞行坐骑的地区。

17、小队/团队队友 (party/raid)

判断目标是否是自己的小队或团队中的队友。

18、在小队/团队中 (group:party/raid)

注意和前面的区别。这个用于判断玩家自己是否处在小队或团队中,并且团队包括小队。这对加状态很有用,比如:

/cast [group, nomodifier] 奥术光辉; [help] [target=player] 奥术智慧  --- 如果在队伍中,施放奥数光辉;如果按下功能键或者不在队伍中则施放奥术智慧。
(六)命令条件语的应用 [list]

在第一部分中提到的很多命令,如果不配合条件语的使用,是没有什么价值的。

1、设置焦点 (focus)

focus 是一个单位标识符(参见 单位标识符),就像 target、player、raidpet1target一样。你可以将它设定为某一个单位,玩家或者NPC。比较简单的设置方法是通过按键设置。在按键设置中有两个选项:“焦点目标”和“目标焦点”,其实际含义分别是“以目标为焦点”和“以焦点为目标”。当设置了焦点以后,就可以用 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 命令的特殊单位)
    • 你的当前焦点不是敌对目标(如果焦点不存在该条件也成立)
    • 你的焦点已经死了
    • 某个功能键被按下了
  • 第二行判断你的焦点是否存在,如果不存在就终止宏的运行。注意到这里用了 /stopmacro 命令,而不是在 /cast 命令中对焦点是否存在进行判断。这样的好处是我们可以在宏的最后加上更多的内容,比如一个小队喊话。

下面这个宏可以把目标和焦点互换。前两行的作用是把死亡的目标和焦点清除掉。第四行的作用是防止你没有当前焦点,导致当前目标不变,以至于在第五行选择了你以前的一个目标。

/cleartarget [target=target, dead]
/clearfocus [target=focus, dead]
/target focus
/cleartarget [target=focus, noexists]
/targetlasttarget
/focus target
/targetlasttarget

https://nga.178.com/read.php?&tid=1858624&pid=24931032&to=1
2、用 /click 进行分支判定

假如你想让一个按键根据不同的功能键施放不同的技能,并且根据左键右键选择不同的施放目标,那么可以参照下面这个例子(分开写是为了不超过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] 恢复

附录

一、自定义图标

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

二、宏的移植

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

三、更多信息

如果你有关于宏的疑问,并且在此找不到答案,可以看看这里:Macro FAQ & Repository,其中包含很多对于常见问题的解答和一些很好的例子。而且最好多看看 wowwiki(国内访问的话很可能需要代理),可以获得很多东西,比如宏和脚本相关的文章,还有数据控喜欢的关于游戏算法的研究。

四、鸣谢

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

五 、译者注

这个中文版译自:http://www.wowwiki.com/Making_a_macro

原文链接自:World of Warcraft Forums

参考链接

宏命令全表

World of Warcraft wiki

你可能感兴趣的:(魔兽世界,游戏)