Ok so here's my Holy Paladin macro... It uses your focus as the person to keep up Beacon and Sacred Shield. So you basically focus the tank and let the macro work. It will keep BoL and SS on the tank, and it will heal accordingly. If no one needs healing, it will Cleanse debuffs. It will also judge light on the focus target (tank's target). It will also pop Divine Plea if low on mana and it will bubble if you get low on health.
Also it fully uses Beacon of Light. It will always heal a different target and let Beacon heal the tank. If the tank needs much more healing than any other target, it will still heal someone else because Beacon will heal the tank...but it will use a larger spell because the tank needs it.
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");
The Overall Logic:
- If you are under 10% health and Divine Shield is available, then Divine Shield.
- If you are under 10% mana and Divine Plea is available, then Divine Plea.
- If your Beacon of Light is not present on your focus or it has 3 seconds or less remaining, then Beacon of Light your focus.
- If a party/raid member needs healing, heal them.
- If Judgement of Light is ready, then Judge your focus's target.
- If your Sacred Shield is not present on your focus or it has 3 seconds or less remaining, then Sacred Shield your focus.
- If a party/raid member has a debuff, Cleanse.
The Healing Logic:
- If Holy Shock is ready and the target needs 6000 or more healing, then Holy Shock.
- If target needs 8000 or more healing, then Holy Light.
- If target needs 3000 or more healing, then Flash of Light.
- If no target needs at least 3000 healing, do nothing.
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).