Ah! I finally managed to create a really good rotation for Shadow Priests. :P
Abilities:
Code:
<?xml version="1.0" encoding="utf-8" ?><PRIEST><Ability><Name>Vampiric Touch</Name><Default>false</Default><SpellID>34914</SpellID><Actions></Actions><Lua>local VampiricTouch, _, _, _, _, _, timer = UnitDebuffID(&quot;target&quot;, 34914, &quot;PLAYER&quot;)
local levelCheck = UnitLevel(&quot;target&quot;)
if levelCheck ~= -1 then
return false
end
if VampiricTouch ~= nil then
if timer - GetTime() &lt; 1.5 then
return true
end
else
return true
end</Lua><RecastDelay>600</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Shadow Word: Pain</Name><Default>false</Default><SpellID>589</SpellID><Actions></Actions><Lua>local SWP, _, _, _, _, _, timer = UnitDebuffID(&quot;target&quot;, 589, &quot;PLAYER&quot;)
local levelCheck = UnitLevel(&quot;target&quot;)
if levelCheck ~= -1 then
return false
end
if SWP ~= nil then
if timer - GetTime() &lt; 1 then
return true
end
else
return true
end</Lua><RecastDelay>600</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Devouring Plague</Name><Default>false</Default><SpellID>2944</SpellID><Actions></Actions><Lua>local DP, _, _, _, _, _, timer = UnitDebuffID(&quot;target&quot;, 2944, &quot;PLAYER&quot;)
local levelCheck = UnitLevel(&quot;target&quot;)
if levelCheck ~= -1 then
return false
end
if DP ~= nil then
if timer - GetTime() &lt; 1 then
return true
end
else
return true
end</Lua><RecastDelay>600</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Shadowfiend</Name><Default>false</Default><SpellID>34433</SpellID><Actions></Actions><Lua>return true</Lua><RecastDelay>40000</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Mind Flay</Name><Default>false</Default><SpellID>15407</SpellID><Actions></Actions><Lua>local MF, _, _, _, _, _, timer = UnitDebuffID(&quot;target&quot;, 15407, &quot;PLAYER&quot;)
local levelCheck = UnitLevel(&quot;target&quot;)
if levelCheck ~= -1 then
return false
end
if MF ~= nil then
if timer - GetTime() &lt; 0.5 then
return true
end
else
return true
end</Lua><RecastDelay>600</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Mind Blast</Name><Default>false</Default><SpellID>8092</SpellID><Actions></Actions><Lua>return true</Lua><RecastDelay>6500</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Archangel</Name><Default>false</Default><SpellID>87151</SpellID><Actions></Actions><Lua>local _,_,_,DarkEvangelism = UnitBuffID(&quot;player&quot;, 87117)
if DarkEvangelism ~= nil then
if DarkEvangelism == 5 then
return true
end
end</Lua><RecastDelay>9000</RecastDelay><SelfCast>False</SelfCast></Ability><Ability><Name>Dispersion</Name><Default>false</Default><SpellID>47585</SpellID><Actions></Actions><Lua>local Mana = UnitPower(&quot;player&quot;) / UnitPowerMax(&quot;player&quot;) * 100
if Mana &lt; 10 then
return true
end</Lua><RecastDelay>20000</RecastDelay><SelfCast>True</SelfCast></Ability><Ability><Name>Shadow Word: Death &lt; 25%</Name><Default>false</Default><SpellID>32379</SpellID><Actions></Actions><Lua>local BossHP = 100 * UnitHealth(&quot;target&quot;) / UnitHealthMax(&quot;target&quot;)
local levelCheck = UnitLevel(&quot;target&quot;)
if levelCheck ~= -1 then
return false
end
if BossHP &lt; 25 then
return true
end</Lua><RecastDelay>600</RecastDelay><SelfCast>False</SelfCast></Ability></PRIEST>
And the Rotation:
Code:
<?xml version="1.0" encoding="utf-8" ?><PRIEST><Rotation><RotationName>Shadow</RotationName><RotationDefault>false</RotationDefault><RotationList>Dispersion|Archangel|Vampiric Touch|Shadow Word: Pain|Devouring Plague|Shadowfiend|Shadow Word: Death &lt; 25%|Mind Blast|Mind Flay</RotationList></Rotation></PRIEST>
That should be all really! Stood for a long while on a Raider's Training Dummy unbuffed (Not even my own buffs) and managed to flicker my DPS between 16- and 17k, ending up in a total 159787 after the dots ticked away.
Just make sure to open up with a Mind Flay at the beginning of any fight to maximize the rotation. <3
Alternatively, if you decide to use this on something else than bosses, just remove the levelCheck segments from the code. :P