diff --git a/WeakAuras/BuffTrigger2.lua b/WeakAuras/BuffTrigger2.lua index 6daa6ba..305f54d 100644 --- a/WeakAuras/BuffTrigger2.lua +++ b/WeakAuras/BuffTrigger2.lua @@ -1434,11 +1434,16 @@ local function CleanUpMatchDataForUnit(unit, filter) for index, data in pairs(matchData[unit][filter]) do matchData[unit][filter][index] = nil for id, triggerData in pairs(data.auras) do - for triggernum in pairs(triggerData) do - matchDataByTrigger[id][triggernum][unit][index] = nil - matchDataChanged[id] = matchDataChanged[id] or {} - matchDataChanged[id][triggernum] = true - end + for triggernum in pairs(triggerData) do + if matchDataByTrigger[id] and matchDataByTrigger[id][triggernum] + and matchDataByTrigger[id][triggernum][unit] + and matchDataByTrigger[id][triggernum][unit][index] + then + matchDataByTrigger[id][triggernum][unit][index] = nil + matchDataChanged[id] = matchDataChanged[id] or {} + matchDataChanged[id][triggernum] = true + end + end end end end diff --git a/WeakAuras/GenericTrigger.lua b/WeakAuras/GenericTrigger.lua index 6370931..96f82fd 100644 --- a/WeakAuras/GenericTrigger.lua +++ b/WeakAuras/GenericTrigger.lua @@ -899,9 +899,14 @@ function WeakAuras.ScanUnitEvents(event, unit, ...) Private.ActivateAuraEnvironment(id); local updateTriggerState = false; for triggernum, data in pairs(triggers) do - local allStates = WeakAuras.GetTriggerStateForTrigger(id, triggernum); - if (RunTriggerFunc(allStates, data, id, triggernum, event, unit, ...)) then - updateTriggerState = true; + local delay = GenericTrigger.GetDelay(data) + if delay == 0 then + local allStates = WeakAuras.GetTriggerStateForTrigger(id, triggernum); + if (RunTriggerFunc(allStates, data, id, triggernum, event, unit, ...)) then + updateTriggerState = true; + end + else + Private.RunTriggerFuncWithDelay(delay, id, triggernum, data, event, unit, ...) end end if (updateTriggerState) then @@ -2262,6 +2267,7 @@ do local spellCdsRune = CreateSpellCDHandler(); local spellDetails = {} + local mark_ACTIONBAR_UPDATE_COOLDOWN, mark_PLAYER_ENTERING_WORLD function Private.InitCooldownReady() cdReadyFrame = CreateFrame("Frame"); @@ -2292,21 +2298,35 @@ do end if GetTime() - cdReadyFrame.inWorld < 2 then - cdReadyFrame:SetScript("OnUpdate", cdReadyFrame.HandleEvent) + mark_PLAYER_ENTERING_WORLD = true + cdReadyFrame:Show() + return + end + if (event == "ACTIONBAR_UPDATE_COOLDOWN") then + mark_ACTIONBAR_UPDATE_COOLDOWN = true + cdReadyFrame:Show() return end - cdReadyFrame:SetScript("OnUpdate", nil) Private.StartProfileSystem("generictrigger cd tracking"); if type(event) == "number" then-- Called from OnUpdate! - Private.CheckSpellKnown() - Private.CheckCooldownReady() - Private.CheckItemSlotCooldowns() - elseif(event == "SPELL_UPDATE_COOLDOWN" - or event == "RUNE_POWER_UPDATE" or event == "RUNE_TYPE_UPDATE" or event == "ACTIONBAR_UPDATE_COOLDOWN" + if mark_PLAYER_ENTERING_WORLD then + Private.CheckSpellKnown() + Private.CheckCooldownReady() + Private.CheckItemSlotCooldowns() + mark_PLAYER_ENTERING_WORLD = nil + mark_ACTIONBAR_UPDATE_COOLDOWN = nil + elseif mark_ACTIONBAR_UPDATE_COOLDOWN then + Private.CheckCooldownReady() + mark_ACTIONBAR_UPDATE_COOLDOWN = nil + end + elseif(event == "SPELL_UPDATE_COOLDOWN" or event == "RUNE_POWER_UPDATE" or event == "PLAYER_TALENT_UPDATE" - or event == "CHARACTER_POINTS_CHANGED") then - Private.CheckCooldownReady(); + or event == "CHARACTER_POINTS_CHANGED" or event == "RUNE_TYPE_UPDATE") then + if event == "SPELL_UPDATE_COOLDOWN" then + mark_ACTIONBAR_UPDATE_COOLDOWN = nil + end + Private.CheckCooldownReady(); elseif(event == "SPELLS_CHANGED") then Private.CheckSpellKnown() Private.CheckCooldownReady() @@ -2326,8 +2346,15 @@ do Private.CheckItemSlotCooldowns(); end Private.StopProfileSystem("generictrigger cd tracking"); + if mark_PLAYER_ENTERING_WORLD == nil and mark_ACTIONBAR_UPDATE_COOLDOWN == nil then + cdReadyFrame:Hide() + else + cdReadyFrame:Show() + end end + cdReadyFrame:Hide() cdReadyFrame:SetScript("OnEvent", cdReadyFrame.HandleEvent) + cdReadyFrame:SetScript("OnUpdate", cdReadyFrame.HandleEvent) end function WeakAuras.GetRuneCooldown(id) diff --git a/WeakAuras/WeakAuras.lua b/WeakAuras/WeakAuras.lua index 1fdc146..10d60e3 100644 --- a/WeakAuras/WeakAuras.lua +++ b/WeakAuras/WeakAuras.lua @@ -2691,6 +2691,16 @@ local function pAdd(data, simpleChange) end end + -- If the aura has a onHide animation we need to cancel it to ensure it's truely hidden now + if Private.regions[id] then + Private.CancelAnimation(Private.regions[id].region, true, true, true, true, true, true) + end + if clones[id] then + for _, region in pairs(clones[id]) do + Private.CancelAnimation(region, true, true, true, true, true, true) + end + end + Private.ClearAuraEnvironment(id); for parent in Private.TraverseParents(data) do Private.ClearAuraEnvironment(parent.id); @@ -5581,5 +5591,3 @@ do return data.regionType == "group" or data.regionType == "dynamicgroup" end end - -