Originally Posted by
Evilphtbstrd
anyone know if there is a decent elemental macro around , the one listed is split up and doesnt work for me
Now for the elemental shaman macro. See below for the details about how the priorities of the rotation work. This is a pretty complex macro as it even adjusts itself for your haste and talents (so it's still optimal during Bloodlust for example). It will also drop your totems, refresh water shield, and use Thunderstorm for mana.
By default it just does a standard single target DPS rotation. However, if you manually drop a Magma Totem...then it detects that you are AOEing and will act accordingly. In AOE mode it will cast Fire Nova and it will also use Thunderstorm on CD (not just for mana). Also if you have an Air Totem but no Fire Totem, it assumes this is because you dropped a Magma Totem that expired so it will even replace it for you!
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");
The Logic:
- If you do not have Water Shield, refresh Water Shield.
- If you are in combat but do not have an Air Totem, Call of the Elements.
- If TS is ready and you are under 40% mana, Thunderstorm.
- If your Flame Shock is not on the target or has less than 2 seconds remaining, Flame Shock.
- If LvB is ready, Lava Burst.
- If your fire totem is a max rank Magma Totem and the cooldown on LvB is more than a GCD (haste adjusted)...
- If Fire Nova is ready, Fire Nova.
- If Thunderstorm is ready, Thunderstorm.
- If Chain Lightning is ready and the cooldown on LvB is more than CL cast time (haste adjusted) AND you have Clearcasting, Chain Lightning.
- If the cooldown on LvB is more than a GCD (haste adjusted) and you have an Air totem but no Fire totem, drop Magma Totem. (This assumes you activated AOE mode by dropping a Magma Totem and it has now expired.)
- If the cooldown on LvB is more than Lightning Bolt cast time (haste adjusted), Lightning Bolt.
- If the cooldown on LvB is more than a GCD (haste adjusted) and the duration of your Flame Shock is at least 2 seconds longer than your shock cooldown (talent adjusted), then Frost Shock.
(Note: That last step basically never happens...the time before next Lava Burst would have to be more than a GCD, but less than lightning bolt cast time...AND you not have CL+Clearcasting...AND your flame shock have sufficient duration.)
Note that this rotation is good for DPS, but it is hard on mana. It will only cast Chain Lightning if you have Clearcasting to save mana, but if you have decent crit you will still basically be casting it as soon as it comes up since Clearcasting will always be there.
Also, the macro adjusts everything for your haste. So if you have more or less, then it will adjust itself accordingly. So if you have a trinket that procs haste or get a buff like Power Infusion or Bloodlust, it will continue to do the exact right thing for maximum damage.
Finally, the macro does not interrupt...if you would like to abandon any cast to interrupt your target, add this as the first line:
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
If you prefer to let your current cast finish and then attempt to interrupt, use this line instead:
Code:
/run if not UnitCastingInfo("player") and UnitIsEnemy("player", "target") and (UnitCastingInfo("target") or UnitChannelInfo("target")) and GetSpellCooldown("Wind Shear")==0 and IsSpellInRange("Wind Shear", "target")==1 then CastSpellByName("Wind Shear") end
Since Wind Shear is off the GCD, it should still interrupt perfectly with the second option...it just won't cancel a cast to do it...all elemental cast times are short so it should be more than sufficient for most interrupting needs...but if you really don't want to miss it, use the first option.