宏命令详解与常用宏

 日期:2007-01-05 23时


首先说明:对于/释放 XXXX技能 这样的命令请打开宏命令编辑窗口的同时打开技能面板,然后按住Shift,再去点要释放的技能图标,这样就可以自动填写到宏命令编辑窗口中!

宏命令解析

CastSpellByName("技能名称");
施放一个技能,不打等级的话默认是放最高等级的

SpellStopCasting();
停止当前动作

if(条件判断语句) then
如果判断语句为真

IsUsableAction(技能编号);
如果能使用则返回1,不能使用则返回nil
判断一个技能是否在可以使用的状态,但是没有足够的怒气或MANA或精力,或者在CD中的时候不包括在不能使用的范围

IsActionInRange(技能编号);
如果目标在技能范围内则返回1

GetActionCooldown(技能编号);
返回技能的冷却剩余时间

UnitHealth("target");
返回目标的生命,百分比

UnitHealth("player");
返回自己的生命,数值

UnitMana("player");
返回自己的怒气

PickupInventoryItem(身上物品编号);
用鼠标左键点击身上的某个物品

PickupContainerItem(背包编号,格子编号);
用鼠标左键点击背包里的某个物品

UseInventoryItem(身上物品编号);
用鼠标右键点击身上某个物品

UseContainerItem(背包编号,格子编号);
用鼠标右键点击背包里的某个物品

CastShapeshiftForm(姿态编号);
切换姿态,战斗姿态1,防御姿态2,狂暴姿态3

UnitAffectingCombat("player")
判断自己是否处于战斗中,是则返回1

UseAction(技能编号)
使用动作条上指定的技能或物品等

技能编号
25-36 bar on right-side of screen, far right (top to bottom)右边
37-48 bar on right-side of screen, in one column (top to bottom)右2
49-60 lower right bar (left to right)右下
61-72 lower left bar (left to right)左下
73-84 battle stance bar (left to right)战斗姿态
85-96 defensive stance bar (left to right)防御姿态
97-108 berserker stance bar (left to right)狂暴姿态

命令都很简单,如何有效组合,做出自己需要的宏就要动点脑子了


动作条相关函数
参数:slot——动作条快捷键的编号
GetActionCooldown(slot)——得到指定编号快捷键的冷却时间(如技能、物品)
GetActionCount(slot)——得到指定编号快捷键的数量(如绷带)
IsActionInRange(slot)——判断指定编号快捷键是否在范围内
IsAutoRepeatAction(slot)——判断指定编号快捷键是否是一个自动攻击技能(如魔杖射击)
IsCurrentAction(slot)——判断指定编号快捷键当前是否正在使用
IsUsableAction(slot)——判断指定编号快捷键当前是否可用

BUFF状态相关函数
CancelPlayerBuff(buffIndex) ——移除一个BUFF,参数buffIndex是BUFF的索引编号
GetPlayerBuff(buffId, buffFilter)——返回玩家的各种BUFF/DEBUFF的编号及状态信息
GetPlayerBuffTexture(buffIndex)——返回指定索引号BUFF的图标名称
UnitBuff("unit", index [, showCastable])——返回指定目标指定编号的BUFF信息
UnitDebuff("unit", index [, showDispellable]) ——返回指定目标指定编号的DEBUFF信息

信息相关
SendChatMessage(text,{,type} {,language} {,targetPlayer}) ——发送一段信息
参数:text——要发送的文字
   type——信息类型,有"SAY", "YELL", "EMOTE", "PARTY", "AFK", "DND", "GUILD", "OFFICER", "WHISPER", "CHANNEL", "RAID"

背包、装备、物品相关
CursorHasItem——当前有没有拾取物品
UseContainerItem(bagId,slot)——使用指定背包指定位置的物品
PickupContainerItem(index,slot)——拿起、放置或替换指定背包指定位置的物品
UseInventoryItem(slotId)——使用当前装备指定位置的物品
PickupInventoryItem(slotId)——拿起、放置或替换人物当前某位置的装备

背包编号bagId解释
0-4,0是行囊,1是靠行囊的那个背包,2、3、4依次类推

