1.A对友好单位或自己施法/cast治疗术(等级1)/scriptTargetUnit("player")
如果你当前选择的目标是可以对其使用此魔法的友好单位的话,则对其使用魔法。如当前目标是不能接受此魔法的单位,或没有选择任何目标的话,则对自己使用魔法。而且不会对当前目标进行切换,不会中断对当前敌人的攻击。
如在最后再加上如下代码/scriptif(UnitName("target")~=nilandUnitInParty("player","target"))thenSendChatMessage("<治疗%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)/scriptifSpellIsTargeting()thenTargetUnit("player")
/scriptif(notUnitIsFriend("player","target"))thenCastSpellByName("治疗术(等级1)");end/scriptif(SpellIsTargeting())thenSpellTargetUnit("player");end
/scriptif(UnitName("target")~=nilandUnitIsFriend("player","target"))thenCastSpellByName("治疗术(等级1)")SendChatMessage("即将治疗%T","Party")elseTargetUnit("player")CastSpellByName("治疗术(等级1)")TargetLastEnemy();end
并不值得推荐。而且后一个宏会切换当前目标,中断攻击。
1.B只对自己使用如果想在任何条件下都只对自己使用治疗的话,用如下的宏:/target"player"/cast治疗术(等级1)/scriptTargetLastEnemy()
但这个宏同样有切换当前目标,中断攻击的弊病。
1.D按目标的职业分别使用不同魔法下面是圣骑士的一例。如果目标职业为盗贼或战士则使用力量祝福,否则使用智慧祝福。/scriptclass=UnitClass("target");if((class=="Rogue")or(class=="Warrior"))thenCastSpellByName("BlessingofMight(Rank1)");elseCastSpellByName("BlessingofWisdom(Rank1)");end
下面是60级的牧师的实例,另外一种实现方法,语句书写略为不同,更为易读。/scriptr=6;l={1,12,24,36,48,60};t=UnitLevel("target");if(t==0)thent=UnitLevel("player");end;ifUnitIsFriend("player","target")thenforj=r,1,-1doif(t>=l[j]-10)thenCastSpellByName("PowerWord:Fortitude(Rank"..j..")");break;end;end;end
下面是60级德鲁依的一例,使用对方能接受的最高级野性印记。实现方法和上面2例略有不同:/scriptr=7;l={1,10,20,30,40,50,60};ifnotUnitIsFriend("player","target")thenTargetUnit("player");end;t=UnitLevel("target");forj=r,1,-1doif(t>=l[j]-10)thenCastSpellByName("MarkofTheWild(Rank"..j..")");break;end;end
2.判断HP,MP,连击点量
2.A按HP消耗量不同使用不同治疗魔法在下面的例子中,宏会对玩家自己的HP消耗量进行判断,如小于200则不使用治疗,并在聊天窗口中提示:"healthisgood",如消耗两大于200小于400,使用3级的FlashofLight治疗,如大于400,则使用5级的HolyLight进行治疗。你也可以用当前的HP量进行判断。/scriptx="player";d=UnitHealthMax(x)-UnitHealth(x);if(d>200)thenif(d<400)thenCastSpellByName("FlashofLight(Rank3)")elseCastSpellByName("HolyLight(Rank5)")end;SpellTargetUnit(x);elseDEFAULT_CHAT_FRAME:AddMessage("Healthisgood");end;
2.B根据目标HP量决定是使用灵魂抽取还是抽取生命术士根据目标HP量决定是使用灵魂抽取还是抽取生命。大于20则使用抽取生命,否则使用灵魂抽取。/scriptif(UnitHealth("target")>20)thenCastSpellByName("DrainLife(RankX)")elseCastSpellByName("DrainSoul(Rank2)");end
2.C根据敌人是否使用魔法来决定是使用结舌诅咒还是虚弱诅咒下面这个是根据敌人是否使用魔法(使用魔法的敌人其MANA肯定大于0)来决定是使用结舌诅咒还是虚弱诅咒。/scriptif(UnitMana("target")>0)thenCastSpellByName("CurseofTongues(RankX)")elseCastSpellByName("CurseofWeakness(RankX)");end
2.D根据连击点的多寡和能量的多少来决定使用技能种类下面是德鲁依猫形态(盗贼也是一样)根据连击点的多寡和能量的多少来决定是使用Rip还是Rake。如连击点大于等于3,则使用Rip,如连击点小于3并且能量有40点以上,则使用Rake。/scriptif(GetComboPoints()>=3)thenCastSpellByName("Rip(Rank2)");elseif(UnitMana("player")>=40)thenCastSpellByName("Rake(Rank1)");endend
3.绷带
3.A对友好单位或自己使用绷带/scriptUseContainerItem(2,1)/scriptTargetUnit("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]
其他格数以此类推。
将第一行换成/scriptUseAction(25,0,1),则不需将绷带放在背包特定位置,但必须将绷带拖入技能栏的特定位置。25表示技能栏的编号。第一排第一格编号为1,最后一格为12。第二排第一格编号为13,最后一格为24。以此类推。25表示第三排的第一格。
将第一行换成/use"LinenBandage",则不需将绷带放在背包的特定位置,也不需将其拖入技能栏。将LinenBandage换成你使用的绷带的名字。推荐尝试,但此宏没有经过测试。
此宏也还有如下的实现方法:/scriptUseContainerItem(0,1)/scriptif(SpellIsTargeting())thenTargetUnit("player");end
3.B如果想在任何条件下都只对自己使用绷带的话,用如下的宏:/target"player"/use"LinenBandage"/scriptTargetLastEnemy()
同样,这个宏会切换当前目标,中断攻击,盗贼的连击点也会被清空。
下面这个宏也只对自己使用绷带,但在使用后会切换回先前的目标(不管是敌对中立还是友好的)。/scriptp="player";t="target";if(notUnitCanAttack(t,p))thenot=UnitName(t);TargetUnit(p);elseot=nil;end;UseAction(ActionID);if(SpellIsTargeting())thenSpellTargetUnit(p);endif(ot)thenTargetByName(ot);end
Bag:物品存放背包编号Slot:物品存放格子编号MainhandBag:备用主手武器存放背包编号MainhandBagSlot:备用主手武器存放格子编号OffhandBag:备用副手武器存放背包编号OffhandBagSlot:备用副手武器存放格子编号TwohandsBag:备用双手武器存放背包编号TwohandsBagSlot:备用双手武器存放格子编号
4.A对主手武器或双手武器使用砺石/scriptUseContainerItem(Bag,Slot)/scriptPickupInventoryItem(16)
4.B更换备用主手武器或双手武器/scriptUseContainerItem(Bag,Slot)/scriptPickupInventoryItem(16)
副手的对应宏,将16换为17即可。
4.C切换主手武器和副手武器
/scriptPickupInventoryItem(16);PickupInventoryItem(17)
盗贼可以用这个宏来互换手中的剑与匕首。
4.D双手武器->(主手武器+副手物品)/scriptPickupContainerItem(MainhandBag,MainhandBagSlot)/scriptPickupInventoryItem(16)/scriptPickupContainerItem(TwohandsBag,TwohandsBagSlot)/scriptPickupContainerItem(OffhandBag,OffhandBagSlot)/scriptPickupInventoryItem(17)
(主手武器+副手物品)->双手武器/scriptPickupInventoryItem(17)/scriptPickupContainerItem(OffhandBag,OffhandBagSlot)/scriptPickupContainerItem(TwohandsBag,TwohandsBagSlot)/scriptPickupInventoryItem(16)/scriptPickupContainerItem(MainhandBag,MainhandBagSlot)
副手物品可以是盾牌、副手武器、副手装备品。注意以上几个宏使用之时,鼠标上不要拖有物品,否则会出错。如要避免,可以使用CursorHasItem()来进行预判断。参看下面的几个宏:
4.E(主手武器+副手物品)<->(单手武器+副手物品)/scriptif(notCursorHasItem())thenPickupContainerItem(mainhandBag,mainhandBagSlot);PickupInventoryItem(16);PickupContainerItem(mainhandBag,mainhandBagSlot);PickupContainerItem(offhandBag,offhandBagSlot);PickupInventoryItem(17);PickupContainerItem(offhandBag,offhandBagSlot);end
4.F单主手武器或双手武器->(主手武器+副手物品)/scriptif(notCursorHasItem())thenPickupContainerItem(mainhandBag,mainhandBagSlot);PickupInventoryItem(16);PickupContainerItem(mainhandBag,mainhandBagSlot);PickupContainerItem(offhandBag,offhandBagSlot);PickupInventoryItem(17);if(CursorHasItem())thenPickupContainerItem(offhandBag,offhandBagSlot);endend
(主手武器+副手物品)->单主手武器或双手武器/scriptif(notCursorHasItem())thenPickupInventoryItem(17);if(CursorHasItem())thenPickupContainerItem(offhandBag,offhandBagSlot);endPickupContainerItem(mainhandBag,mainhandBagSlot);PickupInventoryItem(16);PickupContainerItem(mainhandBag,mainhandBagSlot);end
4.G更换备用主手武器/scriptif(notCursorHasItem())thenPickupContainerItem(mainhandBag,mainhandBagSlot);PickupInventoryItem(16);PickupContainerItem(mainhandBag,mainhandBagSlot);end
5.A设置辅助目标+自动辅助下面是2个配合使用的宏。先在宏窗口第一个空位建立一个宏,选择一个图标,内容为空。再另建一个宏如下:/scriptif(UnitName("target")~=nil)thenEditMacro(1,"Assist"..UnitName("target"),nil,"/assist"..UnitName("target"),1)end/scriptSaveMacros()
对选择的队友使用第二个宏,则自动将第一个宏设置为辅助选择的目标。也就是用宏来更换自动协助的目标,不用手动编辑宏来更换。
超简化的一个版本,功能上差一点。/pSheeping>>>%t<<
6.打开/关闭背包
/scriptToggleBag(0)背囊/scriptToggleBag(1)右数第二个包/scriptToggleBag(2)右数第三个包/scriptToggleBag(3)右数第四个包/scriptToggleBag(4)右数第五个包
上面的几个是切换特定背包的状态,如果当前是打开着的则关闭。如果当前是关闭着的,则打开。适当的组合可以让你设定只打开特定的几个背包。如猎人可以选择不打开箭筒或子弹袋。
/scriptOpenAllBags()打开所有背包
下面的一些宏虽是对应猎人,术士只需稍加改动就可以用了。
7.B切换到宠物正在攻击的目标并施放毒蛇刺击/scriptTargetUnitsPet("Player")/assist/castSerpentSting(Rank1)
7.C召回宠物并使用散射此宏是有散射技能的玩家所必需的。/scriptPetFollow()/CastScatterShot()
7.E喂食
最简单的一键喂食,把食物放入对应的背包格子中。/castFeedPet/scriptPickupContainerItem(Bag,Slot)
下面这个会先判断玩家是否处于战斗之中。如对应的格子中没有食物,则会打开相应的背包。/scriptif(notPlayerFrame.inCombat)thenif(notGetContainerItemLink(Bag,Slot))thenOpenBag(Bag);elseCastSpellByName("FeedPet");PickupContainerItem(Bag,Slot);endend
8.判断目标身上是否有特定BUFF
8.A猴之守护+物理攻击下面的宏会先判断玩家身上是否加有猴之守护,如果没有,使用猴之守护。如果玩家未在战斗状态,则开始物理攻击。也可以把Attack换为RaptorStrike。/scriptif(notstring.find(UnitBuff("player",1),"Mon"))thenCastSpellByName("AspectoftheMonkey");end/scriptif(notPlayerFrame.inCombat)thenCastSpellByName("Attack");end
8.B鹰之守护+自动射击]而这个则是先开始自动射击,再判断身上是否有鹰之守护的效果,没有的话,使用鹰之守护。/castAutoShot/scriptif(notstring.find(UnitBuff("player",1),"Raven"))thenCastSpellByName("AspectoftheHawk(RankX)");end
8.C鹰之守护+瞄准射击瞄准射击的版本/scriptif(notstring.find(UnitBuff("player",1),"Raven"))thenCastSpellByName("AspectoftheHawk(RankX)");elseCastSpellByName("AimedShot(RankY)");end
10.切换技能栏
/scriptCURRENT_ACTIONBAR_PAGE=X/scriptChangeActionBarPage()
将3换成你想切换到的技能栏页数
此宏可以有这样的用法/castAspectoftheMonkey/scriptCURRENT_ACTIONBAR_PAGE=3/scriptChangeActionBarPage()
切换技能栏的同时使用猴之守护。
还可以加上前面的BUFF判断/scriptif(notstring.find(UnitBuff("player",1),"Mon"))thenCastSpellByName("AspectoftheMonkey");end/scriptCURRENT_ACTIONBAR_PAGE=3/scriptChangeActionBarPage()
11.目标信息/scriptifUnitClassification("target")=="elite"thenSendChatMessage(""..UnitLevel("target").."+"..UnitName("target"),"party")elseSendChatMessage(""..UnitLevel("target")..""..UnitName("target"),"party");end
12.A增加文字浮现速度/scriptQUEST_DESCRIPTION_GRADIENT_CPS=100
12.B取消文字逐渐浮现效果/scriptQUEST_FADING_ENABLE=nil
12.C直接接受当前窗口中的任务/scriptAcceptQuest()
13.切换全屏模式与窗口模式/scriptSetCVar("gxWindow",1-GetCVar("gxWindow"))/consolegxRestart
15.延迟宏(需要Cosmos)
15.A盗贼武器上毒并定时提示给双手的武器都上毒,并在毒性还有一分钟就消退的时候在聊天窗口发出提示信息。/scriptUseContainerItem(Bag,Slot);PickupInventoryItem(16);UseContainerItem(Bag,Slot);PickupInventoryItem(17);/in1740/scriptDEFAULT_CHAT_FRAME:AddMessage("Poisonwearingoffinoneminute.")
15.B魔法效果消退提示同样的,你也可以对持续性的魔法使用相似的宏。提示信息将在魔法使用X秒后出现,提示你还有Y秒魔法就将会失效。/scriptT=UnitName("target");/castSpell(Rank1);/inX/scriptDEFAULT_CHAT_FRAME:AddMessage("Spellwillwearoff"..T.."inYseconds.")
15.C使用闷棍并在不同时段内提示不同信息使用闷棍并在不同时段内在PARTY中提示不同信息。以下是3级的闷棍的例子/scriptT=UnitLevel("target")..""..UnitName("target");/castSap(Rank3);/scriptSendChatMessage(T.."sapped.","party");/in30/scriptSendChatMessage(T.."upin15.","party");/in40/scriptSendChatMessage(T.."upin5.","party");/in45/fire
15.D战士逃跑宏这是一个战士逃跑的时候使用的宏,首先使用包中的药水,换上盾牌(此例中其换武器的快捷位于技能栏第一页第11和12格)。使用ThunderClap减低敌人速度,然后转身逃跑。/scriptUseContainerItem(Bag,Slot);ActionButtonDown(11);ActionButtonUp(11);ActionButtonDown(12);ActionButtonUp(12)/castThunderClap(Rank1)/scriptTurnLeftStart(arg1)/in1/scriptTurnLeftStop(arg1);ToggleAutoRun()
16.数组宏的实际运用
下面的宏让你只使用一个宏就可以循环地使用数个技能。此以圣骑士为例,第一次使用SealoftheCrusader,第二次使用Judgement,第三次使用SealofRigheousness,第四次又回到使用SealoftheCrusader,如此循环。新建宏如下:/scriptAQ={};AQ.i=1;AQ.x=function()AQ[AQ.i]()end/scriptAQ[1]=function()CastSpellByName("SealoftheCrusader(Rank1)");AQ.i=2end/scriptAQ[2]=function()CastSpellByName("Judgement");AQ.i=3end/scriptAQ[3]=function()CastSpellByName("SealofRigheousness(Rank1)");AQ.i=1end
再新建一宏如下:/scriptAQ.x()
在每次进入游戏之后使用一次第一个宏,然后利用第二个宏就可以实现技能的循环使用了。
17.通用变量的设置与使用
通用变量可以被你所有的宏所调用。用下面的格式新建一个通用变量/scriptsetglobal("","");
获取通用变量的值
getglobal("")
通用变量可以用来简化你的宏,以避免超过宏255的字符的最大限制。比如把技能名放到通用变量中。
通用变量每次进入游戏都必须重新设置。你可以用一个宏来设定你的通用变量。如下面这样的一个宏:
/scriptsetglobal("HT1","HealingTouch(Rank3)");setglobal("HT2","HealingTouch(Rank4)");setglobal("RJ","Rejuvenation(Rank4)");
游戏中的使用实例
/scriptif(UnitName("target")~=nilandUnitInParty("target"))thenCastSpellByName(getglobal("RJ"))elseTargetUnit("player")CastSpellByName(getglobal("RJ"))end;TargetLastEnemy();
18.图腾破坏
下面是德鲁依的一个例子,如果当前选择的目标是图腾则使用一级的月火,如果不是图腾则使用最高级的月火:/scriptr=10;if(UnitName("target")~=nil)and(string.find(UnitName("target"),"Totemf"))~=nilthenCastSpellByName("Moonfire(Rank1)")elseCastSpellByName("Moonfire(Rank"..r..")");end
下面是另一个用于破坏图腾的宏,它会搜寻附近的图腾并对其使用1级的月火/target[图腾名的前5-10的字符]/target[图腾名的前5-10的字符]/target[图腾名的前5-10的字符]/target[图腾名的前5-10的字符]/target[图腾名的前5-10的字符]/castMoonfire(Rank1)
下面是一个图腾名列表:--Air"NatureResistanceTotem","WindwallTotem","WindfuryTotem","GraceofAirTotem","GroundingTotem"
--Earth"StoneclawTotem","EarthbindTotem","TremorTotem","StrengthofEarthTotem","StoneskinTotem"
--Water"FireResistanceTotem","PoisonCleansingTotem","DiseaseCleansingTotem","HealingStreamTotem","ManaSpringTotem"
--Fire"FrostResistanceTotem","FlametongueTotem","MagmaTotem","FireNovaTotem","SearingTotem"
19.自然之速(气定神闲)
使用了自然之速之后马上就能跟上治疗波而不用按2次技能。法师可以将自然之速换为气定神闲,后面的治疗波也可以换成任何可搭配使用的魔法。