vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--<< ====================================================================== >>--
-- Module Setup                                                               --
--<< ====================================================================== >>--
AceTimerAura = AceTimer:AddModule()

function AceTimerAura:Enable()
        self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_CREATURE_DAMAGE",       "SPELL_PERIODIC")
        self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_CREATURE_BUFFS",        "SPELL_PERIODIC")
        self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_BUFFS",   "SPELL_PERIODIC")
        self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_DAMAGE",  "SPELL_PERIODIC")
        self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS",            "SPELL_PERIODIC")
        self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_SELF_DAMAGE",           "SPELL_PERIODIC")
        self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_BUFFS",  "SPELL_PERIODIC")
        self:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_DAMAGE", "SPELL_PERIODIC")
end

function AceTimerAura:Disable()
        self:UnregisterAllEvents(self)
end

--<< ====================================================================== >>--
-- Main                                                                       --
--<< ====================================================================== >>--
function AceTimerAura:SPELL_PERIODIC()
        local aura, unit, isgain
        if     self:FindGlobal(arg1, AURAADDEDOTHERHARMFUL) then  -- "%s is afflicted by %s."
                aura = self.gs_captured[2]; unit = self.gs_captured[1]; isgain = FALSE
        elseif self:FindGlobal(arg1, AURAADDEDOTHERHELPFUL) then  -- "%s gains %s."
                aura = self.gs_captured[2]; unit = self.gs_captured[1]; isgain = TRUE
        elseif self:FindGlobal(arg1, AURAADDEDSELFHARMFUL)  then  -- "You are afflicted by %s."
                aura = self.gs_captured[1]; isgain = FALSE
        elseif self:FindGlobal(arg1, AURAADDEDSELFHELPFUL)  then -- "You gain %s."
                aura = self.gs_captured[1]; isgain = TRUE
        else
                return
        end

        local timer = self.timers[ACETIMER.EVENT][aura]
        if timer and timer.k.g == isgain and (timer.x.a or (timer.v and timer.v > GetTime())) then
                if timer.k.t then
                        if not unit then unit = UnitName("player") end
                        if timer.k.s then
                                if timer.t and timer.t ~= unit then return end
                        else
                                if not UnitExists("target") or unit ~= UnitName("target") then return end
                        end
                else
                        if not timer.k.s or not unit then unit = "none" else return end
                end
                timer.v = nil; timer.t = nil;
                self:StartTimer(timer, aura, unit) 
        end
end