local _, ns = ... local oUF = ns.oUF local trinketSpells = { [59752] = 120, [42292] = 120, [7744] = 45, } local timeLeft = 0 local Trinket_OnUpdate = function(self, elapsed) local expires = (self.duration - (GetTime() - self.start)); if(expires == 0) then local parent = self:GetParent() parent.Icon:SetDesaturated(false) parent.Unavailable:Hide() self:SetScript("OnUpdate", nil) end end local function GetPVPIcons(unit, frameID) local _, trinket, badge local unitFactionGroup = UnitFactionGroup(unit) if unitFactionGroup == "Horde" then trinket, badge = [[Interface\Icons\INV_Jewelry_TrinketPVP_02]], [[Interface\Icons\INV_BannerPVP_01]] elseif unitFactionGroup == "Alliance" then trinket, badge = [[Interface\Icons\INV_Jewelry_TrinketPVP_01]], [[Interface\Icons\INV_BannerPVP_02]] else trinket, badge = [[Interface\Icons\INV_MISC_QUESTIONMARK]], [[Interface\Icons\INV_MISC_QUESTIONMARK]] end if(frameID) then local numOpps = GetNumArenaOpponentSpecs() local specID = GetArenaOpponentSpec(frameID) if((numOpps > 0) and specID) then _, _, _, badge = GetSpecializationInfoByID(specID) end end return trinket, badge end local function LogUpdate(self, event, ...) local arenaMatch = IsActiveBattlefieldArena() local element = self.Combatant local trinket = element.Trinket local alert = element.Alert if not arenaMatch then trinket:Hide() return end trinket:Show() if(event == "COMBAT_LOG_EVENT_UNFILTERED") then local _, eventType, _, sourceGUID, _, _, _, _, _, _, _, spellID = ... if eventType == "SPELL_CAST_SUCCESS" and sourceGUID == UnitGUID(self.unit) and trinketSpells[spellID] then local startTime = GetTime() local duration = trinketSpells[spellID] trinket.CD.start = startTime trinket.CD.duration = duration trinket.CD.nextUpdate = 0 trinket.CD:SetScript("OnUpdate", Trinket_OnUpdate) trinket.Icon:SetDesaturated(true) trinket.Unavailable:Show() CooldownFrame_SetTimer(trinket.CD, startTime, duration, 1) end elseif(alert and event == "UNIT_SPELLCAST_SUCCEEDED") then local unitID, spellName, _, _, spellID = ... if UnitIsEnemy("player", unitID) and (spellID == 118358 or spellID == 104270 or spellName:find("Drink")) then SendChatMessage(UnitName(unit)..L[" is drinking."], "RAID_WARNING") end end end local Update = function(self, event, ...) local unit, unitType = ... if(event == "COMBAT_LOG_EVENT_UNFILTERED" or event == "UNIT_SPELLCAST_SUCCEEDED") then return LogUpdate(self, event, ...) end if(not unit or unit ~= self.unit) then return end local element = self.Combatant local trinket = element.Trinket local badge = element.Badge local arenaMatch = IsActiveBattlefieldArena() local frameID = arenaMatch and self:GetID() local tIcon, bIcon = GetPVPIcons(unit, frameID) if(badge) then badge.Icon:SetTexture(bIcon) end if(trinket) then if(not arenaMatch) then trinket:Hide() return end trinket.Icon:SetTexture(tIcon) trinket:Show() if event == 'PLAYER_ENTERING_WORLD' then CooldownFrame_SetTimer(trinket.CD, 1, 1, 1) end end end local Enable = function(self, unit) --if(not unit:match("arena%d")) then return end local element = self.Combatant if(element) then local trinket = element.Trinket local badge = element.Badge self:RegisterEvent("ARENA_OPPONENT_UPDATE", Update) self:RegisterEvent("PLAYER_ENTERING_WORLD", Update) if(trinket) then self:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED", Update) self:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED", Update) if not trinket.CD then trinket.CD = CreateFrame("Cooldown", nil, trinket) trinket.CD:SetAllPoints(trinket) end if not trinket.Icon then trinket.Icon = trinket:CreateTexture(nil, "BORDER") trinket.Icon:SetAllPoints(trinket) trinket.Icon:SetTexCoord(0.1, 0.9, 0.1, 0.9) trinket.Icon:SetTexture([[INTERFACE\ICONS\INV_MISC_QUESTIONMARK]]) end if not trinket.Unavailable then trinket.Unavailable = trinket:CreateTexture(nil, "OVERLAY") trinket.Unavailable:SetAllPoints(trinket) trinket.Unavailable:SetTexCoord(0.1, 0.9, 0.1, 0.9) trinket.Unavailable:SetTexture([[Interface\BUTTONS\UI-GroupLoot-Pass-Up]]) end trinket:Show() end if(badge) then self:RegisterEvent("ARENA_PREP_OPPONENT_SPECIALIZATIONS", Update) if not badge.Icon then badge.Icon = badge:CreateTexture(nil, "OVERLAY") badge.Icon:SetAllPoints(badge) badge.Icon:SetTexCoord(0.1, 0.9, 0.1, 0.9) badge.Icon:SetTexture([[INTERFACE\ICONS\INV_MISC_QUESTIONMARK]]) end badge:Show() end return true end end local Disable = function(self) local element = self.Combatant local trinket = element.Trinket local badge = element.Badge if(trinket or badge) then self:UnregisterEvent("ARENA_OPPONENT_UPDATE", Update) self:UnregisterEvent("PLAYER_ENTERING_WORLD", Update) if trinket then self:UnregisterEvent("COMBAT_LOG_EVENT_UNFILTERED", Update) self:UnregisterEvent("UNIT_SPELLCAST_SUCCEEDED", Update) trinket:Hide() end if badge then self:UnregisterEvent("ARENA_PREP_OPPONENT_SPECIALIZATIONS", Update) badge:Hide() end end end oUF:AddElement('Combatant', Update, Enable, Disable)