今天我们来介绍下WoW中的Macros,这是一种强大的工具,使得每个玩家可以定制自己常用的动作,极大的提高游戏效率。
在继续之前,你需要:
1、WoW(废话。。。)。
2、DiscordMods有个很好的Discord Macro Functions Library,里面有些方便的函数可以大幅简化你的代码,必备。
3、你还需要一些特定功能的函数库,例如这个极其有用的IsBuffActive,用一个函数判断某个buff是不是在unit身上;还有一个AfterCast,是WoWar的Camus版主喜欢的,用于根据法术施放的结果来确定说什么话。
4、一个好的WoW LUA脚本编辑器,这个不是必须的,但是有的话,可以避免一些初级的语法错误,我用的是:WoW SciTe LUA。WoWWiki还有其他一些有用的工具介绍。
5、如果在这方面有任何问题,你可以在你可以在WoWWiki找到一些有用的东西。
好,Let's go!
首先我们来看看基本的宏。要在WoW中建立自己的宏是很简单的:
1、输入/m 回车,会打开一个宏命令编辑的窗口;
2、选择新建,在弹出的对话框中输入名称,选择对应的图标,确定;
3、在编辑窗口输入宏代码;
4、点击完成,然后就可以把图标拖到你的动作条上去了用了。
我们来看两个基本的例子。第一个是一句话的,就是常用的一些表情,不喜欢每次去点那个泡泡的话(或者像我干脆把泡泡废了的),就可以作个宏,然后拉到动作条上去。代码如下:
/Cry
或者
/哭泣
效果一样,就是对你选中的对象哭。。。相关的列表很长,我就不列了,你可以在泡泡中找到,也可以下载一些综合资料,例如8M推荐的
WoW Guide,里面也有。
第二个例子也很简单,就是你释放某些法术的时候,希望通知队友,代码如下:
/施放 地狱烈焰(等级 2)
/script SmartChat("正在释放地狱烈焰,注意保护!", false, nil)
第一句就是施法的命令,第二句调用Discord库里的一个有用的函数SmartChat,它的效果是:根据你目前所在的队伍,自动把消息发到团队、小队频道,或者你在solo的时候直接用“说”。很简单是吧?再来看第三个,稍微复杂一点,如果你希望在你的消息中引用你目前选中的对象,那么:
/施放 放逐术(等级 2)
/script SmartChat("正在放逐 >>%t<< ,请不要攻击!", false, nil)
注意里面的%t,这个变量在运行时会被替换为你目前选中的对象。
这里有个小技巧,可以避免你输错那些难以记住的技能名称,在Macro编辑窗打开的情况下,打开技能书,Shift+Click技能名称可以把对应技能(连同等级)加入到编辑窗口中。
进一步的,有时候放逐会失败——也许你选择了错误的目标,又或者被抵抗,那个时候你要是还是说不要攻击,会被人踩死,所以就用得到AfterCast这个方便的工具了:
/script SmartChat("正在放逐 >>%t<<", false, nil)
/aftercast +fail /script SmartChat("放逐 >>%t<< 失败!", false, nil)
/aftercast /script SmartChat("已放逐 >>%t<< 40秒,请不要攻击!", false, nil)
/施放 放逐术(等级 2)
/aftercast后面的内容只有本宏中的法术释放成功才会触发,+fail表示后面的内容只有法术释放失败之后才触发,类似的命令共有4种:
+done 法术成功施放后(缺省,要是什么都不写,就是这个)
+fail 法术施放失败后
+interrupt 法术施放被打断后
+start 法术施放开始时
也许你会想:这可好了,我把我的所有常见战术都做成宏,一个键就自动播放出来,怪就死了,多好!但是这是不行的,因为Blizzard为了防止利用宏作出类似外挂功能的事情,对宏做了严格的限制:
1、宏中没有延时功能,宏中的每条语句都是同时执行的,也就是说,施放某个法术,完了以后再释放第二个法术,是不可能的,两个法术会同时释放,然后有一个会因为另一个法术正在释放而失败。
2、每个技能的释放必须唯一对应一个硬件事件,例如鼠标点击或者键盘按键。
所以,请放弃一切想按一次键释放超过一个技能的妄想。
好,关于基本的宏就到这里,还有很多变化,去网上还有上面提供的链接中去找吧!
接着我要介绍一下强大的动作条插件DAB的宏。DAB运行定义一组宏,在某些事件发生时,执行一段脚本,你可以改变按钮和动作条的显示状态或者其他操作。这个能力能够是你轻松的作出强大的、交互式的、上下文相关的UI。具体操作很简单:
1、输入/dab 回车,打开DAB设置界面;
2、选择OnEvent Macros功能,从上面的列表中选择一个事件,然后在下面填入代码就行了。
我们来看一些例子。
例一:当你的Mana不足时自动显示出一个兰瓶的按钮。
在Unit's Mana Changed事件中加入:
if arg1=="player" then
if ImInCombat() and (ManaPercent("player") < .25) then
DAB_Floater_Show(106)
else
DAB_Floater_Hide(106)
end;
end;
其中ManaPercent函数来自Discord函数库,你要是不想用它,可以用这个代替:
if UnitMana("player")/UnitManaMax("player") < .40 then
ImInCombat也是Discord函数库里的,判断自己目前是否处于战斗状态,不在战斗状态的话,还是用魔法水来回蓝吧。DAB_Floater_Show和DAB_Floater_Hide都是DAB带的函数,用来显示和隐藏某个浮动按钮,后面的参数是按钮的ID,在DAB设置界面中选择Show Button IDs就可以看到每个按钮的ID。
例二:当你的某个buff失效之后立刻显示对应法术的按钮,好让你继续加上这个buff。
在Unit's Buffs/Debuffs Changed事件中加入:
if arg1=="player" then
if (not IsBuffActive("魔甲术")) and (not UnitIsGhost("player")) then
DAB_Floater_Show(101)
else
DAB_Floater_Hide(101)
end;
end;
IsBuffActive来自IsBuffActive插件,这个目前似乎是必须的,没找到其他简单的办法替代。后面的参数是你要检测的buff名字或者名字的一部分,例如这里用魔甲术,就会检测出各个级别的魔甲术。后面一个UnitIsGhost的判断是WoW标准的API,告诉你对象是否处于灵魂状态,如果是,就不要显示什么按钮啦。
例三:当你选中一个可攻击对象的时候,显示一个定制好的动作条,上面是你常用的起手技(即拉怪的技能)。
在You Change Targets事件中加入:
if UnitCanAttack("player", "target") and UnitHealth("target") > 0 then
DAB_Bar_Show(8)
else
DAB_Bar_Hide(8)
DAB_Bar_Hide(9)
end;
DAB_Bar_Show和DAB_Bar_Hide都是DAB带的函数,用来显示和隐藏某个动作条,后面的参数是动作条的ID,在DAB设置界面中选择BarN对应的就是ID为N的动作条。我的Bar8是开始攻击的起手技,Bar9是一些用于给予对手最后一击的终结技(见例五)。
这里的逻辑是:如果选中的是可以攻击的对象,而且对象尚未死亡,那么显示起手技动作条。
例四:当你的HP不足时显示快速加血物品和技能。
例五:当你正在攻击的对象的HP足够低的时候,显示一个定制好的动作条,上面是你常用的终结技,例如作为术士的我,可能需要使用能够产生灵魂碎片的技能终结对手,有些技能要求怪物血量足够少的时候才有可能成功,那么也可以放在这里。
在Unit's Health Changed事件中加入:
if arg1=="player" then
if (not UnitIsGhost("player")) and (HealthPercent("player") < .40) then
DAB_Bar_Show(7)
else
DAB_Bar_Hide(7)
end;
end;if arg1=="target" then
if ImInCombat() and not(UnitIsDead("target")) and (HealthPercent("target") < .50) then
DAB_Bar_Show(9)
else
DAB_Bar_Hide(9)
end;
end;
这个我想已经不需要做什么解释了吧。