Please +Rep the people who made the macros. All the macros in Quote tags have the creators name in the top. All the macros in CODE tags are ones I've created.
I figured that since the /Dump collection thread is outdated and the /dump command doesnt work, this should be where we store currently working macros.
For these macros youll need http://www.mmowned.com/forums/bots-p...-lua-code.html
For most of these macros youll want to use the addon Super Duper Macro : WoWInterface Downloads : Miscellaneous but that should be easy enough.
Also many of the old macros from http://www.mmowned.com/forums/ui-mac...on-wip-mo.html will work if you replace /dump with /run .
Edit 18 december 2009: If you want more detailed view on what the macro does, ask or press the "show quote" button on the top of the macros and it'll take you to the original post where more information might be stored.
You can post working macros here and Ill add them to the main post or tell me if some macros dont work and Ill remove them.
As with the previous thread Ill split this up in:
General- None worth listing
Death Knight- DK Rotation for any spec!
- DK Unholy
Druid- Moonkin Rotation
- Feral DPS Rotation
Hunter- None worth listing
Mage- Mage Arcane DPS
- Mage Frostfire
- Mage Fireball
Paladin- Holy Paladin Rotation
- Prot Paladin (969) Rotation
- Retribution Paladin DPS
Priest- Shadow DPS
Rogue- Mutilate Rogue
Shaman- Elemental
- Enhancement
- Restoration
Warlock- Felguard / Emberstorm Rotation
Warrior- Arms
- Protection
General
auto prospect/mill/DE/whatsoever
Code:
/cast Prospecting
/use [Insert stuff]
/in 3 /run RunMacro(1)
spammable interrupt when casting for any class.
Code:
/run if UnitCastingInfo("target") then SpellStopCasting() CastSpellByName("INSERT INTERRUPT SPELL HERE") end
Death Knight
Originally Posted by
deadca7
Updated Gifteds UH DK macro, to work with LuaNinja
We don't need all the crap anymore
Druid
Druid Remove Curse & Abolish macro
Code:
/run t="raid"; nps=1; npe=GetNumRaidMembers(); if npe==0 then t="party"; nps=0; npe=GetNumPartyMembers() end; w=nil; m=0; for i=nps,npe do if i==0 then tt="player" else tt=t..i end; if UnitExists(tt) and UnitInRange(tt)==1 and UnitIsDeadOrGhost(tt)~=1 then for j=1,40 do d={UnitDebuff(tt,j)}; if d~=nil and (d[5]=="Curse" or d[5]=="Poison") and d[7]>m then w=tt; m=d[7]; if d[5]=="Curse" then s="Remove Curse" else s="Abolish Poison" end end end end end; if w~=nil then RunMacroText("/cast [@"..w.."] "..s) end;
Feral Druid DPS cycle
Code:
Feral Druid
/run if UnitBuff("player", "Clearcasting") then CastSpellByName("Shred") end
/run local _,d,_ = GetSpellCooldown("Tiger's Fury") if (d == 0) and UnitPower("Player") < 30 then CastSpellByName("Tiger's Fury") end
/run p=GetComboPoints("player","target");if not UnitBuff("player", "Savage Roar") and p>0 then RunMacroText("/cast Savage Roar") end
/run c=CastSpellByName; local _,_,_,_,_,_,n,_,_=UnitBuff("player","Savage Roar"); if( (n-GetTime()<5) and p<4) then c("Savage Roar"); end;
/run p=GetComboPoints("player","target");
/run i=1 while(i<=40)do a={UnitDebuff("target",i)} if(a[1]=="Rip" and a[8]=="player") then break elseif(i==40) and p>4 then RunMacroText("/cast Rip") i=i+1 else i=i+1 end end
/run c=CastSpellByName; local _,_,_,_,_,_,n,_,_=UnitDebuff("target","Rip"); if( (n-GetTime()<5) and p>4) then c("Rip")end;
/run c=CastSpellByName; local _,_,_,_,_,_,n,_,_=UnitDebuff("target","Rip"); if( (n-GetTime()<7)) then else if (p>4) then c("Ferocious Bite") end end;
/run if UnitDebuff("target", "Mangle (Cat)") or UnitDebuff("target", "Mangle (Bear)") or UnitDebuff("target", "Trauma",unitCaster~="player") then else CastSpellByName("Mangle (Cat)") end
/run i=1 while(i<=40)do a={UnitDebuff("target",i)} if(a[1]=="Rake" and a[8]=="player") then break elseif(i==40) then RunMacroText("/cast Rake") i=i+1 else i=i+1 end end
/run local _,d,_ = GetSpellCooldown("Shred") if (d == 0) then CastSpellByName("Shred") end
/run StaticPopup_Hide("MACRO_ACTION_FORBIDDEN");
Originally Posted by
garyrbaker
I use the Moonkin one that was posted originally but changed it for SuperMacro
All in one
/run RegisterCVar("eclipse","Wrath")
/run if (UnitMana('player')/UnitManaMax('player')<0.45) and (GetSpellCooldown("Innervate") == 0) then CastSpellByName("Innervate") end
/run if not UnitDebuff('target','Faerie Fire') and UnitHealth('target')>150000 and not UnitDebuff('target','Faerie Fire (Feral)') then CastSpellByName('Faerie Fire')end
/run a={UnitDebuff('target','Moonfire')}if(a[8]~='player')then CastSpellByName('Moonfire')end
/run b={UnitDebuff('target','Insect Swarm')}if(b[8]~='player')then CastSpellByName('Insect Swarm')end
/run a={UnitBuff('player','Eclipse')}if(a[3]=="Interface\\Icons\\Ability_Druid_Eclipse")then SetCVar("eclipse","Starfire")elseif(a[3]=="Interface\\Icons\\Ability_Druid_EclipseOrange")then SetCVar("eclipse","Wrath")end CastSpellByName(GetCVar("eclipse"))
I changed it to cast innervate when I get below 45% mana and to only put on FF if health is over 150k because less than that and they are dead before I start casting
Resto Druid healing cycle
Code:
/run if not UnitBuff("target", "Rejuvenation") then CastSpellByName("Rejuvenation") end
/run local _,_,_,c,_,_,_,_,_=UnitBuff("target","Lifebloom"); if (c~=3) then CastSpellByName("Lifebloom") end
/run if not UnitBuff("target", "Regrowth") then CastSpellByName("Regrowth") end
/run local _,d,_ = GetSpellCooldown("Healing Touch") if (d == 0) then CastSpellByName("Healing Touch") end
Hunter
Marksmanship Hunter DPS cycle
Code:
/run if not UnitDebuff("target", "Serpent Sting") then CastSpellByName("Serpent Sting") end
/run local _,d,_ = GetSpellCooldown("Silencing Shot") if (d == 0) then CastSpellByName("Silencing Shot") end
/run local _,d,_ = GetSpellCooldown("Kill Command") if (d == 0) then CastSpellByName("Kill Command") end
/run local _,d,_ = GetSpellCooldown("Chimera Shot") if (d == 0) then CastSpellByName("Chimera Shot") end
/run local _,d,_ = GetSpellCooldown("Aimed Shot") if (d == 0) then CastSpellByName("Aimed Shot") end
/run local _,d,_ = GetSpellCooldown("Arcane Shot") if (d == 0) then CastSpellByName("Arcane Shot") end
/run local _,d,_ = GetSpellCooldown("Steady Shot") if (d == 0) then CastSpellByName("Steady Shot") end
Mage
Mage Frost
Code:
/run c=CastSpellByName;if UnitHealth("target")/UnitHealthMax("target")<0.1) then c("Ice Lance") elseif UnitDebuff("target", "Frostbite",unitCaster~="player") then c("Deep Freeze") elseif UnitDebuff
("target", "Deep Freeze",unitCaster~="player") then c("Ice lance") elseif UnitDebuff("target", "Frostbite",unitCaster~="player") then c("Ice Lance") elseif (GetSpellCooldown("Summon Water Elemental") == 0)
then c("Summon Water Elemental") elseif not UnitBuff("player", "Ice Barrier") then (GetSpellCooldown("Ice Barrier") == 0) (c("Ice Barrier"))() elseif (GetSpellCooldown("Icy Veins") == 0) then c("Icy Veins")
else c("FrostBolt") end
Hope there of use to some one.[/QUOTE]
Originally Posted by
Elitetech
Fixed the Arcane Rotation by adding a third macro casting Arcane Blast once and changed Missile Barrage (Not part of current top dps builds) to Arcane Blast(should've plenty of mana)
Code:
Arcane =Spamming macro
/run local s,_,_,_,_,_,_,_=UnitChannelInfo("player"); if( s~="Arcane Missiles" ) then RunMacro("Arcane3"); end;
Code:
Arcane2
/run c=CastSpellByName; local _,_,_,n,_,_,_,_,_=UnitDebuff("player","Arcane Blast"); if( n>=3 ) then if( UnitBuff("player","Missile Barrage") ) then c("Arcane Missiles"); else c("Arcane Blast"); end; else c("Arcane Blast"); end;
Code:
Arcane3
/run if not UnitDebuff("player", "Arcane Blast") then CastSpellByName("Arcane Blast") else RunMacro("Arcane2") end
Mage decursive macro
Code:
/run ut="raid";s="25"; for p="1",s do for d="1", "3" do local _,_,_,_,t,_,_,_,_ = UnitDebuff(ut..p, d); if t == "Curse" then TargetUnit(ut..p); CastSpellByName("Remove Curse"); TargetLastTarget(); p="25"; end end end;
Originally Posted by
Sikas
Mage Frostfire Macro:
Code:
/run c=CastSpellByName;if not UnitDebuff("target", "Living Bomb") then c("Living Bomb") elseif UnitBuff("player", "Hot Streak") then c("Pyroblast") else c("Frostfire Bolt") end
Mage Fireball Macro:
Code:
/run c=CastSpellByName;if not UnitDebuff("target", "Living Bomb") then c("Living Bomb") elseif UnitBuff("player", "Hot Streak") then c("Pyroblast") else c("Fireball") end
Paladin
Originally Posted by
Viral Fly-by
Ok...here goes...but these are written off the cuff and totally untested guys...
I'm not on a WoW comp at the moment to test them:
Standard 969 (Judge, HotR, HS, SoR, Cons):
Code:
/run if _G["ProtTS"]==nil then _G["ProtTS"]=GetTime() end; if _G["Prot6"]==nil then _G["Prot6"]=0 end; if _G["Prot9"]==nil then _G["Prot9"]=0 end; if _G["Prot969"]==nil then _G["Prot969"]=9 end;
/run if GetTime()-_G["ProtTS"]>9 then _G["Prot6"]=0; _G["Prot9"]=0; _G["Prot969"]=9; end; _G["ProtTS"]=GetTime();
/run if _G["Prot969"]==9 and _G["Prot9"]==0 and GetSpellCooldown("Judgement of Wisdom")==0 then CastSpellByName("Judgement of Wisdom"); _G["Prot9"]=1; _G["Prot969"]=6; end;
/run if _G["Prot969"]==9 and _G["Prot9"]==1 and GetSpellCooldown("Holy Shield")==0 then CastSpellByName("Holy Shield"); _G["Prot9"]=2; _G["Prot969"]=6; end;
/run if _G["Prot969"]==9 and _G["Prot9"]==2 and GetSpellCooldown("Consecration")==0 then CastSpellByName("Consecration"); _G["Prot9"]=0; _G["Prot969"]=6; end;
/run if _G["Prot969"]==6 and _G["Prot6"]==0 and GetSpellCooldown("Hammer of the Righteous")==0 then CastSpellByName("Hammer of the Righteous"); _G["Prot6"]=1; _G["Prot969"]=9; end;
/run if _G["Prot969"]==6 and _G["Prot6"]==1 and GetSpellCooldown("Shield of Righteousness")==0 then CastSpellByName("Shield of Righteousness"); _G["Prot6"]=0; _G["Prot969"]=9; end;
I actually think you could just do a standard /castsequence for that one...lol.
969 with SS for Cons (Judge, HotR, HS, SoR, SS/Cons):
Code:
/run if _G["ProtTS"]==nil then _G["ProtTS"]=GetTime() end; if _G["Prot6"]==nil then _G["Prot6"]=0 end; if _G["Prot9"]==nil then _G["Prot9"]=0 end; if _G["Prot969"]==nil then _G["Prot969"]=9 end;
/run if GetTime()-_G["ProtTS"]>9 then _G["Prot6"]=0; _G["Prot9"]=0; _G["Prot969"]=9; end; _G["ProtTS"]=GetTime();
/run if _G["Prot969"]==9 and _G["Prot9"]==0 and GetSpellCooldown("Judgement of Wisdom")==0 then CastSpellByName("Judgement of Wisdom"); _G["Prot9"]=1; _G["Prot969"]=6; end;
/run if _G["Prot969"]==9 and _G["Prot9"]==1 and GetSpellCooldown("Holy Shield")==0 then CastSpellByName("Holy Shield"); _G["Prot9"]=2; _G["Prot969"]=6; end;
/run if _G["Prot969"]==9 and _G["Prot9"]==2 then i=1 while(i<=40) do a={UnitBuff("player",i)} if a[1]=="Sacred Shield" and a[8]=="player" then break else i=i+1 end end if i>40 then RunMacroText("/cast [@player] Sacred Shield"); _G["Prot9"]=0; _G["Prot969"]=6; elseif GetSpellCooldown("Consecration")==0 then CastSpellByName("Consecration"); _G["Prot9"]=0; _G["Prot969"]=6; end end;
/run if _G["Prot969"]==6 and _G["Prot6"]==0 and GetSpellCooldown("Hammer of the Righteous")==0 then CastSpellByName("Hammer of the Righteous"); _G["Prot6"]=1; _G["Prot969"]=9; end;
/run if _G["Prot969"]==6 and _G["Prot6"]==1 and GetSpellCooldown("Shield of Righteousness")==0 then CastSpellByName("Shield of Righteousness"); _G["Prot6"]=0; _G["Prot969"]=9; end;
969 with SS for Judgement (SS/Judge, HotR, HS, SoR, Cons):
Code:
/run if _G["ProtTS"]==nil then _G["ProtTS"]=GetTime() end; if _G["Prot6"]==nil then _G["Prot6"]=0 end; if _G["Prot9"]==nil then _G["Prot9"]=0 end; if _G["Prot969"]==nil then _G["Prot969"]=9 end;
/run if GetTime()-_G["ProtTS"]>9 then _G["Prot6"]=0; _G["Prot9"]=0; _G["Prot969"]=9; end; _G["ProtTS"]=GetTime();
/run if _G["Prot969"]==9 and _G["Prot9"]==0 then i=1 while(i<=40) do a={UnitBuff("player",i)} if a[1]=="Sacred Shield" and a[8]=="player" then break else i=i+1 end end if i>40 then RunMacroText("/cast [@player] Sacred Shield"); _G["Prot9"]=1; _G["Prot969"]=6; elseif GetSpellCooldown("Judgement of Wisdom")==0 then CastSpellByName("Judgement of Wisdom"); _G["Prot9"]=1; _G["Prot969"]=6; end end;
/run if _G["Prot969"]==9 and _G["Prot9"]==1 and GetSpellCooldown("Holy Shield")==0 then CastSpellByName("Holy Shield"); _G["Prot9"]=2; _G["Prot969"]=6; end;
/run if _G["Prot969"]==9 and _G["Prot9"]==2 and GetSpellCooldown("Consecration")==0 then CastSpellByName("Consecration"); _G["Prot9"]=0; _G["Prot969"]=6; end;
/run if _G["Prot969"]==6 and _G["Prot6"]==0 and GetSpellCooldown("Hammer of the Righteous")==0 then CastSpellByName("Hammer of the Righteous"); _G["Prot6"]=1; _G["Prot969"]=9; end;
/run if _G["Prot969"]==6 and _G["Prot6"]==1 and GetSpellCooldown("Shield of Righteousness")==0 then CastSpellByName("Shield of Righteousness"); _G["Prot6"]=0; _G["Prot969"]=9; end;
969 with SS for Cons and HoW for every other Judgement (HoW/Judge, HotR, HS, SoR, SS/Cons):
Code:
/run if _G["ProtTS"]==nil then _G["ProtTS"]=GetTime() end; if _G["ProtJudge"]==nil then _G["ProtJudge"]=0 end; if _G["Prot6"]==nil then _G["Prot6"]=0 end; if _G["Prot9"]==nil then _G["Prot9"]=0 end; if _G["Prot969"]==nil then _G["Prot969"]=9 end;
/run if GetTime()-_G["ProtTS"]>9 then _G["Prot6"]=0; _G["Prot9"]=0; _G["Prot969"]=9; end; _G["ProtTS"]=GetTime();
/run if _G["Prot969"]==9 and _G["Prot9"]==0 and (UnitHealth("target")/UnitHealthMax("target")>0.2 or _G["ProtJudge"]==1) and GetSpellCooldown("Judgement of Wisdom")==0 then CastSpellByName("Judgement of Wisdom"); _G["Prot9"]=1; _G["Prot969"]=6; _G["ProtJudge"]=0; end;
/run if _G["Prot969"]==9 and _G["Prot9"]==0 and UnitHealth("target")/UnitHealthMax("target")<=0.2 and _G["ProtJudge"]==0 and GetSpellCooldown("Hammer of Wrath")==0 then CastSpellByName("Hammer of Wrath"); _G["Prot9"]=1; _G["Prot969"]=6; _G["ProtJudge"]=1; end;
/run if _G["Prot969"]==9 and _G["Prot9"]==1 and GetSpellCooldown("Holy Shield")==0 then CastSpellByName("Holy Shield"); _G["Prot9"]=2; _G["Prot969"]=6; end;
/run if _G["Prot969"]==9 and _G["Prot9"]==2 then i=1 while(i<=40) do a={UnitBuff("player",i)} if a[1]=="Sacred Shield" and a[8]=="player" then break else i=i+1 end end if i>40 then RunMacroText("/cast [@player] Sacred Shield"); _G["Prot9"]=0; _G["Prot969"]=6; elseif GetSpellCooldown("Consecration")==0 then CastSpellByName("Consecration"); _G["Prot9"]=0; _G["Prot969"]=6; end end;
/run if _G["Prot969"]==6 and _G["Prot6"]==0 and GetSpellCooldown("Hammer of the Righteous")==0 then CastSpellByName("Hammer of the Righteous"); _G["Prot6"]=1; _G["Prot969"]=9; end;
/run if _G["Prot969"]==6 and _G["Prot6"]==1 and GetSpellCooldown("Shield of Righteousness")==0 then CastSpellByName("Shield of Righteousness"); _G["Prot6"]=0; _G["Prot969"]=9; end;
They will all "reset" the rotation if you don't push the macro for more than 9 seconds (between pulls). The Sacred Shield versions will rebuff Sacred Shield rather than the normal ability. (So 2nd one above will buff Sacred Shield rather than dropping consecrate...but of course only if your Sacred Shield is down.) They will NOT reset if you change target (useful for switching targets during trash). It will also not "skip" if you do somethign else with your GCD. If you do a Hand of Reckoning to taunt, it will just go right back to where it was...it won't skip over an ability because you used that GCD elsewhere.
For those who care, it is controlled by a few global variables to persist state between executions of the macro:
- _G["ProtTS"] :: Used to detect if been more than 9 seconds since the macro ran so it can reset.
- _G["Prot969"] :: Used to determine if the next ability is a 9-second one or a 6-second one.
- _G["Prot9"] :: Used to determine where in the sequence of the 9-second abilities the macro is...in first above, 0 = judge next, 1 = holy shield next, 2 = consecrate next.
- _G["Prot6"] :: Used to determine where in the sequence of the 6-second abilities the macro is...in first above, 0 = HotR next, 1 = SoR next.
- _G["ProtJudge"] :: Used in the last macro above to alternate the "judgement" spot in the rotation between HoW and JoW. You only want to HoW every other to maintain the judgement effect.
Again...TOTALLY untested...but it should just be spammable and as soon as abilities come of cooldown it will use them in the correct order.
Originally Posted by Viral Fly-By
Paladin Cleansing macro
Code:
/run t="raid"; nps=1; npe=GetNumRaidMembers(); if npe==0 then t="party"; nps=0; npe=GetNumPartyMembers() end; w=nil; m=0; for i=nps,npe do if i==0 then tt="player" else tt=t..i end; if UnitExists(tt) and UnitInRange(tt)==1 and UnitIsDeadOrGhost(tt)~=1 then for j=1,40 do d={UnitDebuff(tt,j)}; if d~=nil and (d[5]=="Magic" or d[5]=="Poison" or d[5]=="Disease") and d[7]>m then w=tt; m=d[7] end end end end; if w~=nil then RunMacroText("/cast [@"..w.."] Cleanse") end;
Originally Posted by
Viral Fly-by
Ok so here's my
Holy Paladin macro...
Code:
/run if UnitHealth("player")/UnitHealthMax("player")<0.10 and GetSpellCooldown("Divine Shield")==0 and IsUsableSpell("Divine Shield") then CastSpellByName("Divine Shield") end;
/run if GetSpellCooldown("Divine Plea") ==0 and UnitPower("player")/UnitPowerMax("player")<=0.10 then CastSpellByName("Divine Plea") end;
/run f=0; if UnitExists("focus") then for i=1,40 do d={UnitBuff("focus",i)}; if d~=nil and d[1]=="Beacon of Light" and d[8]=="player" and d[7]-GetTime()>=3 then f=1; break end end if f==0 then RunMacroText("/cast [@focus] Beacon of Light") end end;
/run FoL=3000; HS=6000; HL=8000; t="raid"; nps=1; npe=GetNumRaidMembers(); if npe==0 then t="party"; nps=0; npe=GetNumPartyMembers() end; e=UnitExists; n=UnitName; h=UnitHealth; hm=UnitHealthMax; s=nil; f="focus"; fh=0; if e(f) then fh=hm(f)-h(f) end; m=0; w=f; for i=nps,npe do if i==0 then tt="player" else tt=t..i end; if e(tt) and (e(f)==nil or n(tt)~=n(f)) then a=hm(tt)-h(tt); if a>m and UnitInRange(tt)==1 and UnitIsDeadOrGhost(tt)~=1 then m=a w=tt end end end; if fh>2*m then m=fh end; if GetSpellCooldown("Holy Shock")==0 and m>=HS then s="Holy Shock" elseif m>=HL then s="Holy Light" elseif m>=FoL then s="Flash of Light" end; if s~=nil then RunMacroText("/cast [@"..w.."] "..s) end;
/run if GetSpellCooldown("Judgement of Light") == 0 then RunMacroText("/cast [@focustarget] Judgement of Light") end;
/run f=0; if UnitExists("focus") then for i=1,40 do d={UnitBuff("focus",i)}; if d~=nil and d[1]=="Sacred Shield" and d[8]=="player" and d[7]-GetTime()>=3 then f=1; break end end if f==0 then RunMacroText("/cast [@focus] Sacred Shield") end end;
/run t="raid"; nps=1; npe=GetNumRaidMembers(); if npe==0 then t="party"; nps=0; npe=GetNumPartyMembers() end; w=nil; m=0; for i=nps,npe do if i==0 then tt="player" else tt=t..i end; if UnitExists(tt) and UnitInRange(tt)==1 and UnitIsDeadOrGhost(tt)~=1 then for j=1,40 do d={UnitDebuff(tt,j)}; if d~=nil and (d[5]=="Magic" or d[5]=="Poison" or d[5]=="Disease") and d[7]>m then w=tt; m=d[7] end end end end; if w~=nil then RunMacroText("/cast [@"..w.."] Cleanse") end;
/run StaticPopup_Hide("MACRO_ACTION_FORBIDDEN");
Customization:
There are 3 variables at the beginning of the 4th line. These control which spell is chosen for which situation and should be adjusted for how big your heals hit.
- FoL: The minimum damage taken to be healed by a Flash of Light (3000 in code above).
- HS: The minimum damage taken to be healed by Holy Shock (6000 in code above).
- HL: The minimum damage taken to be healed by Holy Light (8000 in code above).
[/SIZE]
Originally Posted by
pinhe1ro
Hi, i just want to share with you guys my retribution paladin rotation, tested in raids and work like a charm, you will need the addon Super Duper Macro that allows you to create macros beyond the 255-character limit, enjoy: :Sylvia:
/startattack
/run if GetSpellCooldown("Divine Plea") ==0 and UnitPower("Player")<=1500 then CastSpellByName("Divine Plea") end
/run if UnitCastingInfo("target") then SpellStopCasting() CastSpellByName("Hammer of Justice") end
/run if (UnitHealth("target")/UnitHealthMax("target")<0.2) and GetSpellCooldown("Hammer of Wrath") ==0 then CastSpellByName("Hammer of Wrath") end
/run if GetSpellCooldown("Crusader Strike") ==0 then CastSpellByName("Crusader Strike") end
/run if GetSpellCooldown("Judgement of Wisdom") ==0 then CastSpellByName("Judgement of Wisdom") end
/run if GetSpellCooldown("Divine Storm") ==0 then CastSpellByName("Divine Storm") end
/run if GetSpellCooldown("Consecration") ==0 then CastSpellByName("Consecration") end
/run if UnitBuff("player", "The Art of War") then CastSpellByName("Exorcism") end
/run StaticPopup_Hide("MACRO_ACTION_FORBIDDEN");
Priest
Priest Abolish & Dispel
Code:
/run t="raid"; nps=1; npe=GetNumRaidMembers(); if npe==0 then t="party"; nps=0; npe=GetNumPartyMembers() end; w=nil; m=0; for i=nps,npe do if i==0 then tt="player" else tt=t..i end; if UnitExists(tt) and UnitInRange(tt)==1 and UnitIsDeadOrGhost(tt)~=1 then for j=1,40 do d={UnitDebuff(tt,j)}; if d~=nil and (d[5]=="Magic" or d[5]=="Disease") and d[7]>m then w=tt; m=d[7]; if d[5]=="Magic" then s="Dispel Magic" else s="Abolish Disease" end end end end end; if w~=nil then RunMacroText("/cast [@"..w.."] "..s) end;
Originally Posted by
mrbob
I use macaroon so have unlimited Macro length, some Macros I have put together for my priest and mage Multibox team.
Priest Shadow one button farming.
Code:
/run c=CastSpellByName;if (UnitHealth("target")/UnitHealthMax("target")<0.2) then (GetSpellCooldown("Shadow word: death") == 0) (c("Shadow word: death"))() elseif (UnitMana("player")/UnitManaMax("Player")
<0.5) then (GetSpellCooldown("Shadowfiend") == 0) (c("Shadowfiend"))() elseif not UnitDebuff("target", "Vampiric Embrace",unitCaster~="player") then c("Vampiric Embrace") elseif not UnitDebuff("target",
"Shadow Word: Pain",unitCaster~="player") then c("Shadow Word: Pain") elseif (GetSpellCooldown("Inner Focus") == 0) then c("Inner Focus") elseif (GetSpellCooldown("Mind Blast") == 0) then c("Mind Blast")
elseif not UnitDebuff("target", "Mind Flay",unitCaster~="player") then c("Mind Flay") end
Rogue
Originally Posted by
armen
Mutilate macro
Code:
#show Mutilate
/run RunMacro(1)
/run RunMacro(2)
/run RunMacro(3)
/run RunMacro(4)
/startattack
/run RunMacro("i")
/run RunMacro("h")
/run RunMacro("f")
/run RunMacro("d")
/run RunMacro("e")
/run RunMacro("g")
These are the first four macros that I just recycled; these are very good at interrupting casters/channelers:
Code:
Macro 1: "1":
/run loadstring("local _, _, _, _, _, _, _, _, interruptAble = UnitCastingInfo(\"target\"); if UnitCastingInfo(\"target\") and not interruptAble then SpellStopCasting() CastSpellByName(\"Kick\") end")()
Macro 2: "2":
/run loadstring("local _, _, _, _, _, _, _, _, interruptAble = UnitChannelInfo(\"target\"); if UnitChannelInfo(\"target\") and not interruptAble then SpellStopCasting() CastSpellByName(\"Kick\") end")()
Macro 3: "3":
/run loadstring("local _, _, _, _, _, _, _, _, interruptAble = UnitCastingInfo(\"focus\"); if UnitCastingInfo(\"focus\") and not interruptAble then SpellStopCasting() CastSpellByName(\"Kick\",\"focus\") end")()
Macro 4: "4":
/run loadstring("local _, _, _, _, _, _, _, _, interruptAble = UnitChannelInfo(\"focus\"); if UnitChannelInfo(\"focus\") and not interruptAble then SpellStopCasting() CastSpellByName(\"Kick\",\"focus\") end")()
Here is my creation, please be kind, I cry easily when my Lua code is critiqued! (jk, I love being mocked for craptastic code):
Code:
i
/run if GetComboPoints("player","target")>3 then RunMacroText("/cast Eviscerate")end
h
/run p=GetComboPoints("player","target");ub=UnitBuff;r=RunMacroText;if ub("player", "Hunger For Blood") and ub("player","Slice and Dice") and p < 5 then r("/cast Mutilate")end
f
/run if(UnitAffectingCombat("player")) and GetComboPoints("player","target") < 1 then RunMacroText("/cast Mutilate")end
d
/run p=GetComboPoints("player","target");if not UnitBuff("player", "Slice and Dice") and p>0 then RunMacroText("/cast Slice and Dice")end
e
/run r=RunMacroText;ud=UnitDebuff;if not UnitBuff("player", "Hunger For Blood") and (ud("target","Rupture") or ud("target","Garrote"))then r("/cast Hunger For Blood") end
g
/run r=RunMacroText;if not UnitBuff("player", "Hunger For Blood") and not UnitDebuff("target","Rupture") and GetComboPoints("player","target") > 0 then r("/cast Rupture") else r("/cast Mutilate")end
Shaman
Restoration Shaman Macro
Originally Posted by
Viral Fly-by
This macro is mostly untested ingame by me. I have proofread it extensively but there still may be some flaws.
Code:
/run if UnitIsEnemy("player", "target") and (UnitCastingInfo("target") or UnitChannelInfo("target")) and GetSpellCooldown("Wind Shear")==0 and IsSpellInRange("Wind Shear", "target")==1 then SpellStopCasting() CastSpellByName("Wind Shear") end
/run if GetSpellCooldown("Mana Tide Totem")==0 and UnitPower("player")/UnitPowerMax("player")<=0.10 and UnitAffectingCombat("player")==1 then CastSpellByName("Mana Tide Totem") end;
/run f=0; if UnitExists("focus") then for i=1,40 do d={UnitBuff("focus",i)}; if d~=nil and d[1]=="Earth Shield" and d[8]=="player" and d[4]>1 and d[7]-GetTime()>=60 then f=1; break end end if f==0 then RunMacroText("/cast [@focus] Earth Shield") end end;
/run RT=2500; RT2=5000; LHW=4000; HW=10000; CH=10000; NS=0.10; t="raid"; nps=1; npe=GetNumRaidMembers(); if npe==0 then t="party"; nps=0; npe=GetNumPartyMembers() end; s=nil; m=0; w=f; for i=nps,npe do if i==0 then tt="player" else tt=t..i end; if UnitExists(tt) and UnitInRange(tt)==1 and UnitIsDeadOrGhost(tt)~=1 then a=UnitHealthMax(tt)-UnitHealth(tt); if a>m then m=a w=tt end end end; if GetSpellCooldown("Riptide")==0 and m>=RT and m<RT2 then s="Riptide" elseif m>=HW then if GetSpellCooldown("Nature's Swiftness")==0 and UnitHealth(w)/UnitHealthMax(w)<NS then s="NS" elseif UnitBuff("player","Tidal Waves") or UnitBuff("player","Bloodlust") or UnitBuff("player","Heroism") then s="Healing Wave" else s="Lesser Healing Wave" end elseif m>=LHW then if UnitPowerMax(w) < CH then s="Chain Heal" else s="Lesser Healing Wave" end end; if s=="NS" then SpellStopCasting(); CastSpellByName("Nature's Swiftness"); SpellStopCasting(); s="Healing Wave" end; if s~=nil then RunMacroText("/cast [@"..w.."] "..s) end;
/run t="raid"; nps=1; npe=GetNumRaidMembers(); if npe==0 then t="party"; nps=0; npe=GetNumPartyMembers() end; w=nil; m=0; for i=nps,npe do if i==0 then tt="player" else tt=t..i end; if UnitExists(tt) and UnitInRange(tt)==1 and UnitIsDeadOrGhost(tt)~=1 then for j=1,40 do d={UnitDebuff(tt,j)}; if d~=nil and (d[5]=="Curse" or d[5]=="Poison" or d[5]=="Disease") and d[7]>m then w=tt; m=d[7] end end end end; if w~=nil then RunMacroText("/cast [@"..w.."] Cleanse Spirit") end;
/run if not UnitBuff("player", "Water Shield") then CastSpellByName("Water Shield") end
/run if UnitAffectingCombat("player")==1 then t={GetTotemInfo(1)}; if t[2]==nil or t[2]=="" then CastSpellByName("Call of the Elements") end end
/run StaticPopup_Hide("MACRO_ACTION_FORBIDDEN");
Enhancement Shaman Macro
Originally Posted by
Viral Fly-by
I think you're right about Fire Nova...I wasn't negating the check for the fire totem for Fire Nova. I've updated all my previous posts on the topic. Here is also the updated version:
Code:
/run if UnitCastingInfo("target") and GetSpellCooldown("Wind Shear")==0 then SpellStopCasting() CastSpellByName("Wind Shear") end
/run if GetSpellCooldown("Shamanistic Rage")==0 and UnitMana("player")/UnitManaMax("Player")<0.20 then CastSpellByName("Shamanistic Rage") end
/run local _,_,_,c=UnitBuff("player","Maelstrom Weapon") if c==5 then CastSpellByName("Lightning Bolt") end
/run local i=1 while(i<=40) do a={UnitDebuff("target",i)} if a[1]=="Flame Shock" and a[8]=="player" then break else i=i+1 end end; if i>40 and GetSpellCooldown("Flame Shock")==0 then CastSpellByName("Flame Shock") end
/run local i=1 while(i<=40) do a={UnitDebuff("target",i)} if a[1]=="Stormstrike" and a[8]=="player" then break else i=i+1 end end; if i<=40 and GetSpellCooldown("Earth Shock")==0 then CastSpellByName("Earth Shock") end
/run local i=1 while(i<=40) do a={UnitDebuff("target",i)} if a[1]=="Stormstrike" and a[8]=="player" then break else i=i+1 end end; if i>40 and GetSpellCooldown("Stormstrike")==0 then CastSpellByName("Stormstrike") end
/run if GetSpellCooldown("Earth Shock")==0 then CastSpellByName("Earth Shock") end
/run local _,t,_,_ = GetTotemInfo(1); if t==nil or t=="" then CastSpellByName("Magma Totem") end
/run local _,_,_,c=UnitBuff("player","Lightning Shield") if c==nil or c<=1 then CastSpellByName("Lightning Shield") end
/run if GetSpellCooldown("Lava Lash")==0 then CastSpellByName("Lava Lash") end
/run local _,t,_,_ = GetTotemInfo(1); if t~=nil and t~="" and GetSpellCooldown("Fire Nova")==0 then CastSpellByName("Fire Nova") end
Also, it doesn't re-stormstrike by design...that was how it was originally defined in the guy who wanted his macro "fixed". If you want it to recast SS even if the debuff is still present, then do this:
Code:
/run if UnitCastingInfo("target") and GetSpellCooldown("Wind Shear")==0 then SpellStopCasting() CastSpellByName("Wind Shear") end
/run if GetSpellCooldown("Shamanistic Rage")==0 and UnitMana("player")/UnitManaMax("Player")<0.20 then CastSpellByName("Shamanistic Rage") end
/run local _,_,_,c=UnitBuff("player","Maelstrom Weapon") if c==5 then CastSpellByName("Lightning Bolt") end
/run local i=1 while(i<=40) do a={UnitDebuff("target",i)} if a[1]=="Flame Shock" and a[8]=="player" then break else i=i+1 end end; if i>40 and GetSpellCooldown("Flame Shock")==0 then CastSpellByName("Flame Shock") end
/run local i=1 while(i<=40) do a={UnitDebuff("target",i)} if a[1]=="Stormstrike" and a[8]=="player" then break else i=i+1 end end; if i<=40 and GetSpellCooldown("Earth Shock")==0 then CastSpellByName("Earth Shock") end
/run if GetSpellCooldown("Stormstrike")==0 then CastSpellByName("Stormstrike") end
/run if GetSpellCooldown("Earth Shock")==0 then CastSpellByName("Earth Shock") end
/run local _,t,_,_ = GetTotemInfo(1); if t==nil or t=="" then CastSpellByName("Magma Totem") end
/run local _,_,_,c=UnitBuff("player","Lightning Shield") if c==nil or c<=1 then CastSpellByName("Lightning Shield") end
/run if GetSpellCooldown("Lava Lash")==0 then CastSpellByName("Lava Lash") end
/run local _,t,_,_ = GetTotemInfo(1); if t~=nil and t~="" and GetSpellCooldown("Fire Nova")==0 then CastSpellByName("Fire Nova") end
Cleanse Spirit Macro
Code:
/run t="raid"; nps=1; npe=GetNumRaidMembers(); if npe==0 then t="party"; nps=0; npe=GetNumPartyMembers() end; w=nil; m=0; for i=nps,npe do if i==0 then tt="player" else tt=t..i end; if UnitExists(tt) and UnitInRange(tt)==1 and UnitIsDeadOrGhost(tt)~=1 then for j=1,40 do d={UnitDebuff(tt,j)}; if d~=nil and (d[5]=="Curse" or d[5]=="Poison" or d[5]=="Disease") and d[7]>m then w=tt; m=d[7] end end end end; if w~=nil then RunMacroText("/cast [@"..w.."] Cleanse Spirit") end;
Originally Posted by Viral Fly-By
Elemental Shaman Macro
Code:
/run if not UnitBuff("player", "Water Shield") then CastSpellByName("Water Shield") end;
/run if UnitAffectingCombat("player")==1 and ({GetTotemInfo(4)})[2]=="" then CastSpellByName("Call of the Elements") end;
/run if GetSpellCooldown("Thunderstorm")==0 and UnitPower("player")/UnitPowerMax("player")<0.40 and UnitAffectingCombat("player")==1 then CastSpellByName("Thunderstorm") end;
/run i=1 while(i<=40)do a={UnitDebuff("target",i)} if a[1]=="Flame Shock" and a[8]=="player" and a[7]-GetTime()>2 then break else i=i+1 end end; if i>40 and GetSpellCooldown("Flame Shock")==0 then CastSpellByName("Flame Shock") end;
/run if GetSpellCooldown("Lava Burst")==0 then CastSpellByName("Lava Burst") end;
/run gcd=({GetSpellInfo("Lesser Healing Wave")})[7]/1000; lvb={GetSpellCooldown("Lava Burst")}; if lvb[1]==0 then lvb=0 else lvb=lvb[2]+lvb[1]-GetTime() end; if lvb>gcd and ({GetTotemInfo(1)})[2]=="Magma Totem VII" then if GetSpellCooldown("Fire Nova")==0 then CastSpellByName("Fire Nova") elseif GetSpellCooldown("Thunderstorm")==0 then CastSpellByName("Thunderstorm") end end;
/run t=({GetSpellInfo("Chain Lightning")})[7]/1000; lvb={GetSpellCooldown("Lava Burst")}; if lvb[1]==0 then lvb=0 else lvb=lvb[2]+lvb[1]-GetTime() end; if lvb>t and GetSpellCooldown("Chain Lightning")==0 and UnitBuff("player", "Clearcasting") then CastSpellByName("Chain Lightning") end;
/run gcd=({GetSpellInfo("Lesser Healing Wave")})[7]/1000; lvb={GetSpellCooldown("Lava Burst")}; if lvb[1]==0 then lvb=0 else lvb=lvb[2]+lvb[1]-GetTime() end; if lvb>gcd and ({GetTotemInfo(1)})[2]=="" and ({GetTotemInfo(4)})[2]~="" then CastSpellByName("Magma Totem") end;
/run t=({GetSpellInfo("Lightning Bolt")})[7]/1000; lvb={GetSpellCooldown("Lava Burst")}; if lvb[1]==0 then lvb=0 else lvb=lvb[2]+lvb[1]-GetTime() end; if lvb>t then CastSpellByName("Lightning Bolt") end;
/run gcd=({GetSpellInfo("Lesser Healing Wave")})[7]/1000; lvb={GetSpellCooldown("Lava Burst")}; if lvb[1]==0 then lvb=0 else lvb=lvb[2]+lvb[1]-GetTime() end; be=({GetTalentInfo(1,18)})[5]; rev=({GetTalentInfo(1,6)})[5]; fscd=8-be-5*rev; fs=0 i=1 while(i<=40)do a={UnitDebuff("target",i)} if a[1]=="Flame Shock" and a[8]=="player" then fs=a[7]-GetTime() break else i=i+1 end end; if lvb>gcd and fs>fscd and GetSpellCooldown("Frost Shock")==0 then CastSpellByName("Frost Shock") end;
/run StaticPopup_Hide("MACRO_ACTION_FORBIDDEN");
Warlock
Originally Posted by
Viral Fly-by
So here's a macro for the once-popular Felguard/Emberstorm spec. This was extremely popular a few patches ago and is still one of the best and probably the simplest to play (hence easy to macro).
The spec:
Talent Calculator - World of Warcraft
The macro:
Code:
/run if UnitHealth("player") > 7000 and (UnitPower("Player") < 3000 or not UnitBuff("player", "Life Tap")) then CastSpellByName("Life Tap") end
/run _,_,_,_,_,d = UnitBuff("player", "Decimation"); if d~=nil and d-GetTime()>0.5 then CastSpellByName("Soul Fire") end
/run if UnitHealthMax("target") > 200000 then i=1 while(i<=40)do a={UnitDebuff("target",i)} if a[1]=="Corruption" and a[8]=="player" then break else i=i+1 end end; if i>40 and UnitHealth("target") > 100000 then CastSpellByName("Corruption") end end
/run if UnitHealthMax("target") > 200000 then i=1 while(i<=40)do a={UnitDebuff("target",i)} if a[1]=="Curse of Agony" and a[8]=="player" then break else i=i+1 end end; if i>40 and UnitHealth("target") > 100000 then CastSpellByName("Curse of Agony") end end
/run i=1 while(i<=40)do a={UnitDebuff("target",i)} if a[1]=="Immolate" and a[8]=="player" then break else i=i+1 end end; if i>40 and UnitHealth("target") > 100000 then CastSpellByName("Immolate") end
/run CastSpellByName("Incinerate")
The logic:
- If you have at least 7K hp, then Life Tap if either you don't have the buff or you have less than 3K mana.
- If you have Decimation for another half second, cast Soul Fire (half-second because of latency).
- If the target has at least 200K hp total...check if it has your Corruption...if not, cast Corruption if the mob has at least 100K hp remaining.
- If the target has at least 200K hp total...check if it has your CoA...if not, cast CoA if the mob has at least 100K hp remaining.
- If the target does not have your Immolate and has at least 100K hp remaining, then cast Immolate.
- Cast Incinerate (filler spell)
The macro does do anything fancy like automatically eating your healthstone...but it could if desired. It also doesn't try to check if you should be doing CoE (no other source of the debuff up on target). It could also of course be changed to do CoD instead....or only use CoD if mob has above a certain health. It could also automatically Drain Life if you're below a certain threshold.
Originally Posted by
Elitetech
I've read up on Affliction warlocks on Elitistjerks and as far as I know this should be a PERFECT rotation. They say on EJ that you should clip Drain Soul if a dot is missing so I've set it to do that.
2 macros. Spam Gnu.
In addition to what you wrote it also checks if you have the Life Tap buff from the glyph and checks your mana.
The priority in dots and stuff is also from EJ. Have fun
(THIS ONLY CLIPS DRAIN SOUL IF YOUR TARGET IS MISSING A BUFF, OTHERWISE IT DOESN'T CLIP
)
Code:
Gnu
#showtooltip Haunt
/run if not UnitDebuff("target", "Haunt",unitCaster~="player") then (GetSpellCooldown("Haunt") == 0) (RunMacroText("/castsequence reset=2 Haunt, Corruption")) end
/run if not UnitDebuff("target", "Corruption",unitCaster~="player") then RunMacroText("/castsequence reset=2 Corruption, Unstable Affliction") end
/run if not UnitDebuff("target", "Unstable Affliction",unitCaster~="player") then RunMacroText("/castsequence reset=2 Unstable Affliction, Curse of Agony") end
/run if not UnitDebuff("target", "Curse of Agony",unitCaster~="player") then RunMacroText("/castsequence reset=2 Curse of Agony, Shadow Bolt") end
/run local s,_,_,_,_,_,_,_=UnitChannelInfo("player"); if( s~="Drain Soul" ) then RunMacro("Julegoder") end
Julegoder
#showtooltip Haunt
/run if not UnitBuff("player", "Life Tap") then CastSpellByName("Life Tap") end
/run if UnitPower("Player") < 3000 then CastSpellByName("Life Tap") end
/run if not UnitDebuff("target", "Haunt",unitCaster~="player") then (GetSpellCooldown("Haunt") == 0) (RunMacroText("/castsequence reset=2 Haunt, Corruption")) end
/run if not UnitDebuff("target", "Corruption",unitCaster~="player") then RunMacroText("/castsequence reset=2 Corruption, Unstable Affliction") end
/run if not UnitDebuff("target", "Unstable Affliction",unitCaster~="player") then RunMacroText("/castsequence reset=2 Unstable Affliction, Curse of Agony") end
/run if not UnitDebuff("target", "Curse of Agony",unitCaster~="player") then RunMacroText("/castsequence reset=2 Curse of Agony, Shadow Bolt") end
/run if (UnitHealth("target")/UnitHealthMax("target")<0.25) then CastSpellByName("Drain Soul") else CastSpellByName("Shadow Bolt") end
Originally Posted by
Rombot
It goes like this: UA-Corr-CoA-SP-SP-SP-proc(ST)=SB and over and over again.
Note: it take raw 0.2 sec for UA to appear, so dont be surprised to see double UA cast.
Code:
#showtooltip Unstable Affliction
/run loadstring("local _,_,_,_,_,_,_,caster,_ = UnitDebuff(\"target\", \"Unstable Affliction\")if(caster~=\"player\")then CastSpellByName(\"Unstable Affliction\")end") ()
/run loadstring("local _,_,_,_,_,_,_,caster,_ = UnitDebuff(\"target\", \"Corruption\")if(caster~=\"player\")then CastSpellByName(\"Corruption\") end") ()
/run loadstring("local _,_,_,_,_,_,_,caster,_ = UnitDebuff(\"target\", \"Curse of Agony\")if(caster~=\"player\")then CastSpellByName(\"Curse of Agony\") end") ()
/run loadstring("if UnitBuff(\"Player\", \"Shadow trance\") then CastSpellByName(\"Shadow bolt\") else CastSpellByName(\"Searing Pain\") end") ()
Fear spam
Code:
#showtooltip Fear
/run loadstring("local _,_,_,_,_,_,_,caster,_ = UnitDebuff(\"target\", \"Fear\")if(caster~=\"player\")then CastSpellByName(\"Fear\") end") ()
Warrior
Fury DPS cycle
Code:
/run local _,d,_ = GetSpellCooldown("Bloodrage") if (d == 0) then CastSpellByName("Bloodrage") end
/run if not UnitBuff("player", "Battle Shout") then CastSpellByName("Battle Shout") end
/run if UnitBuff("player", "Slam!") then CastSpellByName("Slam") end
/run if UnitCastingInfo("target") then SpellStopCasting() CastSpellByName("Pummel") end
/run local _,d,_ = GetSpellCooldown("Bloodthirst") if (d == 0) then CastSpellByName("Bloodthirst") end
/run local _,a,_ = GetSpellCooldown("Whirlwind") if (a == 0) then CastSpellByName("Whirlwind") end
/run if UnitPower("Player") > 79 then CastSpellByName("Heroic Strike") end
/run local _,d,_ = GetSpellCooldown("Execute") if (d == 0) then CastSpellByName("Execute") end
Originally Posted by
Ssateneth
Arms warrior 1button
Code:
#showtooltip Charge
/startattack
/run if(IsSpellInRange('Charge','target')==1 and GetSpellCooldown('Charge')==0)then CastSpellByName('Charge')end
/run if(UnitPower('player'))<=35 and GetSpellCooldown('Bloodrage')==0 then CastSpellByName('Bloodrage')end
/run if(UnitPower('player'))>=70 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'))>=85 and (UnitHealth("target")/UnitHealthMax("target")>0.2) and not IsShiftKeyDown() then CastSpellByName('Heroic Strike')end
/run i=1 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) then CastSpellByName("Rend") i=i+1 else i=i+1 end end
/run if (UnitHealth("target")/UnitHealthMax("target")<=0.2) or (IsSpellInRange('Slam','target'))==0 then return elseif (GetSpellCooldown("Mortal Strike"))==0 and not UnitBuff("player","Sudden Death") and (UnitPower('player'))>=30 then CastSpellByName("Mortal Strike") elseif not UnitBuff("player","Sudden Death") and UnitBuff("player","Taste for Blood") and (UnitPower('player'))>=5 then CastSpellByName("Overpower") elseif UnitBuff("player","Sudden Death") and (UnitPower('player'))>=10 then CastSpellByName("Execute") elseif not UnitIsPlayer('target') and GetSpellCooldown('Mortal Strike')~=0 and (UnitPower('player'))>=15 and not UnitBuff('player','Sudden Death') and not UnitBuff('player','Taste for Blood') then CastSpellByName('Slam') end
/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");
Prot warrior
Originally Posted by
Elitetech
Will take a look at it.
Anyways, to finish up the warrior macro, this is what I have.
Code:
/startattack
/run if IsUsableSpell("Charge")==1 and GetSpellCooldown("Charge")==0 and IsSpellInRange("Charge", "target")==1 then CastSpellByName("Charge") elseif IsUsableSpell("Intercept")==1 and GetSpellCooldown("Intercept")==0 and IsSpellInRange("Intercept", "target")==1 then CastSpellByName("Intercept") end
/run if UnitCastingInfo("target") and GetSpellCooldown("Shield Bash")==0 then CastSpellByName("Shield Bash") end
/run local _,a,_ = GetSpellCooldown("Shield Block") if (a == 0) then CastSpellByName("Shield Block") end
/run if UnitHealth('player')<10000 and GetSpellCooldown("Enraged Regeneration")==0 and IsUsableSpell("Enraged Regeneration")==1 then CastSpellByName("Enraged Regeneration") end
/run if UnitHealth('player')<11000 and GetSpellCooldown("Shield Wall")==0 then CastSpellByName("Shield Wall") end
/run if UnitHealth('player')<10000 and GetSpellCooldown("Last Stand")==0 then CastSpellByName("Last Stand") end
/run local _,d,_ = GetSpellCooldown("Bloodrage") if (d == 0) then CastSpellByName("Bloodrage") end
/run if not UnitDebuff("target", "Demoralizing Shout") and not UnitDebuff("target", "Demoralizing Roar") and not UnitDebuff("target", "Vindication") and not UnitDebuff("target", "Curse of Weakness") and IsSpellInRange("Shield Slam", "target")==1 then CastSpellByName("Demoralizing Shout") end
/run if UnitBuff("player", "Glyph of Revenge") then CastSpellByName("Heroic Strike") end
/run local _,a,_ = GetSpellCooldown("Shield Slam") if (a == 0) and IsSpellInRange("Shield Slam", "target")==1 then CastSpellByName("Shield Slam") end
/run i=1 d=120 while(i<=40)do a={UnitDebuff("target",i)} if a[1]=="Sunder Armor" and a[8]=="player" then d=a[7]-GetTime() if a[4]==5 then break end end i=i+1 end if i>40 or d<4 then CastSpellByName("Devastate") end
/run if GetSpellCooldown("Revenge")==0 and IsUsableSpell("Revenge")==1 then CastSpellByName("Revenge") end
/run local _,a,_ = GetSpellCooldown("Thunder Clap") if (a == 0) then CastSpellByName("Thunder Clap") end
/run local _,a,_ = GetSpellCooldown("Shockwave") if (a == 0) and IsSpellInRange("Shockwave", "target")==1 then CastSpellByName("Shockwave") end
/run local _,a,_ = GetSpellCooldown("Concussion blow") if (a == 0) and IsSpellInRange("Concussion blow", "target")==1 then CastSpellByName("Concussion blow") end
/run local _,a,_ = GetSpellCooldown("Heroic Throw") if (a == 0) and IsSpellInRange("Heroic Throw", "target")==1 then CastSpellByName("Heroic Throw") end
/run if UnitPower("Player") > 79 then CastSpellByName("Heroic Strike") end
/run if UnitPower("Player") > 20 then CastSpellByName("Devastate") end
/run if UnitHealth('player')<10000 then RunMacroText("/use Medallion of Heroism") end
/run StaticPopup_Hide("MACRO_ACTION_FORBIDDEN");
I've run like 100 heroics with it and it works really well. I have the trinket Medallion of Heroism, which explains the last line lol. Just remove it or change to something else