人物身上装备位置slotId参数详解
0 = ammo(弹药)
1 = head(头部)
2 = neck(项链)
3 = shoulder(肩膀)
4 = shirt(衬衫)
5 = chest(胸部,这个...,不要理解错了)
6 = belt(腰带)
7 = legs(腿部)
8 = feet(鞋子)
9 = wrist(手腕)
10 = gloves(手套)
11 = finger 1(第一个戒指)
12 = finger 2(第二个戒指)
13 = trinket 1(第一个饰品)
14 = trinket 2(第二个饰品)
15 = back(披风)
16 = main hand(主手)
17 = off hand(副手)
18 = ranged(射击、圣物、魔杖)
19 = tabard(公会徽章)
20 = first bag (右边的第一个包)
21 = second bag(右边的第二个包)
22 = third bag(右边的第三个包)
23 = fourth bag (最左边的包)

如果你打开银行的话:
40 to 63 = the 24 bank slots(银行里的24个位置)
64 = first bank bag(银行的第一个包)
65 = second bank bag(银行的第二个包)
66 = third bank bag(银行的第三个包)
67 = fourth bank bag(银行的第四个包)
68 = fifth bank bag(银行的第五个包)
69 = sixth bank bag(银行的第六个包)

行动相关
FollowUnit("unit")——跟随指定目标
Jump()——跳

技能相关
CastSpellByName("name")——施放指定名称的技能
GetSpellCooldown(spellID, "bookType")——得到技能冷却时间(用起来没这么简单,可参考相关插件)
GetShapeshiftFormInfo(index)——得到某个形态/姿态的信息
  语句格式:icon, name, active, castable = GetShapeshiftFormInfo(index);
      icon——形态/姿态图标信息
      name——形态/姿态名称
      name——形态/姿态是否是当前形态/姿态
      castable——形态/姿态当前是否可以施放
CastShapeshiftForm(index)——进入某个形态/姿态
  index参数说明
    德鲁依
    1 = 熊
    2 = 海豹
    3 = 猫
    4 = 旅行形态
    5 = 枭兽
    盗贼
    1 = 潜行
    战士
    1 = 战斗姿态
    2 = 防御姿态
    3 = 狂暴姿态

目标相关
AssistByName("name")——协助某个玩家攻击
AssistUnit("unit")——协助某人某NPC某宠物攻击
AttackTarget()——攻击目标(慎用,状态判断不好用这玩意会取消自己的自动攻击)
TargetLastEnemy()——将最后一个敌人作为自己的目标
TargetLastTarget()——将最后的目标做为自己的目标
TargetNearestEnemy({reverse})——将距离最近的敌人作为目标,等同TAB键
TargetNearestFriend()——将最近的队友做为目标
TargetUnit("unit")——将指定名称的单位做为目标(比如对某人有仇,混战中只扁他一个)

单位相关
AssistUnit("unit")
FollowUnit("unit")
InviteToParty("unit") ——邀请某人加入队伍(某些人刷副本的人都用这函数邀请小号等)
TargetUnit("unit")
UnitAffectingCombat("unit") ——某单位是否正在战斗状态
UnitHealth("unit")——某单位的生命值(无法得知具体生命值的单位返回为百分比)
UnitMana("unit")——某单位的魔法值/怒气值/能量值
UnitSex("unit")——某单位的性别(这条貌似没啥用,RY太多了,=.=)

关于unit参数的说明:

"player"——玩家自己
"pet"——宠物
"party1"——队伍成员1
"party4"——队伍成员4(没5哈,除你之外只有4)
"partypetN"——队伍成员的宠物(N=1,2,3,4)
"raidN"——团队成员(N=1,2,3,4....)
"raidpetN"——团队成员的宠物(N=1,2,3,4...)
"target"——你的当前目标
"mouseover"——你鼠标经过的那个家伙
"npc" or "NPC"——NPC


通用宏命令:
1-允许你在窗口和全屏状态之间切换
/script SetCVar("gxWindow", 1 - GetCVar("gxWindow"));
/console gxRestart


2-目标信息,以提示队员
/script if UnitClassification("target")=="elite" then SendChatMessage("".. UnitLevel("target") .. " " .. UnitName("target"), "party") else SendChatMessage("" .. UnitLevel("target") .. " " .. UnitName("target"), "party"); end

这个宏在队伍频道中发出当前目标的一些相关信息。" "代表精英。效果如下:
[队伍]Hank:50 Stormwind Guard
[队伍]Hank:43 King Bangalash
party改为raid即在团队频道中说话




猎人常用宏命令:

---------------------------------------使用物品---------------------------------------
1-自动喂食
下面这个宏会先判断玩家是否处于战斗之中。如对应的格子中没有食物,则会打开相应的背包。
/script if (not PlayerFrame.inCombat) then if (not
GetContainerItemLink(X, Y)) then OpenBag(X); else CastSpellByName("Feed Pet"); PickupContainerItem(X, Y); end end

