作者:广东在线游戏网日期:
返回目录:游戏攻略
几个常用的宏
/script if (UnitName("Target") ~=nil and UnitIsFriend("player","Target")) then CastSpellByName("复生");SendChatMessage("帅哥,快起来吧,前面还有很多好装备在等着我们呢.... ","Whisper","兽人语",UnitName"Target"); end
复活队友,并密语告诉对方
/script if UnitSex("target") == 2 then g="帅哥" else if UnitSex("target") == 3 then g="靓女" end;end;s="复活吧 "..g.." >>>%T<<<";c="say";if GetNumRaidMembers()>0 then c="raid" elseif GetNumPartyMembers()>0 then c="party" end;SendChatMessage(s,c)
/sc ript CastSpellByName("复生");
同上,不过加了个性别判断
/script if (UnitName("Target") ~=nil and UnitIsFriend("player","Target")) then CastSpellByName("激活");SendChatMessage("已对你使用了[激活],20秒内法力恢复速度400%,请赶紧坐下回蓝。 ","Whisper","兽人语",UnitName"Target"); end
/y 已经对 %t 使用<<激活>> 大家接替下~~~
给队友使用激活,并密语通知对方
/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("野性印记(等级 "..j..")");break;end;end
根据对方的等级使用相应的野性印记
/script r=6;l={6,14,24,34,44,54};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("荆棘术(等级 "..j..")");break;end;end
根据对方的等级使用相应的荆棘术
/script SpellStopCasting();
/cast 自然迅捷
/script SpellStopCasting();
/cast 治疗之触
瞬加大血技能
/script SpellStopCasting();CastSpellByName("自然迅捷");SpellStopCasting();CastSpellByName("治疗之触")
/script SpellTargetUnit("player")
同上
/cast 治疗之触
/script if UnitIsFriend("Player","target") then if UnitAffectingCombat("target") then if ((UnitHealthMax("target"))-(UnitHealth("target"))<1500) then SpellStopCasting();end;end;elseif SpellIsTargeting() then TargetUnit("Player");end
当队友血低于多少时加血,高于这个值时自动打断
/script H=UnitHealthMax("target")-UnitHealth("target");S={41,98,213,394,617,799,1004,1285,1621,2010};
/sc ript for j=10,1,-1 do if (H>=S[j]) then CastSpellByName("治疗之触(等级 "..j..")"); break;end;end;
同上
/script TargetNearestEnemy()
/script PetAttack()
/script PetDefensiveMode()
/script CastPetAction(6)
/施放 猎人印记
/script SpellStopCasting();
/施放 自动射击
LR自动标记,宠物攻击,自动射击
/script for i=1,16,1 do if (UnitBuff("player",i)~=nil) then if (string.find(UnitBuff("player",i),"Mon")~=nil) then CastSpellByName("猛禽一击");break;end end if(i==16) then CastSpellByName("灵猴守护");end end
LR近战时换灵猴守护状态,使用猛禽一击
/script p,a,S,U="player","targettarget",SendChatMessage,UnitName;t=U(a);if(t~=nil and U(p)~=t)then S("正在嘲讽'%t', ["..t.."]已OT!请暂停攻击.","Yell");S("你已OT,请暂停攻击!","WHISPER","兽人语",t);CastSpellByName("嘲讽");end
战士宏,通知OT者停止攻击,使用嘲讽拉住怪
1.友好魔法
1.A 对友好单位或自己施法
/cast 治疗术(等级1)
/sc ript TargetUnit("player")
如果你当前选择的目标是可以对其使用此魔法的友好单位的话,则对其使用魔法。
如当前目标是不能接受此魔法的单位,或没有选择任何目标的话,则对自己使用魔法。
而且不会对当前目标进行切换,不会中断对当前敌人的攻击。
将 “治疗术(等级1)” 换成任何能对友好单位释放的魔法与技能。
如在最后再加上如下代码
/scr ipt if ( UnitName("target") ~=nil and UnitInParty("player","target") ) then SendChatMessage("<治疗 %T >", "PARTY"); end
则在治疗队友时,在party中发出相应的信息。
将<治疗 %T>换成任何你喜欢的信息,%T表示接受治疗的目标的名字。
将UnitInParty换成UnitIsFriend,则对任何友好单位施法时都发出信息。
将"PARTY"换为"EMOTE",则以自定义表情的方式发出信息。如SendChatMessage(" 将在3秒内治疗 %T", "EMOTE"),则别人在聊天窗口中看到:"汉客将在三秒内治疗小郎"
将"PARTY"换成"WHISPER", "COMMON", UnitName("target"),则采用密语形式对你施法的目标发送信息。"COMMON"表示密语所用的语言种类。下面是一个语言列表:
Common 人类语,联盟通用语
Orcish 兽人语,部落通用语
Dwarvish 矮人语
Gnomish 侏儒语
Darnassian 暗夜精灵语
还有其他的一些实现方法如:
/cast 治疗术(等级1)
/scr ipt if SpellIsTargeting() then TargetUnit("player")
/scr ipt if ( not UnitIsFriend("player", "target") ) then CastSpellByName("治疗术(等级1)"); end
/scr ipt if ( SpellIsTargeting() ) then SpellTargetUnit("player"); end
/scr ipt if (UnitName("target") ~=nil and UnitIsFriend("player","target")) then CastSpellByName("治疗术(等级1)") SendChatMessage("即将治疗 %T", "Party") else TargetUnit ("player") CastSpellByName("治疗术(等级1)") TargetLastEnemy(); end
并不值得推荐。而且后一个宏会切换当前目标,中断攻击。
1.B 只对自己使用
如果想在任何条件下都只对自己使用治疗的话,用如下的宏:
/target "player"
/cast 治疗术(等级1)
/scr ipt TargetLastEnemy()
但这个宏同样有切换当前目标,中断攻击的弊病。
1.C 对特定队员施法
下面的这个宏只对队伍中的第一名队员施法。party1,party2,party3,party4分别指代队伍中的其他4名成员。也可以结合组队相关中的目标设置宏来使用。
/scr ipt if (UnitName("party1") ~= nil) then CastSpellByName("治疗术(等级1)") SpellTargetUnit("party1") SendChatMessage("即将治疗 >>" .. UnitName("party1") .. "<< (3.5s)", "Party") TargetLastEnemy(); end
1.D 按目标的职业分别使用不同魔法
下面是圣骑士的一例。如果目标职业为盗贼或战士则使用力量祝福,否则使用智慧祝福。
/scr ipt class = UnitClass("target"); if ( ( class == "Rogue" ) or ( class == "Warrior" ) ) then
CastSpellByName("Blessing of Might(Rank 1)"); else CastSpellByName("Blessing of Wisdom(Rank 1)"); end
1.E 按目标等级使用不同级别的魔法
下面牧师的一例,对目标使用其所能接受的最高等级的“圣言术:韧”
/scr ipt 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
下面是60级的牧师的实例,另外一种实现方法,语句书写略为不同,更为易读。
/scr ipt 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
下面是60级德鲁依的一例,使用对方能接受的最高级野性印记。实现方法和上面2例略有不同:
/scr ipt 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
2. 判断HP,MP,连击点量
2.A 按HP消耗量不同使用不同治疗魔法
在下面的例子中,宏会对玩家自己的HP消耗量进行判断,如小于200则不使用治疗,并在聊天窗口中提示:"health is good",如消耗两大于200小于400,使用3级的Flash of Light治疗,如大于400,则使用5级的Holy Light进行治疗。你也可以用当前的HP量进行判断。
/scr ipt x="player";d=UnitHealthMax(x)-UnitHealth(x);if (d>200) then if (d<400) then CastSpellByName("Flash of Light(Rank 3)") else CastSpellByName("Holy Light(Rank 5)") end;SpellTargetUnit(x);else DEFAULT_CHAT_FRAME:AddMessage("Health is good"); end;
2.B 根据目标HP量决定是使用灵魂抽取还是抽取生命
术士根据目标HP量决定是使用灵魂抽取还是抽取生命。大于20则使用抽取生命,否则使用灵魂抽取。
/scr ipt if (UnitHealth("target")>20) then CastSpellByName("Drain Life(Rank X)") else CastSpellByName("Drain Soul(Rank 2)"); end
2.C 根据敌人是否使用魔法来决定是使用结舌诅咒还是虚弱诅咒
下面这个是根据敌人是否使用魔法(使用魔法的敌人其MANA肯定大于0)来决定是使用结舌诅咒还是虚弱诅咒。
/scr ipt if (UnitMana("target")>0) then CastSpellByName("Curse of Tongues(Rank X)") else CastSpellByName("Curse of Weakness(Rank X)"); end
2.D 根据连击点的多寡和能量的多少来决定使用技能种类
下面是德鲁依猫形态(盗贼也是一样)根据连击点的多寡和能量的多少来决定是使用Rip还是Rake。如连击点大于等于3,则使用Rip,如连击点小于3并且能量有40点以上,则使用Rake。
/scr ipt if ( GetComboPoints() >= 3 ) then CastSpellByName("Rip(Rank 2)"); else if (UnitMana("player") >= 40 ) then CastSpellByName("Rake(Rank 1)"); end end
3.绷带
3.A 对友好单位或自己使用绷带
/sc ript UseContainerItem(2,1)
/sc ript TargetUnit("player")
如果你当前选择的目标是可以对其使用绷带的友好单位的话,则对其使用绷带。
如当前目标是不能被打绷带的单位,或没有选择任何目标的话,则对自己使用绷带。
而且不会对当前目标进行切换,不会中断对当前敌人的攻击。
使用此宏,你必须把你要用的绷带放在背包的特定位置中。UseContainerItem(2,1)中的2是背包的编号,1是格子的编号。(2,1)表示右数第3个包的第一个格子。把它们换成对应你绷带位置的编号。
5个背包按照排列位置编号如下:
[4][3][2][1][0]]
6格包的格子编号如下:
_____[1][2]
[3][4][5][6]
16格包的格子编号如下:
[ 1][ 2][ 3][ 4]
[ 5][ 6][ 7][ 8]
[ 9][10][11][12]
[13][14][15][16]
其他格数以7a64e78988e69d83335此类推。
将第一行换成/ UseAction(25,0,1),则不需将绷带放在背包特定位置,但必须将绷带拖入技能栏的特定位置。25表示技能栏的编号。第一排第一格编号为1,最后一格为12。第二排第一格编号为13,最后一格为24。以此类推。25表示第三排的第一格。
将第一行换成/use "Linen Bandage",则不需将绷带放在背包的特定位置,也不需将其拖入技能栏。将Linen Bandage换成你使用的绷带的名字。推荐尝试,但此宏没有经过测试。
此宏也还有如下的实现方法:
/scr ipt UseContainerItem(0,1)
/scr ipt if ( SpellIsTargeting() ) then TargetUnit("player"); end
3.B 如果想在任何条件下都只对自己使用绷带的话,用如下的宏:
/target "player"
/use "Linen Bandage"
/scr ipt TargetLastEnemy()
同样,这个宏会切换当前目标,中断攻击,盗贼的连击点也会被清空。
下面这个宏也只对自己使用绷带,但在使用后会切换回先前的目标(不管是敌对中立还是友好的)。
/scr ipt 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
4.武器相关
Bag:物品存放背包编号
Slot:物品存放格子编号
MainhandBag:备用主手武器存放背包编号
MainhandBagSlot:备用主手武器存放格子编号
OffhandBag:备用副手武器存放背包编号
OffhandBagSlot:备用副手武器存放格子编号
TwohandsBag:备用双手武器存放背包编号
TwohandsBagSlot:备用双手武器存放格子编号
4.A 对主手武器或双手武器使用砺石
/scr ipt UseContainerItem (Bag,Slot)
/scr ipt PickupInventoryItem (16)
4.B 更换备用主手武器或双手武器
/scr ipt UseContainerItem (Bag,Slot)
/scr ipt PickupInventoryItem (16)
副手的对应宏,将16换为17即可。
4.C 切换主手武器和副手武器
/scr ipt PickupInventoryItem(16);PickupInventoryItem(17)
盗贼可以用这个宏来互换手中的剑与匕首。
4.D 双手武器 -> (主手武器+副手物品)
/scr ipt PickupContainerItem(MainhandBag, MainhandBagSlot)
/scr ipt PickupInventoryItem(16)
/scr ipt PickupContainerItem(TwohandsBag, TwohandsBagSlot)
/scr ipt PickupContainerItem(OffhandBag, OffhandBagSlot)
/scr ipt PickupInventoryItem(17)
(主手武器+副手物品) -> 双手武器
/scr ipt PickupInventoryItem(17)
/scr ipt PickupContainerItem(OffhandBag, OffhandBagSlot)
/scr ipt PickupContainerItem(TwohandsBag, TwohandsBagSlot)
/scr ipt PickupInventoryItem(16)
/scr ipt PickupContainerItem(MainhandBag, MainhandBagSlot)
副手物品可以是盾牌、副手武器、副手装备品。注意以上几个宏使用之时,鼠标上不要拖有物品,否则会出错。如要避免,可以使用CursorHasItem()来进行预判断。参看下面的几个宏:
4.E(主手武器+副手物品)<-> (单手武器+副手物品)
/scr ipt if ( not CursorHasItem() ) then PickupContainerItem(mainhandBag, mainhandBagSlot); PickupInventoryItem(16); PickupContainerItem(mainhandBag, mainhandBagSlot); PickupContainerItem(offhandBag, offhandBagSlot); PickupInventoryItem(17); PickupContainerItem(offhandBag, offhandBagSlot); end
4.F 单主手武器或双手武器 -> (主手武器+副手物品)
/scr ipt 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
(主手武器+副手物品)-> 单主手武器或双手武器
/scr ipt if ( not CursorHasItem() ) then PickupInventoryItem(17); if ( CursorHasItem() ) then PickupContainerItem(offhandBag, offhandBagSlot); end PickupContainerItem(mainhandBag, mainhandBagSlot); PickupInventoryItem(16); PickupContainerItem(mainhandBag, mainhandBagSlot); end
4.G 更换备用主手武器
/scr ipt if ( not CursorHasItem() ) then PickupContainerItem(mainhandBag, mainhandBagSlot); PickupInventoryItem(16); PickupContainerItem(mainhandBag, mainhandBagSlot); end
5.组队相关
5.A 设置辅助目标+自动辅助
下面是2个配合使用的宏。先在宏窗口第一个空位建立一个宏,选择一个图标,内容为空。
再另建一个宏如下:
/scr ipt if (UnitName("target") ~= nil) then EditMacro(1, "Assist "..UnitName("target"), nil, "/assist "..UnitName("target"), 1) end
/ SaveMacros()
对选择的队友使用第二个宏,则自动将第一个宏设置为辅助选择的目标。也就是用宏来更换自动协助的目标,不用手动编辑宏来更换。
5.B 变羊+信息提示
这是一个法师在组队的时候用的宏,在变羊的同时,在PARTY中说明变羊目标的等级名字。
/scr ipt if ( UnitExists("target") and UnitIsEnemy("player","target") ) then SendChatMessage("Sheeping Level " ..UnitLevel("target") .." " ..UnitName("target") ..". Don't Attack it!", "PARTY") CastSpellByName("Polymorph(Rank 1)"); if not PlayerFrame.inCombat then ClearTarget(); end end
超简化的一个版本,功能上差一点。
/p Sheeping >>> %t <<<
/cast Polymorph (Rank X)
6.打开/关闭背包
/scr ipt ToggleBag(0) 背囊
/scr ipt ToggleBag(1) 右数第二个包
/scr ipt ToggleBag(2) 右数第三个包
/scr ipt ToggleBag(3) 右数第四个包
/scr ipt ToggleBag(4) 右数第五个包
上面的几个是切换特定背包的状态,如果当前是打开着的则关闭。如果当前是关闭着的,则打开。
适当的组合可以让你设定只打开特定的几个背包。如猎人可以选择不打开箭筒或子弹袋。
/scr ipt OpenAllBags()打开所有背包
7.宠物相关(猎人、术士)
下面的一些宏虽是对应猎人,术士只需稍加改动就可以用了。
7.A 施放猎人印记的同时宠物攻击
/cast Hunter's Mark(Rank 1)
/scr ipt PetAttack()
7.B 切换到宠物正在攻击的目标并施放毒蛇刺击
/scr ipt TargetUnitsPet("Player")
/assist
/cast Serpent Sting(Rank 1)
7.C 召回宠物并使用散射
此宏是有散射技能的玩家所必需的。
/scr ipt PetFollow()
/Cast Scatter Shot()
7.D 选择目标,开始攻击
如果当前目标是友好目标,则协助目标。使用猎人印记,宠物攻击,如果没有在战斗状态,开始自动射击。如果目标是敌人的话,则直接使用技能。此宏在SOLO组队中都比较实用。
/scr ipt if (UnitIsFriend("player","target")) then AssistUnit("target"); end
/cast Hunter's Mark(Rank X)
/cast PetAttack()
/scr ipt if(not PlayerFrame.inCombat) then CastSpellByName("Auto Shot"); end
7.E 喂食
最简单的一键喂食,把食物放入对应的背包格子中。
/cast Feed Pet
/scr ipt PickupContainerItem (Bag,Slot)
下面这个会先判断玩家是否处于战斗之中。如对应的格子中没有食物,则会打开相应的背包。
/scr ipt if (not PlayerFrame.inCombat) then if (not
GetContainerItemLink(Bag, Slot)) then OpenBag(Bag); else CastSpellByName("Feed Pet"); PickupContainerItem(Bag, Slot); end end
8.判断目标身上是否有特定BUFF
8.A 猴之守护+物理攻击
下面的宏会先判断玩家身上是否加有猴之守护,如果没有,使用猴之守护。如果玩家未在战斗状态,则开始物理攻击。也可以把Attack换为Raptor Strike。
/scr ipt if (not string.find(UnitBuff("player", 1), "Mon")) then CastSpellByName("Aspect of the Monkey"); end
/scr ipt if (not PlayerFrame.inCombat) then CastSpellByName("Attack"); end
8.B 鹰之守护+自动射击
而这个则是先开始自动射击,再判断身上是否有鹰之守护的效果,没有的话,使用鹰之守护。
/cast Auto Shot
/scr ipt if (not string.find(UnitBuff("player", 1), "Raven")) then CastSpellByName("Aspect of the Hawk(Rank X)"); end
8.C 鹰之守护+瞄准射击
瞄准射击的版本
/scri pt if (not string.find(UnitBuff("player", 1), "Raven")) then CastSpellByName("Aspect of the Hawk(Rank X)"); else CastSpellByName("Aimed Shot(Rank Y)"); end
9.影遁相关(暗夜专用)
9.A 藏身
影遁的同时躺下,藏身之用……
/cast Shadowmeld(Racial)
/laydown
9.B 进食
吃饭喝水的同时影遁,也是出于安全考虑……
/target "player"
/scr ipt UseContainerItem(FoodBag, FoodSlot);
/scr ipt UseContainerItem(DrinkBag, DrinkSlot);
/cast Shadowmeld(Racial)
10.切换技能栏
/scr ipt CURRENT_ACTIONBAR_PAGE = X
/scr ipt ChangeActionBarPage()
将3换成你想切换到的技能栏页数
此宏可以有这样的用法
/cast Aspect of the Monkey
/scr ipt CURRENT_ACTIONBAR_PAGE = 3
/scr ipt ChangeActionBarPage()
切换技能栏的同时使用猴之守护。
还可以加上前面的BUFF判断
/scr ipt if (not string.find(UnitBuff("player", 1), "Mon")) then CastSpellByName("Aspect of the Monkey"); end
/scr ipt CURRENT_ACTIONBAR_PAGE = 3
/scr ipt ChangeActionBarPage()
11.目标信息
/scr ipt if UnitClassification("target")=="elite" then SendChatMessage("".. UnitLevel("target") .. "+ " .. UnitName("target"), "party") else SendChatMessage("" .. UnitLevel("target") .. " " .. UnitName("target"), "party"); end
这个宏在PARTY频道中发出当前目标的一些相关信息。"+"代表精英。效果如下:
[Party]Hank:50 Stormwind Guard
[Party]Hank:43+ King Bangalash
下面是一个目标信息的相关函数列表:
UnitName 如"Coffiex","moonwell"
UnitLevel 如"42","60"
UnitClass 如"Warrior","Shaman"
UnitClassification 如"elite","worldboss"
UnitCreatureFamily 如"Wolf","Cat"
UnitCreatureType 如"Beast","Humanoid"
UnitRace 如"Nightelf","Orc"
12.任务接受页面相关
12.A 增加文字浮现速度
/scr ipt QUEST_DEION_GRADIENT_CPS = 100
12.B 取消文字逐渐浮现效果
/scr ipt QUEST_FADING_ENABLE = nil
12.C 直接接受当前窗口中的任务
/scr ipt AcceptQuest()
13.切换全屏模式与窗口模式
/scri pt SetCVar("gxWindow", 1 - GetCVar("gxWindow"))
/console gxRestart
14.设定“真实鼠标视野”
/scr ipt CameraOrSelectOrMoveStart(arg1)
15.延迟宏(需要Cosmos)
15.A 盗贼武器上毒并定时提示
给双手的武器都上毒,并在毒性还有一分钟就消退的时候在聊天窗口发出提示信息。
/scr ipt UseContainerItem(Bag,Slot); PickupInventoryItem(16); UseContainerItem(Bag,Slot); PickupInventoryItem(17);
/in 1740 / DEFAULT_CHAT_FRAME:AddMessage("Poison wearing off in one minute.")
15.B 魔法效果消退提示
同样的,你也可以对持续性的魔法使用相似的宏。提示信息将在魔法使用X秒后出现,提示你还有Y秒魔法就将会失效。
/scr ipt T = UnitName("target");
/cast Spell(Rank 1);
/in X / DEFAULT_CHAT_FRAME:AddMessage("Spell will wear off " ..T .." in Y seconds.")
也可以这样,X为魔法的持续时间(秒)。在魔法效果消退时提示信息。
/scr ipt T = UnitName("target");
/cast Spell(Rank 1);
/in X / DEFAULT_CHAT_FRAME:AddMessage("Spell has worn off " ..T)
15.C 使用闷棍并在不同时段内提示不同信息
使用闷棍并在不同时段内在PARTY中提示不同信息。以下是3级的闷棍的例子
/scr ipt T = UnitLevel("target") .. " " .. UnitName("target");
/cast Sap(Rank 3);
/scr ipt SendChatMessage(T.." sapped.","party");
/in 30 / SendChatMessage(T.." up in 15.","party");
/in 40 / SendChatMessage(T.." up in 5.","party");
/in 45 /fire
15.D 战士逃跑宏
这是一个战士逃跑的时候使用的宏,首先使用包中的药水,换上盾牌(此例中其换武器的快捷位于技能栏第一页第11和12格)。使用Thunder Clap减低敌人速度,然后转身逃跑。
/scr ipt UseContainerItem(Bag, Slot);ActionButtonDown(11);ActionButtonUp(11);ActionButtonDown(12);ActionButtonUp(12)
/cast Thunder Clap(Rank 1)
/scr ipt TurnLeftStart(arg1)
/in 1 / TurnLeftStop(arg1);ToggleAutoRun()
16.数组宏的实际运用
下面的宏让你只使用一个宏就可以循环地使用数个技能。此以圣骑士为例,第一次使用Seal of the Crusader,第二次使用Judgement,第三次使用Seal of Righeousness,第四次又回到使用Seal of the Crusader,如此循环。
新建宏如下:
/scr ipt AQ={};AQ.i=1;AQ.x=function() AQ[AQ.i]() end
/scr ipt AQ[1]=function() CastSpellByName("Seal of the Crusader(Rank 1)"); AQ.i=2 end
/scr ipt AQ[2]=function() CastSpellByName("Judgement"); AQ.i=3 end
/scr ipt AQ[3]=function() CastSpellByName("Seal of Righeousness(Rank 1)"); AQ.i=1 end
再新建一宏如下:
/scr ipt AQ.x()
在每次进入游戏之后使用一次第一个宏,然后利用第二个宏就可以实现技能的循环使用了。
一系列条件选项将可以被应用于以下斜杠命令:/cast,/use,/target,/focus,/assist,/stopmacro,/cancelaura,/userandom,/castrandom,以及/castsequence。这个帖子的目的就在于讲解如何应用它们。
BASIC PET COMMANDS: (基本宠物指令)
Pet Orders: Attack, Follow, Stay (宠物指令:攻击,跟随,停留)
/petattack
/petfollow
/petstay
Pet Stances: Passive, Defensive, Aggressive (宠物状态:被动,防御,主动)
/petpassive
/petdefensive
/petaggressive
Auto-Cast Pet Abilities (宠物自动施法开/关)
/petautocaston
/petautocastoff
在2.0中,目前所用的大多数宏都将被废弃,因为在战斗中,任何用到CastSpellByName()或者TargetUnit()的宏都将不再有作用。更进一步的,多数“傻瓜逻辑”的宏也不会再有效。但是,你现在可以通过新的宏条件选项来实现许多流行宏的功能。
现在,使用“/cast”(“/施放”)非常简明,命令格式就是“/cast <法术名称>”(施放最高等级的法术)或者“/cast <法术名陈>(Rank <#>)”。比如说:
/施放 强效治疗术
/施放 奥术智慧(等级 3)
在新的系统中,你依然可以使用原来的这些格式,不过你现在可以加入条件选项来使得“/cast”更加灵活。“/cast”的新格式是:“/cast [<第一组条件选项>] <第一个法术名称>; [<第二组条件选项>] <第二个法术名称>; [<第三组条件选项>] <第三个法术名称>;...”。
现在让宏运作起来的方式就像这样:第一组条件选项被检测,如果它们成立,则第一个法术被施放,如果它们不成立,则第二组条件选项被检测,如果这个成立了,下一个法术被施放,如此下去。但是,你必须牢记,只有一个法术会被施放。当一组条件选项被检测到成立时,相应的法术就会被施放,宏也就此结束。
当前可用的条件选项有:
help - 检测目标是否为友善
harm - 检测目标是否为敌对
combat - 检测你是否在战斗中
stance或stance:# - 检测你是否在姿态中,或是否在某个特定的姿态中(详见下)
stealth - 检测你是否潜行
modifier或modifier:shift|ctrl|alt - 检测命令被执行时是否某个特定的键被按下
equipped:<item> - 检测某个物品是否被装备。<item>可以是任何有效的装备槽,物品分类,或者物品子类
target = <unit> - 特殊条件选项,它把当前目标改变为任何有效的单位(详见下)
actionbar:<number> - 检测当前动作条是否为列出的那个
新的条件选项:
pet:<pet type 或 pet name> - 检测宠物是否存在。可以接受宠物类型(枭,熊,小鬼)或者名字(Fluffy,我家坏坏)作为条件。不带条件则检测是否有任何宠物存在。
mounted,swimming,flying - 检测是否在坐骑上,游泳,或者飞行中
indoors,outdoors - 检测是在室内还是室外
button:<#> - 检测某个特定的按钮被用来触发法术,默认为1(详见下)
exists 和 dead - 检测是否目标已经死亡,或是否真的存在
新的宏命令
---------------------------
/castsequence - 按顺序施放一组事先设定好的法术(详见下)
# show <法术> - 显示所列出法术的宏返回值
对于条件选项的一些额外技巧:
你可以在任何条件选项前加上“no”来得到反效果,比如,“nocombat”则在脱离战斗的情况下成立。
用逗号“,”来分隔条件选项作用和“and”一样,当条件选项同时成立时执行。
用斜杠“/”来分隔条件选项作用和“or”一样,当其中一个条件选项成立时执行。
在宏编辑器里按“?”图标将强制宏以当前法术的图标显示。
这里有一些举例说明:
/施放 强效治疗术
非常简单,向你的目标施放强效治疗术。
/施放 [help] 强效治疗术
加入一个条件选项,当目标为友善时施放强效治疗术。
/施放 [help] 强效治疗术; 惩击
加入第二个法术,由于它没有任何条件选项,所以在第一组条件选项不成立时,则施放。
/施放 [help, combat] 快速治疗; [help, nocombat] 强效治疗术; 惩击
这个宏将在你(不是目标)处于战斗中时为友方目标施放快速治疗,如果你不在战斗中且目标为友方目标,则施放强效治疗术,如果这些条件都不成立(比如目标为敌对),则施放惩击。
/施放 [help] 强效治疗术; [harm, combat] 惩击; [harm, nocombat] 精神鞭笞
这个宏将对友方目标施放强效治疗术,或在战斗中对敌对目标施放惩击,或当你不处于战斗中时,对敌对目标施放精神鞭笞。
/施放 [stealth] 伏击; 背刺
这个宏在玩家处于潜行时施放伏击,否则的话就背刺。
/施放 [nostealth] 背刺; 伏击
这个宏和上面那个作用完全相同,只不过用了相反的条件选项。
/施放 [actionbar:1] 强效治疗术; [actionbar:2] 惩击
如果当前动作条为1号时施放强效治疗术,如果是2号则施放惩击,如果为其他动作条则不做任何事情。
/施放 [harm] 变形术
/stopmacro [noharm]
/p 正在把%t变羊!别去碰它!
这个宏将在目标为敌对目标时施放变形术,若目标不是敌对,则停止这个宏(例如变形术没有施放出来),当目标被变羊后则通知队友。注意,因为“/stopmacro”命令的存在,如果目标没有被变羊,队友将不会看到喊话(从而减少了不必要的垃圾信息)。
/施放 [pet] 召唤宠物; 复活宠物
这个宏将在你没有带着宠物时召唤一个出来,否则的话将尝试复活你的宠物。
/施放 [pet:owl] 俯冲; [pet:cat] 冲锋; [pet] 低吼
这个宏将在你带着枭类宠物的时候施放俯冲,带着猫类宠物时施放冲锋,如果是其他宠物则施放低吼。
/施放 [pet:虚空行者] 牺牲; [pet:媚魔] 魅惑
如果你带着虚空行者则施放牺牲,带着媚魔则施放魅惑。
/使用 [nomounted, outdoors] 黑色战驹缰绳
如果你在室外且没有骑着坐骑时召唤坐骑。
/施放 [targepet, dead] 复活宠物; [nopet] 召唤宠物; 治疗宠物
若你的宠物死亡了则复活它,如果没有召唤出来则召唤宠物,或者治疗你的宠物。
----------------
姿态
----------------
姿态以同样的原理工作,当姿态编号没有给出时,则在玩家处于任一姿态都成立(注意,战士永远都处于某个姿态中)。如果给了编号,则检测该姿态是否被激活。
每个职业的特定姿态都有不同的编号,这是一个列表:
战士:1. 战斗 2. 防御 3. 狂暴
牧师:1. 暗影形态
德鲁伊:1. 熊 2. 水栖 3. 猫 4. 旅行 5. 枭兽/树
盗贼:1. 潜行
圣骑士的光环在宏条件选项系统中将不再被作为姿态处理。
请记住,如果你跳过了某个姿态(例如作为战士却没有做防御姿态的任务),你的姿态编号将会递减,比如狂暴姿态的编号会变成2号。
一些姿态宏的例子:
/施放 [nostance] 熊形态
如果没有在一个形态下,则变形到熊形态。
/施放 [stance:1] 压制; [stance:2] 破甲; [stance:3] 旋风斩
在战斗姿态下施放压制,防御姿态下施放破甲,狂暴姿态下施放旋风斩。
/施放 [stance:1] 低吼; [stance:3] 爪击
在熊形态施放低吼,在猫形态施放爪击。
/施放 [nostance:3] 猎豹形态
如果不在猎豹形态,则变形猎豹,但如果已经处于猎豹形态,也不会把你变回来。
物品槽列表:
Two-Hand 双手
Bag 包
Shirt 衬衫
Chest 胸部
Back 背部
Feet 脚
Finger 手指
Hands 手
Head 头部
Held In Off-hand 副手物品
Legs 腿部
Neck 颈部
Ranged 远程
Off Hand 副手
Shoulder 肩部
Tabard 徽章
Thrown (ranged slot items like thrown daggers) 投掷(远程槽物品例如投掷匕首)
Trinket 饰品
Waist 腰部
One-Hand 单手
Main Hand 主手
Wrist 手腕
一些equipped例子:
/施放 [equipped:双手剑] 致死打击; 英勇打击
当你装备着双手剑时施放致死打击。
/施放 [equipped:双手剑/双手锤/双手斧/长柄武器] 致死打击
这里使用了分隔符“/”来设置一个“或”条件,这个宏将在你装备以上类型武器时施放致死打击。
/施放 [equipped:盾牌] 盾牌猛击
在你装备了盾牌的时候施放盾牌猛击。
/施放 [equipped:盾牌, equipped:匕首] 盾牌猛击
仅在你同时装备了盾牌和匕首时才施放盾牌猛击
/施放 [noequipped:盾牌, equipped:副手] 暴怒
在你没有装备盾牌且副手装备了武器的情况下施放暴怒,也就是说,在你双持的时候才被激活。
条件选项[button:<x>]运作起来类似于修改按键。一般来说,当你左键点击一个按钮,它就执行(宏)里面所有的动作,然而,如果你设置了button条件选项,你可以改变宏在特定按键上的表现。
默认按键是1,鼠标左键。注意,如果你通过按键绑定来触发一个宏,它会认为是通过鼠标左键点击触发。被编号的按键有:
1 或 左键
2 或 右键
3 或 中键
4 或 按键4
5 或 按键5
...以及其他一切在“安全声明头文件”中定义的按键。我不太确定这是什么意思,仅仅只是引用Slouken的表述。
lostcup: 官网UI论坛中有一篇Iriel(论坛MVP)写的SecureStateHeader Example Code,类似于一个模版,插件作者可以生成一个实例去修改默认设定。
/施放 [button:2, targeplayer] 快速治疗; [help] 快速治疗
这个宏将向友方目标施放快速治疗,或者如果你右键点击它,则向自己施放快速治疗
这里[targeunit]是一个特殊的条件选项,它并不检测条件是否成立,而是改变施法的目标以其他条件选项的目标。“unit”可以是任何有效的unit类型,例如“player”,“target”,“targettarget”,“party1”,“party1target”,等等。
请注意,任何一个施法都有默认的target,那就是“target”,例如:
/施放 [help] 强效治疗术
就和下面的宏等同:
/施放 [targetarget, help] 强效治疗术
除非你加入一个[targeunit]条件选项,默认则就是你的当前目标。
一些[targeunit]的例子:
/施放 [targeplayer] 快速治疗
总是向自己施放快速治疗,并且不会改变你的实际目标
/施放 [help] 快速治疗; [targetargettarget] 快速治疗
如果目标是友善的,则向他施放快速治疗,否则向目标的目标施放快速治疗。
/施放 [help, combat] 快速治疗; [help, nocombat] 强效治疗术; [targetargettarget, help, combat] 快速治疗; [targeplayer] 强效治疗术
这个宏可以 1) 如果你处于战斗中且目标友善时施放快速治疗,2) 如果你目标友善且没有在战斗中则施放强效治疗术,3) 如果你处于战斗中且你目标的目标为友善,则向他施放快速治疗,4) 如果前面的条件都不成立,则向自己施放强效治疗术。
如果你使用none作为unit,则它会像你没有选中目标一样工作,例如:
/施放 [targenone] 驱散魔法
这将施放驱散魔法且等待你点中一个目标,无论你当前是否选中了一个目标。
新的宏命令:/castsequence
----------------------
在WoW 2.0中出现了一个新的命令,/castsequence。它允许你在一次次点击某个宏时,将其中定义的一系列法术逐个施放,格式如下:
/castsequence [<条件选项>] rese<#>/target/combat <法术1>, <法术2>, <法术3>
“啥?你在说啥?”
它设定了一个法术列表,当你第一次点击这个宏时,它施放列表中的第一个法术,第二次点击的时候,施放第二个法术,以此类推。 当它施放完最后一个时,又回到起始点开始循环。
“我还是不太明白耶。”
OK,假设你是一个法师,有时候你需要冰霜新星后立刻闪现开,你没法同时做到这些事情,现在你可以设定一个序列去做!
/castsequence 冰霜新星, 闪现
就这么简单,第一次你按这个宏,你施放冰霜新星,再按一次,闪现。
“那如果冰霜新星在冷却中怎么办?它会直接施放闪现么?还是不施放冰霜新星,等第二次按这个宏的时候,再施放闪现?”
都不是。如果法术无法施放(冷却,超出距离,法力不足等等情况下),序列就不会走到下一个法术,下一次你再点这个宏的时候,它会再度尝试施放冰霜新星。(抵抗,躲闪,招架等并不会算作无法施放,这些情况下法术/技能确实施放了,只不过没有命中。)
“如果我没有处于战斗中怎么办?我不想在非战斗情况下浪费一个冰霜新星。”
你可以把之前所有的宏条件选项应用于此(可惜的是,只能应用于整个序列,而不能为每个法术单独设定)。
“呃,其实刚才我只是随便说说,OK,那如果我在冰霜新星后不想闪现了怎么办?下一次我想施放冰霜新星时,它会不会还是停滞在施放闪现的设定上?”
这完全没问题,我们会用到重置这个设定。因为冰霜新星一般的冷却时间为24秒,我们可以设定序列在24秒内不被使用就重置它。
/castsequence rese24 冰霜新星, 闪现
当你第一次点击这个宏时,它会施放冰霜新星,如果你决定不闪现了,等过了24秒后,它会重置到冰霜新星的状态,因为冰霜新星的冷却时间为24秒,那时候它就可以被重新使用了,真棒!
“好吧,这真的很厉害,不过我实际上是个术士啊。”
当然,作为一个术士,我相信你会一直重复上三种DoT,现在你可以为它们设置一个序列以节省按钮空间啦。
/castsequence 腐蚀, 献祭636f7079e799bee5baa6339, 痛苦诅咒
就这么简单,你可以连续点击三次这个宏来上这三种DoT。
“但如果在我施放完这些前目标就死了呢?我又卡在这个序列里了,我可不想设什么定时器!”
那也没关系,我们可以用其他的条件选项。如果你设定“resetarget”,那序列将在你改变目标时就重置到起始位置。你也可以设置“resecombat”,每当你脱离战斗,这个序列就会被重置了。如果你使用“/”控制符(你还记得吧,之前提到过),你也可以将这些重置条件选项组合起来!
/castsequence resecombat/target 腐蚀, 献祭, 痛苦诅咒
就这全了,这下子每当你改变目标(比如原来的目标快死了,你选中的新的目标)或脱离了战斗(可能目标在你施放完所有DoT前就死了),它将会把整个序列重置,让你可以从头开始。
“OK,真棒,我想我现在弄明白了!给我点时间设置新的宏....搞定!”
好极了,我很高兴能帮上忙。
“那...来决斗一盘吧?”
呃,不了,我从不和术士决斗。
“切,胆小鬼。”
—————————————————————————————————————————————————————————————
举例说明:
一些宏的例子:
通用宏:
---------------
/use [targeself] 厚虚空布绷带
无论当前目标是什么,这个宏只会对自己使用厚虚空布绷带。
战士宏
---------------
拦截/冲锋:拦截或者冲锋,或者切换到相应的姿态。
/施放 [nocombat, stance:1] 冲锋; [combat, nostance:3] 狂暴姿态; [nocombat, nostance:1] 战斗姿态; [combat, stance:3] 拦截
一般姿态宏:把<* Stance Ability>替换为任何你想要的技能
/施放 [stance:1] <Battle Stance Ability>; [stance:2] <Defense Stance Ability>; [stance:3] <Berserker Stance Ability>
压制:一个很简单的压制宏
/施放 [stance:1] 压制; 战斗姿态
法师宏
---------------
炎爆/火球:如果没有处于战斗则施放炎爆术(作为起手),否则就施放火球术
/施放 [nocombat] 炎爆术; 火球术
锁定变羊:总是将你锁定的目标变形
/施放 [targefocus] 变形术
牧师宏
---------------
向当前目标的目标施放强效治疗术,否则向当前目标施放
/施放 [targetargettarget, help] 强效治疗术; [help] 强效治疗术
#showtooltip
/castsequence reset=6 冰锥术,法力刚玉
LZ试下,不知道能不能用
简单的说, 宏就是创建一连串的命令集,通过鼠标点击或按下键盘某个按键就让电脑自动执行这一系列命令。
在进入游戏之前,特别是用全屏模式进行游戏的,需要掌握一些基本知识。曾经在网吧看过一位玩家做宏,他把网站上别人写好的宏用一张纸抄写下来,然后进入游戏宏设置中一字字敲下,途中发现某些宏用不了,又退出游戏打开网站查询,拿笔记在纸上再次进入游戏尝试。。。。。。
看到这里可能玩转电脑的高手们会笑,但确实是这样,不是亲眼目睹我也不敢相信还有人用这样原始的做宏方法。
所以,首先有必要说明在操作系统平台下或游戏中,当不能使用鼠标右键弹出选项菜单时几个键盘组合键功能:
1.“Ctrl”控制键+“C”键---复制
2.“Ctrl”控制键+“V”键---粘贴
3.“Ctrl”控制键+“X”键---剪切
4.“Ctrl”控制键+“A”键---全选
5.“Windows”键(即操作系统图标的按键一般位于“Ctrl”控制键与“Alt”换档键之间)+“D”键---最小化所有任务到任务栏并显示桌面。
6.“Windows”键+“Tab"制表键---在任务栏打开的各项任务间进行切换。
下面让我们在游戏中一步步设置宏命令:
一.进入游戏后按“e79fa5e98193e59b9ee7ad94362Esc”键或点主菜单图标可打开游戏主选单,点选“宏命令设置”。
当然亦可敲下“回车”键在对话框中输入/MACRO也能打开宏命令设置界面。
二.打开宏命令设置面板后,如果想建立的是角色专用宏,还必须先点上方“通用宏”旁边的角色“专用宏”,在选“新建”后打开建立新宏的面板:
三.输入宏的名字,选取一个宏图标后点“确定”,就建立了一个新宏。
这里需要注意的是,当选取的是第一个“?”号形的图标时,该宏图标将以宏内容中输入的法术技能图标显示。
四.点击宏命令主面板上方中的宏图标,在下方输入宏内容,然后将这个宏图标拖放到快捷技能栏里,就能使用了。
五.宏命令内容的输入:
1.宏的内容中每项命令以分行的形式隔开,这里说的分行并不是说宏面板上写到一定数量后顺列到下行,而是指在宏内容中敲下“回车”键后所进行的分行。在中文版的WOW中不论是输入中文或英文命令,只要输入字符正确均能使用,一般在宏中使用英文不必区分大小写。想把某个技能写进宏中,只需打开技能面板后点击宏内容中想要输入的地方,然后按住“Shift”上档键同时点击法术技能图标就可以;想把背包中某件物品名写进宏中亦是同理。
例:暗夜精灵在喝水的同时施放影遁(宏中的斜杠/+“use"+空格+物品名是物品使用宏的一般格式,当然后面的物品名也可换成魔法面包等等)
/坐下
/use 魔法晶水
/施放 影遁(种族特长)
2.行为命令宏内容的一般书写格式:斜杠/+空格键+技能名(或行为内容)
书写技能的时候若在后面加上(等级X),将使用特定等级的法术,仅书写技能名时默认使用最高等级的法术
例:猎人在标记敌对目标的同时喊话提醒队友
/大喊 我已进行标记大家集中火力消灭他!
/施放 猎人印记
在写宏中大家以后还会经常用到“%t”这个字符,“%t”表示你当前目标的名字。
例:猎人在标记一只野猪的同时喊话提醒队友
/大喊 我已标记 %t 大家集中火力消灭他!
/施放 猎人印记
3.在TBC中当某个技能带有公共CD时(近战一般是1秒,法系1.5秒),也就是施放某个法术时其他大部分技能图标也会跟着绕一圈的时间,这种带有公共CD的技能在宏内容中仅仅依靠简单分行顺序施放的方法是不行的。
例如:战士想通过连续按宏在压制不能使用时施放英勇打击(在TBC的宏规则中当“压制”处于冷却时间或不可用导致施放失败后,第二次按该宏就会继续重复运行第一行的“/施放 压制”,不能自动跳过尚未放出的技能转到第二行宏命令)
所以,下面这个宏是失败的:
/施放 压制
/施放 英勇打击
但是,仍可通过简单分行顺序施放编在同个宏中的技能命令,条件是“技能为瞬发并且这几个技能间不同享公共CD”,比如冷血和伏击 。
例:战士在施放血性狂暴,当血性狂暴技能尚未冷却时再次运行该宏就施放战斗怒吼(“cast”等于“施放”)
/cast 血性狂暴
/cast 战斗怒吼
另外,虽然同享公共CD,但释放条件不同的技能仍然可用各种宏函数串接起来顺序施放,在以后的教程中会谈到这类宏内容的设置。
4.选择和切换目标宏,这在游戏中是较为频繁使用的!
目标选择宏一般书写格式为:宏函数+空格+目标内容
例:不论当前目标是什么或者没有目标,立即切换到指定目标加BUFF
/target 角色名字
/cast 奥术智慧(等级3)
一些常用的目标选择宏函数有:
target 选定目标,例如 /target 冬狼
targettarget 目标的目标,例如 /target targettarget 指目标立即切换到当前目标的目标
pet 宠物,例如 /click [pet] PetActionButton1 指的是使用宠物技能栏中第一个技能
partyX表示第X个小队队友,例如party1,party2。。。。。。
partypetX 表示第X个小队队友的宠物,例如partypetX1,partypetX2。。。。。。
raidX 表示第X个团队队友,例如raid1,raid2。。。。。。
/cleartarget 清除当前目标
/targetlasttarget 选定上一个目标
/startattack 对当前目标进行连续性攻击直到目标死去或消失,这个宏对近战和带宠职业非常有用!
5.其它一些常用宏命令:
/AFK 暂离,当然也可以输入中文 /暂离
/DND 请勿打扰,还可进行自动回复,例如 /DND 我有事离开一下,待会再谈!
/1 将聊天频道切换为综合频道
/6 将聊天频道切换为寻求组队频道
例:需要离开电脑一段时间,想把信息传到综合和寻求组队频道,同时令角色马上处于暂离状态并自动回复宏
/1 我的朋友们注意啦,我有事要离开一会,等会来了再找大伙聊哈
/6 我的朋友们注意啦,我有事要离开一会,等会来了再找大伙聊哈
/DND 我有事离开一下,待会再谈!
/AFK
大家也可以在游戏中查询命令:打开对话框后键入斜杠/,再输入中文单字或英文字母,然后陆续按下“Tab”制表键,会在对话框中分别列出以这个字开头的所有命令。
例如键入字母“/a ”后按几次“Tab”制表键,会依次显示出以字母“a”开头的/assist,/afk,/announce,/ann,/agree等等命令!
6.用操作系统中的“记事本”程序,打开游戏目录中宏的记录文件可直接对宏命令进行编辑。
通用宏文件夹位置: World of Warcraft → WTF → Account → 以您游戏帐号命名的文件夹 → macros-cache.txt
角色专用宏文件夹位置:World of Warcraft → WTF → Account → 以您游戏帐号命名的文件夹 → 以您游戏角色所在服务器命名的文件夹 → 以您游戏角色名称命名的文件夹 → macros-cache.txt