Hi guys, after some time of tinkering with the shaman healing rotation I made these. Rep should go to the original authors as all I did was modifiy them.
Holy Pala ablilities: (note: you can just use all of the code as it contains the prot and reti rotations in it)
Code:
<?xml version="1.0" encoding="utf-8" ?><PALADIN><Ability><Name>Crusader Strike</Name><Default>false</Default><SpellID>35395</SpellID><Actions>/startattack</Actions><Lua>return true</Lua><RecastDelay>0</RecastDelay><Target>False</Target></Ability><Ability><Name>Judgement</Name><Default>false</Default><SpellID>20271</SpellID><Actions>/startattack</Actions><Lua>sSoR = UnitBuffID(&quot;player&quot;, 20154)
sSoT = UnitBuffID(&quot;player&quot;, 31801)
sSoJ = UnitBuffID(&quot;player&quot;, 20164)
sSoI = UnitBuffID(&quot;player&quot;, 20165)
if sSoR ~= nil or sSoT ~= nil or sSoJ ~= nil or sSoI ~= nil then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>False</Target></Ability><Ability><Name>Divine Storm</Name><Default>false</Default><SpellID>53385</SpellID><Actions>/startattack</Actions><Lua>return true</Lua><RecastDelay>0</RecastDelay><Target>False</Target></Ability><Ability><Name>Hammer of Wrath</Name><Default>false</Default><SpellID>24275</SpellID><Actions>/startattack</Actions><Lua>local sAW = UnitBuffID(&quot;player&quot;, 31884)
local unithealth = 100 * UnitHealth(&quot;target&quot;) / UnitHealthMax(&quot;target&quot;)
if sAW ~= nil then
return true
else
if unithealth &lt;= 20 then
return true
end
end</Lua><RecastDelay>0</RecastDelay><Target>False</Target></Ability><Ability><Name>Templar&apos;s Verdict</Name><Default>false</Default><SpellID>85256</SpellID><Actions>/startattack</Actions><Lua>local sDivinePurpose = UnitBuffID(&quot;player&quot;, 90174)
if UnitPower(&quot;player&quot;, 9) == 3 or sDivinePurpose ~= nil then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>False</Target></Ability><Ability><Name>Holy Wrath</Name><Default>false</Default><SpellID>2812</SpellID><Actions>/startattack</Actions><Lua>return true</Lua><RecastDelay>0</RecastDelay><Target>False</Target></Ability><Ability><Name>Inquisition</Name><Default>false</Default><SpellID>84963</SpellID><Actions>/startattack</Actions><Lua>local sDivinePurpose = UnitBuffID(&quot;player&quot;, 90174)
local inqBuff, _, _, _, _, _, inqExpireTime = UnitBuffID(&quot;player&quot;, 84963)
if inqBuff ~= nil then
local inqExpire = (inqExpireTime - GetTime())
if inqExpire &lt; 5 then
if UnitPower(&quot;player&quot;, 9) == 3 or sDivinePurpose ~= nil then
return true
end
end
else
if UnitPower(&quot;player&quot;, 9) == 3 or sDivinePurpose ~= nil then
return true
end
end</Lua><RecastDelay>0</RecastDelay><Target>False</Target></Ability><Ability><Name>Consecration</Name><Default>false</Default><SpellID>26573</SpellID><Actions>/startattack</Actions><Lua>local manapercent = 100 * UnitPower(&quot;player&quot;) / UnitPowerMax(&quot;player&quot;)
if manapercent &gt; 60 then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>False</Target></Ability><Ability><Name>Exorcism if Art of War</Name><Default>false</Default><SpellID>879</SpellID><Actions>/startattack</Actions><Lua>sAoW = UnitBuffID(&quot;player&quot;, 59578)
if sAoW ~= nil then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>False</Target></Ability><Ability><Name>Exorcism</Name><Default>false</Default><SpellID>879</SpellID><Actions>/startattack</Actions><Lua>return true</Lua><RecastDelay>0</RecastDelay><Target>False</Target></Ability><Ability><Name>Seal of Righteousness</Name><Default>false</Default><SpellID>20154</SpellID><Actions>/startattack</Actions><Lua>sSoR = UnitBuffID(&quot;player&quot;, 20154)
if sSoR == nil then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>False</Target></Ability><Ability><Name>Seal of Truth</Name><Default>false</Default><SpellID>31801</SpellID><Actions>/startattack</Actions><Lua>sSoT = UnitBuffID(&quot;player&quot;, 31801)
if sSoT == nil then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>False</Target></Ability><Ability><Name>Seal of Justice</Name><Default>false</Default><SpellID>20164</SpellID><Actions>/startattack</Actions><Lua>sSoJ = UnitBuffID(&quot;player&quot;, 20164)
if sSoJ == nil then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>False</Target></Ability><Ability><Name>Seal of Insight</Name><Default>false</Default><SpellID>20165</SpellID><Actions>/startattack</Actions><Lua>sSoI = UnitBuffID(&quot;player&quot;, 20165)
if sSoI == nil then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>False</Target></Ability><Ability><Name>Seal of Anything</Name><Default>false</Default><SpellID>31801</SpellID><Actions>/startattack</Actions><Lua>sSoR = UnitBuffID(&quot;player&quot;, 20154)
sSoT = UnitBuffID(&quot;player&quot;, 31801)
sSoJ = UnitBuffID(&quot;player&quot;, 20164)
sSoI = UnitBuffID(&quot;player&quot;, 20165)
if sSoR ~= nil or sSoT ~= nil or sSoJ ~= nil or sSoI ~= nil then
--We have a seal up
else
return true
end</Lua><RecastDelay>0</RecastDelay><Target>False</Target></Ability><Ability><Name>Shield of the Righteous</Name><Default>false</Default><SpellID>53600</SpellID><Actions>/startattack</Actions><Lua>if UnitPower(&quot;player&quot;, 9) == 3 then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>False</Target></Ability><Ability><Name>Avenger&apos;s Shield</Name><Default>false</Default><SpellID>31935</SpellID><Actions>/startattack</Actions><Lua>return true</Lua><RecastDelay>0</RecastDelay><Target>False</Target></Ability><Ability><Name>Hammer of the Righteous</Name><Default>false</Default><SpellID>53595</SpellID><Actions>/startattack</Actions><Lua>return true</Lua><RecastDelay>0</RecastDelay><Target>False</Target></Ability><Ability><Name>Zealotry</Name><Default>false</Default><SpellID>85696</SpellID><Actions>/startattack</Actions><Lua>local sDivinePurpose = UnitBuffID(&quot;player&quot;, 90174)
if UnitPower(&quot;player&quot;, 9) == 3 or sDivinePurpose ~= nil then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>False</Target></Ability><Ability><Name>Exorcism no other GCD</Name><Default>false</Default><SpellID>879</SpellID><Actions>/startattack</Actions><Lua>--WORK IN PROGRESS.
--Only cast if no other ability is coming off CD within 1.5 seconds and Holy Power ~= 3.
local CSstart, CSduration, CSenabled = GetSpellCooldown(35395);
local CScooldown = (CSstart + CSduration - GetTime())
local JUstart, JUduration, JUenabled = GetSpellCooldown(20271);
local JUcooldown = (JUstart + JUduration - GetTime())
if CScooldown &lt;= 1.5 and JUcooldown &lt;= 1.5 and UnitPower(&quot;player&quot;, 9) ~= 3 then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>False</Target></Ability><Ability><Name>Word of Glory</Name><Default>false</Default><SpellID>85673</SpellID><Actions></Actions><Lua>local unithealth = 100 * UnitHealth(&quot;player&quot;) / UnitHealthMax(&quot;player&quot;)
if unithealth &lt; 50 and UnitPower(&quot;player&quot;, 9) == 3 then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>False</Target></Ability><Ability><Name>Flash of Light &lt; 25% HP</Name><Default>false</Default><SpellID>19750</SpellID><Actions>/startattack</Actions><Lua>local sAW = UnitBuffID(&quot;player&quot;, 31884)
local unithealth = 100 * UnitHealth(&quot;target&quot;) / UnitHealthMax(&quot;target&quot;)
if sAW ~= nil then
return true
else
if unithealth &lt;= 20 then
return true
end
end</Lua><RecastDelay>0</RecastDelay><Target>Player</Target></Ability><Ability><Name>Word of Glory &lt; 60%</Name><Default>false</Default><SpellID>85673</SpellID><Actions>/cancelaura Divine Plea</Actions><Lua>local unithealth = 100 * UnitHealth(&quot;player&quot;) / UnitHealthMax(&quot;player&quot;)
if unithealth &lt; 60 and UnitPower(&quot;player&quot;, 9) == 3 then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>Player</Target></Ability><Ability><Name>Holy Shield</Name><Default>false</Default><SpellID>20925</SpellID><Actions></Actions><Lua>return true</Lua><RecastDelay>0</RecastDelay><Target>Player</Target></Ability><Ability><Name>Divine Plea</Name><Default>false</Default><SpellID>54428</SpellID><Actions>/cancelaura Divine Plea</Actions><Lua>local unithealth = 100 * UnitHealth(&quot;player&quot;) / UnitHealthMax(&quot;player&quot;)
if unithealth &lt; 40 and UnitPower(&quot;player&quot;, 9) ~= 3 then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>Player</Target></Ability><Ability><Name>Word of Glory &lt; 100%</Name><Default>false</Default><SpellID>85673</SpellID><Actions>/cancelaura Divine Plea</Actions><Lua>local unithealth = 100 * UnitHealth(&quot;player&quot;) / UnitHealthMax(&quot;player&quot;)
if unithealth &lt; 100 and UnitPower(&quot;player&quot;, 9) == 3 then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>Player</Target></Ability><Ability><Name>Holy: Autotarget LowHP</Name><Default>false</Default><SpellID>0</SpellID><Actions></Actions><Lua>local mytarget = &quot;player&quot;
local lowest = 100 * UnitHealth(mytarget) / UnitHealthMax(mytarget)
local group = &quot;party&quot;
local members = GetNumPartyMembers()
lowhpmembers = 0
if GetNumRaidMembers() &gt; 0 then
group = &quot;raid&quot;
members = GetNumRaidMembers()
end
for i = 1, members, 1 do
local member = group..tostring(i)
local memberhp = 100 * UnitHealth(member) / UnitHealthMax(member)
if UnitGroupRolesAssigned(member) == &quot;TANK&quot; then memberhp = memberhp - 5 end
if UnitThreatSituation(member) == 3 then memberhp = memberhp - 5 end
if memberhp &lt; 95 and UnitInRange(member) then lowhpmembers = lowhpmembers +1 end
if memberhp &gt; 1 and memberhp &lt; lowest and UnitInRange(member) then
mytarget = member
lowest = memberhp
end
end
TargetUnit(mytarget)</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Holy: Holy Radiance</Name><Default>false</Default><SpellID>82327</SpellID><Actions></Actions><Lua>local friend = UnitIsFriend(&quot;player&quot;,&quot;target&quot;)
local unithealth = 100 * UnitHealth(&quot;player&quot;) / UnitHealthMax(&quot;player&quot;)
if friend ~= nil and unithealth &lt; 60 and lowhpmembers &gt;= 5 then
return true
end
if friend ~= nil and PQR_IsMoving(1) == false and mytarget &lt; 95 and lowhpmembers &gt;= 4 then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Holy: Divine Light</Name><Default>false</Default><SpellID>82326</SpellID><Actions></Actions><Lua>local friend = UnitIsFriend(&quot;player&quot;,&quot;target&quot;)
local mytarget = 100 * UnitHealth(&quot;target&quot;) / UnitHealthMax(&quot;target&quot;)
local manapercent = 100 * UnitPower(&quot;player&quot;) / UnitPowerMax(&quot;player&quot;)
if friend ~= nil and mytarget &lt; 65 and manapercent &gt; 10 then
return true
end
if friend ~= nil and PQR_IsMoving(1) == false and mytarget &lt; 65 and manapercent &gt; 10 then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Holy: Holy Light</Name><Default>false</Default><SpellID>635</SpellID><Actions></Actions><Lua>local friend = UnitIsFriend(&quot;player&quot;,&quot;target&quot;)
local mytarget = 100 * UnitHealth(&quot;target&quot;) / UnitHealthMax(&quot;target&quot;)
if friend ~= nil and mytarget &lt; 95 then
return true
end
if friend ~= nil and PQR_IsMoving(1) == false and mytarget &lt; 95 then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Holy: Flash of Light</Name><Default>false</Default><SpellID>19750</SpellID><Actions></Actions><Lua>local friend = UnitIsFriend(&quot;player&quot;,&quot;target&quot;)
local mytarget = 100 * UnitHealth(&quot;target&quot;) / UnitHealthMax(&quot;target&quot;)
local manapercent = 100 * UnitPower(&quot;player&quot;) / UnitPowerMax(&quot;player&quot;)
if friend ~= nil and mytarget &lt; 35 then
return true
end
if friend ~= nil and PQR_IsMoving(1) == false and mytarget &lt; 35 and manapercent &gt; 15 then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Holy: Divine Plea</Name><Default>false</Default><SpellID>54428</SpellID><Actions></Actions><Lua>local manapercent = 100 * UnitPower(&quot;player&quot;) / UnitPowerMax(&quot;player&quot;)
if manapercent &lt; 85 then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Holy: Holy Shock</Name><Default>false</Default><SpellID>20473</SpellID><Actions></Actions><Lua>local friend = UnitIsFriend(&quot;player&quot;,&quot;target&quot;)
local mytarget = 100 * UnitHealth(&quot;target&quot;) / UnitHealthMax(&quot;target&quot;)
if friend ~= nil and mytarget &lt; 90 then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Holy: Word of Glory</Name><Default>false</Default><SpellID>85673</SpellID><Actions></Actions><Lua>local unithealth = 100 * UnitHealth(&quot;player&quot;) / UnitHealthMax(&quot;player&quot;)
if unithealth &lt; 95 and UnitPower(&quot;player&quot;, 9) == 3 then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Holy: GoAK</Name><Default>false</Default><SpellID>86150</SpellID><Actions></Actions><Lua>local friend = UnitIsFriend(&quot;player&quot;,&quot;target&quot;)
local mytarget = 100 * UnitHealth(&quot;target&quot;) / UnitHealthMax(&quot;target&quot;)
if friend ~= nil and mytarget &lt; 40 then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Holy: Cleanse</Name><Default>false</Default><SpellID>4987</SpellID><Actions></Actions><Lua>local greencauldron = UnitDebuffID(&quot;target&quot;, 96328)
local bluecauldron = UnitDebuffID(&quot;target&quot;, 96325)
local redcauldron = UnitDebuffID(&quot;target&quot;, 96326)
local blackout10 = UnitDebuffID(&quot;target&quot;, 92876)
local blackout25 = UnitDebuffID(&quot;target&quot;, 92878)
local unstableaf = UnitDebuffID(&quot;target&quot;, 30108)
if greencauldron or bluecauldron or redcauldron or blackout10 or blackout25 or unstableaf then
return false
else
for i=1,40 do
local _,_,_,count,ismagic,duration = UnitDebuff(&quot;target&quot;,i)
if ismagic == &quot;Magic&quot; and duration &gt; 6 and count ~= 1 then
return true
end
end
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Holy: Divine Favor</Name><Default>false</Default><SpellID>31842</SpellID><Actions></Actions><Lua>local friend = UnitIsFriend(&quot;player&quot;,&quot;target&quot;)
local mytarget = 100 * UnitHealth(&quot;target&quot;) / UnitHealthMax(&quot;target&quot;)
if friend ~= nil and GetSpellCooldown(31842) == 0 and mytarget &lt; 40 then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Holy: Avenging Wrath</Name><Default>false</Default><SpellID>31884</SpellID><Actions></Actions><Lua>local friend = UnitIsFriend(&quot;player&quot;,&quot;target&quot;)
local mytarget = 100 * UnitHealth(&quot;target&quot;) / UnitHealthMax(&quot;target&quot;)
if friend ~= nil and mytarget &lt; 35 then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability></PALADIN>
Here is the Holy Rotation:
Code:
<?xml version="1.0" encoding="utf-8" ?><PALADIN><Rotation><RotationName>Holy</RotationName><RotationDefault>false</RotationDefault><RotationList>Holy: Autotarget LowHP|Holy: Divine Plea|Holy: Holy Shock|Holy: Word of Glory|Holy: Divine Light|Holy: Avenging Wrath|Holy: Flash of Light|Holy: Divine Favor|Holy: GoAK|Holy: Holy Radiance|Holy: Holy Light|Holy: Cleanse|Judgement</RotationList></Rotation></PALADIN>
And now for druid abilities: (note: I have not tested this yet and will tinker with it more at a later time. Also it has feral cat abilities in it as I was to lazy to select only resto :P )
Code:
<?xml version="1.0" encoding="utf-8" ?><DRUID><Ability><Name>Rake</Name><Default>false</Default><SpellID>1822</SpellID><Actions></Actions><Lua>local rake, _, _, _, _, _, raketimer = UnitDebuffID(&quot;target&quot;, 1822, &quot;PLAYER&quot;)
if rake ~= nil then
if raketimer - GetTime() &lt; 3 then
return true
end
else
return true
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Rip</Name><Default>false</Default><SpellID>1079</SpellID><Actions></Actions><Lua>local rip, _, _, _, _, _, riptimer = UnitDebuffID(&quot;target&quot;, 1079, &quot;PLAYER&quot;)
local ripCP = GetComboPoints(&quot;player&quot;, &quot;target&quot;)
local riphealth = 100 * UnitHealth(&quot;target&quot;) / UnitHealthMax(&quot;target&quot;)
if rip ~= nil then
if riphealth &gt; 25 then
if ripCP == 5 then
if riptimer - GetTime() &lt; 2 then
return true
end
end
end
else
if ripCP == 5 then
return true
end
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Shred</Name><Default>false</Default><SpellID>5221</SpellID><Actions></Actions><Lua>-- Check for the debuffs.
local hasCatMangle = UnitDebuffID(&quot;target&quot;, 33876)
local hasBearMangle = UnitDebuffID(&quot;target&quot;, 33878)
local hasTrauma = UnitDebuffID(&quot;target&quot;, 46857)
local hasHemorrhage = UnitDebuffID(&quot;target&quot;, 16511)
local CP = GetComboPoints(&quot;player&quot;, &quot;target&quot;)
-- Just check for all buffs, we have no casting time on Shred so no need for a timer check
if hasCatMangle ~= nil or hasBearMangle ~= nil or hasTrauma ~= nil or hasHemorrhage ~= nil then
if PQR_NotBehindTarget() then
return false
else
if CP == 5 then
return false
else
return true
end
end
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Mangle</Name><Default>false</Default><SpellID>33876</SpellID><Actions></Actions><Lua>-- Rogues and Warriors can handle it themselves.
local hasCatMangle, _, _, _, _, _, CatMangleTimer = UnitDebuffID(&quot;target&quot;, 33876)
local hasBearMangle, _, _, _, _, _, BearMangleTimer = UnitDebuffID(&quot;target&quot;, 33878, &quot;PLAYER&quot;)
local hasTrauma = UnitDebuffID(&quot;target&quot;, 46857)
local hasHemorrhage = UnitDebuffID(&quot;target&quot;, 16511)
local CP = GetComboPoints(&quot;player&quot;, &quot;target&quot;)
if PQR_NotBehindTarget() then
if CP == 5 then
return false
else
return true
end
end
-- First, let&apos;s let other people handle their own debuffs
if hasTrauma ~= nil then
return false
elseif hasHemorrhage ~= nil then
return false
elseif hasBearMangle ~= nil then
return false
-- Let us handle it!
elseif hasCatMangle ~= nil or hasBearMangle ~= nil then
-- Check the timer
if CatMangleTimer - GetTime() &lt; 1 then
return true
end
else
return true
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Faerie Fire (Feral)</Name><Default>false</Default><SpellID>16857</SpellID><Actions></Actions><Lua>local FF, _, _, _, _, _, timer = UnitDebuffID(&quot;target&quot;, 91565)
local FFstart, FFduration, FFenabled = GetSpellCooldown(16857)
local FFcooldown = (FFstart + FFduration - GetTime())
if FF == nil then
if FFcooldown &gt; 0 then
return false
else
return true
end
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Savage Roar</Name><Default>false</Default><SpellID>52610</SpellID><Actions></Actions><Lua>local _,_,_,SavageRoar = UnitBuffID(&quot;player&quot;, 62071)
local srCP = GetComboPoints(&quot;player&quot;, &quot;target&quot;)
local rip, _, _, _, _, _, riptimer = UnitDebuffID(&quot;target&quot;, 1079, &quot;PLAYER&quot;)
if SavageRoar ~= nil then
return false
else
if rip ~= nil then
if srCP &gt;= 5 then
if riptimer - GetTime() &gt;= 8 then
return true
end
end
end
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Ferocious Bite</Name><Default>false</Default><SpellID>22568</SpellID><Actions></Actions><Lua>local fbrip, _, _, _, _, _, fbtimer = UnitDebuffID(&quot;target&quot;, 1079, &quot;PLAYER&quot;)
local fbCP = GetComboPoints(&quot;player&quot;, &quot;target&quot;)
local fbhealth = 100 * UnitHealth(&quot;target&quot;) / UnitHealthMax(&quot;target&quot;)
local fbenergy = UnitPower(&quot;player&quot;) / UnitPowerMax(&quot;player&quot;) * 100
if fbhealth &lt;= 25 then
if fbrip ~= nil then
if fbCP == 5 then
return true
end
end
else
if fbrip ~= nil then
if fbtimer - GetTime() &gt; 5 and fbenergy &gt;= 60 and fbCP == 5 then
return true
end
end
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Berserk</Name><Default>false</Default><SpellID>50334</SpellID><Actions></Actions><Lua>local _, _, _, BS = UnitBuffID(&quot;player&quot;, 50334)
local BSstart, BSduration = GetSpellCooldown(50334)
local BScooldown = (BSstart + BSduration - GetTime())
local bsEnergy = UnitPower(&quot;player&quot;) / UnitPowerMax(&quot;player&quot;) * 100
local bsHealth = UnitHealth(&quot;target&quot;) / UnitHealthMax(&quot;target&quot;) * 100
local levelcheck = UnitLevel(&quot;target&quot;)
if levelcheck == -1 or levelcheck &gt;= 87 then
if BScooldown &gt; 0 then
return false
else
-- if bsHealth &lt; 96 then
return true
-- end
end
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Tigers Fury</Name><Default>false</Default><SpellID>5217</SpellID><Actions>/use Ancient Petrified Seed</Actions><Lua>local _,_,_,TF = UnitBuffID(&quot;player&quot;, 5217)
local TFstart, TFduration = GetSpellCooldown(5217)
local TFcooldown = (TFstart + TFduration - GetTime())
local tfEnergy = UnitPower(&quot;player&quot;) / UnitPowerMax(&quot;player&quot;) * 100
if TF ~= nil then
return false
else
if TFcooldown &gt; 0 then
return false
else
if tfEnergy &lt; 40 then
return true
end
end
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Swipe</Name><Default>false</Default><SpellID>62078</SpellID><Actions></Actions><Lua>local _,_,_,BS = UnitBuffID(&quot;player&quot;, 50334)
local energy = UnitPower(&quot;player&quot;) / UnitPowerMax(&quot;player&quot;) * 100
if BS ~= nil then
if energy &gt;= 22 then
return true
end
else
if energy &gt;= 45 then
return true
end
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>cat form</Name><Default>false</Default><SpellID>768</SpellID><Actions></Actions><Lua>local slowed = UnitDebuff(&quot;player&quot;, &quot;120&quot;)
local slowed = UnitDebuff(&quot;player&quot;, &quot;7302&quot;)
local slowed = UnitDebuff(&quot;player&quot;, &quot;5116&quot;)
local slowed = UnitDebuff(&quot;player&quot;, &quot;8056&quot;)
local slowed = UnitDebuff(&quot;player&quot;, &quot;45524&quot;)
if slowed ~= nil then
CastSpellByName(&quot;Cat Form&quot;, &quot;768&quot;)
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>barkskin</Name><Default>false</Default><SpellID>22812</SpellID><Actions></Actions><Lua>local unithealth = 100 * UnitHealth(&quot;target&quot;) / UnitHealthMax(&quot;target&quot;)
if enraged == nil and unithealth &lt;= 60 then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>s</Name><Default>false</Default><SpellID>0</SpellID><Actions></Actions><Lua>local mytarget = &quot;player&quot;
local lowest = 100 * UnitHealth(mytarget) / UnitHealthMax(mytarget)
local group = &quot;party&quot;
local members = GetNumPartyMembers()
lowhpmembers = 0
if GetNumRaidMembers() &gt; 0 then
group = &quot;raid&quot;
members = GetNumRaidMembers()
end
for i = 1, members, 1 do
local member = group..tostring(i)
local memberhp = 100 * UnitHealth(member) / UnitHealthMax(member)
if UnitGroupRolesAssigned(member) == &quot;TANK&quot; then memberhp = memberhp - 5 end
if UnitThreatSituation(member) == 3 then memberhp = memberhp - 5 end
if memberhp &lt; 95 and UnitInRange(member) then lowhpmembers = lowhpmembers +1 end
if memberhp &gt; 1 and memberhp &lt; lowest and UnitInRange(member) then
mytarget = member
lowest = memberhp
end
end
TargetUnit(mytarget)</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Resto: Autotarget LowHP</Name><Default>false</Default><SpellID>0</SpellID><Actions></Actions><Lua>local mytarget = &quot;player&quot;
local lowest = 100 * UnitHealth(mytarget) / UnitHealthMax(mytarget)
local group = &quot;party&quot;
local members = GetNumPartyMembers()
lowhpmembers = 0
if GetNumRaidMembers() &gt; 0 then
group = &quot;raid&quot;
members = GetNumRaidMembers()
end
for i = 1, members, 1 do
local member = group..tostring(i)
local memberhp = 100 * UnitHealth(member) / UnitHealthMax(member)
if UnitGroupRolesAssigned(member) == &quot;TANK&quot; then memberhp = memberhp - 5 end
if UnitThreatSituation(member) == 3 then memberhp = memberhp - 5 end
if memberhp &lt; 95 and UnitInRange(member) then lowhpmembers = lowhpmembers +1 end
if memberhp &gt; 1 and memberhp &lt; lowest and UnitInRange(member) then
mytarget = member
lowest = memberhp
end
end
TargetUnit(mytarget)</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Resto: Nourish</Name><Default>false</Default><SpellID>50464</SpellID><Actions></Actions><Lua>local friend = UnitIsFriend(&quot;player&quot;,&quot;target&quot;)
local mytarget = 100 * UnitHealth(&quot;target&quot;) / UnitHealthMax(&quot;target&quot;)
if friend ~= nil and mytarget &lt; 90 then
return true
end
if friend ~= nil and PQR_IsMoving(1) == false and mytarget &lt; 95 then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Resto: Rejuvenation</Name><Default>false</Default><SpellID>774</SpellID><Actions></Actions><Lua>local friend = UnitIsFriend(&quot;player&quot;,&quot;target&quot;)
local mytarget = 100 * UnitHealth(&quot;target&quot;) / UnitHealthMax(&quot;target&quot;)
if friend ~= nil and mytarget &lt; 95 then
return true
end
if friend ~= nil and PQR_IsMoving(1) == false and mytarget &lt; 95 then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Resto: Wild Growth</Name><Default>false</Default><SpellID>48438</SpellID><Actions></Actions><Lua>local friend = UnitIsFriend(&quot;player&quot;,&quot;target&quot;)
local mytarget = 100 * UnitHealth(&quot;target&quot;) / UnitHealthMax(&quot;target&quot;)
if friend ~= nil and mytarget &lt; 80 and lowhpmembers &gt;= 5 then
return true
end
if friend ~= nil and PQR_IsMoving(1) == false and mytarget &lt; 80 and lowhpmembers &gt;= 5 then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Resto: Swiftmend</Name><Default>false</Default><SpellID>18562</SpellID><Actions></Actions><Lua>local friend = UnitIsFriend(&quot;player&quot;,&quot;target&quot;)
local mytarget = 100 * UnitHealth(&quot;target&quot;) / UnitHealthMax(&quot;target&quot;)
local SM = UnitBuffID(&quot;player&quot;,&quot;target&quot; 774)
if friend ~= nil and SM != nil and mytarget &lt; 85 and lowhpmembers &gt;= 3 then
return true
end
if friend ~= nil and PQR_IsMoving(1) == false and mytarget &lt; 85 and lowhpmembers &gt;= 3 then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Resto: Regrowth</Name><Default>false</Default><SpellID>8936</SpellID><Actions></Actions><Lua>local friend = UnitIsFriend(&quot;player&quot;,&quot;target&quot;)
local mytarget = 100 * UnitHealth(&quot;target&quot;) / UnitHealthMax(&quot;target&quot;)
local manapercent = 100 * UnitPower(&quot;player&quot;) / UnitPowerMax(&quot;player&quot;)
if friend ~= nil and mytarget &lt; 35 then
return true
end
if friend ~= nil and PQR_IsMoving(1) == false and mytarget &lt; 35 and manapercent &gt; 15 then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Resto: Innervate</Name><Default>false</Default><SpellID>29166</SpellID><Actions></Actions><Lua>local manapercent = 100 * UnitPower(&quot;player&quot;) / UnitPowerMax(&quot;player&quot;)
if manapercent &lt; 65 then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Resto: Lifebloom</Name><Default>false</Default><SpellID>33763</SpellID><Actions></Actions><Lua>local friend = UnitIsFriend(&quot;player&quot;,&quot;target&quot;)
local mytarget = 100 * UnitHealth(&quot;target&quot;) / UnitHealthMax(&quot;target&quot;)
local LB = UnitBuffID(&quot;target&quot;, 33763)
if friend ~= nil and mytarget &lt; 95 and LB == nil and UnitThreatSituation(&quot;target&quot;) &lt;= 3 then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability><Ability><Name>Resto: Healing Touch</Name><Default>false</Default><SpellID>5185</SpellID><Actions></Actions><Lua>local friend = UnitIsFriend(&quot;player&quot;,&quot;target&quot;)
local mytarget = 100 * UnitHealth(&quot;target&quot;) / UnitHealthMax(&quot;target&quot;)
local manapercent = 100 * UnitPower(&quot;player&quot;) / UnitPowerMax(&quot;player&quot;)
local SwG = UnitBuffID(&quot;player&quot;, 17116)
if friend ~= nil and SwG ~= nil and mytarget &lt; 25 and manapercent &gt; 10 then
return true
end</Lua><RecastDelay>0</RecastDelay><Target>Target</Target></Ability></DRUID>
And the Resto Rotation:
Code:
<?xml version="1.0" encoding="utf-8" ?><DRUID><Rotation><RotationName>Resto</RotationName><RotationDefault>false</RotationDefault><RotationList>Resto: Autotarget LowHP|Resto: Rejuvenation|Resto: Nourish|Resto: Lifebloom|Resto: Wild Growth|Resto: Swiftmend|Resto: Regrowth|Resto: Healing Touch|Resto: Innervate</RotationList></Rotation></DRUID>
I have not tested the Holy rotation in a dungeon, arena, or raid yet, but they work great in battlegrounds. If you think there is a problem or something to make it better feel free to alter it as you see fit These based off my personal preferences for the spells.