-- auras.lua -- 2019 Aleksi Blinnikka local _, addon = ...; local CombatLogGetCurrentEventInfo = CombatLogGetCurrentEventInfo; local UnitAura = UnitAura; local UnitGUID = UnitGUID; local guids = addon.FrameGuids; local watchedAuras = { --[286988] = duration, -- Searing Embers --[257908] = {bar=false}, -- Oiled Blade --[268391] = {bar=false}, -- Mental Assault --[272571] = {bar=false}, -- Choking Waters --[268008] = {bar=false}, -- Snake Charm --[280605] = {bar=false}, -- Brain Freeze --[268797] = {bar=false}, -- Transmute to Goo --[265889] = {bar=false}, -- Torch Strike --[266209] = {bar=false}, -- Wicked Frenzy --[258323] = {bar=false}, -- Infected Wound --[262513] = {bar=false}, -- Azerite Heartseeker [287280] = {1, "buff1"}, -- Glimmer of Light [194384] = {1, "buff1"}, -- Atonement [61295] = {1, "buff1"}, -- Riptide [53563] = {1, "buff2"}, -- Beacon of Light [156910] = {1, "buff2"}, -- Beacon of Faith [200025] = {1, "buff2"}, -- Beacon of Virtue [974] = {1, "buff2"}, -- Earth Shield -- Tank defensives [6940] = {1, "tankcd"}, -- Blessing of Sacrifice [33206] = {1, "tankcd"}, -- Pain Suppression [47788] = {1, "tankcd"}, -- Guardian Spirit [102342] = {1, "tankcd"}, -- Ironbark [116849] = {1, "tankcd"}, -- Life Cocoon [196555] = {1, "tankcd"}, -- Netherwalk --[124275] = {1, "stagger"}, -- Light Stagger (Monk) --[124274] = {1, "stagger"}, -- Moderate Stagger (Monk) [124273] = {1, "stagger"}, -- Heavy Stagger (Monk) -- M+ [209858] = {1, "stacks"}, -- Necrotic Wound (M+) [240559] = {1, "stacks"}, -- Grievous Wound (M+) [240443] = {1, "stacks"}, -- Burst (M+) [260741] = {1, "heal"}, -- Jagged Nettles (Waycrest Manor) -- Uldir [265264] = {2, "alert"}, -- Void Lash (Zek'voz) -- Battle of Dazar'alor [285213] = {1, "alert"}, -- Caress of Death (Rastakhan) [288415] = {1, "alert"}, -- Caress of Death in Death realm (Rastakhan) [285195] = {8, "stacks"}, -- Deathly Withering (Rastakhan) [286646] = {1, "heal"}, -- Gigavolt Charge (Mekkatorque) [288939] = {1, "heal"}, -- Gigavolt Radiation (Mekkatorque) [287891] = {1, "stacks"}, -- Sheep Shrapnel (Mekkatorque) [287114] = {1, "alert"}, -- Miscalculated Teleport (Mekkatorque) [287167] = {1, "stacks"}, -- Discombobulation (Mekkatorque) [287993] = {1, "stacks"}, -- Chilling Touch (Jaina) [283507] = {1, "heal"}, -- Volatile Charge (Opulence) [287648] = {1, "heal"}, -- Volatile Charge (Opulence) [284556] = {1, "stacks"}, -- Shadow-Touched (Opulence) [287072] = {1, "heal"}, -- Liquid Gold (Opulence) [284781] = {1, "heal"}, -- Grievous Axe (Rastakhan) [290955] = {1, "heal"}, -- Grievous Axe (Rastakhan) -- Crucible of Storms [282566] = {1, "stacks"}, -- Promises of Power (Restless Cabal) [282738] = {1, "alert"}, -- Embrace of the Void (Restless Cabal) [285652] = {1, "alert"}, -- Insatiable Torment (Uu'nat) [285367] = {2, "stacks"}, -- Piercing Gaze of N'Zoth (Uu'nat) [284733] = {1, "alert"}, -- Embrace of the Void (Uu'nat) [285685] = {1, "alert"}, -- Gift of N'Zoth: Lunacy (Uu'nat) -- The Eternal Palace [292127] = {1, "alert"}, -- Darkest Depths (Underwater) [298569] = {1, "stacks"}, -- Drained Soul (Queen Azshara) [297586] = {1, "alert"}, -- Suffering (Queen's Court) [294711] = {5, "heal"}, -- Frost (Sivara) [294715] = {5, "heal"}, -- Toxic (Sivara) [296693] = {1, "stacks"}, -- Waterlogged (Ashvane) [297333] = {1, "heal"}, -- Briny Bubble (Ashvane) [298306] = {1, "stacks"}, -- Incubation Fluid (Orgozoa) -- Ny'alotha [313255] = {20, "stacks"}, -- Creeping Madness (Wrathion) [310224] = {1, "stacks"}, -- Annihilation (Vexiona) [307358] = {1, "heal"}, -- Debilitating Spit (Shad'har) [318078] = {1, "alert"}, -- Fixate (Shad'har) [312486] = {1, "stacks"}, -- Recurring Nightmare (Il'gynoth) [313400] = {1, "stacks"}, -- Corrupted Mind (N'zoth) --[319346] = {1, "heal"}, -- Infinity's Toll (N'zoth) phase marker [316506] = {1, "alert"}, -- Heartpiercer Venom (Trash) [315025] = {1, "heal"}, -- Ancient Curse (Maut) [315311] = {1, "stacks"}, -- Ravage (Hivemind) [313460] = {1, "alert"}, -- Nullification (Hivemind) [313461] = {1, "heal"}, -- Corrosion (Hivemind) [307359] = {1, "heal"}, -- Despair (Vexiona) [313077] = {1, "heal"}, -- Unleashed Nightmare (Ra-den) [316065] = {1, "alert"}, -- Corrupted Existence (Ra-den) [313364] = {1, "heal"}, -- Mental Decay (Carapace of N'zoth) [307044] = {4, "stacks"}, -- Nightmare Antibody (Carapace of N'zoth) -- SL M+ [323347] = {1, "stacks"}, -- Clinging Darkness (Necrotic Wake) [338357] = {2, "stacks"}, -- Tenderize (Necrotic Wake) [321038] = {1, "stacks"}, -- Wrack Soul (Sanguine Depths) [331415] = {1, "stacks"}, -- Wicked Gash (Sanguine Depths) [328737] = {1, "stacks"}, -- Fragment of Radiance (Sanguine Depths) [326632] = {5, "stacks"}, -- Stony Veins (Halls of Atonement) [344993] = {5, "stacks"}, -- Jagged Swipe (Halls of Atonement) [323692] = {1, "stacks"}, -- Arcane Vulnerability (De Other Side) [317661] = {1, "stacks"}, -- Insidious Venom (Spires of Ascension) [327814] = {1, "heal"}, -- Wicked Gash (Gauntlet) (Sanguine Depths) [323687] = {1, "heal"}, -- Arcane Lightning (De Other Side) [324154] = {1, "heal"}, -- Dark Stride (Spires of Ascension) [335305] = {1, "heal"}, -- Barbed Shackles (Sanguine Depths) [336279] = {1, "heal"}, -- Explosive Anger (Sanguine Depths) -- Castle Nathria [346301] = {1, "stacks"}, -- Bloodlight (Shriekwing) [328897] = {7, "alert"}, -- Exsanguinated (Shriekwing) [335304] = {1, "heal"}, -- Sinseeker (Huntsman Altimor) [334971] = {2, "stacks"}, -- Jagged Claws (Huntsman Altimor) [325382] = {3, "stacks"}, -- Warped Desires (Lady Inerva Darkvein) [332664] = {1, "heal"}, -- Anima Add (Lady Inerva Darkvein) [340477] = {1, "heal"}, -- Anima Add (Lady Inerva Darkvein) [339527] = {1, "heal"}, -- Anima Add (Lady Inerva Darkvein) [342321] = {1, "heal"}, -- Anima Add (Lady Inerva Darkvein) [342322] = {1, "heal"}, -- Anima Add (Lady Inerva Darkvein) [324982] = {1, "heal"}, -- Shared Suffering (Lady Inerva Darkvein) [324983] = {1, "heal"}, -- Shared Suffering (Lady Inerva Darkvein) [340860] = {1, "heal", 14}, -- Withering Touch (Artificer Xy'mox) [326302] = {1, "alert"}, -- Stasis Trap (Artificer Xy'mox) [334771] = {1, "heal"}, -- Heart Hemorrhage (Stone Legion Generals) [326699] = {1, "stacks"}, -- Burden of Sin (Sire Denathrius) [329298] = {1, "alert"}, -- Gluttonous Miasma (Hungering Destroyer) [334755] = {14, "heal"}, -- Essence Sap (Hungering Destroyer) [343320] = {1, "alert"}, -- Curse of Caramain (Trash) [333913] = {1, "stacks"}, -- Wicked Laceration (Stone Legion Generals) }; local playerGuid = nil; local auraEvents = {}; 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 atype == "BUFF" and (source == playerGuid or watchedAuras[id][2] == "tankcd") then frame[watchedAuras[id][2]][id] = amount; elseif atype == "DEBUFF" then frame[watchedAuras[id][2]][id] = amount; if watchedAuras[id][3] ~= nil and frame.hits[id] == nil then frame.hits[id] = watchedAuras[id][3]; end end 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, source, _, _, atype, amount) if amount == nil or amount == 0 then if atype == "BUFF" and (source == playerGuid or watchedAuras[id][2] == "tankcd") then frame[watchedAuras[id][2]][id] = nil; elseif atype == "DEBUFF" then frame[watchedAuras[id][2]][id] = nil; if watchedAuras[id][3] ~= nil then frame.hits[id] = nil; end end end end auraEvents.SPELL_AURA_REMOVED_DOSE = auraEvents.SPELL_AURA_REMOVED; 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; auraEvents.SPELL_PERIODIC_DAMAGE = function(frame, id, source) if watchedAuras[id][3] ~= nil then if frame.hits[id] ~= nil and frame.hits[id] > 0 then frame.hits[id] = frame.hits[id] - 1; if frame.hits[id] == 0 then frame.hits[id] = nil; end elseif frame.hits[id] ~= nil then frame.hits[id] = nil; end end end auraEvents.SPELL_PERIODIC_ABSORBED = auraEvents.SPELL_PERIODIC_DAMAGE; auraEvents.SPELL_PERIODIC_MISSED = auraEvents.SPELL_PERIODIC_DAMAGE; local counter = 0; local function clog(ts, event, _, source, _, _, _, dest, _, _, _, spellid, ...) if auraEvents[event] and watchedAuras[spellid] and guids[dest] then auraEvents[event](guids[dest], spellid, source, ...); end end addon.Events.Clog = clog; local types = {["HELPFUL"] = "BUFF", ["HARMFUL"] = "DEBUFF"}; local function setAuras(unit, guid) local name; local spellid, count, source; for filter, atype in pairs(types) do local i = 1; while true do name, _, count, _, _, _, source, _, _, spellid = UnitAura(unit, i, filter); if not spellid then break end if count == 0 then count = nil end if source ~= nil then clog(0, "SPELL_AURA_APPLIED", nil, UnitGUID(source), nil, nil, nil, guid, nil, nil, nil, spellid, nil, nil, atype, count); elseif filter == "HARMFUL" then clog(0, "SPELL_AURA_APPLIED", nil, nil, nil, nil, nil, guid, nil, nil, nil, spellid, nil, nil, atype, count); end i = i + 1; end end end addon.SetAuras = setAuras; local frame = CreateFrame("Frame"); frame:Hide(); frame:SetScript("OnEvent", function() playerGuid = UnitGUID("player"); frame:UnregisterAllEvents(); frame:SetScript("OnEvent", function() return clog(CombatLogGetCurrentEventInfo()); end); frame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED"); end); frame:RegisterEvent("PLAYER_LOGIN"); -- debug slash command to get target auras SLASH_KEHYS1 = "/kaura" function SlashCmdList.KEHYS(msg, editBox) local name, spellid, count, source; local unit = "target"; if msg and msg ~= "" then unit = msg; end for filter, atype in pairs(types) do local i = 1; while true do name, _, count, _, _, _, source, _, _, spellid = UnitAura(unit, i, filter); if not spellid then break end print(atype, name, count, source, spellid); i = i + 1; end end end