20f8c5a - Add a GTFO implementation
authorAleksi Blinnikka <aleksi.blinnikka@gmail.com>
Tue, 24 Apr 2018 20:15:53 +0000
committerAleksi Blinnikka <aleksi.blinnikka@gmail.com>
Tue, 24 Apr 2018 20:15:53 +0000
OmaGtfo/Gtfo.lua [new file with mode: 0644]
OmaGtfo/GtfoSpells.lua [new file with mode: 0644]
OmaGtfo/OmaGtfo.toc [new file with mode: 0644]
OmaGtfo/sounds/alarmbeep.ogg [new file with mode: 0644]
OmaGtfo/sounds/alarmbuzz.ogg [new file with mode: 0644]
OmaGtfo/sounds/alarmbuzzer.ogg [new file with mode: 0644]
OmaGtfo/sounds/alarmdouble.ogg [new file with mode: 0644]

diff --git a/OmaGtfo/Gtfo.lua b/OmaGtfo/Gtfo.lua
new file mode 100644 (file)
index 0000000..539673a
--- /dev/null
@@ -0,0 +1,173 @@
+-- Gtfo.lua
+local _;
+local print, tonumber, pairs = print, tonumber, pairs;
+local format = string.format;
+local strsplit = strsplit;
+local UnitGUID = UnitGUID;
+local UnitExists, UnitIsUnit = UnitExists, UnitIsUnit;
+local UnitBuff, UnitDebuff = UnitBuff, UnitDebuff;
+local UnitGroupRolesAssigned = UnitGroupRolesAssigned;
+local PlaySoundFile = PlaySoundFile;
+local playerGuid, guids;
+local playerTank;
+local printAll = false;
+local frame = CreateFrame("Frame");
+frame:Hide();
+
+local sounds = {
+    "Interface\\Addons\\OmaGtfo\\sounds\\alarmbuzzer.ogg",
+    "Interface\\Addons\\OmaGtfo\\sounds\\alarmbeep.ogg",
+    "Interface\\Addons\\OmaGtfo\\sounds\\alarmdouble.ogg",
+    "Interface\\Addons\\OmaGtfo\\sounds\\alarmbuzz.ogg",
+};
+local taken = OmaGTFO.DmgTaken;
+local caused = OmaGTFO.DmgDone;
+local environs = {
+    ["Drowning"] = sounds[1],
+    ["Fatigue"] = sounds[1],
+    ["Lava"] = sounds[2],
+    ["Fire"] = sounds[2],
+    ["Slime"] = sounds[2],
+};
+
+local function mobId(guid)
+    local mob, _, _, _, _, id = strsplit("-", guid);
+    if mob and (mob == "Creature" or mob == "Vehicle" or mob == "Pet") then
+        return tonumber(id);
+    end
+    return nil;
+end
+
+-- negatingIgnoreTime-like functionality not implemented
+local events = {
+    ["SPELL_DAMAGE"] = function(event, source, spellid, spellname, _, arg1, arg2)
+        if (event == "SPELL_AURA_APPLIED" or event == "SPELL_AURA_APPLIED_DOSE" or
+            event == "SPELL_AURA_REFRESH") and arg1 ~= "DEBUFF" then
+            return;
+        elseif taken[spellid] then
+            -- TODO uncomment checks when they're in use
+            local spell = taken[spellid];
+            local sound = spell.sound;
+            if spell.eventType and spell.eventType ~= event then return end
+            --if (event == "SPELL_MISSED" or event == "SPELL_PERIODIC_MISSED") and not spell.always then return end
+            if spell.negatingDebuff and UnitDebuff("player", spell.negatingDebuff) then return end
+            --if spell.negatingBuff and UnitBuff("player", spell.negatingBuff) then return end
+            --if spell.affirmingDebuff and not UnitDebuff("player", spell.affirmingDebuff) then return end
+            --if spell.mobs and source and not spell.mobs[mobId(source)] then return end
+            --if spell.ignoreSelf and source == playerGuid then return end
+            if spell.tankMechanic and playerTank then
+                if spell.tankMechanic == true then return end
+                sound = spell.tankMechanic;
+            end
+            if spell.applicationOnly then
+                if event ~= "SPELL_AURA_APPLIED" and event ~= "SPELL_AURA_APPLIED_DOSE" and
+                    event ~= "SPELL_AURA_REFRESH" then
+                    return;
+                elseif spell.minStacks and (event ~= "SPELL_AURA_APPLIED_DOSE" or
+                    not arg2 or arg2 <= spell.minStacks) then
+                    return;
+                end
+            end
+            if spell.minDamage then
+                local damage = tonumber(arg1) or 0;
+                if damage < spell.minDamage then return end
+            end
+            if spell.multipleHitsTime then -- only alarm if multiple hits within a certain time
+                local now, prevHit = GetTime(), spell.prevHit;
+                spell.prevHit = now;
+                if prevHit then
+                    if now - prevHit > spell.multipleHitsTime then
+                        return;
+                    end
+                else
+                    return;
+                end
+            end
+
+            return PlaySoundFile(sounds[sound], "SFX");
+        --elseif printAll then -- TODO uncomment when wanting to print all non-tracked events
+        --    return print(event, spellid, spellname);
+        end
+    end,
+    ["ENVIRONMENTAL_DAMAGE"] = function(_, _, env)
+        if environs[env] then return PlaySoundFile(environs[env], "SFX") end
+    end,
+};
+events["SPELL_MISSED"] = events["SPELL_DAMAGE"];
+events["SPELL_PERIODIC_DAMAGE"] = events["SPELL_DAMAGE"];
+events["SPELL_PERIODIC_MISSED"] = events["SPELL_DAMAGE"];
+events["SPELL_ENERGIZE"] = events["SPELL_DAMAGE"];
+events["SPELL_INSTAKILL"] = events["SPELL_DAMAGE"];
+events["SPELL_AURA_APPLIED"] = events["SPELL_DAMAGE"];
+events["SPELL_AURA_APPLIED_DOSE"] = events["SPELL_DAMAGE"];
+events["SPELL_AURA_REFRESH"] = events["SPELL_DAMAGE"];
+
+local function clog(_, event, _, sourceGuid, _, _, _, destGuid, _, _, _, ...)
+    -- TODO vehicle support?
+    if destGuid == playerGuid then
+        if events[event] then return events[event](event, sourceGuid, ...) end
+    elseif sourceGuid == playerGuid and event == "SPELL_DAMAGE" then
+        local spellid = ...;
+        if guids[destGuid] and caused[spellid] then
+            return PlaySoundFile(sounds[caused[spellid]], "SFX");
+        end
+    end
+end
+
+local function updateGuids()
+    guids = {};
+    if IsInGroup() then
+        if IsInRaid() then
+            for i = 1,40 do
+                local unit = format("raid%i", i);
+                if not UnitExists(unit) then break end
+                if not UnitIsUnit(unit, "player") then
+                    guids[UnitGUID(unit)] = true;
+                end
+            end
+        else
+            for i = 1,4 do
+                local unit = format("party%i", i);
+                if not UnitExists(unit) then break end
+                guids[UnitGUID(unit)] = true;
+            end
+        end
+    end
+end
+
+local function updateRole()
+    playerTank = UnitGroupRolesAssigned("player") == "TANK";
+end
+
+local realEvents = {
+    ["COMBAT_LOG_EVENT_UNFILTERED"] = clog,
+    ["GROUP_ROSTER_UPDATE"] = updateGuids,
+    ["PLAYER_ROLES_ASSIGNED"] = updateRole,
+    ["MIRROR_TIMER_START"] = function(timer, _, _, scale)
+        if (timer == "EXHAUSTION" and scale < 0) then
+            return PlaySoundFile(sounds[1], "SFX");
+        end
+    end,
+};
+local function handleEvent(frame, event, ...)
+    realEvents[event](...);
+end
+
+frame:SetScript("OnEvent", function()
+    frame:UnregisterAllEvents();
+    playerGuid = UnitGUID("player");
+    updateGuids();
+    updateRole();
+    frame:SetScript("OnEvent", handleEvent);
+    frame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED");
+    frame:RegisterEvent("GROUP_ROSTER_UPDATE");
+    frame:RegisterEvent("PLAYER_ROLES_ASSIGNED");
+    frame:RegisterEvent("MIRROR_TIMER_START");
+end);
+frame:RegisterEvent("PLAYER_LOGIN");
+
+SLASH_OMAGTFO1 = "/omag";
+function SlashCmdList.OMAGTFO(msg, editBox)
+    printAll = not printAll;
+    print("printAll", printAll)
+end
diff --git a/OmaGtfo/GtfoSpells.lua b/OmaGtfo/GtfoSpells.lua
new file mode 100644 (file)
index 0000000..ffbea64
--- /dev/null
@@ -0,0 +1,288 @@
+-- GtfoSpells.lua
+OmaGTFO = {};
+OmaGTFO.DmgTaken = {
+    -- LEGION --
+    -- Vault of the Wardens
+    [199645] = { sound = 3 }, -- Face Kick (Crusher)
+    [192519] = { sound = 3, applicationOnly = true }, -- Lava (Ash'golm)
+    [214893] = { sound = 3 }, -- Pulse (Glazer)
+    [199828] = { sound = 3 }, -- Chaos Nova (Immolanth)
+    [199773] = { sound = 3 }, -- Burning Fel (Immolanth)
+    [201041] = { sound = 3 }, -- Madness (Inquisitor)
+    [193610] = { sound = 3 }, -- Fel Detonation (Glayvianna Soulrender)
+    [191684] = { sound = 3 }, -- Burning Pitch (Viletongue Belcher)
+    [194037] = { sound = 3 }, -- Mortar (Foul Mother)
+    [199918] = { sound = 3, applicationOnly = true }, -- Shadow Crash (Faceless Voidcaster)
+    [200202] = { sound = 3, applicationOnly = true }, -- Chilled to the Bone (Ash'golm)
+    [197334] = { sound = 3 }, -- Fel Glaive (Cordana Felsong)
+    [201037] = { sound = 1 }, -- Seeping Shadows (Kelthrazor)
+    [214625] = { sound = 1 }, -- Fel Chain (Tirathon Saltheril)
+    [191853] = { sound = 1 }, -- Furious Flames (Tirathon Saltheril)
+    [196502] = { sound = 2 }, -- Lingering Gaze (Glazer)
+    [216319] = { sound = 1 }, -- A Mother's Love (Grimoira)
+    [222631] = { sound = 1 }, -- Chaos Pyre (Lysanis Shadesoul)
+    [199229] = { sound = 1 }, -- Fel Fire Wall
+    [211834] = { sound = 1 }, -- Hellfire
+    [238691] = { sound = 1 }, -- Spear of Vengeance
+    -- The Violet Hold
+    [205101] = { sound = 3 }, -- Soul Eruption (Eredar Shadow Mender)
+    [204498] = { sound = 3 }, -- Soul Explosion (Portal Guardian)
+    [202037] = { sound = 3, applicationOnly = true }, -- Frozen (Shivermaw)
+    [201355] = { sound = 3 }, -- Wing Buffet (Shivermaw)
+    [201852] = { sound = 3 }, -- Relentless Storm (Shivermaw)
+    [201598] = { sound = 3 }, -- Congealing Vomit (Festerface)
+    [202364] = { sound = 1 }, -- Execution (Fel Lord Betrug)
+    [205014] = { sound = 1 }, -- Seeping Shadows (Lord Malgath)
+    [201380] = { sound = 1, applicationOnly = true, tankMechanic = true }, -- Frost Breath (Shivermaw)
+    [201957] = { sound = 1 }, -- Frostbite (Shivermaw)
+    [204762] = { sound = 1 }, -- Violent Fel Energy (Portal Keeper)
+    [202266] = { sound = 1 }, -- Icky Goo (Festerface)
+    -- Darkheart Thicket
+    [204402] = { sound = 3 }, -- Star Shower (Dreadsoul Ruiner)
+    [201123] = { sound = 3 }, -- Root Burst (Vilethorn Blossom)
+    [199063] = { sound = 3, applicationOnly = true }, -- Strangling Roots (Oakheart)
+    [201273] = { sound = 3 }, -- Blood Bomb (Bloodtainted Fury)
+    [201400] = { sound = 3 }, -- Dread Inferno (Dreadfire Imp)
+    [200111] = { sound = 3 }, -- Apocalyptic Fire (Shade of Xavius)
+    [198916] = { sound = 3 }, -- Vile Burst (Vile Mushroom)
+    [198408] = { sound = 1 }, -- Nightfall (Archdruid Glaidalis)
+    [218759] = { sound = 1 }, -- Corruption Pool (Festerhide Grizzly)
+    [199460] = { sound = 1 }, -- Falling Rocks (Dresaron)
+    [204976] = { sound = 1 }, -- Noxious Spit (Kudzilla)
+    -- Eye of Azshara
+    [195217] = { sound = 3 }, -- Aqua Spout (Hatecoil Arcanist)
+    [193597] = { sound = 3 }, -- Static Nova (Lady Hatecoil)
+    [196610] = { sound = 3, applicationOnly = true }, -- Monsoon (Lady Hatecoil)
+    [191847] = { sound = 3 }, -- Poison Spit (Serpentrix)
+    [196299] = { sound = 3 }, -- Roiling Storm (Stormwake Hydra)
+    [196294] = { sound = 3 }, -- Chaotic Tempest (Stormwake Hydra)
+    [196293] = { sound = 3 }, -- Chaotic Tempest (Stormwake Hydra)
+    [193088] = { sound = 3 }, -- Ground Slam (King Deepbeard)
+    [192794] = { sound = 3 }, -- Lightning Strike (Wrath of Azshara)
+    [192675] = { sound = 3 }, -- Mystic Tornado (Wrath of Azshara)
+    [192619] = { sound = 3 }, -- Massive Deluge (Wrath of Azshara)
+    [192801] = { sound = 3 }, -- Tidal Wave (Wrath of Azshara)
+    [192708] = { sound = 3 }, -- Arcane Bomb (Wrath of Azshara)
+    [196871] = { sound = 1 }, -- Storm (Hatecoil Stormweaver)
+    [192053] = { sound = 1 }, -- Quicksand (Warlord Parjesh)
+    [199948] = { sound = 1 }, -- Tempest (Channeler Varisz)
+    [195473] = { sound = 1, applicationOnly = true }, -- Abrasive Slime (Gritslime Snail)
+    [191858] = { sound = 1 }, -- Toxic Puddle (Sepentrix)
+    [193055] = { sound = 1, negatingDebuff = "Gaseous Bubbles" }, -- Call of the Seas
+    -- Neltharion's Lair
+    [202089] = { sound = 3 }, -- Scorch (Burning Geode)
+    [200338] = { sound = 3 }, -- Crystal Wall (Dargrul)
+    [198475] = { sound = 3 }, -- Strike of the Mountain (Ularogg Cragshaper)
+    [226406] = { sound = 3, tankMechanic = true }, -- Ember Swipe (Emberhusk Dominator)
+    [183407] = { sound = 1, multipleHitsTime = 1 }, -- Acid Splatter
+    [192800] = { sound = 1, minDamage = 1 }, -- Choking Dust (Rokmora)
+    [183566] = { sound = 1 }, -- Rancid Pool (Tarspitter Lurker)
+    [188494] = { sound = 1 }, -- Rancid Maw (Naraxas)
+    [188493] = { sound = 1 }, -- Rancid Maw (Naraxas)
+    [226388] = { sound = 1 }, -- Rancid Ooze
+    [210166] = { sound = 1 }, -- Toxic Wretch (Naraxas)
+    [217090] = { sound = 1 }, -- Magma Wave (Dargrul)
+    -- Halls of Valor
+    [198605] = { sound = 3 }, -- Thunderstrike (Valarjar Thundercaller) TODO
+    [198412] = { sound = 3 }, -- Feedback (Odyn)
+    [193260] = { sound = 3 }, -- Static Field (Hymdall)
+    [192206] = { sound = 3 }, -- Sanctify (Olmyr the Enlightened)
+    [198088] = { sound = 3, applicationOnly = true }, -- Glowing Fragment (Odyn)
+    [198903] = { sound = 1 }, -- Crackling Storm (Storm Drake)
+    [193234] = { sound = 1 }, -- Dancing Blade (Hymdall)
+    [199818] = { sound = 1 }, -- Crackle (Valarjar Thundercaller)
+    [200682] = { sound = 1, negatingDebuff = "Eye of the Storm" }, -- Eye of the Storm (Solsten)
+    [193702] = { sound = 1 }, -- Infernal Flames (God-King Skovald)
+    [193827] = { sound = 1 }, -- Ragnarok (God-King Skovald)
+    -- The Arcway
+    [197788] = { sound = 3 }, -- Bombardment (General Xakal)
+    [197579] = { sound = 3 }, -- Fel Eruption (General Xakal)
+    [194006] = { sound = 1 }, -- Ooze Puddle (Unstable Amalgamation)
+    [200040] = { sound = 1 }, -- Nether Venom (Nal'tira)
+    [199812] = { sound = 1 }, -- Blink Strikes (Nal'tira)
+    [210750] = { sound = 1 }, -- Collapsing Rift (Withered Manawraith)
+    [220500] = { sound = 1 }, -- Destabilized Orb (Corstillax)
+    [211209] = { sound = 1 }, -- Arcane Slicer (Arcane Anomaly)
+    [196824] = { sound = 1 }, -- Nether Link (Ivanyr)
+    [220597] = { sound = 1 }, -- Charged Bolt (Ivanyr)
+    [211745] = { sound = 1 }, -- Fel Strike (Wrathguard Felblade)
+    [220443] = { sound = 1 }, -- Wake of Shadows (General Xakal)
+    -- Maw of Souls
+    [195038] = { sound = 3 }, -- Defiant Strike - finish (Seacursed Soulkeeper)
+    [193513] = { sound = 3 }, -- Bane (Ymiron, the Fallen King)
+    [193364] = { sound = 3, applicationOnly = true }, -- Screams of the Dead (Ymiron, the Fallen King)
+    [194099] = { sound = 3, applicationOnly = true }, -- Bile Breath (The Grimewalker)
+    [194218] = { sound = 3 }, -- Cosmic Scythe (Harbaron)
+    [197117] = { sound = 3 }, -- Piercing Tentacle (Helya)
+    [195309] = { sound = 3 }, -- Swirling Water (Helya)
+    [197858] = { sound = 3 }, -- Turbulent Waters (Helya)
+    [202472] = { sound = 3 }, -- Tainted Essence (Helya)
+    [216107] = { sound = 1 }, -- Convulsive Shadows (Shroudseeker)
+    [194102] = { sound = 1 }, -- Poisonous Sludge (The Grimewalker)
+    [195035] = { sound = 1 }, -- Defiant Strike (Seacursed Soulkeeper)
+    [194235] = { sound = 1 }, -- Nether Rip (Harbaron)
+    [227234] = { sound = 1 }, -- Corrupted Bellow (Helya)
+    -- Court of Stars
+    [209027] = { sound = 3 }, -- Quelling Strike (Duskwatch Guard)
+    [209477] = { sound = 3 }, -- Wild Detonation (Mana Wyrm)
+    [209404] = { sound = 3 }, -- Seal Magic (Duskwatch Arcanist)
+    [206574] = { sound = 3 }, -- Resonant Slash (Patrol Guard Gerdo)
+    [219498] = { sound = 3 }, -- Streetsweeper (Patrol Guard Gerdo)
+    [209378] = { sound = 3, applicationOnly = true }, -- Whirling Blades (Imacu'tya)
+    [207979] = { sound = 3 }, -- Shockwave (Jazshariu)
+    [207887] = { sound = 3 }, -- Infernal Eruption (Talixae Flamewreath)
+    [211457] = { sound = 3 }, -- Infernal Eruption (Talixae Flamewreath)
+    [224333] = { sound = 3 }, -- Enveloping Winds (Advisor Melandrus)
+    -- TODO Arcane Lockdown ?
+    [209027] = { sound = 1 }, -- Disrupting Energy (Guardian Construct)
+    [211391] = { sound = 1 }, -- Felblaze Puddle (Legion Hound)
+    -- Black Rook Hold
+    [196517] = { sound = 3 }, -- Shirling Scythe (Amalgam of Souls)
+    [194956] = { sound = 3 }, -- Reap Soul (Amalgam of Souls)
+    [194960] = { sound = 3 }, -- Soul Echoes (Amalgam of Souls)
+    [200256] = { sound = 3 }, -- Phased Explosion (Arcane Minion)
+    [200261] = { sound = 3 }, -- Bonebreaking Strike (Soul-torn Champion)
+    [222397] = { sound = 3 }, -- Boulder Crush
+    [222417] = { sound = 3, applicationOnly = true }, -- Boulder Crush
+    [214002] = { sound = 3 }, -- Raven's Dive (Risen Lancer)
+    [199567] = { sound = 3 }, -- Dark Obliteration (Latosius)
+    [198820] = { sound = 3 }, -- Dark Blast (Latosius)
+    [199097] = { sound = 3, applicationOnly = true }, -- Cloud of Hypnosis (Latosius)
+    [211688] = { sound = 3 }, -- Overwhelming Detonation (Braxas the Fleshcarver)
+    [224188] = { sound = 3, applicationOnly = true, minStacks = 1 }, -- Hateful Charge (Smashspite the Hateful)
+    [221838] = { sound = 3, applicationOnly = true }, -- Disorienting Gas (Kelorn Nightblade)
+    [198781] = { sound = 3 }, -- Whirling Blade (Kur'talos Ravencrest)
+    [200914] = { sound = 3, tankMechanic = true }, -- Indigestion (Wyrmtongue Scavenger)
+    [200344] = { sound = 1 }, -- Arrow Barrage (Risen Archer)
+    [221131] = { sound = 1, negatingDebuff = "Arcane Overcharge" }, -- Arcane Overcharge (Archmage Galeorn)
+    [220922] = { sound = 1 }, -- Overwhelming Release (Archmage Galeorn)
+    [197521] = { sound = 1 }, -- Blazing Trail (Illysanna Ravencrest)
+    [197821] = { sound = 1 }, -- Felblazed Ground (Illysanna Ravencrest)
+    [198501] = { sound = 1 }, -- Fel Vomitus (Smashspite the Hateful)
+    [221680] = { sound = 1 }, -- Fel Residue (Braxas the Fleshcarver)
+    [221866] = { sound = 1, tankMechanic = true }, -- Blade Barrage (Kelorn Nightblade)
+    [198245] = { sound = 1 }, -- Brutal Haymaker (Smashspite the Hateful)
+    -- Return to Karazhan
+    [227416] = { sound = 3 }, -- Wondrous Radiance (Galindre)
+    [227776] = { sound = 3 }, -- Magic Magnificent (Galindre)
+    [227917] = { sound = 3 }, -- Poetry Slam (Ghostly Understudy)
+    [227925] = { sound = 3 }, -- Final Curtain (Ghostly Understudy)
+    [227977] = { sound = 3, applicationOnly = true }, -- Flashlight (Skeletal Usher)
+    [227339] = { sound = 3 }, -- Mezair (Midnight)
+    [227645] = { sound = 3 }, -- Spectral Charge (Midnight)
+    [227532] = { sound = 3 }, -- Unstable Energy (Damaged Golem)
+    [230044] = { sound = 3, tankMechanic = true }, -- Cleave (Wrathguard Flamebringer)
+    [229988] = { sound = 3 }, -- Burning Tile
+    [229597] = { sound = 3 }, -- Fel Mortar (Fel Bat)
+    [229696] = { sound = 3 }, -- Stampede (Rat)
+    [227620] = { sound = 3 }, -- Arcane Bomb (Mana Devourer)
+    [229384] = { sound = 3 }, -- Queen Move
+    [229563] = { sound = 3 }, -- Knight Move
+    [229427] = { sound = 3 }, -- Royal Slash (King)
+    [229545] = { sound = 3 }, -- Bishop Move
+    [229559] = { sound = 3 }, -- Bishop Move
+    [229285] = { sound = 3 }, -- Bombardment (Viz'aduum the Watcher)
+    [229161] = { sound = 3 }, -- Explosive Shadows (Viz'aduum the Watcher)
+    [229151] = { sound = 3 }, -- Disintegrate (Viz'aduum the Watcher)
+    [227465] = { sound = 1 }, -- Power Discharge (Curator)
+    [228808] = { sound = 1, negatingDebuff = "Ignite Soul" }, -- Charred Earth (Nightbane)
+    [228001] = { sound = 1 }, -- Pennies From Heaven (Ghostly Philathropist)
+    [227848] = { sound = 1, minStacks = 1, applicationOnly = true }, -- Sacred Ground (Maiden of Virtue)
+    [227473] = { sound = 1 }, -- Whirling Edge (Lord Robin Daris)
+    [229682] = { sound = 1 }, -- Gleeful Immolation (Gleeful Immolator)
+    [229677] = { sound = 1 }, -- Fel Bomb (Infused Pyromancer)
+    [227806] = { sound = 1, minStacks = 2, applicationOnly = true }, -- Ceaseless Winter (Shade of Medivh)
+    [229905] = { sound = 1 }, -- Soul Harvest (Viz'aduum the Watcher)
+    [230431] = { sound = 1 }, -- Seeping Fel Power (Viz'aduum the Watcher)
+    [229250] = { sound = 1 }, -- Fel Flames (Viz'aduum the Watcher)
+    [229248] = { sound = 1, minDamage = 1 }, -- Fel Flames (Viz'aduum the Watcher)
+    [228993] = { sound = 1 }, -- Caustic Pool (Coldmist Stalker)
+    -- Cathedral of Eternal Night
+    [239558] = { sound = 3, tankMechanic = true }, -- Shadow Swipe (Dreadwing)
+    [237599] = { sound = 3, tankMechanic = true }, -- Devastating Swipe (Helblaze Felbringer)
+    [239201] = { sound = 3 }, -- Fel Glare (Gazerax)
+    [239217] = { sound = 3 }, -- Blinding Glare (Gazerax)
+    [237276] = { sound = 3, minDamage = 1500000 }, -- Pulverizing Cudgel (Thrashbite the Scornful)
+    [238469] = { sound = 3 }, -- Scornful Charge (Thrashbite the Scornful)
+    [236543] = { sound = 3 }, -- Felsoul Cleave (Domatrax)
+    [238583] = { sound = 3, applicationOnly = true }, -- Devour Magic (Felblight Stalker)
+    [238656] = { sound = 1 }, -- Shadow Wave (Dul'zak)
+    [237325] = { sound = 1, applicationOnly = true }, -- Toxic Pollen (Felborne Botanist)
+    [240951] = { sound = 1, tankMechanic = true }, -- Destructive Rampage (Thrashbite the Scornful)
+    [233177] = { sound = 1 }, -- Carrion Swarm (Mephistroth)
+    [237583] = { sound = 1 }, -- Burning Celerity
+    [240295] = { sound = 1 }, -- Searing Rend
+    -- Seat of the Triumvirate
+    [248130] = { sound = 3 }, -- Darkened Remnant (Rift Warden)
+    [246026] = { sound = 3, applicationOnly = true }, -- Void Trap (Saprish)
+    [250188] = { sound = 3 }, -- Void Fragment
+    [248067] = { sound = 3, tankMechanic = true }, -- Grand Swing (Umbral War-Adept)
+    [246900] = { sound = 3, applicationOnly = true }, -- Dark Outbreak (Void Discharge)
+    [244588] = { sound = 1 }, -- Void Sludge (Zuraal the Ascended)
+    [244906] = { sound = 1 }, -- Collapsing Void (Viceroy Nezhar)
+    [250820] = { sound = 1, applicationOnly = true }, -- Growing Pressure
+    -- Antorus
+    [245861] = { sound = 1 }, -- Searing Rend
+    [244590] = { sound = 1 }, -- Molten Hot Fel
+    [249297] = { sound = 4, eventType = "SPELL_AURA_REFRESH" }, -- Flames of Reorigination
+    [244532] = { sound = 3 }, -- Fel Bombardment (Garothi Worldbreaker)
+    [254760] = { sound = 3, tankMechanic = true }, -- Corrupting Maw (Felhounds of Sargeras)
+    [244163] = { sound = 3 }, -- Molten Flare (Felhounds of Sargeras)
+    [244071] = { sound = 3, applicationOnly = true }, -- Weight of Darkness (Felhounds of Sargeras)
+    [244131] = { sound = 1 }, -- Consuming Sphere (Felhounds of Sargeras)
+    [254403] = { sound = 1 }, -- Consuming Sphere (Felhounds of Sargeras)
+    [245121] = { sound = 3 }, -- Entropic Blast (Antoran High Command)
+    [244892] = { sound = 3, tankMechanic = true }, -- Exploit Weakness (Antoran High Command)
+    [253039] = { sound = 1, tankMechanic = 2 }, -- Bladestorm (Antoran High Command)
+    [243984] = { sound = 3, multipleHitsTime = 1 }, -- Collapsing World (Portal Keeper Hasabel)
+    [244001] = { sound = 3 }, -- Felstorm Barrage (Portal Keeper Hasabel)
+    [244601] = { sound = 3 }, -- Supernova (Portal Keeper Hasabel)
+    [250701] = { sound = 3, tankMechanic = true }, -- Fel Swipe (Eonar the Life-Binder)
+    [248795] = { sound = 1 }, -- Fel Wake (Eonar the Life-Binder)
+    [247388] = { sound = 3 }, -- Pulse Grenade (Imonar the Soulhunter)
+    [247681] = { sound = 3 }, -- Pulse Grenade (Imonar the Soulhunter)
+    [247641] = { sound = 3, applicationOnly = true }, -- Stasis Trap (Imonar the Soulhunter)
+    [247962] = { sound = 3 }, -- Blastwire (Imonar the Soulhunter)
+    [248321] = { sound = 3, applicationOnly = true }, -- Conflagration (Imonar the Soulhunter)
+    [247932] = { sound = 3, applicationOnly = true }, -- Shrapnel Blast (Imonar the Soulhunter)
+    [254919] = { sound = 3, tankMechanic = true }, -- Forging Strike (Kin'garoth)
+    [246634] = { sound = 3 }, -- Apocalypse Blast (Kin'garoth)
+    [258021] = { sound = 1 }, -- Purging Protocol (Kin'garoth)
+    [246840] = { sound = 1 }, -- Ruiner (Kin'garoth)
+    [257644] = { sound = 3, tankMechanic = true }, -- Shadow Strike (Varimathras)
+    [244006] = { sound = 3 }, -- Dark Eruption (Varimathras)
+    [243963] = { sound = 1 }, -- Alone in the Darkness (Varimathras)
+    [246374] = { sound = 3 }, -- Shadow Blades (The Coven of Shivarra)
+    [253020] = { sound = 1 }, -- Storm of Darkness (The Coven of Shivarra)
+    [245674] = { sound = 1 }, -- Flames of Khaz'goroth (The Coven of Shivarra)
+    [245921] = { sound = 1 }, -- Spectral Army of Norgannon (The Coven of Shivarra)
+    [245634] = { sound = 1 }, -- Whirling Saber (The Coven of Shivarra)
+    [254022] = { sound = 3 }, -- Corrupt Aegis (Aggramar)
+    [246014] = { sound = 3, applicationOnly = true }, -- Searing Tempest (Aggramar)
+    [244291] = { sound = 3, tankMechanic = true }, -- Foe Breaker (Aggramar)
+    [244736] = { sound = 3, applicationOnly = true }, -- Wake of Flame (Aggramar)
+    [245391] = { sound = 3 }, -- Flare (Aggramar)
+    [244686] = { sound = 3 }, -- Meteor Swarm (Aggramar)
+    [248499] = { sound = 3, tankMechanic = true }, -- Sweeping Scythe (Argus the Unmaker)
+    [251815] = { sound = 3 }, -- Edge of Obliteration (Argus the Unmaker)
+    [257299] = { sound = 3, applicationOnly = true }, -- Ember of Rage (Argus the Unmaker)
+    [248167] = { sound = 1 }, -- Death Fog (Argus the Unmaker)
+    [255646] = { sound = 1 }, -- Golganneth's Wrath (Argus the Unmaker)
+
+
+    -- BATTLE FOR AZEROTH --
+};
+
+OmaGTFO.DmgDone = {
+    -- LEGION --
+    -- Emerald Nightmare
+    [203097] = 1, -- Rot (Nythendra)
+    [203788] = 1, -- Volatile Infection (Emeriss)
+    -- Nighthold
+    [208501] = 1, -- Sterilize (Trilliax)
+    -- Antorus
+    [249297] = 1, -- Flames of Reorigination
+
+
+    -- BATTLE FOR AZEROTH --
+};
diff --git a/OmaGtfo/OmaGtfo.toc b/OmaGtfo/OmaGtfo.toc
new file mode 100644 (file)
index 0000000..86ddffc
--- /dev/null
@@ -0,0 +1,8 @@
+## Interface: 70300
+## Title: Oma GTFO
+## Version: 1.0
+## Author: schyrio
+## Notes: My GTFO
+
+GtfoSpells.lua
+Gtfo.lua
diff --git a/OmaGtfo/sounds/alarmbeep.ogg b/OmaGtfo/sounds/alarmbeep.ogg
new file mode 100644 (file)
index 0000000..6186d6b
Binary files /dev/null and b/OmaGtfo/sounds/alarmbeep.ogg differ
diff --git a/OmaGtfo/sounds/alarmbuzz.ogg b/OmaGtfo/sounds/alarmbuzz.ogg
new file mode 100644 (file)
index 0000000..ae1d5a8
Binary files /dev/null and b/OmaGtfo/sounds/alarmbuzz.ogg differ
diff --git a/OmaGtfo/sounds/alarmbuzzer.ogg b/OmaGtfo/sounds/alarmbuzzer.ogg
new file mode 100644 (file)
index 0000000..b26884f
Binary files /dev/null and b/OmaGtfo/sounds/alarmbuzzer.ogg differ
diff --git a/OmaGtfo/sounds/alarmdouble.ogg b/OmaGtfo/sounds/alarmdouble.ogg
new file mode 100644 (file)
index 0000000..ec31a55
Binary files /dev/null and b/OmaGtfo/sounds/alarmdouble.ogg differ