diff --git a/Vect.lua b/Vect.lua new file mode 100644 index 0000000..1bf6a23 --- /dev/null +++ b/Vect.lua @@ -0,0 +1,241 @@ + +--"Globals" +local ALLOCATE_FRAME_NUM = 5; + +local aceDB = LibStub("AceDB-3.0") +local aceCDialog = LibStub("AceConfigDialog-3.0") +local aceConfig = LibStub("AceConfig-3.0") +local libSharedMedia = LibStub("LibSharedMedia-3.0") + +Vect.targets = { + ["target"] = nil, + ["focus"] = nil +} + +Vect.cds = {} + +Vect.frames = { + ["target"] = {}, + ["focus"] = {} +} + +Vect.defaults = { + profile = { + enabled = true, + locked = true, + spellDebug = false; + target = { + enabled = true, + size = 23, + xPos = -150, + yPos = -125 + }, + focus = { + enabled = true, + size = 23, + xPos = 200, + yPos = -28 + } + } +} + +function Vect:Reset() + self.cds = {} + self.target = {unitGUID = -1, timers = {}} + self.focus = {unitGUID = -1, timers = {}} +end + +function Vect:OnInitialize() + self.db = aceDB:New("VectDB", self.defaults); + self.db.RegisterCallback(self, "OnProfileChanged", function() self:ApplySettings() end) + self.db.RegisterCallback(self, "OnProfileCopied", function() self:ApplySettings() end) + self.db.RegisterCallback(self, "OnProfileReset", function() self:ApplySettings() end) + self:Print(self.appName .. " v. " .. Vect.version .. ". Chat command is /vect"); + --AceConfig:RegisterOptionsTable(self.appName, self:getOptions()) + self:RegisterChatCommand("vect", "ChatCommand") +end + +function Vect:OnEnable() + --local db = self.db.profile + self:Reset() + self:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED") + self:RegisterEvent("PLAYER_TARGET_CHANGED") + self:RegisterEvent("PLAYER_FOCUS_CHANGED") + self:CreateFrames("target"); + self:CreateFrames("focus"); + self:ApplySettings(); +end + + +function Vect:OnDisable() + --TODO: cleanup +end + + +function Vect:ChatCommand(input) + --TODO +end + +function Vect:COMBAT_LOG_EVENT_UNFILTERED(_, timestamp, eventType, srcGUID, srcName, srcFlags, + dstGUID, dstName, dstFlags, spellID, spellName, spellSchool, + detail1, detail2, detail3) + local db = Vect.db.profile; + if db["spellDebug"] then + self:Print("eventType: " .. eventType .. " id: " .. spellID .. " spellName: " .. spellName); + end + + if eventType == "SPELL_CAST_SUCCESS" or eventType == "SPELL_AURA_APPLIED" then + --self:Print("id: " .. spellID .. " spellName: " .. spellName); + + if Vect.spells[spellID] then + Vect:AddCd(srcGUID, spellID); + end + end +end + +function Vect:PLAYER_TARGET_CHANGED() + local unitGUID = UnitGUID("target"); + self.targets["target"] = unitGUID; + self:ReassignCds("target"); +end + +function Vect:PLAYER_FOCUS_CHANGED() + local unitGUID = UnitGUID("focus"); + self.targets["focus"] = unitGUID; + self:ReassignCds("focus"); +end + +function Vect:PLAYER_ENTERING_WORLD() + +end + +--gets called when a cd is finished, reassigns the cds to frames. +function Vect:ReassignCds(which) + --first hide all + for i = 1, 23 do + local frame = Vect.frames[which][i]["frame"]; + frame:Hide(); + end + --check if we have cooldown for that unit + if not self.cds[self.targets[which]] then return end + --let's fill them up + local i = 1; + for k, v in pairs(self.cds[self.targets[which]]) do + local frame = Vect.frames[which][i]["frame"]; + local text = Vect.frames[which][i]["texture"]; + text:SetTexture(v[4]); + local CoolDown = Vect.frames[which][i]["cooldown"]; + CoolDown:SetCooldown(v[1], v[3]); + frame:Show(); + i = i + 1; + end +end + +function Vect:AddCd(srcGUID, spellID) + local db = Vect.db.profile; + if not db["enabled"] then return end; + + if not Vect.cds[srcGUID] then Vect.cds[srcGUID] = {} end + local cd, reset = Vect.spells[spellID][1], Vect.spells[spellID][2]; + local spellName, spellRank, spellIcon = GetSpellInfo(spellID); + local currentTime = GetTime(); + local endTime = currentTime + cd; + Vect.cds[srcGUID][spellID] = { + currentTime, + endTime, + cd, + spellIcon, + spellID + } + + --self:Print(Vect.cds[srcGUID][spellID][1] .. " " .. Vect.cds[srcGUID][spellID][2] .. " " .. Vect.cds[srcGUID][spellID][3]); + + if reset then + Vect:CdRemoval(srcGUID, reset); + end + + --self:Print(self.targets["target"]); + --self:Print(s + + if self.targets["target"] == srcGUID then + self:ReassignCds("target"); + end + + if self.targets["focus"] == srcGUID then + self:ReassignCds("focus"); + end +end + +function Vect:CdRemoval(srcGUID, resetArray) + if not self.cds[srcGUID] then return end + for k, v in pairs(self.cds[srcGUID]) do + for j, x in pairs(resetArray) do + if v[5] == x then + --self:Print("Removed cd: " .. v[5]); + self.cds[srcGUID][v[5]] = nil; + end + end + end +end + +function Vect:CreateFrames(which) + for i = 1, 23 do + local frame = CreateFrame("Frame", nil, UIParent, nil); + frame:SetFrameStrata("BACKGROUND"); + frame:SetWidth(150); + frame:SetHeight(150); + if i == 1 then + frame:SetScript("OnUpdate", function() self:VOnTimerUpdate(which) end) + end + local text = frame:CreateTexture(); + text:SetTexture("Interface\\Icons\\Spell_Arcane_Blink") + text:SetAllPoints(frame); + frame.texture = text; + local CoolDown = CreateFrame("Cooldown", "VectCoolDown" .. i, frame); + CoolDown:SetAllPoints() + CoolDown:SetCooldown(GetTime(), 50); + --frame:Show(); + Vect.frames[which][i] = {} + Vect.frames[which][i]["frame"] = frame; + Vect.frames[which][i]["texture"] = text; + Vect.frames[which][i]["cooldown"] = CoolDown; + end +end + +function Vect:MoveTimersStop(which, x, y, size) + for i = 1, 23 do + local frame = Vect.frames[which][i]["frame"]; + frame:ClearAllPoints(); + frame:SetFrameStrata("BACKGROUND"); + frame:SetWidth(size); + frame:SetHeight(size); + local text = Vect.frames[which][i]["texture"]; + text:SetAllPoints(frame); + frame.texture = text; + frame:SetPoint("CENTER", x + ((i - 1) * size), y); + local CoolDown = Vect.frames[which][i]["cooldown"]; + CoolDown:SetAllPoints(); + --frame:Show(); + end +end + +function Vect:ApplySettings() + local db = Vect.db.profile; + --self:Print(db["target"]["yPos"]); + Vect:MoveTimersStop("target", db["target"]["xPos"], db["target"]["yPos"], db["target"]["size"]); + Vect:MoveTimersStop("focus", db["focus"]["xPos"], db["focus"]["yPos"], db["focus"]["size"]); + Vect:ReassignCds("target"); + Vect:ReassignCds("focus"); +end + +function Vect:VOnTimerUpdate(which) + --check if we have cooldown for that unit + if not self.cds[self.targets[which]] then return end + --let's check if one of the cooldowns finished + for k, v in pairs(self.cds[self.targets[which]]) do + if v[2] <= GetTime() then + self.cds[self.targets[which]][v[5]] = nil; + self:ReassignCds(which); + end + end +end \ No newline at end of file diff --git a/Vect.toc b/Vect.toc index e520b19..c670405 100644 --- a/Vect.toc +++ b/Vect.toc @@ -2,11 +2,13 @@ ## Author: Verot ## Name: Vect ## Title: Vect -## Notes: Verot's Enemy cooldown tracker. +## Notes: Verot's Enemy Cooldown Tracker. ## DefaultState: Enabled ## OptionalDeps: Ace3, LibSharedMedia-3.0 ## SavedVariables: VectDB ## Version: 0.1 embeds.xml +data\global.lua +data\spells.lua Vect.lua diff --git a/data/global.lua b/data/global.lua new file mode 100644 index 0000000..1347800 --- /dev/null +++ b/data/global.lua @@ -0,0 +1,4 @@ +Vect = LibStub("AceAddon-3.0"):NewAddon("Vect", "AceConsole-3.0", "AceEvent-3.0") +Vect.appName = "Vect" +Vect.dbName = "VectDB" +Vect.version = "0.1" \ No newline at end of file diff --git a/data/spells.lua b/data/spells.lua new file mode 100644 index 0000000..34d3c9a --- /dev/null +++ b/data/spells.lua @@ -0,0 +1,410 @@ +Vect.spells = { + --Trinkets + [42292] = {120, nil}, --PvP Trinket + --Other Stuff + [54861] = {180, nil}, --Rocket Boots (Enchant) + --Racials (War Stomp no combatlog entry) + [59752] = {120, nil}, --Every Man For Himself + [7744] = {120, nil}, --Will of the Forsaken + [25046] = {120, nil}, --Arcane Torrent + [65116] = {120, nil}, --Stoneform + [58984] = {120, nil}, --Shadowmeld + [20589] = {105, nil}, --Escape Artist + [28880] = {180, nil}, --Gift of the Naaru + --Warrior + --Total: 20 + --TODO: charge r1,r2 + --Arms + [46924] = {90, nil}, --BladeStrom + [11578] = {15, nil}, --Charge rank 3 + [57755] = {60, nil}, --Heroic Throw + [20230] = {240, nil}, --Retaliation + [64382] = {300, nil}, --Shattering Throw + [12328] = {30, nil}, --Sweeping Strikes + --Fury + [12292] = {121, nil}, --Death Wish + [55694] = {180, nil}, --Enraged Regeneration + [60970] = {45, nil}, --Heroic Fury + [20252] = {20, nil}, --Intercept + [5246] = {120, nil}, --Intimidating Shout + [6552] = {10, nil}, --Pummel + [1719] = {161, nil}, --Recklessness + --Protection + [12809] = {30, nil}, --Concussion Blow + [676] = {40, nil}, --Disarm + [3411] = {30, nil}, --Intervene + [12975] = {180, nil}, --Last Stand + [72] = {12, nil}, --Shield Bash + [871] = {240, nil}, --Shield Wall + [46968] = {20, nil}, --Shockwave + [23920] = {10, nil}, --Spell Reflection + + --Paladin + --Total: 16 + --Holy + [31821] = {120, nil}, --Aura Mastery + [20216] = {120, nil}, --Divine Favor + [31842] = {180, nil}, --Divine Illumination + [54428] = {60, nil}, --Divine Plea + [2812] = {20, nil}, --Holy Wrath r1 + [10318] = {20, nil}, --Holy Wrath r2 + [27139] = {20, nil}, --Holy Wrath r3 + [48816] = {20, nil}, --Holy Wrath r4 + [48817] = {20, nil}, --Holy Wrath r5 + [633] = {960, nil}, --Lay on Hands r1 + [2800] = {960, nil}, --Lay on Hands r2 + [10310] = {960, nil}, --Lay on Hands r3 + [27154] = {960, nil}, --Lay on Hands r4 + [48788] = {960, nil}, --Lay on Hands r5 + --Protection + [31935] = {30, nil}, --Avenger's Shield r1 + [32699] = {30, nil}, --Avenger's Shield r2 + [32700] = {30, nil}, --Avenger's Shield r3 + [48826] = {30, nil}, --Avenger's Shield r4 + [48827] = {30, nil}, --Avenger's Shield r5 + [498] = {120, nil}, --Divine Protection + [64205] = {120, nil}, --Divine Sacrifice + [642] = {240, nil}, --Divine Shield + [853] = {30, nil}, --Hammer of justice r1 + [5588] = {30, nil}, --Hammer of justice r2 + [5589] = {30, nil}, --Hammer of justice r3 + [10308] = {30, nil}, --Hammer of justice r4 + [1044] = {25, nil}, --Hand of Freedom + [1022] = {180, nil}, --Hand of Protection r1 + [5599] = {180, nil}, --Hand of Protection r2 + [10278] = {180, nil}, --Hand of Protection r3 + [6940] = {120, nil}, --Hand of Sacrifice + --Retribution + [31884] = {120, nil}, --Avenging Wrath + [20066] = {60, nil}, --Repentance + + --Hunter + --Total: 15 + --Feign Death No Combat log entry + --Pet + [53480] = {42, nil}, --Roar of Sacrifice + --Beast Mastery + [19574] = {84, nil}, --Bestial Wrath + [19577] = {42, nil}, --Intimidation + [53271] = {60, nil}, --Master's Call + [14327] = {30, nil}, --Scare Beast + --Marksman + [1543] = {20, nil}, --Flare + [3045] = {180, nil}, --Rapid Fire + [23989] = {180, + {19577,53271,14327, 1543,3045,34490,3674,63668,63669, + 63670,63671,63672,19263,781,13813,14316,14317, + 27025,49066,49067,60192,1499,14310,14311,13809, + 13795,14302,14303,14304,14305,27023,49055,49056, + 19503,34600,19386,24132,24133,27068,49011,49012}}, --Readiness + [34490] = {20, nil}, --Silencing Shot + --Survival + [3674] = {24, nil}, --Black Arrow r1 + [63668] = {24, nil}, --Black Arrow r2 + [63669] = {24, nil}, --Black Arrow r3 + [63670] = {24, nil}, --Black Arrow r4 + [63671] = {24, nil}, --Black Arrow r5 + [63672] = {24, nil}, --Black Arrow r6 + [19263] = {90, nil}, --Deterrence + [781] = {16, nil}, --Disengage + [13813] = {24, nil}, --Explosive Trap r1 + [14316] = {24, nil}, --Explosive Trap r2 + [14317] = {24, nil}, --Explosive Trap r3 + [27025] = {24, nil}, --Explosive Trap r4 + [49066] = {24, nil}, --Explosive Trap r5 + [49067] = {24, nil}, --Explosive Trap r6 + --Feign Death + [60192] = {24, nil}, --Freezing Arrow + [1499] = {24, nil}, --Freezing Trap r1 + [14310] = {24, nil}, --Freezing Trap r2 + [14311] = {24, nil}, --Freezing Trap r3 + [13809] = {24, nil}, --Frost Trap + [13795] = {24, nil}, --Immolation Trap r1 + [14302] = {24, nil}, --Immolation Trap r2 + [14303] = {24, nil}, --Immolation Trap r3 + [14304] = {24, nil}, --Immolation Trap r4 + [14305] = {24, nil}, --Immolation Trap r5 + [27023] = {24, nil}, --Immolation Trap r6 + [49055] = {24, nil}, --Immolation Trap r7 + [49056] = {24, nil}, --Immolation Trap r8 + [19503] = {30, nil}, --Scatter Shot + [34600] = {24, nil}, --Snake Trap + [19386] = {60, nil}, --Wyvern Sting r1 + [24132] = {60, nil}, --Wyvern Sting r2 + [24133] = {60, nil}, --Wyvern Sting r3 + [27068] = {60, nil}, --Wyvern Sting r4 + [49011] = {60, nil}, --Wyvern Sting r5 + [49012] = {60, nil}, --Wyvern Sting r6 + + --Rogue + --Total: 15 + --Assassination + [14177] = {180, nil}, --Cold Blood + [51722] = {60, nil}, --Dismantle + [408] = {20, nil}, --Kidney Shot r1 + [8643] = {20, nil}, --Kidney Shot r2 + --Combat + [13750] = {180, nil}, --Adrenaline Rush + [13877] = {120, nil}, --Blade Flurry + [5277] = {120, nil}, --Evasion r1 + [26669] = {120, nil}, --Evasion r2 + [1766] = {10, nil}, --Kick + [51690] = {120, nil}, --Killing Spree + [2983] = {120, nil}, --Sprint r1 + [8696] = {120, nil}, --Sprint r2 + [11305] = {120, nil}, --Sprint r3 + --Subtlety + [2094] = {120, nil}, --Blind + [31224] = {60, nil}, --Cloak of Shadows + [14185] = {300, {5277, 26669, 2983, 8696, 11305, 1856, 1857, 26889, 14177, 36554}}, --Preparation + [51713] = {60, nil}, --Shadow Dance + [36554] = {20, nil}, --Shadowstep + [1856] = {120, nil}, --Vanish r1 + [1857] = {120, nil}, --Vanish r2 + [26889] = {120, nil}, --Vanish r3 + + --Priest + --Total: 14 + --Discipline + [6346] = {180, nil}, --Fear Ward + [14751] = {144, nil}, --Inner Focus + [33206] = {144, nil}, --Pain Supression + [10060] = {96, nil}, --Power infusion + --Holy + [19203] = {120, nil}, --Desperate Prayer r1 + [19238] = {120, nil}, --Desperate Prayer r2 + [19240] = {120, nil}, --Desperate Prayer r3 + [19241] = {120, nil}, --Desperate Prayer r4 + [19242] = {120, nil}, --Desperate Prayer r5 + [19243] = {120, nil}, --Desperate Prayer r6 + [25437] = {120, nil}, --Desperate Prayer r7 + [48172] = {120, nil}, --Desperate Prayer r8 + [48173] = {120, nil}, --Desperate Prayer r9 + [64843] = {480, nil}, --Divine Hymn + [47788] = {180, nil}, --Guardian Spirit + [64901] = {360, nil}, --Hymn of Hope + --Shadow + [47585] = {75, nil}, --Dispersion + [586] = {24, nil}, --Fade + [64044] = {120, nil}, --Psychic Horror + [8122] = {26, nil}, --Psychic Scream r1 + [8124] = {26, nil}, --Psychic Scream r2 + [10888] = {26, nil}, --Psychic Scream r3 + [10890] = {26, nil}, --Psychic Scream r4 + [34433] = {180, nil}, --Shadowfiend + [15487] = {45, nil}, --Silence + + --Death Knight + --Total: 18 + --Blood + [49028] = {90, nil}, --Dancing Rune Weapon + [48743] = {120, nil}, --Death Pact + [49016] = {180, nil}, --Hysteria + [49005] = {180, nil}, --Mark of Blood + [48982] = {30, nil}, --Rune Tap + [47476] = {120, nil}, --Strangulate + [55233] = {60, nil}, --Vampiric Blood + --Frost + [47568] = {300, nil}, --Empower Rune Weapon + [49203] = {60, nil}, --Hungering Cold + [48792] = {120, nil}, --Icebound Fortitude + [49039] = {120, nil}, --Lichborne + [47528] = {10, nil}, --Mind Freeze + [51271] = {60, nil}, --Unbreakable Armor + --Unholy + [48707] = {45, nil}, --Anti-Magic Shell + [51052] = {120, nil}, --Anti-Magic Zone + [42650] = {360, nil}, --Army of the Dead + [49576] = {25, nil}, --Death Grip + [49206] = {180, nil}, --Summon Gargoyle + + --Shaman + --Total: 17 + --Elemental + [2484] = {10.5, nil}, --Earthbind Totem + [16166] = {180, nil}, --Elemental Mastery + [2894] = {600, nil}, --Fire Elemental Totem + [51514] = {45, nil}, --Hex + [5730] = {21, nil}, --Stoneclaw Totem r1 + [6390] = {21, nil}, --Stoneclaw Totem r2 + [6391] = {21, nil}, --Stoneclaw Totem r3 + [6392] = {21, nil}, --Stoneclaw Totem r4 + [10427] = {21, nil}, --Stoneclaw Totem r5 + [10428] = {21, nil}, --Stoneclaw Totem r6 + [25525] = {21, nil}, --Stoneclaw Totem r7 + [58580] = {21, nil}, --Stoneclaw Totem r8 + [58581] = {21, nil}, --Stoneclaw Totem r9 + [58582] = {21, nil}, --Stoneclaw Totem r10 + [51490] = {45, nil}, --Thunderstorm r1 + [59156] = {45, nil}, --Thunderstorm r1 + [59158] = {45, nil}, --Thunderstorm r1 + [59159] = {45, nil}, --Thunderstorm r1 + [57994] = {5, nil}, --Wind Shear + --Enhancement + [2825] = {300, nil}, --Bloodlust + [32182] = {300, nil}, --Heroism + [2062] = {600, nil}, --Earth Elemental Totem + [51533] = {180, nil}, --Feral Spirit + [58875] = {32, nil}, --Spirit Walk + [8177] = {13, nil}, --Grounding Totem + [30823] = {60, nil}, --Shamanistic Rage + --Restoration + [16190] = {300, nil}, --Mana Tide Totem + [16188] = {120, nil}, --Nature's Swiftness + [55198] = {180, nil}, --Tidal Force + + ---Mage + --Total: 18 + --Freeze triggers combatlog event + --Arcane + [1953] = {15, nil}, --Blink + [2139] = {24, nil}, --Counterspell + [12051] = {120, nil}, --Evocation + [66] = {130, nil}, --Invisibility + [55342] = {180, nil}, --Mirror Image + [12043] = {85, nil}, --Presence of Mind + --Fire + [11113] = {30, nil}, --Blast Wave r1 + [13018] = {30, nil}, --Blast Wave r2 + [13019] = {30, nil}, --Blast Wave r3 + [13020] = {30, nil}, --Blast Wave r4 + [13021] = {30, nil}, --Blast Wave r5 + [27133] = {30, nil}, --Blast Wave r6 + [33933] = {30, nil}, --Blast Wave r7 + [42944] = {30, nil}, --Blast Wave r8 + [42945] = {30, nil}, --Blast Wave r9 + [28682] = {120, nil}, --Combustion + [31661] = {20, nil}, --Dragon's Breath r1 + [33041] = {20, nil}, --Dragon's Breath r2 + [33042] = {20, nil}, --Dragon's Breath r3 + [33043] = {20, nil}, --Dragon's Breath r4 + [42949] = {20, nil}, --Dragon's Breath r5 + [42950] = {20, nil}, --Dragon's Breath r6 + [543] = {30, nil}, --Fire Ward r1 + [8457] = {30, nil}, --Fire Ward r2 + [8458] = {30, nil}, --Fire Ward r3 + [10223] = {30, nil}, --Fire Ward r4 + [10225] = {30, nil}, --Fire Ward r5 + [27128] = {30, nil}, --Fire Ward r6 + [43010] = {30, nil}, --Fire Ward r7 + --Frost + [11958] = {384, + {44572, 122, 865, 6131, 10230, 27088, 42917, 6143, 8461, 8462, + 10177, 28609, 32796, 43012, 11426, 13031, 13032, 13033, + 27134, 33405, 43038, 43039, 45438, 12472, 31687}}, --Cold Snap + [44572] = {30, nil}, --Deep Freeze + [122] = {20, nil}, --Frost Nova r1 + [865] = {20, nil}, --Frost Nova r2 + [6131] = {20, nil}, --Frost Nova r3 + [10230] = {20, nil}, --Frost Nova r4 + [27088] = {20, nil}, --Frost Nova r5 + [42917] = {20, nil}, --Frost Nova r6 + [6143] = {30, nil}, --Frost Ward r1 + [8461] = {30, nil}, --Frost Ward r2 + [8462] = {30, nil}, --Frost Ward r3 + [10177] = {30, nil}, --Frost Ward r4 + [28609] = {30, nil}, --Frost Ward r5 + [32796] = {30, nil}, --Frost Ward r6 + [43012] = {30, nil}, --Frost Ward r7 + [11426] = {24, nil}, --Ice Barrier r1 + [13031] = {24, nil}, --Ice Barrier r2 + [13032] = {24, nil}, --Ice Barrier r3 + [13033] = {24, nil}, --Ice Barrier r4 + [27134] = {24, nil}, --Ice Barrier r5 + [33405] = {24, nil}, --Ice Barrier r6 + [43038] = {24, nil}, --Ice Barrier r7 + [43039] = {24, nil}, --Ice Barrier r8 + [45438] = {240, nil}, --Ice Block + [12472] = {144, nil}, --Icy Veins + [31687] = {144, nil}, --Summon Water Elemental + + --Warlock + --Total 10 (12 with pets) + --Affliction + [6789] = {120, nil}, --Death Coil r1 + [17925] = {120, nil}, --Death Coil r2 + [17962] = {120, nil}, --Death Coil r3 + [27223] = {120, nil}, --Death Coil r4 + [47859] = {120, nil}, --Death Coil r5 + [47860] = {120, nil}, --Death Coil r6 + [5484] = {40, nil}, --Howl of Terror r1 + [17928] = {40, nil}, --Howl of Terror r2 + --Demonology + [54785] = {45, nil}, --Demon Charge + [48020] = {30, nil}, --Demonic Circle: Teleport + [47193] = {42, nil}, --Demonic Empowerment + [18708] = {126, nil}, --Fel Domination + [50589] = {30, nil}, --Immolation Aura + [47241] = {130, nil}, --Metamorphosis + [6229] = {30, nil}, --Shadow Ward r1 + [11739] = {30, nil}, --Shadow Ward r2 + [11740] = {30, nil}, --Shadow Ward r3 + [28610] = {30, nil}, --Shadow Ward r4 + [47890] = {30, nil}, --Shadow Ward r5 + [47891] = {30, nil}, --Shadow Ward r6 + --Destruction + [30283] = {20, nil}, --Shadowfury r1 + [30413] = {20, nil}, --Shadowfury r2 + [30414] = {20, nil}, --Shadowfury r3 + [47846] = {20, nil}, --Shadowfury r4 + [47847] = {20, nil}, --Shadowfury r5 + --Pets + [19647] = {24, nil}, --Spell Lock + [47986] = {60, nil}, --Sacrifice + + --Druid + --Total: 18 + --Typhoon only triggers combat log event, when it hits something + --Balance + [22812] = {60, nil}, --Barkskin + [33831] = {180, nil}, --Force of Nature + [29166] = {180, nil}, --Innervate + [16689] = {60, nil}, --Nature's Grasp r1 + [16810] = {60, nil}, --Nature's Grasp r2 + [16811] = {60, nil}, --Nature's Grasp r3 + [16812] = {60, nil}, --Nature's Grasp r4 + [16813] = {60, nil}, --Nature's Grasp r5 + [17329] = {60, nil}, --Nature's Grasp r6 + [27009] = {60, nil}, --Nature's Grasp r7 + [53312] = {60, nil}, --Nature's Grasp r8 + [48505] = {90, nil}, --Starfall r1 + [53199] = {90, nil}, --Starfall r2 + [53200] = {90, nil}, --Starfall r3 + [53201] = {90, nil}, --Starfall r4 + [61391] = {20, nil}, --Typhoon r1 + [61390] = {20, nil}, --Typhoon r2 + [61388] = {20, nil}, --Typhoon r3 + [61387] = {20, nil}, --Typhoon r4 + [53227] = {20, nil}, --Typhoon r5 + --Feral + [5211] = {30, nil}, --Bash r1 + [6798] = {30, nil}, --Bash r2 + [8983] = {30, nil}, --Bash r3 + [50334] = {180, nil}, --Berserk + [1850] = {180, nil}, --Dash r1 + [9821] = {180, nil}, --Dash r2 + [33357] = {180, nil}, --Dash r3 + [5229] = {60, nil}, --Enrage + [16979] = {15, nil}, --Feral Charge - Bear + [49376] = {30, nil}, --Feral Charge - Cat + [22842] = {180, nil}, --Frenzied Regeneration + [22570] = {10, nil}, --Maim r1 + [49802] = {10, nil}, --Maim r2 + [61336] = {180, nil}, --Survival Instinct + [5217] = {30, nil}, --Tiger's Fury r1 + [6793] = {30, nil}, --Tiger's Fury r2 + [9845] = {30, nil}, --Tiger's Fury r3 + [9856] = {30, nil}, --Tiger's Fury r4 + [50212] = {30, nil}, --Tiger's Fury r5 + [50213] = {30, nil}, --Tiger's Fury r6 + --Restoration + [17116] = {180, nil}, --Nature's Swiftness + [18562] = {15, nil}, --Swiftmend + [740] = {192, nil}, --Tranquility r1 + [8918] = {192, nil}, --Tranquility r2 + [9862] = {192, nil}, --Tranquility r3 + [9863] = {192, nil}, --Tranquility r4 + [26983] = {192, nil}, --Tranquility r5 + [48446] = {192, nil}, --Tranquility r6 + [48447] = {192, nil} --Tranquility r7 +} \ No newline at end of file