X/Y分别是包和格子的编号。
5个背包按照排列位置编号如下:
[4][3][2][1][0]

16格包的格子编号如下:
[ 1][ 2][ 3][ 4]
[ 5][ 6][ 7][ 8]
[ 9][10][11][12]
[13][14][15][16]

2-绷带
如果你当前选择的目标是可以对其使用绷带的友好单位的话,则对其使用绷带。
如当前目标是不能被打绷带的单位,或没有选择任何目标的话,则对自己使用绷带。
而且不会对当前目标进行切换,不会中断对当前敌人的攻击。
/script UseContainerItem(X,Y)
/script SpellCastTarget("player")

将第一行换成/script UseAction(25,0,1),则不需将绷带放在背包特定位置,但必须将绷带拖入技能栏的特定位置。25表示技能栏的编号。第一排第一格编号为1,最后一格为12。第二排第一格编号为13,最后一格为24。以此类推。25表示第三排的第一格。

此宏也还有如下的实现方法:
/script UseContainerItem(0,1)
/script if ( SpellIsTargeting() ) then TargetUnit("player"); end

如果想在任何条件下都只对自己使用绷带的话,用如下的宏:
/target "player"
/script UseContainerItem(X,Y)
/script TargetLastEnemy()
同样,这个宏会切换当前目标,中断攻击,盗贼的连击点也会被清空。

下面这个宏也只对自己使用绷带,但在使用后会切换回先前的目标(不管是敌对中立还是友好的)。
/script p="player";t="target";if(not UnitCanAttack(t, p))then ot=UnitName(t);TargetUnit(p);else ot=nil;end;
UseAction(ActionID);if(SpellIsTargeting()) then SpellTargetUnit(p); end if(ot) then TargetByName(ot);end



---------------------------------------更换武器---------------------------------------
MainhandBag:备用主手武器存放背包编号
MainhandBagSlot:备用主手武器存放格子编号
OffhandBag:备用副手武器存放背包编号
OffhandBagSlot:备用副手武器存放格子编号
TwohandsBag:备用双手武器存放背包编号
TwohandsBagSlot:备用双手武器存放格子编号

双手武器 (主手武器 副手物品)
/script PickupContainerItem(MainhandBag, MainhandBagSlot)
/script PickupInventoryItem(16)
/script PickupContainerItem(TwohandsBag, TwohandsBagSlot)
/script PickupContainerItem(OffhandBag, OffhandBagSlot)
/script PickupInventoryItem(17)

(主手武器 副手物品) 双手武器
/script PickupInventoryItem(17)
/script PickupContainerItem(OffhandBag, OffhandBagSlot)
/script PickupContainerItem(TwohandsBag, TwohandsBagSlot)
/script PickupInventoryItem(16)
/script PickupContainerItem(MainhandBag, MainhandBagSlot)

注意以上几个宏使用之时,鼠标上不要拖有物品,否则会出错。如要避免,可以使用CursorHasItem()来进行预判断。参看下面的几个宏:

单主手武器或双手武器 (主手武器 副手物品)
/script if ( not CursorHasItem() ) then PickupContainerItem(mainhandBag, mainhandBagSlot); PickupInventoryItem(16); PickupContainerItem(mainhandBag, mainhandBagSlot); PickupContainerItem(offhandBag, offhandBagSlot); PickupInventoryItem(17); if ( CursorHasItem() ) then PickupContainerItem(offhandBag, offhandBagSlot); end end

(主手武器 副手物品) 单主手武器或双手武器
/script if ( not CursorHasItem() ) then PickupInventoryItem(17); if ( CursorHasItem() ) then PickupContainerItem(offhandBag, offhandBagSlot); end PickupContainerItem(mainhandBag, mainhandBagSlot); PickupInventoryItem(16); PickupContainerItem(mainhandBag, mainhandBagSlot); end



------------------------------------------近战------------------------------------------
1-猛禽 摔绊(CD不一样,连按即可)
/施放 猛禽一击(等级 8);
/施放 摔绊(等级 3)



---------------------------------------pet的控制---------------------------------------
1-放猎人标记并命令pet攻击目标。
/释放 猎人印记(等级 X)
/script PetAttack()

2-放mark并且pet跟随,副本用的宏。
/释放 猎人印记(等级 X)
/script PetFollow()

