First off, this wouldn't be possible without Cypher's work into LuaNinja, which makes this 1 button macro come alive. You can get it here http://www.mmowned.com/forums/bots-p...-lua-code.html (LuaNinja has been detected and no longer in use. You can still run the macro by figuring out out to use it with LuaPulse, which I will help you with, or PM me for a hack that is functionally identical to LuaNinja and requires no different implementation from before)
Also, due to the complexity of Arms being mostly based on reactive abilities, making it into 1 button requires the addon Super Duper Macro found at Super Duper Macro : WoWInterface Downloads : Miscellaneous
Now.. if anyone's played an arms warrior and fury warrior, you can probably agree fury is almost faceroll (pure faceroll is ret pally
) and that arms requires a bit more finesse to get optimum DPS. I prefer arms because it doesn't feel as 'slow' as Fury but it's also very complex to play. With this macro, it's obviously dumbed down to 1 button but you may also find yourself outdpsing fury warriors with it. So, heres the macro. Yes, it's very big.
Code:
#showtooltip Charge
/run if GetShapeshiftForm()==2 then StopMacro() end
/startattack
/run if(IsSpellInRange('Charge','target')==1 and GetSpellCooldown('Charge')==0)then CastSpellByName('Charge')end
/run if(UnitPower('player'))<=30 and GetSpellCooldown('Bloodrage')==0 then CastSpellByName('Bloodrage')end
/run if(UnitPower('player'))>=85 and IsShiftKeyDown() then CastSpellByName('Cleave')end
/run if(UnitPower('player'))>=30 and IsShiftKeyDown() and GetSpellCooldown('Sweeping Strikes')==0 then CastSpellByName('Sweeping Strikes')end
/run if(UnitPower('player'))>=95 and (UnitHealth("target")/UnitHealthMax("target")>0.2) and not IsShiftKeyDown() then CastSpellByName('Heroic Strike')end
#REND
/run i=1 k={GetInstanceInfo()} while(i<=40)do a={UnitDebuff("target",i)} if(a[1]=="Rend" and a[8]=="player")then break elseif(i==40 and UnitPower('player')>=10) and ((k[2]=="none" or UnitIsPlayer("target")) or (k[2]=="party" and UnitHealth("target")>=35000) or (k[2]=="raid" and UnitHealth("target")>=100000)) then CastSpellByName("Rend") i=i+1 else i=i+1 end end
#SUNDER
/run s={UnitDebuff("target","Sunder Armor")} if (IsSpellInRange("Slam")==0 and UnitPower("player")<15) or GetCVar("sunder")=="no" then SetCVar("slam","Slam") return elseif (s[4]==5 and s[7]-GetTime()<=4) then CastSpellByName("Sunder Armor") elseif not UnitDebuff("target","Sunder Armor") or s[4]==1 or s[4]==2 or s[4]==3 or s[4]==4 then SetCVar("slam","Sunder Armor") else SetCVar("slam","Slam") end
#>20% ROTATION
/run c=CastSpellByName cd=GetSpellCooldown r=UnitPower('player') p='player' b=UnitBuff ms='Mortal Strike' sd='Sudden Death' t='target' u=IsUsableSpell tfb='Taste for Blood' up=UnitIsPlayer(t) op="Overpower" tt={b(p,tfb)} vr="Victory Rush" if (UnitHealth(t)/UnitHealthMax(t)<=0.2) or IsSpellInRange(ms,t)==0 then return elseif u(op) and r>=5 and up and ((UnitCastingInfo(t) or UnitChannelInfo(t)) or tt[7]-GetTime()<=5) then c(op) elseif cd(ms)==0 and not b(p,sd) and r>=30 then c(ms) elseif not b(p,sd) and u(op) and r>=5 and not up then c(op) elseif b(p,sd) and r>=10 then c("Execute") elseif u(vr) then c(vr) elseif not up and cd(ms)~=0 and r>=15 and not b(p,sd) and not b(p,tfb) then c(GetCVar("slam")) elseif up and cd(ms)~=0 and r>=15 and not b(p,sd) and GetCVar("slam")=="Sunder Armor" then c("Sunder Armor") end
#<20% ROTATION
/run if (UnitHealth("target")/UnitHealthMax("target")>=0.2) or (IsSpellInRange('Slam','target'))==0 then return elseif not UnitBuff("Player","Sudden Death") and UnitBuff("Player","Taste for Blood") and (UnitPower('player'))>=5 then CastSpellByName("Overpower")elseif (UnitPower('player'))>=10 then CastSpellByName("Execute")end
/run if (GetSpellCooldown("Heroic Throw"))==0 and (IsSpellInRange('Heroic Throw','target'))==1 then CastSpellByName("Heroic Throw") end
/run StaticPopup_Hide("MACRO_ACTION_FORBIDDEN");
You will also need this macro in order to manage the toggling of sundering. It is required to have this macro and click it once each time you log in to your warrior or your macro could not work at all since the previous macro relies on a CVar that -must- be registered.
Code:
/run RegisterCVar("slam","Slam")
/run RegisterCVar("sunder","no")
/run if GetCVar("sunder")=="no" then SetCVar("sunder","yes") SetMacroSpell("Sunder?","Sunder Armor") return elseif GetCVar("sunder")=="yes" then SetCVar("sunder","no") SetMacroSpell("Sunder?","Slam") end
You might be wondering what exactly this does. Heres a summary...
It'll acquire the nearest enemy and start autoattacking. Good for when stuff dies fast so you can start killing another mob.
It will Charge at your target if it's within range and not on cooldown.
Bloodrage when at 30 or less rage.
It will rend your target only if YOU do not have your OWN personal copy of the rend debuff up on your target. People that make these macros tend to assume you're the only warrior/warlock/rogue/etc in the group and will not take into account multiple players of the same class and spec. Also added on an enemy HP check where it will stop rending. This is currently set to 35k in dungeons and 100k in raids.
While the target is above 20% it will...
- Execute the instant you have Sudden Death buff up. This is first on priority due to the possibility of chain procs of the buff. Execute is your hardest hitting ability, so it's good to spam it as many times as possible.
- Keep Mortal Strike on cooldown unless you can execute.
- Cast Overpower unless you can execute and if MS is on cooldown.
- If it can't do Execute or Mortal Strike or Overpower and your rage is above 15, it will Slam. Slam slows your attack speed by 0.5 seconds so it occurs last in the >20% priority.
- Heroic Strike only if your rage is >95. Heroic strike does not generate rage but you will often become ragecapped without it, even with slams. This does not incur a GCD. Will not be cast when enemy HP <20% to maximize rage for Executes later on
While the target is below 20% it will...
- Overpower ONLY if the "Taste for Blood" buff is up and not "Sudden Death". My reasoning is Overpower has an almost 100% crit in raids and only triggers a 1 second GCD, so it's good damage for the time it needs. Rend will still be cast at <20% HP so OP will still be used.
- Else, spam Execute.
Will also cast Heroic Throw if you can't cast ANYTHING in the preceding, because it's a free dps ability.
There is also a sort of "AOE mode" that's activated while holding down your shift key. While holding down shift, it will...
- Keep Sweeping Strikes on cooldown. SS does not incur a GCD.
- Cleave when rage is >85. Cleaves do not generate rage but will do more damage than your standard abilities, hence a lower rage check. It will not Heroic Strike while you are holding down Shift. Cleave does not incur a GCD.
You will have to keep up your own Battle/Commanding shout because due to varying party/raid compositions, you may have to cast Commanding shout (Specifically when you get improved might/battle shout + kings from other players). Also, I did not include bladestorm because I feel its best used when there are multiple mobs around. It's just not effective when used against a single target.
##########FEATURES ADDED AUG 7, 2010##########
The second macro is for enabling sundering. When enabled, your warrior will weave in sunders where he would normally slam and keep up sunders by refreshing the sunder debuff 5 seconds prior to it falling off, regardless of what ability it would normally cast. If you think it will fall off anyways because of movement problems with the boss, you will need to manually refresh it. It is suggested to enable sundering for PVP since slam is not used at all and doing something is better than nothing; You will generally be rage capped without sunders. In order to enable/disable the sunder toggle macro, simply place it on your bars and click it. It's icon will change between the Sunder Armor icon and the Slam Icon. Obviously it will have sundering toggled on if the Sunder Armor icon is showing and it will not sunder at all if the Slam icon shows.
I have also added something to the macro that will go nicely along with the Unrelenting Assault talent (If you strike a player with Overpower while he is casting, all magical damage and healing dealt is reduced by 50% for 6 seconds). It will check if the target is a player, and if he is, it will overpower (if you can overpower at all) only if the player is casting/channeling a spell or if you have 2 seconds or less before your taste for blood buff refreshes.
The macro will not function in Defensive stance. I have not thought up a suitable way to automate some sort of pvp macro while being arms in defensive stance. You will need to still equip your shield and do whatever you need to do manually. If you don't want this, remove the line up top that has the ShapeShift check in it.
##########END FEATURES##########
I hope this is useful to some people. :wave:
EDIT: I changed the slam min rage requirement to 15. Seems with all the conditionals, it's better to dump that rage as fast as possible with slam than do a heroic strike from having built up rage. My dps went up by a couple hundred, saw 6k in toc10.