The best way to make this work correctly is to set up a frame to check when Cleanse / HoF are successfully casted. You'll need to put these two abilities near the top of your rotation, make sure the functions are before the loader in the priority.
Event functions:
PHP Code:
function xelperFrame_OnEvent(self,event,...)
--Combat log events
if event == "COMBAT_LOG_EVENT_UNFILTERED" then
local SubEvent = select(2, ...)
local SourceName = select(5, ...)
local DestName = select(9, ...)
local SpellID = select(12, ...)
local SpellName = select(13, ...)
local ExtraSpellID = select(15, ...)
local ExtraSpellName = select(16, ...)
if SubEvent == "SPELL_CAST_SUCCESS" then
if SourceName == UnitName("player") then
--Cleanse
if SpellID == 4987 then
CleanseTime = 0
end
--Hand of Freedom
if SpellID == 1044 then
FreedomTime = 0
end
end
end
end
end
Event loader:
PHP Code:
if PQR_LoadEventFrame == nil then
PQR_LoadEventFrame = true
xelperFrame = CreateFrame("Frame")
xelperFrame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
xelperFrame:SetScript("OnEvent", xelperFrame_OnEvent)
xelperFrame:Show()
end
After doing that, try this as your Cleanse ability.
PHP Code:
local Delay = 0.5
if CleanseTime == nil then
CleanseTime = 0
end
for i=1,#members do
if (HaveDebuff(members[i].Unit,dMagicCC(),3)
or (HaveDebuff(members[i].Unit,122,3) and cdRemains(1044) > 0))
and not LineOfSight(members[i].Unit)
and rangeCheck(4987,members[i].Unit)
and not HaveDebuff(members[i].Unit,30108,0) then
if CleanseTime == 0 then
PQR_CustomTarget = members[i].Unit
CleanseTime = GetTime() + Delay
elseif GetTime() >= CleanseTime then
return true
end
end
end