Okay I've worked out the druid macro myself, and it's working pretty good in random heroics and stuff. I'll wait with raiding on my resto druid until you release one (since I know how well you look into details such as hot-checks, rebirth, buffs, keeping hots on tank etc etc) but until then. This seems like a really good alternative.
Code:
Healing Macro
/run t="raid"; nps=1; npe=GetNumRaidMembers(); if npe==0 then t="party"; nps=0; npe=GetNumPartyMembers() end; 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 m>1000 then RunMacroText("/target "..w.."") end
/run if UnitPower("player")<1000 and GetSpellCooldown("Innervate")==0 then RunMacroText("/cast [@player] Innervate") end
/run if UnitHealthMax("target")-UnitHealth("target")>6000 and GetSpellCooldown("Swiftmend")==0 and UnitBuff("target", "Rejuvenation") and UnitExists("target") and UnitInRange("target")==1 and UnitIsDeadOrGhost("target")~=1 then RunMacroText("/cast Swiftmend") end
/run if UnitHealthMax("target")-UnitHealth("target")>8000 and GetSpellCooldown("Nature's Swiftness")==0 and UnitExists("target") and UnitInRange("target")==1 and UnitIsDeadOrGhost("target")~=1 then CastSpellByName("Nature's Swiftness") end
/run if UnitHealthMax("target")-UnitHealth("target")>1000 and not UnitBuff("target", "Wild Growth") and GetSpellCooldown("Wild Growth")==0 and UnitExists("target") and UnitInRange("target")==1 and UnitIsDeadOrGhost("target")~=1 then CastSpellByName("Wild Growth") end
/run if UnitHealthMax("target")-UnitHealth("target")>2000 and not UnitBuff("target", "Rejuvenation") and UnitExists("target") and UnitInRange("target")==1 and UnitIsDeadOrGhost("target")~=1 then CastSpellByName("Rejuvenation") end
/run local _,_,_,c,_,_,_,_,_=UnitBuff("target","Lifebloom"); if UnitHealthMax("target")-UnitHealth("target")>2500 and (c~=3) and UnitExists("target") and UnitInRange("target")==1 and UnitIsDeadOrGhost("target")~=1 then CastSpellByName("Lifebloom") end
/run if UnitHealthMax("target")-UnitHealth("target")>3000 and not UnitBuff("target", "Regrowth") and UnitExists("target") and UnitInRange("target")==1 and UnitIsDeadOrGhost("target")~=1 then RunMacroText("/castsequence reset=1.6 Regrowth, moo") end
/run local _,d,_ = GetSpellCooldown("Healing Touch") if (d == 0) and UnitHealthMax("target")-UnitHealth("target")>4000 and UnitExists("target") and UnitInRange("target")==1 and UnitIsDeadOrGhost("target")~=1 then RunMacroText("/castsequence reset=1.6 Healing Touch, moo") end
/run if UnitPower("player")<1000 and GetSpellCooldown("Innervate")>=1 then RunMacroText("/use Super Mana Potion") end
/run RunMacro("dispeldruid")
Dispeldruid
/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