From 45471e3a5e905b6a658a6b56d638dc2050153570 Mon Sep 17 00:00:00 2001 From: "Johnny C. Lam" Date: Sat, 10 Aug 2013 18:39:30 +0000 Subject: [PATCH] Make OvaleGUID:GetUnitId() prefer returning "primary" unit IDs. These unit IDs are ones that receive UNIT_AURA events from the game servers. This makes the CLEU event handler not double-process any primary unit IDs that may happen to also have "secondary" names, e.g., "mouseover". git-svn-id: svn://svn.curseforge.net/wow/ovale/mainline/trunk@999 d5049fe3-3747-40f7-a4b5-f36d6801af5f --- OvaleAura.lua | 25 +------------------------ OvaleGUID.lua | 55 +++++++++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 48 insertions(+), 32 deletions(-) diff --git a/OvaleAura.lua b/OvaleAura.lua index 7a9456b..199a016 100644 --- a/OvaleAura.lua +++ b/OvaleAura.lua @@ -56,30 +56,7 @@ local OVALE_DEBUFF_TYPES = { Magic = true, Poison = true, } --- Units for which UNIT_AURA is known to fire. -local OVALE_UNIT_AURA_UNITS = {} -do - OVALE_UNIT_AURA_UNITS["focus"] = true - OVALE_UNIT_AURA_UNITS["pet"] = true - OVALE_UNIT_AURA_UNITS["player"] = true - OVALE_UNIT_AURA_UNITS["target"] = true - - for i = 1, 5 do - OVALE_UNIT_AURA_UNITS["arena" .. i] = true - OVALE_UNIT_AURA_UNITS["arenapet" .. i] = true - end - for i = 1, 4 do - OVALE_UNIT_AURA_UNITS["boss" .. i] = true - end - for i = 1, 4 do - OVALE_UNIT_AURA_UNITS["party" .. i] = true - OVALE_UNIT_AURA_UNITS["partypet" .. i] = true - end - for i = 1, 40 do - OVALE_UNIT_AURA_UNITS["raid" .. i] = true - OVALE_UNIT_AURA_UNITS["raidpet" .. i] = true - end -end +local OVALE_UNIT_AURA_UNITS = OvaleGUID.UNIT_AURA_UNITS -- CLEU events triggered by auras being applied, removed, refreshed, or changed in stack size. local OVALE_CLEU_AURA_EVENTS = { SPELL_AURA_APPLIED = true, diff --git a/OvaleGUID.lua b/OvaleGUID.lua index 1dc0d8d..b708c10 100644 --- a/OvaleGUID.lua +++ b/OvaleGUID.lua @@ -31,6 +31,35 @@ local self_nameToUnit = {} local OVALE_GUID_DEBUG = "guid" -- +-- +-- Units for which UNIT_AURA is known to fire. +-- These are unit IDs that correspond to unit frames in the default WoW UI. +OvaleGUID.UNIT_AURA_UNITS = {} +do + local self = OvaleGUID + self.UNIT_AURA_UNITS["focus"] = true + self.UNIT_AURA_UNITS["pet"] = true + self.UNIT_AURA_UNITS["player"] = true + self.UNIT_AURA_UNITS["target"] = true + + for i = 1, 5 do + self.UNIT_AURA_UNITS["arena" .. i] = true + self.UNIT_AURA_UNITS["arenapet" .. i] = true + end + for i = 1, 4 do + self.UNIT_AURA_UNITS["boss" .. i] = true + end + for i = 1, 4 do + self.UNIT_AURA_UNITS["party" .. i] = true + self.UNIT_AURA_UNITS["partypet" .. i] = true + end + for i = 1, 40 do + self.UNIT_AURA_UNITS["raid" .. i] = true + self.UNIT_AURA_UNITS["raidpet" .. i] = true + end +end +-- + -- function OvaleGUID:OnEnable() self:Update("player") @@ -98,20 +127,30 @@ function OvaleGUID:GetGUIDForName(name) return self_nameToGUID[name] end +-- Return a unit Id associated with guid. +-- Prefer to return a unit Id for which the WoW servers fire UNIT_AURA events. function OvaleGUID:GetUnitId(guid) + local unitIdFound = nil local unitIdTable = self_unitId[guid] - if not unitIdTable then return nil end - for unitId in pairs(unitIdTable) do - if strfind(unitId, "mouseover") == 1 then - if API_UnitExists("mouseover") then + if unitIdTable then + for unitId in pairs(unitIdTable) do + if self.UNIT_AURA_UNITS[unitId] then return unitId - else - unitIdTable[unitId] = nil - self_guid[unitId] = nil + elseif not unitIdFound then + if strfind(unitId, "mouseover") == 1 then + if API_UnitExists(unitId) then + unitIdFound = unitId + else + unitIdTable[unitId] = nil + self_guid[unitId] = nil + end + else + unitIdFound = unitId + end end end end - return nil + return unitIdFound end function OvaleGUID:GetUnitIdForName(name) -- 1.7.9.5