WoWInterface SVN Eui

[/] [Eui/] [unitframe/] [plugin/] [trinkets.lua] - Rev 2

Compare with Previous | Blame | View Log

local arenaUnits = {}
local arenaGUID  = {}
local usedTrinkets = {}
local trinketFrame = {}
 
local TrinketUpdate = function(self, elapsed)
        if ( self.endTime < GetTime() ) then
                local object = self:GetParent()
                if ( self.trinketUpAnnounce ) then
                        SendChatMessage("Trinket ready: "..UnitName(object.unit).." "..UnitClass(object.unit), "PARTY")
                end
                self:SetScript("OnUpdate", nil)
        end     
end

local UpdateTag = function(self, elapsed)
        if ( self.endTime < GetTime() ) then
                usedTrinkets[self.guid] = false
                self:SetScript("OnUpdate", nil)
        end
end

local TrinketUsed = function(guid, time)
        local message
        local unit = arenaGUID[guid]
        if (unit and arenaUnits[unit].Trinket) then
                arenaUnits[unit].Trinket:SetScript("OnUpdate", TrinketUpdate)
                arenaUnits[unit].Trinket.endTime = GetTime() + time
                CooldownFrame_SetTimer(arenaUnits[unit].Trinket.cooldownFrame, GetTime(), time, 1)
                if ( arenaUnits[unit].Trinket.trinketUseAnnounce ) then
                        if ( time == 120 ) then 
                                message = "Trinket used: "..UnitName(unit).." "..UnitClass(unit)
                        else 
                                message = "WotF used: "..UnitName(unit).." "..UnitClass(unit) 
                        end
                        SendChatMessage(message, "PARTY")
                end
        end
        usedTrinkets[guid] = true
        trinketFrame[guid] = CreateFrame("Frame")
        trinketFrame[guid].endTime = GetTime() + time
        trinketFrame[guid].guid = guid
        trinketFrame[guid]:SetScript("OnUpdate", UpdateTag)
end

local Update = function(self, event, ...)
        if ( event == "COMBAT_LOG_EVENT_UNFILTERED" ) then
                local timestamp, eventType, sourceGUID, sourceName, sourceFlags, destGUID, destName, destFlags, spellID, spellName = ...
                if ( eventType == "SPELL_CAST_SUCCESS" ) then
                        -- enemy trinket usage
                        if ( spellID == 59752 or spellID == 42292 ) then
                                TrinketUsed(sourceGUID, 120)
                        end
                        -- WotF
                        if ( spellID == 7744 ) then
                                TrinketUsed(sourceGUID, 45)
                        end
                end
        elseif ( event == "ARENA_OPPONENT_UPDATE" ) then
                local unit, type = ...
                if ( type == "seen" ) then
                        if ( UnitExists(unit) and UnitIsPlayer(unit) and arenaUnits[unit].Trinket ) then
                                arenaGUID[UnitGUID(unit)] = unit
                                if ( UnitFactionGroup(unit) == "Horde" ) then
                                        arenaUnits[unit].Trinket.Icon:SetTexture(UnitLevel(unit) == 80 and "Interface\\Addons\\Tukui\\media\\INV_Jewelry_Necklace_38" or "Interface\\Addons\\Tukui\\media\\INV_Jewelry_TrinketPVP_02")
                                else
                                        arenaUnits[unit].Trinket.Icon:SetTexture(UnitLevel(unit) == 80 and "Interface\\Addons\\Tukui\\media\\INV_Jewelry_Necklace_37" or "Interface\\Addons\\Tukui\\media\\INV_Jewelry_TrinketPVP_01")
                                end
                        end
                end
        elseif ( event == "PLAYER_ENTERING_WORLD" ) then
                for k, v in pairs(trinketFrame) do
                        v:SetScript("OnUpdate", nil)
                end
                for k, v in pairs(arenaUnits) do
                        v.Trinket:SetScript("OnUpdate", nil)
                        CooldownFrame_SetTimer(v.Trinket.cooldownFrame, 1, 1, 1)
                end
                arenaGUID  = {}
                usedTrinkets = {}
                trinketFrame = {}
        end
end

local frame = CreateFrame("Frame")
frame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
frame:RegisterEvent("ARENA_OPPONENT_UPDATE")
frame:RegisterEvent("PLAYER_ENTERING_WORLD")
frame:SetScript("OnEvent", Update)

oUF.Tags['[trinket]'] = function(unit)
        if( usedTrinkets[UnitGUID(unit)] or not UnitIsPlayer(unit) ) then return end
        local trinketIcon
        if( UnitFactionGroup(unit) == "Horde" ) then
                trinketIcon = UnitLevel(unit) == 80 and "Interface\\Icons\\INV_Jewelry_Necklace_38" or "Interface\\Icons\\INV_Jewelry_TrinketPVP_02"
        else
                trinketIcon = UnitLevel(unit) == 80 and "Interface\\Icons\\INV_Jewelry_Necklace_37" or "Interface\\Icons\\INV_Jewelry_TrinketPVP_01"
        end
        return string.format("|T%s:20:20:0:0|t", trinketIcon)
end

local Enable = function(self)
        if ( self.Trinket ) then
                self.Trinket.cooldownFrame = CreateFrame("Cooldown", nil, self.Trinket)
                self.Trinket.cooldownFrame:SetAllPoints(self.Trinket)
                self.Trinket.Icon = self.Trinket:CreateTexture(nil, "BORDER")
                self.Trinket.Icon:SetAllPoints(self.Trinket)
                self.Trinket.Icon:SetTexCoord(0, 1, 0, 1)
                arenaUnits[self.unit] = self
        end
end
 
local Disable = function(self)
        if ( self.Trinket ) then
                arenaUnits[self.unit] = nil
        end
end
 
oUF:AddElement('Trinket', function() return end, Enable, Disable)

Compare with Previous | Blame