1、魔兽世界宏命令完全教程1考格威尔(Cogwheels)宏命令完全指南Cogwheel著 WOWWiki共享维护 Subelf译 版权所有 请勿用于商业用途1一、基本宏命令11.什么是宏?宏是由一组宏命令组成的。以下是一些普通宏命令: /say (/s) /whisper(/w, /talk, /t) /emote(/e, /em, /me) /dance 喜爱PVP的人,应该不会忘了这个:/spit利用宏,我们可以把这些宏命令放到技能栏上点击使用,而且可以同时做多个动作。写宏的时候,每条动作写在一行上,就像在聊天界面中输入的一样。比如,让你的角色喊一声“Everybody, dance now
2、!”然后开始跳舞的宏:/y Everybody, dance now!/dance一个基本完整的宏命令列表可以参考这里:宏命令全表,不过个别新添加的宏命令还没有被收录。WoWWiki有很多关于宏的资料,尤其是脚本和/run命令(后面将会提到)。注:我先在此说一下,宏的执行是立即进行的。这意味着当你点击技能栏上的一个宏时,宏命令会一条接一条地执行,执行完后才会返回游戏控制。这将会产生两个重要问题:第一,如果写了一个会执行很长时间的宏(如:/run for i=1, 00 do end),游戏会被卡死,直到它执行结束;第二,也是更重要的一点,那就是宏命令不可能具有延时功能。这一现象在我们熟悉/ca
3、st之类的命令后就可以很清楚地感觉到。而一些提供了延时执行命令功能的插件,只能是能执行一些所谓的“良性命令”,如交谈、表情和对于其他插件命令的调用(不过战斗中更换武器是可以进行的)。12.怎样写宏?首先,打开你的宏窗口:单击主菜单上的“宏”按钮,或者在聊天界面中输入/macro(/m)回车。在宏窗口的顶端,可以看见两个标签:“通用宏”和“的专用宏”。通用宏被存储在账号专有的文件夹中,被所有角色共享。而角色专用宏则存储在角色自己的文件夹下,是角色专用的(废话囧)。在标签下面是18个存放宏的栏位。再往下是一个栏位,用于显示当前选中的宏;还有一个“修改名称/图标”的按钮,用于修改选中的宏。然后是一个
4、用于显示、编辑当前宏的文本框。最下面是三个按钮,傻子也能看出它们是干什么的。如果要创建一个宏,首先单击窗口下方的“新建”按钮,这时窗口旁边会显示一个对话框,用于选择图标和输入宏的名称。如果选择了第一个图标(就是那个很红很暴力的问号),WoW会自动根据你宏命令中涉及的技能或物品选择图标。选好图标,输入完名称,就可以单击“确定”按钮了。顺便提几点:1.使用问号图标的宏,可以通过使用#show指定显示的图标。2.虽然可以给不同的宏起相同的名字,但是最好不要这样做。因为有些插件和宏命令是通过宏名称来调用宏的。3.在图标列表中可以添加自定义的图标。现在,你选择的宏图标被显示在栏位中了(还会显示部分宏名称
5、)。同时,新建的宏被选中,图标显示在当前选中宏的栏位中:现在你可以写你的宏了。单击编辑文本框,然后输入吧。注:宏限定为255个字符,传闻这样做是为了以后可以把用户的宏上传到服务器中。不过现在能做的就是遵循这个限定,至于想要把宏移植到其他机器上使用,请参见第三部分的宏的移植。写完宏以后,只要把它的图标拖放到技能栏中就可以了。当你执行一个宏,或者是关闭宏窗口的时候,宏都会自动保存的。现在点击宏的图标,看看效果吧!13.施放法术在正常游戏过程中,很多宏命令通过聊天窗口输入使用似乎并不好用,但是在宏中就不一样了。在特定场合下,简简单单的表情宏也可以产生有趣的角色扮演效果哦,那么,继续看这个:/cast
6、,它是最常见的宏命令了。作用嘛,就是施放一个技能书中的技能(包括宠物的)。最简单的用法就是这样:/cast 暗言术:痛把这个宏放到技能栏上点击,将会对目标施放你最高级的痛。这和把技能书中的痛拖到技能栏上,然后点击的效果是一样的。我们制作的宏同样会在技能栏显示你的技能冷却状态和射程状态,点击后同样能正确的施放痛。如果宏使用了问号图标,那么还同样会显示痛原有的图标。那直接用技能不就行了么,何必用宏呢?继续看,在宏中通过集成多条命令可以产生什么效果吧,这才是宏的价值所在。比如说你是个法师,想让队友知道你要羊掉谁,你该怎么办?用宏吧,一个简单的/p命令加上一个/cast就可以了(使用这个无耻的插件可以
7、达到更好的效果:CCWarn,不过我们现在需要的只是这个简单易懂的教学例子):/cast 变形术/p 我羊了%t!谁打谁扛着哈!注:由于宏的执行是立即进行的,所以不管目标是否有效技能是否冷却,宏被点击时/p命令就执行了,也就是说这两行命令的顺序颠倒后效果是相同的。如果你想在确定成功施放一个技能后才执行某条命令,你可以试试这个插件:AfterCast。AfterCast可以设定在施放某个技能后执行一条宏命令,当然,是在第1节末尾所提到的限制之下的。如:/aftercast /p 请队友点门,把懒猪%t揪过来!/cast 召唤仪式1i.关于技能名称和等级的说明/cast命令对技能名称是十分严格的,
8、文字、标点、空格,一个都不能错。为了防止出错,编辑宏时,你可以打开你的技能书,按下Shift然后单击你的技能图标,技能名称和等级就会被正确地输入到你的宏编辑文本框中,如:/cast 暗言术:痛(等级 5)如果把“(等级5)”删掉,宏在执行时就会自动选择你最高级别的技能执行;不过在很多场合下,还是需要指定级别的技能,比如术士放逐就需要根据时间来选择技能。另外要注意,等级指示中使用的括号是英文的半角括号,等级与数字间有一个半角空格。而一些技能名称中的括号,比如“精灵之火(野性)”中的括号,是中文的全角括号。以下宏命令不能正常执行:/cast 精灵之火(野性)/cast 精灵之火(野性)(等级 1)
9、而以下的命令是正确的:/cast 精灵之火(野性)/cast 精灵之火(野性)()空的括号效果和没有括号是一样的。由于255字符限制的存在,空间还是要节省的,所以空括号可以删掉了14.使用物品或者饰品使用物品和饰品和施放法术是类似的。用于使用物品的命令是/use,后面只需要加上物品的名字就可以了。例如:/use 绿色机械陆行鸟另外,还有以下其它的使用格式:1i./use 这种格式可以使用指定装备栏中的物品。具体使用请参见装备栏编号方式。例如:/use 13使用第一个饰品。1ii./use 这种形式是在指定背包中确定物品栏的,比如你总是把猫食狗粮放在行囊的第一个栏位中,那么你就可以用这样的宏来喂
10、养宠物:/cast 喂养宠物/use 0 1背包的编号为0-4,顺序是从右到左,即0是行囊。物品栏则是从上到下从左到右,从1开始依次编号的(与书写顺序相同):1 2 3 45 6 7 8或者是: 1 23 4 5 67 8 9 10如果怕把/cast和/use的用法混淆了,那就彻底搞混吧,因为它们其实本来就是完全一样。/cast可以使用物品,而/use也可以施放技能。这一点在目前看来似乎没有什么,但是到后面,介绍命令条件语和施法队列时,你会发现能把物品和技能混合在同一条命令中是多么爽的一件事。15.集成多个动作首先,在一个宏中想一键释放多个法术是不行的。大多数技能和很多物品会触发公共冷却(GC
11、D),防止你同时做太多的动作。即使一个技能释放失败,如果它可以触发GCD,那么它也会阻止后续/cast命令的执行。这是版本之后的设定,之前可能看到这样的宏:/cast 压制/cast 斩杀/cast 致死打击/cast 破甲但是现在,记住,这种宏已经不能正常执行了。如果压制施放失败,虽然没有触发GCD,客户端也不会继续执行后续的技能施放。不过令人欣慰的是部分技能还是可以集成到一个宏中。任何不触发GCD的瞬发技能后面可以接上另一个技能(“下次近战攻击”型的技能,如英勇打击也归于此类)。一个技能可以通过看说明知道它是否瞬发,至于是它是否触发GCD通过实验就可以知道。版本之前,在这个瞬发无GCD技能
12、之后需要加上一个/stopcasting才可以施放其后的技能。施放第一个技能后,游戏客户端会认为当前在施法状态,而/stopcasting就可以解除这个状态,就可以解决后续技能不能释放的问题。但是由于技能是瞬发,/stopcasting实际上并不能取消技能的施放。而现在这里可以不用/stopcasting了,例如:/use 短暂能量护符/cast 奥术强化100码2.2.3i,targetif UnitIsUnit(u.t,t)then SendChatMessage(Change targets! Trying to sheep.,WHISPER,nil,UnitName(u)end end
13、呃貌似看起来有些乱不过没办法首先,宏是有255字符数限制的,所以常常要用一些不美观的方式去写代码。其次,脚本要写在一行中。这两个条件导致代码的可读性很低。如果把代码单独拿出来美化一下的话,应该是这个样子:for i = 1, GetNumRaidMembers() - 1 do local unit = raid.i if UnitIsUnit(unit.target, target) thenSendChatMessage(Change targets! Trying to sheep., WHISPER, nil, UnitName(unit) endend1二、命令条件语11.什么是命令
14、条件语?命令条件语是插入在宏命令中,使宏根据条件执行不同功能的语句。举个例子,下面这个宏的作用是,如果是友方目标就施放恢复,如果是敌方目标就上痛:/cast help 恢复; harm 暗言术:痛当这个宏执行时,首先检查help条件,判断当前目标是否是一个可以接受治疗/增益法术的目标。如果help条件成立,那么就施放恢复并执行下一条命令,否则(即没有目标,或目标不接受有益技能)继续执行下一个子句,也就是分号后harm那里,再判断harm条件。harm条件和help条件相反,判断目标是否接受敌对法术。同上,如果条件成立就释放“暗言术:痛”并执行下一条命令。如果条件不成立,由于后面没有其他子句,这
15、条宏命令就算执行完了,但是什么动作都没有做。注:如果没有写harm条件,实际运行效果是差不多的。不过,如果你没有目标或者当前目标不接受任何法术,那么屏幕上将会出现错误信息,或者对于某些技能,鼠标将会变成选择施放目标的状态。12.可以使用条件语的命令只有那些“安全化”命令可以接受命令条件语。其实正是经过安全化的命令才需要条件语。常规命令,比如说聊天、表情之类的,可以通过脚本来实现命令条件语的功能。而且暴雪不想限制大家在聊天时使用分号(;)。如果/s命令可以使用命令条件语的话,那么下面这个命令就会只说hello:/say Hello; Im a n00b以下是当前客户端中安全化命令的列表:#sho
16、w1#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 /st
17、opmacro /swapactionbar /target /targetenemy /targetfriend /targetlasttarget /targetparty /targetraid /use /userandom注1:#show和#showtooltip不是真正意义上的安全化命令,但是它和/use以及/cast的内部机制相仿。注2:/equip和/equipslot逻辑上也不算是安全化命令,因为它们的功能是可以通过插件和脚本实现的。当然,如果你希望在常规命令中使用命令条件语,就需要安装专门的插件。MacroTalk,这是我的一个作品,通过在非安全化命令前添加/opt,然后在
18、/opt中处理各类条件来实现对不同命令的调用(当然只能是非安全化命令)。最新版的SuperMacro中应该也有类似的功能。13.target=条件语该条件语使得宏命令除了可以对条件进行判断外,还可以设置动作的目标。例如,下面这个宏运行时,无论当前目标是谁,玩家只会给自己绑绷带:/use target=player 厚灵纹绷带Target条件语在指定动作目标的同时,也指定了进行条件判断的目标。下面这个垃圾宏是一个纯教学例子,看我的说明:/cast help target=targettarget, help target=player 快速治疗这个宏运行的时候,首先会检查help条件。如果条件为
19、真,那么就开始吟唱快速治疗。否则就跳至第二个条件,target=targettarget, help。此时,判断目标和技能目标都被设定为你当前目标的目标,然后进行help条件判断。如果条件成立就对你当前目标的目标施放快速治疗,否则再跳至第三个条件。而第三个条件总是成立的,所做的只是把你自己当作施法目标。14.语法命令条件语是按什么规则生效的?恐怕要回答这个问题很容易引起混乱。所以,趁还没有正式开始讲,我先用一些现实生活的例子做类比。看不懂不要紧,这只是些概念,技术性的内容后面都还会再提到的。1i.条件语语法简介所有的宏命令的基本工作方式是相同的:一个命令,后面带上一个或多个参数(取决于命令的要
20、求,有些甚至不需要任何参数)。看下面这些例子:/cast 猛击_/ _/ | | | 参数 |命令/petattack_/ / | | | 参数(为空) | 命令/castsequence reset=target 献祭, 腐蚀术, 痛苦诅咒, 生命虹吸_/ _/ | | 命令 参数而命令条件语可以通过对一组条件进行的判断来选择命令的实际参数。首先,可以用分号分隔出若干个“若干组条件+参数”这样的子句,逻辑上,分号就相当于高级语言中的else或是elseif。条件的组数不定,也可以没有,同一组条件用一个方括号括在一起。而每组条件中有可以包含多个条件。就像这样:/命令 一组条件 另一组条件 参数
21、1; 又一组条件 参数2; 前面的例子已经说明了,宏命令的解释过程是从左至右的。当一组条件被判定成立时,命令就会采用其对应的条件。如果某一个子句中不包含条件,那么就被无条件判定为成立。像/cast XXX这种简单的宏命令就可以理解为一个只有一个子句的宏,而这个子句又不包含条件。而如果一个宏的任何一组条件都不为真,那么它就完全不会执行。1ii.条件语法每组条件都是由逗号分隔的一些条件语组成的,各条件不分前后次序。逻辑上,target=总是先发生作用,然后其他的条件才进行判定。逗号在这里可以理解为“并且”,也就是说各条件简是逻辑“与”的关系。比如help, nodead, target=focus
22、的含义就是:我的焦点是友善的,并且是只活的。注意:条件是对大小写敏感的,如果你把help写成了Help,宏运行时会报错。条件中有组合式的使用方式,比如nodead,同样对于help,你可以用nohelp表示相反的条件。但是nohelp不等于harm:首先,help和harm都要求目标存在才有可能成立;其次,有些目标,比如中立阵营NPC、非战斗宠物或者护送任务NPC等,既不算help,也不算harm。还有些条件可以指定一些特定的参数。比如stance,姿态,单独使用时表示“在任一姿态中”(显然这对战士来说是废话一句)。如果给它加上参数,就可以指定在某个姿态下,格式是在条件语后写上冒号(:),然后
23、后面写上参数,每个参数间用斜线(/)分隔。综上所述,一个条件语的完整格式如下(表示其中的部分是可选的):condition:parameter/parameter/parameter下面举个例子,如果在战斗或防御姿态施放盾击,否则转入防御姿态:/cast stance:1/2 盾击; 防御姿态这个宏用伪代码写的话就是:IF 当前在姿态1或姿态2 THEN 用盾击 ELSE 切换防御姿态注意:“no”前缀是对整个条件和所有参数的修饰,即把原来的真变为假,假变为真。比如nostance:1/2表示“不在姿态1也不在姿态2中”。1iii.完整的EBNF语法对EBNF规范很熟悉的人,以上内容可以概括为
24、:command = /, command-verb, command-object, ; command-object command-verb = ? any secure command word ?command-object = condition parametersparameters = ? anything which may be passed to the command word ?condition = condition-phrase , condition-phrase condition-phrase = no , option-word, : option-a
25、rgument / option-argument option-argument = ? any one-word option, such as shift, ctrl, target, 1, 2 ?1iv.参数为空有些命令是可以没有参数的,这里就存在着一个陷阱。比如:/petattack target=focus, harm;很多初学者一看,认为这个宏的含义应该就是判断焦点是否为敌对,如果是,就把宠物送上去咬。而实际上呢?让我们分析一下:/petattack target=focus, harm ;_/ _/ V V V | | | | | 命令 条件语1 | | 参数2 (为空) |
26、| | 条件语2(为空) | 参数1 (为空)现在看出来了吧?由于那个分号的存在,这个语句实际上包含两个子句,而一个条件语为空的子句是被当作条件成立处理的,因此即使前面的条件语1不成立,也会执行一个/petattack。1v.条件为空有时我们需要在特定条件下对特定目标施放技能,并在条件不成立的情况下按常规施放。这中效果可以通过使用一组空条件来获得。下面例子中的宏在执行时会对你鼠标指向的友方单位施放圣光闪现。如果鼠标没有指向任何单位或者指向的目标不是友善的,那么就会按常规对当前目标施放,或者根据设置(如自动自我施法、自我施法功能键)对自己施放。/cast target=mouseover, he
27、lp 圣光闪现1vi.target=条件语与命令参数很多命令的参数是可以直接指定目标的。比如/target party1就可以把小队中第一个队友作为你的目标。而用/target target=party1的话,虽然看起来别扭,但是效果也是一样的。但是宏的设计者不希望我们根据一个单位的状态而对另一个单位执行动作,因此大多数情况下target=条件和命令参数只能有一个发生作用。例如:/target target=focus, dead party1客户端会把party1直接忽略掉因为你已经指定了target=focus。不过这种情况也有例外,就是个别命令拥有一个“特殊单位”(其实也就是该命令会影响
28、的单位标志符)。见下表:命令 特殊单位/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就相当于没有参数,同样是
29、把当前目标设为焦点。15.命令条件语下面给出一张条件总表,每一个条件在后面我都会再给出更详细的介绍。1i.总表在对宏命令系统的更新中,宗旨就是把玩家从按“一键万能宏”按到手抽筋的状态中“解脱”出来。不过有一些宏的用法是被官方认可了的,它们获得了“玻璃渣祝福”的效果可以通过使用条件语来重现。下面列出宏命令系统中支持的所有条件语。如果你需要的判断条件没有在此列出,那么就不可能通过该条件来执行安全化命令的动作。这是中央的死龟腚,谁都没办法,不过以后也有可能会再增加一些。 help 目标可以接受增益法术 harm 目标可以受到攻击 exists 目标存在 dead 目标已经挂了 stance:0/1/
30、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 玩家在某集体中(小
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1