ad5b150 - Add buff indicator and clear all indicators at start of fight
authorAleksi Blinnikka <aleksi.blinnikka@gmail.com>
Tue, 30 Jul 2019 20:27:16 +0000
committerAleksi Blinnikka <aleksi.blinnikka@gmail.com>
Tue, 30 Jul 2019 20:30:17 +0000
kehys/auras.lua
kehys/events.lua
kehys/frame.lua
kehys/updater.lua

index 7d88db2..1100f11 100644 (file)
@@ -17,6 +17,7 @@ local watchedAuras = {
     --[266209] = {bar=false}, -- Wicked Frenzy
     --[258323] = {bar=false}, -- Infected Wound
     --[262513] = {bar=false}, -- Azerite Heartseeker
     --[266209] = {bar=false}, -- Wicked Frenzy
     --[258323] = {bar=false}, -- Infected Wound
     --[262513] = {bar=false}, -- Azerite Heartseeker
+    [287280] = {1, "buff1"}, -- Glimmer of Light
     -- Tank defensives
     [6940] = {1, "tankcd"}, -- Blessing of Sacrifice
     [33206] = {1, "tankcd"}, -- Pain Suppression
     -- Tank defensives
     [6940] = {1, "tankcd"}, -- Blessing of Sacrifice
     [33206] = {1, "tankcd"}, -- Pain Suppression
@@ -54,31 +55,40 @@ local watchedAuras = {
     [298569] = {1, "stacks"}, -- Drained Soul (Queen Azshara)
     [297586] = {1, "alert"}, -- Suffering (Queen's Court)
 };
     [298569] = {1, "stacks"}, -- Drained Soul (Queen Azshara)
     [297586] = {1, "alert"}, -- Suffering (Queen's Court)
 };
+local playerGuid = nil;
 
 local auraEvents = {};
 
 local auraEvents = {};
-auraEvents.SPELL_AURA_APPLIED = function(frame, id, _, _, _, amount)
+auraEvents.SPELL_AURA_APPLIED = function(frame, id, source, _, _, atype, amount)
     if (amount == nil and watchedAuras[id][1] == 1) or (amount ~= nil and amount >= watchedAuras[id][1]) then
         amount = amount or 1;
     if (amount == nil and watchedAuras[id][1] == 1) or (amount ~= nil and amount >= watchedAuras[id][1]) then
         amount = amount or 1;
-        frame[watchedAuras[id][2]][id] = amount;
+        if atype == "BUFF" and source == playerGuid then
+            frame[watchedAuras[id][2]][id] = amount;
+        elseif atype == "DEBUFF" then
+            frame[watchedAuras[id][2]][id] = amount;
+        end
     end
 end
 auraEvents.SPELL_AURA_APPLIED_DOSE = auraEvents.SPELL_AURA_APPLIED;
 auraEvents.SPELL_AURA_REFRESH = auraEvents.SPELL_AURA_APPLIED;
     end
 end
 auraEvents.SPELL_AURA_APPLIED_DOSE = auraEvents.SPELL_AURA_APPLIED;
 auraEvents.SPELL_AURA_REFRESH = auraEvents.SPELL_AURA_APPLIED;
-auraEvents.SPELL_AURA_REMOVED = function(frame, id, _, _, _, amount)
+auraEvents.SPELL_AURA_REMOVED = function(frame, id, source, _, _, atype, amount)
     if amount == nil or amount == 0 then
     if amount == nil or amount == 0 then
-        frame[watchedAuras[id][2]][id] = nil;
+        if atype == "BUFF" and source == playerGuid then
+            frame[watchedAuras[id][2]][id] = nil;
+        elseif atype == "DEBUFF" then
+            frame[watchedAuras[id][2]][id] = nil;
+        end
     end
 end
 auraEvents.SPELL_AURA_REMOVED_DOSE = auraEvents.SPELL_AURA_REMOVED;
     end
 end
 auraEvents.SPELL_AURA_REMOVED_DOSE = auraEvents.SPELL_AURA_REMOVED;
-auraEvents.SPELL_AURA_BROKEN = function(frame, id)
-    return auraEvents.SPELL_AURA_REMOVED(frame, id, nil, nil, nil, 0);
+auraEvents.SPELL_AURA_BROKEN = function(frame, id, source)
+    return auraEvents.SPELL_AURA_REMOVED(frame, id, source, nil, nil, nil, 0);
 end
 auraEvents.SPELL_AURA_BROKEN_SPELL = auraEvents.SPELL_AURA_BROKEN;
 
 local counter = 0;
 end
 auraEvents.SPELL_AURA_BROKEN_SPELL = auraEvents.SPELL_AURA_BROKEN;
 
 local counter = 0;
-local function clog(ts, event, _, _, _, _, _, dest, _, flags, _, spellid, ...)
+local function clog(ts, event, _, source, _, _, _, dest, _, flags, _, spellid, ...)
     if auraEvents[event] and watchedAuras[spellid] and guids[dest] then
     if auraEvents[event] and watchedAuras[spellid] and guids[dest] then
-        auraEvents[event](guids[dest], spellid, ...);
+        auraEvents[event](guids[dest], spellid, source, ...);
     end
 end
 addon.Events.Clog = clog;
     end
 end
 addon.Events.Clog = clog;
@@ -86,6 +96,7 @@ addon.Events.Clog = clog;
 local frame = CreateFrame("Frame");
 frame:Hide();
 frame:SetScript("OnEvent", function()
 local frame = CreateFrame("Frame");
 frame:Hide();
 frame:SetScript("OnEvent", function()
+    playerGuid = UnitGUID("player");
     frame:UnregisterAllEvents();
     frame:SetScript("OnEvent", function()
         return clog(CombatLogGetCurrentEventInfo());
     frame:UnregisterAllEvents();
     frame:SetScript("OnEvent", function()
         return clog(CombatLogGetCurrentEventInfo());
index 4a9264f..97f56da 100644 (file)
@@ -32,6 +32,7 @@ local width = 80;
 
 function addon.RegisterEvents(frame)
     frame:RegisterEvent("PLAYER_ENTERING_WORLD");
 
 function addon.RegisterEvents(frame)
     frame:RegisterEvent("PLAYER_ENTERING_WORLD");
+    frame:RegisterEvent("PLAYER_REGEN_DISABLED");
     frame:RegisterEvent("READY_CHECK");
     frame:RegisterEvent("READY_CHECK_FINISHED");
     frame:RegisterEvent("GROUP_ROSTER_UPDATE");
     frame:RegisterEvent("READY_CHECK");
     frame:RegisterEvent("READY_CHECK_FINISHED");
     frame:RegisterEvent("GROUP_ROSTER_UPDATE");
@@ -159,6 +160,14 @@ local eventFuncs = {
     ["RAID_TARGET_UPDATE"] = function(frame)
         updateRaidMarker(frame, frame.displayed);
     end,
     ["RAID_TARGET_UPDATE"] = function(frame)
         updateRaidMarker(frame, frame.displayed);
     end,
+    ["PLAYER_REGEN_DISABLED"] = function(frame)
+        -- clear buff status on entering combat, should also use UnitAura to re-fill
+        frame.tankcd = {};
+        frame.alert = {};
+        frame.stacks = {};
+        frame.heal = {};
+        frame.buff1 = {};
+    end,
     ["UPDATE_ALL_BARS"] = function(frame)
         updateRole(frame, frame.unit);
         updateVehicle(frame);
     ["UPDATE_ALL_BARS"] = function(frame)
         updateRole(frame, frame.unit);
         updateVehicle(frame);
index 4301178..bba00f8 100644 (file)
@@ -54,6 +54,7 @@ function addon.NewRaidFrame(parent, width, height, unit, attributes,
     f.heal = {}; -- high healing auras
     f.tankcd = {}; -- tank CD auras
     f.stacks = {}; -- stacking aura tracking
     f.heal = {}; -- high healing auras
     f.tankcd = {}; -- tank CD auras
     f.stacks = {}; -- stacking aura tracking
+    f.buff1 = {}; -- custom buff indicator 1
     -- set up periodic updates
     updaters[f] = function()
         if f.updating then
     -- set up periodic updates
     updaters[f] = function()
         if f.updating then
@@ -152,6 +153,12 @@ function addon.NewRaidFrame(parent, width, height, unit, attributes,
     f.defensive:SetHeight(6);
     f.defensive:SetColorTexture(1, 0.3, 0);
     f.defensive:Hide();
     f.defensive:SetHeight(6);
     f.defensive:SetColorTexture(1, 0.3, 0);
     f.defensive:Hide();
+    f.buffind1 = f:CreateTexture(nil, "OVERLAY");
+    f.buffind1:SetPoint("TOPRIGHT", f.background, "TOPRIGHT", -1, -1);
+    f.buffind1:SetWidth(6);
+    f.buffind1:SetHeight(6);
+    f.buffind1:SetColorTexture(1, 0.8, 0.1);
+    f.buffind1:Hide();
     f.targeticon = f:CreateTexture(nil, "OVERLAY");
     f.targeticon:SetPoint("CENTER", f, "TOP", 0, -1);
     f.targeticon:SetWidth(12);
     f.targeticon = f:CreateTexture(nil, "OVERLAY");
     f.targeticon:SetPoint("CENTER", f, "TOP", 0, -1);
     f.targeticon:SetWidth(12);
index 05696d3..8083a93 100644 (file)
@@ -133,6 +133,12 @@ function addon.FrameUpdate(frame)
         elseif frame.stack:IsShown() then
             frame.stack:Hide();
         end
         elseif frame.stack:IsShown() then
             frame.stack:Hide();
         end
+        -- custom buff indicator 1
+        if next(frame.buff1) then
+            if not frame.buffind1:IsShown() then frame.buffind1:Show() end
+        elseif frame.buffind1:IsShown() then
+            frame.buffind1:Hide();
+        end
         -- overlays
         if next(frame.alert) then
             -- major
         -- overlays
         if next(frame.alert) then
             -- major