82 lines
2.5 KiB
Lua
82 lines
2.5 KiB
Lua
|
local _, ns = ...
|
||
|
local oUF = ns.oUF or oUF
|
||
|
assert(oUF, 'oUF not loaded')
|
||
|
|
||
|
local trinketSpells = {
|
||
|
[311430] = 120, -- Re-Arm (PvP Trinket 9.0.1)
|
||
|
[59752] = 180, -- Will to Survive (Human Racial)
|
||
|
[7744] = 120, -- Will of the Forsaken (Undead Racial)
|
||
|
}
|
||
|
|
||
|
local GetTrinketIcon = function(unit)
|
||
|
if UnitFactionGroup(unit) == "Horde" then
|
||
|
return "Interface\\Icons\\INV_Jewelry_TrinketPVP_02"
|
||
|
else
|
||
|
return "Interface\\Icons\\INV_Jewelry_TrinketPVP_01"
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local Update = function(self, event, ...)
|
||
|
local _, instanceType = IsInInstance();
|
||
|
if instanceType ~= 'arena' then
|
||
|
self.Trinket:Hide();
|
||
|
return;
|
||
|
else
|
||
|
self.Trinket:Show();
|
||
|
end
|
||
|
|
||
|
if(self.Trinket.PreUpdate) then self.Trinket:PreUpdate(event) end
|
||
|
|
||
|
if event == "COMBAT_LOG_EVENT_UNFILTERED" then
|
||
|
local _, eventType, _, sourceGUID, _, _, _, _, _, _, _, spellID = CombatLogGetCurrentEventInfo()
|
||
|
if eventType == "SPELL_CAST_SUCCESS" and sourceGUID == UnitGUID(self.unit) and trinketSpells[spellID] then
|
||
|
CooldownFrame_Set(self.Trinket.cooldownFrame, GetTime(), trinketSpells[spellID], 1)
|
||
|
end
|
||
|
elseif event == "ARENA_OPPONENT_UPDATE" then
|
||
|
local unit, type = ...
|
||
|
if type == "seen" then
|
||
|
if UnitExists(unit) and UnitIsPlayer(unit) then
|
||
|
self.Trinket.Icon:SetTexture(GetTrinketIcon(unit))
|
||
|
end
|
||
|
end
|
||
|
elseif event == 'PLAYER_ENTERING_WORLD' then
|
||
|
CooldownFrame_Set(self.Trinket.cooldownFrame, 1, 1, 1)
|
||
|
end
|
||
|
|
||
|
if(self.Trinket.PostUpdate) then self.Trinket:PostUpdate(event) end
|
||
|
end
|
||
|
|
||
|
local Enable = function(self)
|
||
|
if self.Trinket then
|
||
|
self:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED", Update, true)
|
||
|
self:RegisterEvent("ARENA_OPPONENT_UPDATE", Update, true)
|
||
|
self:RegisterEvent("PLAYER_ENTERING_WORLD", Update, true)
|
||
|
|
||
|
if not self.Trinket.cooldownFrame then
|
||
|
self.Trinket.cooldownFrame = CreateFrame("Cooldown", nil, self.Trinket, "CooldownFrameTemplate")
|
||
|
self.Trinket.cooldownFrame:SetAllPoints(self.Trinket)
|
||
|
ElvUI[1]:RegisterCooldown(self.Trinket.cooldownFrame)
|
||
|
end
|
||
|
|
||
|
if not self.Trinket.Icon then
|
||
|
self.Trinket.Icon = self.Trinket:CreateTexture(nil, "BORDER")
|
||
|
self.Trinket.Icon:SetAllPoints(self.Trinket)
|
||
|
self.Trinket.Icon:SetTexCoord(0.07, 0.93, 0.07, 0.93)
|
||
|
self.Trinket.Icon:SetTexture(GetTrinketIcon('player'))
|
||
|
end
|
||
|
|
||
|
return true
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local Disable = function(self)
|
||
|
if self.Trinket then
|
||
|
self:UnregisterEvent("COMBAT_LOG_EVENT_UNFILTERED", Update)
|
||
|
self:UnregisterEvent("ARENA_OPPONENT_UPDATE", Update)
|
||
|
self:UnregisterEvent("PLAYER_ENTERING_WORLD", Update)
|
||
|
self.Trinket:Hide()
|
||
|
end
|
||
|
end
|
||
|
|
||
|
oUF:AddElement('Trinket', Update, Enable, Disable)
|