3-选择一个队员然后使用宏,自动选择该队员的目标,对目标放mark,pet攻击目标,然后开始autoshot。
/script if (UnitIsFriend("player","target")) then AssistUnit("target"); end
/释放 猎人印记(等级 X)
/script PetAttack()
/script if(not PlayerFrame.inCombat) then CastSpellByName("自动射击"); end
注意你开始所选择的目标必须是友好的。

4-散射并招回pet,以免pet继续攻击使敌人脱离散射的效果。
/script PetFollow()
/释放 驱散射击()

5-收宠,清除目标后装死
/script PetFollow()
/script ClearTarget();
/释放 假死



---------------------------------------影遁(NE专用)---------------------------------------
1-影遁的同时躺下,更难被发现……
/laydown
/释放 影遁

2-吃喝的同时也影遁-_-
/target "player"
/script UseContainerItem(X, Y);
/script UseContainerItem(X, Y);
/释放 影遁


============================传说中的分割线==============================
1.猎人放了印记以后紧接着的第一个技能是什么?大多数人会接一个瞬发法术,奥术射击或震荡射击.然而这两个技能都是共享公共冷却时间1.5秒的,也就是说你放了印记以后要等1.5秒才能施放.其实最适合的技能是自动射击,它不受公共冷却时间的影响,放完印记即可接着施放,可以在你施放奥术或震荡前无代价的增加一箭.不过有个问题是,自动射击有点类似多重射击,有人称为是假瞬发,它不是瞬发,而是稍微有点延迟.而且由于网络延时的原因,在编写宏时,若直接写在猎人印记后面便放不出来,所以在结合已有宏的基础上修改了一下,感觉非常实用

/施放 自动射击
/script if (UnitIsFriend("player","target")) then AssistUnit("target"); end
/施放 猎人印记(等级 4);
/script PetAttack()

这个宏非常适合战斗时第一次攻击,还可协助队友.(我将这个宏设为了F键,协助队友时点他头像再按F即可)自动射击虽然在印记前执行,但由于假瞬发的原因,它会在印记后才真正执行,而印记的施放也不会打断自动射击.

2.一般打盗贼和战士,我们会用毒蝎钉刺,减对方68力量和敏捷,而且不会像毒蛇钉刺一样一毒发就破坏陷阱和驱散射击,这是相当实用的,而打萨满和圣骑时,我们也许更倾向于吸取对方魔法,所以需要蝰蛇钉刺,但是就需要2个快捷键.这个宏能自动判定职业,若对方为用蓝的职业,就优先用蝰蛇钉刺,若非用蓝的职业,就直接用毒蝎钉刺.有特殊需求可自行更改

/script class = UnitClass("target"); if ( ( class == "战士" ) or ( class == "盗贼" ) ) then CastSpellByName("毒蝎钉刺(等级 4)") else CastSpellByName("蝰蛇钉刺(等级 3)"); end

这个宏施放时,若对方为战士或盗贼,则用毒蝎钉刺,其余有法力条的如萨满和圣骑士会自动用蝰蛇钉刺,减少了一个快捷键占用的空间.(对npc同样有效)

3.接着这个是重头戏,哈哈,猎人必备!
像我巨魔猎人,每次瞄准射击前要做的事太多,急速,狂暴,魔暴龙眼,用鼠标点,是点不过来的.急速和巨魔狂暴能有效减少瞄准射击的时间,加上魔暴龙眼,爆发力惊人(黑手饰物收藏了先...).这个宏让你用瞄准前全部一次施放完毕,而且关键是,你只需按一次键.
/script SpellStopCasting();
/script UseInventoryItem(13);
/script SpellStopCasting();
/施放 急速射击;
/script SpellStopCasting();
/施放 狂暴(种族特长);
/script SpellStopCasting();
/施放 瞄准射击(等级 6)

注意点:将魔暴龙眼放在第1个饰品栏,若一定要放第2个,须将上面13改为14.若觉得满血时用狂暴浪费,可删除对应的那2行命令.


4.近战
同上面宏类似,比以前网上的好多了,注意图标颜色可以看出是哪个技能可以施放.具体自己去观察这里不罗嗦了
/施放 反击(等级 3);
/script SpellStopCasting();
/施放 摔绊(等级 3);
/script SpellStopCasting();
/施放 威慑

