此文章转自“龙纳百川”的技术贴,我分享给大家。也希望大家都能分享。
在WOW的世界中,可能你会第一次接触到“宏”这个名词。
什么是宏命令?
说白了就是同时把几个技能热键绑到一起用一个键来代替,就像是一份计划书一样,你事先在里面输入你常用的一些命令,当你想用的时候只
要按下这个键就可以了。
宏命令的设置流程:
首先,回车,再敲/MACRO。看见了吧?会弹出一个窗口,上面有New(新建宏命令)和Complete(完成宏命令)两个按键。点New,又会弹出一
个窗口,哇,花花绿绿的,里面包括了WOW几乎所有的技能图标,随你喜欢,随便选一个!它就是你设置的宏命令的图标了,给它取个名字吧!
方便你用的时候好找。然后回到第一个窗口,在它上面有一个输入菜单(别告诉我找不到…它可是占了这个窗口的一半多…)在里面输入特定
的内容,然后点Complete。接下来你要做的就是把这个代表你宏命令的图标用鼠标左键拉到快捷栏里,想怎么用就怎么用…
延时宏的命令格式: /in 时间 指令
如/in 3 dance,就是在3秒后跳舞,
/say start!
/in 3 say 3s later
/in 6 say 6s later
有了这个指令,就可以实现很多功能了,比如
/p healing %T, need 3s, don''t run away
/cast heal (rank 1)
/in 4 p cured %T 300HP,please notice the enemies turn on me^_^
等治疗完之后提醒别人注意下自己有可能被怪打,不加延时的话,就没这个效果了。
------
另外,
介绍下/script命令,格式:/script 函数;
http://www.cosmosui.org/texts/BlizzardCommands.xml中的函数可以通过这条命令调用。
例如:
对自己治疗一下,然后攻击目标:
/target Pugar //选择自己,假设自己的名字是Pugar
/cast Lesser Heal (Rank 1) //施展次级治疗rank1
/script TargetLastEnemy(); //重新选择刚刚选择的敌人
/script AttackTarget(); //攻击,等同于右键点击敌人
首先wow是由blz程序员用程序编出来的.宏就是一种程序.
我们可以用宏在wow里干什么?很多很多...
比如:在wow打字交流和让人物做表情.这2步..我们可以用一个宏搞定。以下:
A回车输入/marco或点对话框边的聊天图标中的/macro或在频道的菜单里选 宏.
B点击对话框底部的“新建”按钮 将会弹出另外一个对话框 其中要求你输入宏的名称并且为这个宏选择一个图标.(自定义 宏 的图标随便选..
名称可以是中英文和数字)
C输入宏的内容:
/s 你好。
/招手
D按确定。
大功告成. 在可以在进入“输入宏命令”区域。在这里可以输入想让这个宏按钮实现的命令。当然还可以拖动这个宏相对应的图标到快捷栏的
空位里去. 以后要用到它按快捷键就好了。(当然可以重复使用)
.很简单吧.好了~想想看.就刚刚的那个简单的宏还可以演变成什么?
---------------我只是一条划分线---------------
/p 这里安全先休息一下.随便计划下一步怎么做。
/sit
-------------------------
/y 救命!
/cry
-------------------------
其实有时人们并不在意表情..
**********************************************
当然wow里的宏不只有如此:
%t 注意:t后还有一个空格。使用“%t ”来代替目标怪物、生物或者玩家。如:
你先编写一个宏
---------------
/s 你好啊,%t 。
---------------
然后选一个目标(小三).输入这个宏或按下其快捷键。就会出现人物说:你好啊,小三。
有些官方的宏自带这个功能.
输入:“/thank” 结果->“你向身边的每个人道谢.”
输入:“/thank”(选择小三)结果->”你向小三道谢.”
再讲一个与%t 很像的。/Assist
/Assist 注意:t后还有一个空格。/Assist 这是个协助进攻的命令。只要点击自己的某队友,然后使用这个命令,你的目标就会变成该队友当
时所选中的目标。配合“/cast”命令可以做出:
------------------
/Assist
/cast 技能名称(技能等级)
------------------
这么一个宏。关于/cast 技能名称(技能等级)可以用Shift+鼠标左键代替。
别外/Target 这是一个自动选择指定目标的命令。(对指定单位释放特定魔法)
-------------------
/Target 角色的名字
/cast 技能名称(技能等级)
-------------------
再来一个.
----------------
/施放
技能名称(技能等级)
/script SendChatMessage("<开始攻击%T >", "PARTY")
----------------
这个是说你在施放一个特定技能时它可以自动提示:开始攻击某某。的信息。
其中的PARTY可以换成:EMOTE这样则以自定义表情的方式发出信息。则别人在聊天窗口中看到:小三开始攻击某某。
还可以换成"WHISPER", "COMMON", UnitName("target"),则采用密语形式对你施法的目标发送信息。"COMMON"表示密语所用的语言种类。
Common 人类语,联盟通用语
Orcish 兽人语,部落通用语
Dwarvish 矮人语
Gnomish 侏儒语
Darnassian 暗夜精灵语
----对友好单位或自己施法----
/施放
技能名称(技能等级)
/script TargetUnit("player")
-------------或---------------
/施放
技能名称(技能等级)
/script if SpellIsTargeting() then TargetUnit("player")
----------------同理后面可以加上-------------------
/script if ( UnitName("target") ~=nil and UnitIsFriend("player","target") ) then SendChatMessage("<帮助了 %T >", "PARTY");
end
----------------------------------------------------------------------------------------------
UnitIsFriend的意思是对任何友好单位施法时都发出信息。将UnitIsFriend换成UnitInParty,则对队友单位施法时发出信息。
如果想在任何条件下都只对自己使用治疗的话,用如下的宏:
--------
/target "自己的人物名称"
/施放
技能名称(技能等级)
--------
--------按目标的职业分别使用不同魔法----------
/script class = UnitClass("target"); if ( ( class == "职业" ) or ( class == "另一个职业" ) ) then
CastSpellByName("技能名称(技能等级)"); else CastSpellByName("技能名称(技能等级)"); end
---------关键看if or then else--------
懂了吧。
------------------------
/script if (UnitMana("target")>0) then CastSpellByName("(Rank X)") else CastSpellByName("(Rank X)"); end
------------------------
(UnitMana("target")>0)当选的目标的mana大于0。then CastSpellByName("
技能名称(技能等级)")就使用此技能.else CastSpellByName("技能名称(技能等级)"); end如果不是就使用另一种技能。
---------------------------------------------------------------------------------------------------------
注:攻击也算一种技能,它可以自己连续进行.值得一提的是:假设then后你填攻击.如果中途UnitMana("target")变动到了另一个符合的条件.宏
不会自动选择第2种施法方式.你需要再按一下宏的热键或打一次命令。
-------------------------------同理---------------------------------
/script if (UnitHealth("target")>1) then CastSpellByName("技能名称(技能等级)") else CastSpellByName("攻击"); end
---------------------------------------------
原理相同..这次是UnitHealth.在("target")>1的情况下用指定技能,<=1时直接打一下下搞定.
---------------------------------------------
/script x="player";d=UnitHealthMax(x)-UnitHealth(x);if (d>y) then if (d<z) then CastSpellByName("
技能名称(技能等级)") else CastSpellByName("
技能名称(技能等级)") end;SpellTargetUnit(x);else DEFAULT_CHAT_FRAME:AddMessage("提示的信息自己填"); end;
宏会对玩家自己的HP消耗量进行判断,如HP的消耗小于y则不使用技能,并在聊天窗口中提示:"相关信息",如消耗量大于y小于z,使用then后
面的
技能,如大于z,则使用else后的技能。
先看UnitHealthMax(x)-UnitHealth(x);这段的UnitHealthMax和UnitHealth可以改成UnitMana等.后面的if (d>n) then if (d<n)是要你自己填
的.then和else后面填上相关技能.AddMessage("提示的信息自己填")
-----------------------按目标等级使用不同级别的魔法-------------------------
下面牧师的一例,对目标使用其所能接受的最高等级的“圣言术:韧”
/script P="Power Word: Fortitude(Rank " S={1,2,14,26,38} if (UnitLevel("target") ~= nil and UnitIsFriend("player","target"))
then for j=5,1,-1 do if (UnitLevel("target") >= S[j]) then CastSpellByName(P..j..")") return end end end
Fortitude应该就是圣言术:韧。Rank " S={1,2,14,26,38}和j=5,1,-1 do有什么关系?
-----------------------具体别的没看懂-----------------------------
/script r=6;l={1,12,24,36,48,60};t=UnitLevel("target");if (t==0) then t=UnitLevel("player");end;if
UnitIsFriend("player","target") then for j=r,1,-1 do if (t>=l[j]-10) then CastSpellByName("Power Word: Fortitude(Rank
"..j..")");break;end;end;end
--------------------------这个同理而且比较易懂-----------------------------
r=6;l={1,12,24,36,48,60}就是说把Fortitude(圣言术:韧)分为6个阶段.t=UnitLevel("target");你选的目标if (t==0) 因为t==0所以就是说
目标无效。then t=UnitLevel("player");自动选择自己做目标。if UnitIsFriend("player","target") 如果选的目标是可以进行的(buff只对
UnitIsFriend有效)then for j=r,1,-1 do if (t>=l[j]-10)这段不好说.应该是个比例吧.现在wow的玩家级数都在60lv内.所以看不懂的不用理
会.如果自己要改此宏估计j=r,1,-1 do if (t>=l[j]-10)这个不用改变.then CastSpellByName("Power Word: Fortitude(Rank
"..j..")");break;end;end;end要改.改一下Fortitude就好。
---------------------以上都是以60级的牧师的实例Fortitude(圣言术:韧)满级-------------------------
/script r=7;l={1,10,20,30,40,50,60};if not UnitIsFriend("player","target")then
TargetUnit("player");end;t=UnitLevel("target");for j=r,1,-1 do if (t>=l[j]-10) then CastSpellByName("Mark of The Wild(Rank
"..j..")");break;end;end
-----------------------以上是以60级德鲁依的一例,使用对方能接受的最高级野性印记--------------------------
-------------------------根据连击点的多寡和能量的多少来决定使用技能种类----------------------------------
下面是德鲁依猫形态(盗贼也是一样)根据连击点的多寡和能量的多少来决定是使用Rip还是Rake。如连击点大于等于3,则使用Rip,如连击点
小于3并且能量有40点以上,则使用Rake。
/script if ( GetComboPoints() >= 3 ) then CastSpellByName("Rip(Rank 2)"); else if (UnitMana("player") >= 40 ) then
CastSpellByName("Rake(Rank 1)"); end end
-----------------------------不多说了同理------------------------------
************************下面看一些关于背包与物品的*******************************
Bag:物品存放背包编号
Slot:物品存放格子编号
-------------------------
背包位子编号是 4 3 2 1 0
背包里物品的位子编号是 1 2 3 4
5 6 7 8
------------------对友好单位或自己使用物品---------------
/script UseContainerItem(x,y)
/script TargetUnit("player")
----------------下面分析------------------------
UseContainerItem(x,y)中的x是背包的编号,y是格子的编号。把它们换成对应物品位置的编号。
将第一行换成/script UseAction(z,x,y),则不需将物品放在背包特定位置,但必须将物品拖入技能栏的特定位置。z表示技能栏的编号。第一
排第一格编号为1,最后一格为12。第二排第一格编号为13,最后一格为24。以此类推。
-----------------------如果想在任何条件下都只对自己使用特定物品--------------------------
/target "player"
/use "物品名称"
------------------------一次使用多个物品---------------------------
/script UseContainerItem(x,y)
/script UseContainerItem(x,y)
-----------------------n次------------------------
前可+/target "player"后可+/script TargetUnit("player").有些物品不+也可.但要自己选择目标.
*********************************武器相关**********************************
MainhandBag:备用主手武器存放背包编号
MainhandBagSlot:备用主手武器存放格子编号
OffhandBag:备用副手武器存放背包编号
OffhandBagSlot:备用副手武器存放格子编号
TwohandsBag:备用双手武器存放背包编号
TwohandsBagSlot:备用双手武器存放格子编号
------------------------对主手武器或双手武器使用使用相关物品-------------------------
/script UseContainerItem (Bag,Slot)
/script PickupInventoryItem (16)
-------------------------------------------------------------
(16)的16改成17就是副手了..