猛禽一击和宠物攻击是单独的一个宏,之所以不和其他技能放一起,是因为猛禽一击是下次攻击触发的,其他技能会影响到猛禽一击的施放.所以正确的顺序应该是快近战前按下猛禽,猛禽施放出来的瞬间按下摔绊,只要你反应够快,就既能保证攻击,又能保证让对方减速.若先按摔绊,猛禽就很有可能没有成功施放。若猛禽在等待施放时,这个宏会取消猛禽,所以请在猛禽释放后再用此宏。

5.根据对方MP量判断使用蝰蛇还是毒蝎(盗贼有120能量的,所以判断要大于120)
/script if (UnitMana("target")>120) then CastSpellByName("蝰蛇钉刺()") else CastSpellByName("毒蝎钉刺()"); end;

3和4用了 SpellStopCasting()这个命令,可以让各个瞬发法术或技能同时施放,图标显示的cd为第一个技能的cd,有特殊需要可自行调整技能顺序.有新发现会继续补上....



法师常用宏命令:
1-详细版变羊提示
/script if ( UnitExists("target") and UnitIsEnemy("player","target") ) then SendChatMessage("我要变 Level " ..UnitLevel("target") .." " ..UnitName("target") ..". 不要攻击他!", "PARTY") CastSpellByName("变羊术(等级 3)"); if not PlayerFrame.inCombat then ClearTarget(); end end


2-懒惰的法师,一键吃喝。
/script x="player";d=UnitHealth(x); if (d<y) then UseContainerItem(0,16);UseContainerItem(0,15); else UseContainerItem(0,15) end;
本来喝水吃面包要2下,现在一下。
y自己定义,当hp大于y时只喝水不吃面包,水放在第一个包的15位置,面包放在16位置,包的位置定义看猎人宏设置部分



战士常用宏命令:
1、双手武器与单手武器 盾切换
/script if(GetInventoryItemLink("player",17))then PickupInventoryItem(17);PickupContainerItem(1,2);PickupInventoryItem(16);PickupContainerItem(1,1);else PickupContainerItem(1,1);PickupInventoryItem(16);PickupContainerItem(1,2);PickupInventoryItem(17);end

2、从任意姿态任意武器切换到战斗姿态双手武器
/script P=PickupInventoryItem;PC=PickupContainerItem;oi=(GetInventoryItemLink("player",17));if(oi) then oi=(GetContainerItemLink(背包,盾牌格));if(oi) then P(17);PC(背包,副手格);else P(17);PC(背包,盾牌格);end;P(16);PC(背包,双手/主手格);end
/script CastShapeshiftForm(1)

3、从任意姿态任意武器切换到狂暴姿态双持武器
/script CastShapeshiftForm(3);P=PickupInventoryItem;C=PickupContainerItem;oi=(GetInventoryItemLink("player",17));if(oi) then oi=(GetContainerItemLink(背包,副手格));if(oi) then P(17);C(背包,盾牌格);C(背包,副手格);AutoEquipCursorItem();end;else C(背包,双手/主手格);P(16);C(背包,副手格);P(17);end

4、任意姿态任意武器切换防御姿态单手 盾
/script CastShapeshiftForm(2);P=PickupInventoryItem;C=PickupContainerItem;oi=(GetInventoryItemLink("player",17));if(oi) then oi=(GetContainerItemLink(背包,盾牌格));if(oi) then P(17);C(背包,副手格);C(背包,盾牌格);AutoEquipCursorItem();end;else C(背包,双手/主手格);P(16);C(背包,盾牌格);P(17);end

5、双持姿态切换副手武器和盾的宏
/script PickupContainerItem(4,2)
/script PickupInventoryItem(17)
副手武器或者盾,是放在最左边的包包的第二个格子

6、狂暴战士狂暴状态攻击的宏,如果对方的血少于20%则斩杀,否则放嗜血。如果怒气大于39,则使用旋风斩和英勇打击
/script if (UnitHealth("target")<20) then CastSpellByName("斩杀(等级 5)"); end
/施放 嗜血(等级 4)
/script if (UnitMana("Player")>39) then CastSpellByName("旋风斩");end
/script if (UnitMana("Player")>39) then CastSpellByName("英勇打击");end

盗贼常用宏命令:
1。冷血剔骨宏
/script if (UnitMana("Player")>=35 and GetComboPoints()>=4) then CastSpellByName("冷血");SpellStopCasting() end;
/script CastSpellByName("剔骨(等级 8)");
好帖子,强烈的顶~

上一篇:隐藏地图藏宝图进入方法

下一篇:三国游戏终于可以挣钱了