From d75a9b65f241c552b8ac3d8cd852c83468b8e2cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Majdand=C5=BEi=C4=87?= Date: Wed, 5 Jun 2024 17:14:32 +0200 Subject: [PATCH] Remove 10gb lua files --- FreshShit/RaiderlosSA/init.lua | 1066 ++++++++++++++++---------------- 1 file changed, 533 insertions(+), 533 deletions(-) diff --git a/FreshShit/RaiderlosSA/init.lua b/FreshShit/RaiderlosSA/init.lua index 878d38c..d19743f 100644 --- a/FreshShit/RaiderlosSA/init.lua +++ b/FreshShit/RaiderlosSA/init.lua @@ -1,533 +1,533 @@ -aura_env.GUIDUnitMap = {} -aura_env.PlayerName = UnitName("player") --- Indices are class ids ----@alias ClassColor {className: string, color: {rgbInt: table, rgbHex: table}, rgbString: string} ----@type table -aura_env.ClassColors = { - { - className = "Warrior", - color = { - rgbInt = { 198, 155, 109 }, - rgbHex = { 0.78, 0.61, 0.43 }, - }, - rgbString = "C69B6D", - }, - { - className = "Paladin", - color = { - rgbInt = { 244, 140, 186 }, - rgbHex = { 0.96, 0.55, 0.73 }, - }, - rgbString = "F48CBA", - }, - { - className = "Hunter", - color = { - rgbInt = { 170, 211, 114 }, - rgbHex = { 0.67, 0.83, 0.45 }, - }, - rgbString = "AAD372", - }, - { - className = "Rogue", - color = { - rgbInt = { 255, 244, 104 }, - rgbHex = { 1.00, 0.96, 0.41 }, - }, - rgbString = "FFF468", - }, - { - className = "Priest", - color = { - rgbInt = { 255, 255, 255 }, - rgbHex = { 1.00, 1.00, 1.00 }, - }, - rgbString = "FFFFFF", - }, - { - className = "Death Knight", - color = { - rgbInt = { 196, 30, 58 }, - rgbHex = { 0.77, 0.12, 0.23 }, - }, - rgbString = "C41E3A", - }, - { - className = "Shaman", - color = { - rgbInt = { 0, 112, 221 }, - rgbHex = { 0.00, 0.44, 0.87 }, - }, - rgbString = "0070DD", - }, - { - className = "Mage", - color = { - rgbInt = { 63, 199, 235 }, - rgbHex = { 0.25, 0.78, 0.92 }, - }, - rgbString = "3FC7EB", - }, - { - className = "Warlock", - color = { - rgbInt = { 135, 136, 238 }, - rgbHex = { 0.53, 0.53, 0.93 }, - }, - rgbString = "8788EE", - }, - { - className = "Monk", - color = { - rgbInt = { 0, 255, 152 }, - rgbHex = { 0.00, 1.00, 0.60 }, - }, - rgbString = "00FF98", - }, - { - className = "Druid", - color = { - rgbInt = { 255, 124, 10 }, - rgbHex = { 1.00, 0.49, 0.04 }, - }, - rgbString = "FF7C0A", - }, - { - className = "Demon Hunter", - color = { - rgbInt = { 163, 48, 201 }, - rgbHex = { 0.64, 0.19, 0.79 }, - }, - rgbString = "A330C9", - }, -} - -local SoundFileRoot = "Interface\\Sounds\\spellAlert\\" - ----@param guid string ----@return string, nil|string -local function GetUnitFromGuid(guid) - local unit = aura_env.GUIDUnitMap[guid] - if unit == nil then return "none", "Unit not found" end - return unit, nil -end - ----@param guid string ----@return {name: string, target: string, targetClassId: number, prettyTarget: string}, nil|string -local function GetTargetInfoForGuid(guid) - local retval = { - name = "", - target = "", - targetClassId = 1, - prettyTarget = "", - } - - local unit, err = GetUnitFromGuid(guid) - if err then return retval, err end - - local targetUnit = string.format("%starget", unit) - retval.target = UnitName(targetUnit) - retval.prettyTarget = retval.target - - local targetClassId = select(3, UnitClass(targetUnit)) - retval.targetClassId = targetClassId - ---@type ClassColor - local classColorInfo = aura_env.ClassColors[targetClassId] - if classColorInfo then - retval.prettyTarget = string.format("|cFF%s%s|r", classColorInfo.rgbString, retval.target) - end - - return retval, nil -end - ----@param guid string ----@return {name: string, startms: number, endms: number, spellid: number}, nil|string -local function GetCastInfoForGuid(guid) - local retval = { - name = "", - startms = 0, - endms = 0, - spellid = 0 - } - - local unit, err = GetUnitFromGuid(guid) - if err then return retval, err end - local name, _, _, _, startTimeMS, endTimeMS, _, _, _, spellId = UnitCastingInfo(unit) - if name == nil then return retval, "Unit not casting" end - - retval.name = name - retval.startms = startTimeMS - retval.endms = endTimeMS - retval.spellid = spellId - - return retval, nil -end - ----@class Alert ----@field id number ----@field soundFile string ----@field events table ----@field instruction string ----@field afflictedInstruction string ----@field iterator number -aura_env.Alert = { - ---@param id number - ---@param name string - ---@param events table - ---@param instruction string - ---@param afflictedInstruction string - ---@return Alert - new = function(id, name, events, instruction, afflictedInstruction) - local self = setmetatable({}, { - __index = aura_env.Alert - }) - self.id = id - name = string.gsub(name, " ", "_") - name = string.lower(name) - self.soundFile = string.format("%s%s.ogg", SoundFileRoot, name) - self.events = {} - for _, event in ipairs(events) do - self.events[event] = true - end - self.instruction = instruction - self.afflictedInstruction = afflictedInstruction - self.iterator = 0 - return self - end, - - ---@param self Alert - ---@param allstates allstates - ---@param ... any - ---@return string|nil - Trigger = function(self, allstates, ...) - -- We trust that the event is valid - local spellname, err = CLEUParser.GetSpellName(...) - if err then return err end - - -- The idea is: - -- SEE C_NamePlate.GetNamePlateForUnit !!!! - -- If the spell is being cast (SPELL_CAST_START) target will be nil (because server is cooked) - -- So what we want to do is get the source GUID and try to find it in nameplates - -- If it exists in nameplates we have a unitid and we can try to get casting info - -- From the casting info we can get the cast start and end as well as get the target from unit+target - -- However if the spell is already cast (SPELL_CAST_SUCCESS) the call to castInfo will return no info for cast - -- But it will return info about the target - -- Now the target itself is the actual target of the unit NOT the target of the spell - -- We just have to assume that the target of the spell is the same as the target of the unit - -- We then clamp the cast time to at least 1 second (meaning instant spells appear for 1s) - -- And get the target "manually" from the instant cast using the same principle as with the cast start - local src, err = CLEUParser.GetSourceGUID(...) - if err then return err end - local castInfo, err = GetCastInfoForGuid(src) - local targetInfo, err = GetTargetInfoForGuid(src) - DevTools_Dump(targetInfo) - - -- If the event DOES have destName then use that ACTUAL target - -- Unless it's the same target we already got - -- The reason we don't overwrite the same target we already got is because we can not (easily) infer - -- The target class from the destName because we don't know where to look for the unit - local target, err = CLEUParser.GetDestName(...) - if err == nil and target ~= targetInfo.target then - targetInfo.target = target - targetInfo.prettyTarget = target - targetInfo.targetClassId = 1 - end - - local displayText = self.instruction - if err == nil and targetInfo.target == PlayerName then - displayText = self.afflictedInstruction - end - - local castEnd = math.max(GetTime() + 5, castInfo.endms / 1000) - local castDuration = math.max(5, (castInfo.endms - castInfo.startms) / 1000) - - ---@type state - local state = { - show = true, - changed = true, - progressType = "timed", - expireTime = castEnd, - duration = castDuration, - autoHide = true, - name = spellname, - instruction = displayText, - target = targetInfo.target, - prettyTarget = targetInfo.prettyTarget, - targetClassId = targetInfo.targetClassId, - } - - allstates[string.format("%d-%d", self.id, self.iterator)] = state - self.iterator = self.iterator + 1 - return nil - end -} - -local alerts = { - -- Debug - -- aura_env.Alert.new(774, "Rejuvenation", { "SPELL_AURA_APPLIED" }, "REJUV", "REEEEEEEEJUUUUUUUUUUUVVVVVVVVV"), - -- Garothi - aura_env.Alert.new(244410, "Decimation", { "SPELL_CAST_SUCCESS" }, "", "Move"), - aura_env.Alert.new(246220, "Fel Bombardment", { "SPELL_CAST_SUCCESS" }, "", "Move"), - aura_env.Alert.new(244969, "Eradication", { "SPELL_CAST_START" }, "Run away", ""), - aura_env.Alert.new(244106, "Carnage", { "SPELL_CAST_START" }, "Tank the boss", ""), - aura_env.Alert.new(246664, "Annihilation", { "SPELL_CAST_SUCCESS" }, "Soak pools", ""), - -- Felhounds - aura_env.Alert.new(244086, "Molten Touch", { "SPELL_CAST_SUCCESS" }, "", "Run away"), - aura_env.Alert.new(244768, "Desolate Gaze", { "SPELL_AURA_APPLIED" }, "", "Move away"), - aura_env.Alert.new(244057, "Enflame Corruption", { "SPELL_CAST_START", "SPELL_AURA_APPLIED" }, "Spread", "Spread!!"), - aura_env.Alert.new(244131, "Consuming Sphere", { "SPELL_AURA_APPLIED" }, "Move", ""), - aura_env.Alert.new(244056, "Siphon Corruption", { "SPELL_CAST_START", "SPELL_AURA_APPLIED" }, "Stack", "Stack!!"), - -- Antoran High Command - -- aura_env.Alert.new(245161, "Entropic Mine"), -- Need more info - -- aura_env.Alert.new(245546, "Summon Reinforcements"), -- Need more info - -- Portal Keeper Hasabel - aura_env.Alert.new(244016, "Reality Tear", { "SPELL_CAST_SUCCESS" }, "", ""), - aura_env.Alert.new(243983, "Collapsing World", { "SPELL_CAST_SUCCESS" }, "Dodge", ""), - aura_env.Alert.new(244000, "Felstorm Barrage", { "SPELL_CAST_START" }, "Dodge", ""), - -- Imonar - -- aura_env.Alert.new(247552, "Sleep Canister"), -- Need more info - aura_env.Alert.new(247367, "Shock Lance", { "SPELL_CAST_SUCCESS" }, "", ""), - aura_env.Alert.new(248068, "Empowered Pulse Grenade", { "SPELL_CAST_SUCCESS" }, "", ""), -- Need more info - aura_env.Alert.new(247376, "Pulse Grenade", { "SPELL_CAST_SUCCESS" }, "", ""), -- Need more info - aura_env.Alert.new(247716, "Charged Blasts", { "SPELL_AURA_APPLIED" }, "", "Move!!"), - aura_env.Alert.new(247687, "Sever", { "SPELL_CAST_SUCCESS" }, "", ""), - aura_env.Alert.new(248070, "Empowered Shrapnel Blast", { "SPELL_CAST_START" }, "Mines", ""), - aura_env.Alert.new(250255, "Empowered Shock Lance", { "SPELL_CAST_START" }, "", ""), - -- Kin'garoth - aura_env.Alert.new(254919, "Forging Strike", { "SPELL_CAST_START" }, "", ""), - aura_env.Alert.new(254926, "Reverberating Strike", { "SPELL_CAST_START" }, "Dodge", "Dodge"), - -- aura_env.Alert.new(246840, "Ruiner"), -- Need more info - -- aura_env.Alert.new(246779, "Diabolic Bomb"), -- Need more info - -- aura_env.Alert.new(246706, "Demolish"), -- Need more info - -- Varimathras - aura_env.Alert.new(243960, "Shadow Strike", { "SPELL_CAST_SUCCESS" }, "Taunt", "Survive"), - aura_env.Alert.new(243961, "Misery", { "SPELL_AURA_APPLIED" }, "", "Survive"), - aura_env.Alert.new(244042, "Marked Prey", { "SPELL_AURA_APPLIED" }, "Do not soak", "Let someone soak"), - -- aura_env.Alert.new(244093, "Necrotic Embrace"), -- Need more info - -- aura_env.Alert.new(248732, "Echoes of Doom"), -- Need more info - aura_env.Alert.new(243999, "Dark Fissure", { "SPELL_CAST_START" }, "Move", ""), - -- Coven - -- aura_env.Alert.new(253189, "Shivan Pact"), -- Need more info - aura_env.Alert.new(244899, "Fiery Strike", { "SPELL_CAST_START" }, "", "Prepare"), - aura_env.Alert.new(245627, "Whirling Saber", { "SPELL_CAST_START" }, "Dodge", ""), - aura_env.Alert.new(245281, "Shadow Blades", { "SPELL_CAST_START" }, "Dodge", ""), -- Need more info - aura_env.Alert.new(245586, "Chilled Blood", { "SPELL_AURA_APPLIED" }, "Heal", "Heal"), - -- Aggramar - -- aura_env.Alert.new(254452, "Ravenous Blaze"), -- Need more info - aura_env.Alert.new(244693, "Wake of Flame", { "SPELL_CAST_START" }, "Dodge", "Dodge!"), - -- aura_env.Alert.new(244291, "Foe Braker"), -- Need more info - -- aura_env.Alert.new(244033, "Flame Rend"), -- Need more info - -- aura_env.Alert.new(247079, "Empowered Flame Rend"), -- Need more info - -- aura_env.Alert.new(245983, "Flare"), -- Need more info - -- aura_env.Alert.new(246037, "Empowered Flare"), -- Need more info - -- Argus - -- aura_env.Alert.new(256457, "Cone of Death"), -- Need more info - aura_env.Alert.new(248396, "Soulblight", { "SPELL_AURA_APPLIED" }, "", "Run away from group"), - aura_env.Alert.new(257296, "Tortured Rage", { "SPELL_CAST_START" }, "Brace", ""), - aura_env.Alert.new(251570, "Soulbomb", { "SPELL_AURA_APPLIED" }, "Brace", "Run far away from group"), - - -- Mythic+ - -- Black Rook Hold - -- aura_env.Alert.new(225573, "Dark Mending"), - -- aura_env.Alert.new(200105, "Sacrifice Soul"), - -- aura_env.Alert.new(225732, "Strike Down"), - -- aura_env.Alert.new(194996, "Soul Echoes"), - -- aura_env.Alert.new(195254, "Swirling Scythe"), - -- aura_env.Alert.new(194956, "Reap Soul"), - aura_env.Alert.new(201858, "Shoot", { "SPELL_CAST_START" }, "", "LOS!"), - -- aura_env.Alert.new(200248, "Arcane Blitz"), - -- aura_env.Alert.new(200345, "Arrow Barrage"), - -- aura_env.Alert.new(200291, "Knife Dance"), - -- aura_env.Alert.new(200261, "Bonebreaking Strike"), - -- aura_env.Alert.new(197418, "Vengeful Shear"), - -- aura_env.Alert.new(201139, "Brutal Assault"), - -- aura_env.Alert.new(198245, "Brutal Haymaker"), - -- aura_env.Alert.new(198079, "Hateful Gaze"), - -- Cathedral of Eternal Night - -- aura_env.Alert.new(241937, "Shadow Wall"), - -- aura_env.Alert.new(238543, "Demonic Mending"), - -- aura_env.Alert.new(242792, "Vile Roots"), - -- aura_env.Alert.new(236627, "Floral Fulmination"), - -- aura_env.Alert.new(239217, "Blinding Glare"), - -- aura_env.Alert.new(237726, "Scornful Gaze"), - -- aura_env.Alert.new(190620, "Felblaze Orb"), - -- aura_env.Alert.new(239268, "Venom Storm"), - -- aura_env.Alert.new(234107, "Chaotic Energy"), - -- aura_env.Alert.new(236543, "Felsoul Cleave"), - -- aura_env.Alert.new(238315, "Shadow Sweep"), - -- aura_env.Alert.new(243168, "Demonic Upheaval"), - -- Court of Stars - -- aura_env.Alert.new(210261, "Sound Alarm"), - -- aura_env.Alert.new(215204, "Hinder"), - -- aura_env.Alert.new(209027, "Quelling Strike"), - -- aura_env.Alert.new(209516, "Mana Fang"), - -- aura_env.Alert.new(209485, "Drain Magic"), - -- aura_env.Alert.new(209404, "Seal Magic"), - -- aura_env.Alert.new(209495, "Charged Smash"), - -- aura_env.Alert.new(225100, "Charging Station"), - -- aura_env.Alert.new(219488, "Streetsweeper"), - -- aura_env.Alert.new(212784, "Eye Storm"), - -- aura_env.Alert.new(211464, "Fel Detonation"), - -- aura_env.Alert.new(207980, "Disintegration Beam"), - -- aura_env.Alert.new(207979, "Shockwave"), - -- aura_env.Alert.new(209628, "Piercing Gale"), - -- aura_env.Alert.new(209676, "Slicing Maelstrom"), - -- Darkheart Thicket - -- aura_env.Alert.new(200631, "Unnerving Screech"), - -- aura_env.Alert.new(200580, "Maddening Roar"), - -- aura_env.Alert.new(191326, "Breath of Corruption"), - -- aura_env.Alert.new(201400, "Dread Inferno"), - -- aura_env.Alert.new(200238, "Feed on the Weak"), - -- Eye of Azshara - -- aura_env.Alert.new(195172, "Mighty Slam"), - -- aura_env.Alert.new(195129, "Thundering Stomp"), - -- aura_env.Alert.new(195046, "Rejuvenating Waters"), - -- aura_env.Alert.new(162135, "Bellowing Roar"), - -- aura_env.Alert.new(197105, "Polymorh Fish"), - -- aura_env.Alert.new(193597, "Static Nova"), - -- aura_env.Alert.new(193611, "Focused Lightning"), - -- aura_env.Alert.new(196129, "Spray Sand"), - -- aura_env.Alert.new(196144, "Sandstorm"), - -- aura_env.Alert.new(196296, "Roiling Storm"), - -- aura_env.Alert.new(196290, "Chaotic Tempest"), - -- aura_env.Alert.new(191848, "Rampage"), - -- Halls of Valor - -- aura_env.Alert.new(198605, "Thunderstrike"), - -- aura_env.Alert.new(198888, "Lightning Breath"), - -- aura_env.Alert.new(191284, "Horn of Valor"), - -- aura_env.Alert.new(198934, "Rune of Healing"), - -- aura_env.Alert.new(215433, "Holy Radiance"), - -- aura_env.Alert.new(199210, "Penetrating Shot"), - -- aura_env.Alert.new(191976, "Arcing Bolt"), - -- aura_env.Alert.new(192305, "Eye of the Storm"), - -- aura_env.Alert.new(192307, "Sanctify"), - -- aura_env.Alert.new(192048, "Expel Light"), - -- aura_env.Alert.new(192018, "Shield of Light"), - -- aura_env.Alert.new(196512, "Claw Frenzy"), - -- aura_env.Alert.new(199652, "Sever"), - -- aura_env.Alert.new(199726, "Unruly Yell"), - -- aura_env.Alert.new(199674, "Wicked Dagger"), - -- aura_env.Alert.new(193826, "Ragnarok"), - -- aura_env.Alert.new(198263, "Radiant Tempest"), - -- aura_env.Alert.new(198072, "Spear of Light"), - -- aura_env.Alert.new(197961, "Runic Band"), - -- aura_env.Alert.new(198750, "Surge"), - -- Maw of Souls - -- aura_env.Alert.new(193364, "Screams of the Dead"), - -- aura_env.Alert.new(194442, "Six Pound Barrel"), - -- aura_env.Alert.new(194615, "Sea Legs"), - -- aura_env.Alert.new(192019, "Lantern of Darkness"), - -- aura_env.Alert.new(194099, "Bile Breath"), - -- aura_env.Alert.new(198405, "Bone Chilling Scream"), - -- aura_env.Alert.new(194325, "Fragment"), - -- aura_env.Alert.new(194216, "Cosmic Scythe"), - -- aura_env.Alert.new(195293, "Debilitating Shout"), - -- aura_env.Alert.new(185539, "Rapid Rupture"), - -- aura_env.Alert.new(198495, "Torrent"), - -- aura_env.Alert.new(202098, "Brackwater Barrage"), - -- Neltharion's Lair - -- aura_env.Alert.new(202181, "Stone Gaze"), - -- aura_env.Alert.new(226296, "Piercing Shards"), - -- aura_env.Alert.new(188169, "Razor Shards"), - -- aura_env.Alert.new(198496, "Sunder"), - -- aura_env.Alert.new(199176, "Spiked Tongue"), - -- aura_env.Alert.new(193585, "Bound"), - -- aura_env.Alert.new(200700, "Landslide"), - -- aura_env.Alert.new(200732, "Molten Crash"), - -- The Arcway - -- aura_env.Alert.new(211771, "Prophecies of Doom"), - -- aura_env.Alert.new(211037, "Celerity Zone"), - -- aura_env.Alert.new(195791, "Quarantine"), - -- aura_env.Alert.new(226285, "Demonic Ascension"), - -- aura_env.Alert.new(197810, "Wicked Slam"), - -- aura_env.Alert.new(211217, "Arcane Slicer"), - -- aura_env.Alert.new(211115, "Phase Breach"), - -- aura_env.Alert.new(196392, "Overcharge Mana"), - -- aura_env.Alert.new(200040, "Nether Venom"), - -- aura_env.Alert.new(200227, "Tangled Web"), - -- aura_env.Alert.new(220871, "Unstable Mana"), - -- Vault of the Wardens - -- aura_env.Alert.new(193069, "Nightmares"), - -- aura_env.Alert.new(197799, "Unleash Fury"), - -- aura_env.Alert.new(191735, "Deafening Screech"), - -- aura_env.Alert.new(190836, "Hatred"), - -- aura_env.Alert.new(202913, "Fel Mortar"), - -- aura_env.Alert.new(200898, "Teleport"), - -- aura_env.Alert.new(199917, "Shadow Crash"), - -- aura_env.Alert.new(202658, "Drain"), - -- aura_env.Alert.new(194945, "Lingering Gaze"), - -- aura_env.Alert.new(196249, "Meteor"), - -- aura_env.Alert.new(192631, "Lava Wreath"), - -- aura_env.Alert.new(197513, "Detonating Moonglaive"), - -- aura_env.Alert.new(189469, "Turn Kick"), - -- Upper Karazhan - -- aura_env.Alert.new(230083, "Nullification"), - -- aura_env.Alert.new(227267, "Summon Volatile Energy"), - -- aura_env.Alert.new(227254, "Evocation"), - -- aura_env.Alert.new(229662, "Fel Breath"), - -- aura_env.Alert.new(36247, "Fel Fireball"), - -- aura_env.Alert.new(227628, "Piercing Missiles"), - -- aura_env.Alert.new(227615, "Inferno Bolt"), - -- aura_env.Alert.new(227592, "Frostbite"), - -- aura_env.Alert.new(228269, "Flame Wreath"), - -- aura_env.Alert.new(227779, "Ceaseless Winter"), - -- aura_env.Alert.new(229706, "Leech Life"), - -- aura_env.Alert.new(229714, "Consume Magic"), - -- aura_env.Alert.new(229159, "Chaotic Shadows"), - -- aura_env.Alert.new(229083, "Burning Blast"), - -- aura_env.Alert.new(229151, "Disintegrate"), - -- Lower Karazhan - -- aura_env.Alert.new(228221, "Severe Dusting"), - -- aura_env.Alert.new(228225, "Sultry Heat"), - -- aura_env.Alert.new(232153, "Kara Kazham"), - -- aura_env.Alert.new(227987, "Dinner Bell"), - -- aura_env.Alert.new(228025, "Heat Wave"), - -- aura_env.Alert.new(227568, "Burning Leg Sweep"), - -- aura_env.Alert.new(227776, "Magic Magnificent"), - -- aura_env.Alert.new(227966, "Flashlight"), - -- aura_env.Alert.new(228279, "Shadow Rejuvenation"), - -- aura_env.Alert.new(228278, "Demoralizing Shout"), - -- aura_env.Alert.new(228277, "Shackles of Servitude"), - -- aura_env.Alert.new(226316, "Shadow Bolt Volley"), - -- aura_env.Alert.new(227508, "Mass Repentance"), - -- aura_env.Alert.new(227793, "Sacred Ground"), - -- aura_env.Alert.new(227463, "Whirling Edge"), - -- aura_env.Alert.new(227646, "Iron Whirlwind"), - -- aura_env.Alert.new(227672, "Will Breaker"), - -- aura_env.Alert.new(227404, "Intangible Presence"), - -- aura_env.Alert.new(227493, "Mortal Strike"), - -- aura_env.Alert.new(228852, "Shared Suffering"), - -- aura_env.Alert.new(228837, "Bellowing Roar"), -} - ----@type table> -aura_env.EventMap = {} -for _, alert in ipairs(alerts) do - for event, _ in pairs(alert.events) do - if not aura_env.EventMap[event] then - aura_env.EventMap[event] = {} - end - aura_env.EventMap[event][alert.id] = alert - end -end - -local function varargToString(...) - local output = {} - for i = 1, select("#", ...) do - output[#output + 1] = string.format("%d = %s", i, tostring(select(i, ...))) - end - return table.concat(output, "; ") -end - --- C:\Users\Administrator\Seafile\Backup-WoW\Ruski\WTF\Account\phatphuckdave\SavedVariables\WeakAuras.lua -if not WeakAurasSaved then WeakAurasSaved = {} end -if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end -if not WeakAurasSaved.Cyka.CLEUExample then WeakAurasSaved.Cyka.CLEUExample = {} end ---/run WeakAurasSaved.Cyka.CLEUExample = {} ----@param spellName string ----@param spellId number ----@param subevent string ----@param ... any -aura_env.LogSpell = function(spellName, spellId, subevent, ...) - table.insert(WeakAurasSaved.Cyka.CLEUExample, varargToString(spellName, spellId, subevent, ...)) -end +aura_env.GUIDUnitMap = {} +aura_env.PlayerName = UnitName("player") +-- Indices are class ids +---@alias ClassColor {className: string, color: {rgbInt: table, rgbHex: table}, rgbString: string} +---@type table +aura_env.ClassColors = { + { + className = "Warrior", + color = { + rgbInt = { 198, 155, 109 }, + rgbHex = { 0.78, 0.61, 0.43 }, + }, + rgbString = "C69B6D", + }, + { + className = "Paladin", + color = { + rgbInt = { 244, 140, 186 }, + rgbHex = { 0.96, 0.55, 0.73 }, + }, + rgbString = "F48CBA", + }, + { + className = "Hunter", + color = { + rgbInt = { 170, 211, 114 }, + rgbHex = { 0.67, 0.83, 0.45 }, + }, + rgbString = "AAD372", + }, + { + className = "Rogue", + color = { + rgbInt = { 255, 244, 104 }, + rgbHex = { 1.00, 0.96, 0.41 }, + }, + rgbString = "FFF468", + }, + { + className = "Priest", + color = { + rgbInt = { 255, 255, 255 }, + rgbHex = { 1.00, 1.00, 1.00 }, + }, + rgbString = "FFFFFF", + }, + { + className = "Death Knight", + color = { + rgbInt = { 196, 30, 58 }, + rgbHex = { 0.77, 0.12, 0.23 }, + }, + rgbString = "C41E3A", + }, + { + className = "Shaman", + color = { + rgbInt = { 0, 112, 221 }, + rgbHex = { 0.00, 0.44, 0.87 }, + }, + rgbString = "0070DD", + }, + { + className = "Mage", + color = { + rgbInt = { 63, 199, 235 }, + rgbHex = { 0.25, 0.78, 0.92 }, + }, + rgbString = "3FC7EB", + }, + { + className = "Warlock", + color = { + rgbInt = { 135, 136, 238 }, + rgbHex = { 0.53, 0.53, 0.93 }, + }, + rgbString = "8788EE", + }, + { + className = "Monk", + color = { + rgbInt = { 0, 255, 152 }, + rgbHex = { 0.00, 1.00, 0.60 }, + }, + rgbString = "00FF98", + }, + { + className = "Druid", + color = { + rgbInt = { 255, 124, 10 }, + rgbHex = { 1.00, 0.49, 0.04 }, + }, + rgbString = "FF7C0A", + }, + { + className = "Demon Hunter", + color = { + rgbInt = { 163, 48, 201 }, + rgbHex = { 0.64, 0.19, 0.79 }, + }, + rgbString = "A330C9", + }, +} + +local SoundFileRoot = "Interface\\Sounds\\spellAlert\\" + +---@param guid string +---@return string, nil|string +local function GetUnitFromGuid(guid) + local unit = aura_env.GUIDUnitMap[guid] + if unit == nil then return "none", "Unit not found" end + return unit, nil +end + +---@param guid string +---@return {name: string, target: string, targetClassId: number, prettyTarget: string}, nil|string +local function GetTargetInfoForGuid(guid) + local retval = { + name = "", + target = "", + targetClassId = 1, + prettyTarget = "", + } + + local unit, err = GetUnitFromGuid(guid) + if err then return retval, err end + + local targetUnit = string.format("%starget", unit) + retval.target = UnitName(targetUnit) + retval.prettyTarget = retval.target + + local targetClassId = select(3, UnitClass(targetUnit)) + retval.targetClassId = targetClassId + ---@type ClassColor + local classColorInfo = aura_env.ClassColors[targetClassId] + if classColorInfo then + retval.prettyTarget = string.format("|cFF%s%s|r", classColorInfo.rgbString, retval.target) + end + + return retval, nil +end + +---@param guid string +---@return {name: string, startms: number, endms: number, spellid: number}, nil|string +local function GetCastInfoForGuid(guid) + local retval = { + name = "", + startms = 0, + endms = 0, + spellid = 0 + } + + local unit, err = GetUnitFromGuid(guid) + if err then return retval, err end + local name, _, _, _, startTimeMS, endTimeMS, _, _, _, spellId = UnitCastingInfo(unit) + if name == nil then return retval, "Unit not casting" end + + retval.name = name + retval.startms = startTimeMS + retval.endms = endTimeMS + retval.spellid = spellId + + return retval, nil +end + +---@class Alert +---@field id number +---@field soundFile string +---@field events table +---@field instruction string +---@field afflictedInstruction string +---@field iterator number +aura_env.Alert = { + ---@param id number + ---@param name string + ---@param events table + ---@param instruction string + ---@param afflictedInstruction string + ---@return Alert + new = function(id, name, events, instruction, afflictedInstruction) + local self = setmetatable({}, { + __index = aura_env.Alert + }) + self.id = id + name = string.gsub(name, " ", "_") + name = string.lower(name) + self.soundFile = string.format("%s%s.ogg", SoundFileRoot, name) + self.events = {} + for _, event in ipairs(events) do + self.events[event] = true + end + self.instruction = instruction + self.afflictedInstruction = afflictedInstruction + self.iterator = 0 + return self + end, + + ---@param self Alert + ---@param allstates allstates + ---@param ... any + ---@return string|nil + Trigger = function(self, allstates, ...) + -- We trust that the event is valid + local spellname, err = CLEUParser.GetSpellName(...) + if err then return err end + + -- The idea is: + -- SEE C_NamePlate.GetNamePlateForUnit !!!! + -- If the spell is being cast (SPELL_CAST_START) target will be nil (because server is cooked) + -- So what we want to do is get the source GUID and try to find it in nameplates + -- If it exists in nameplates we have a unitid and we can try to get casting info + -- From the casting info we can get the cast start and end as well as get the target from unit+target + -- However if the spell is already cast (SPELL_CAST_SUCCESS) the call to castInfo will return no info for cast + -- But it will return info about the target + -- Now the target itself is the actual target of the unit NOT the target of the spell + -- We just have to assume that the target of the spell is the same as the target of the unit + -- We then clamp the cast time to at least 1 second (meaning instant spells appear for 1s) + -- And get the target "manually" from the instant cast using the same principle as with the cast start + local src, err = CLEUParser.GetSourceGUID(...) + if err then return err end + local castInfo, err = GetCastInfoForGuid(src) + local targetInfo, err = GetTargetInfoForGuid(src) + DevTools_Dump(targetInfo) + + -- If the event DOES have destName then use that ACTUAL target + -- Unless it's the same target we already got + -- The reason we don't overwrite the same target we already got is because we can not (easily) infer + -- The target class from the destName because we don't know where to look for the unit + local target, err = CLEUParser.GetDestName(...) + if err == nil and target ~= targetInfo.target then + targetInfo.target = target + targetInfo.prettyTarget = target + targetInfo.targetClassId = 1 + end + + local displayText = self.instruction + if err == nil and targetInfo.target == PlayerName then + displayText = self.afflictedInstruction + end + + local castEnd = math.max(GetTime() + 5, castInfo.endms / 1000) + local castDuration = math.max(5, (castInfo.endms - castInfo.startms) / 1000) + + ---@type state + local state = { + show = true, + changed = true, + progressType = "timed", + expireTime = castEnd, + duration = castDuration, + autoHide = true, + name = spellname, + instruction = displayText, + target = targetInfo.target, + prettyTarget = targetInfo.prettyTarget, + targetClassId = targetInfo.targetClassId, + } + + allstates[string.format("%d-%d", self.id, self.iterator)] = state + self.iterator = self.iterator + 1 + return nil + end +} + +local alerts = { + -- Debug + -- aura_env.Alert.new(774, "Rejuvenation", { "SPELL_AURA_APPLIED" }, "REJUV", "REEEEEEEEJUUUUUUUUUUUVVVVVVVVV"), + -- Garothi + aura_env.Alert.new(244410, "Decimation", { "SPELL_CAST_SUCCESS" }, "", "Move"), + aura_env.Alert.new(246220, "Fel Bombardment", { "SPELL_CAST_SUCCESS" }, "", "Move"), + aura_env.Alert.new(244969, "Eradication", { "SPELL_CAST_START" }, "Run away", ""), + aura_env.Alert.new(244106, "Carnage", { "SPELL_CAST_START" }, "Tank the boss", ""), + aura_env.Alert.new(246664, "Annihilation", { "SPELL_CAST_SUCCESS" }, "Soak pools", ""), + -- Felhounds + aura_env.Alert.new(244086, "Molten Touch", { "SPELL_CAST_SUCCESS" }, "", "Run away"), + aura_env.Alert.new(244768, "Desolate Gaze", { "SPELL_AURA_APPLIED" }, "", "Move away"), + aura_env.Alert.new(244057, "Enflame Corruption", { "SPELL_CAST_START", "SPELL_AURA_APPLIED" }, "Spread", "Spread!!"), + aura_env.Alert.new(244131, "Consuming Sphere", { "SPELL_AURA_APPLIED" }, "Move", ""), + aura_env.Alert.new(244056, "Siphon Corruption", { "SPELL_CAST_START", "SPELL_AURA_APPLIED" }, "Stack", "Stack!!"), + -- Antoran High Command + -- aura_env.Alert.new(245161, "Entropic Mine"), -- Need more info + -- aura_env.Alert.new(245546, "Summon Reinforcements"), -- Need more info + -- Portal Keeper Hasabel + aura_env.Alert.new(244016, "Reality Tear", { "SPELL_CAST_SUCCESS" }, "", ""), + aura_env.Alert.new(243983, "Collapsing World", { "SPELL_CAST_SUCCESS" }, "Dodge", ""), + aura_env.Alert.new(244000, "Felstorm Barrage", { "SPELL_CAST_START" }, "Dodge", ""), + -- Imonar + -- aura_env.Alert.new(247552, "Sleep Canister"), -- Need more info + aura_env.Alert.new(247367, "Shock Lance", { "SPELL_CAST_SUCCESS" }, "", ""), + aura_env.Alert.new(248068, "Empowered Pulse Grenade", { "SPELL_CAST_SUCCESS" }, "", ""), -- Need more info + aura_env.Alert.new(247376, "Pulse Grenade", { "SPELL_CAST_SUCCESS" }, "", ""), -- Need more info + aura_env.Alert.new(247716, "Charged Blasts", { "SPELL_AURA_APPLIED" }, "", "Move!!"), + aura_env.Alert.new(247687, "Sever", { "SPELL_CAST_SUCCESS" }, "", ""), + aura_env.Alert.new(248070, "Empowered Shrapnel Blast", { "SPELL_CAST_START" }, "Mines", ""), + aura_env.Alert.new(250255, "Empowered Shock Lance", { "SPELL_CAST_START" }, "", ""), + -- Kin'garoth + aura_env.Alert.new(254919, "Forging Strike", { "SPELL_CAST_START" }, "", ""), + aura_env.Alert.new(254926, "Reverberating Strike", { "SPELL_CAST_START" }, "Dodge", "Dodge"), + -- aura_env.Alert.new(246840, "Ruiner"), -- Need more info + -- aura_env.Alert.new(246779, "Diabolic Bomb"), -- Need more info + -- aura_env.Alert.new(246706, "Demolish"), -- Need more info + -- Varimathras + aura_env.Alert.new(243960, "Shadow Strike", { "SPELL_CAST_SUCCESS" }, "Taunt", "Survive"), + aura_env.Alert.new(243961, "Misery", { "SPELL_AURA_APPLIED" }, "", "Survive"), + aura_env.Alert.new(244042, "Marked Prey", { "SPELL_AURA_APPLIED" }, "Do not soak", "Let someone soak"), + -- aura_env.Alert.new(244093, "Necrotic Embrace"), -- Need more info + -- aura_env.Alert.new(248732, "Echoes of Doom"), -- Need more info + aura_env.Alert.new(243999, "Dark Fissure", { "SPELL_CAST_START" }, "Move", ""), + -- Coven + -- aura_env.Alert.new(253189, "Shivan Pact"), -- Need more info + aura_env.Alert.new(244899, "Fiery Strike", { "SPELL_CAST_START" }, "", "Prepare"), + aura_env.Alert.new(245627, "Whirling Saber", { "SPELL_CAST_START" }, "Dodge", ""), + aura_env.Alert.new(245281, "Shadow Blades", { "SPELL_CAST_START" }, "Dodge", ""), -- Need more info + aura_env.Alert.new(245586, "Chilled Blood", { "SPELL_AURA_APPLIED" }, "Heal", "Heal"), + -- Aggramar + -- aura_env.Alert.new(254452, "Ravenous Blaze"), -- Need more info + aura_env.Alert.new(244693, "Wake of Flame", { "SPELL_CAST_START" }, "Dodge", "Dodge!"), + -- aura_env.Alert.new(244291, "Foe Braker"), -- Need more info + -- aura_env.Alert.new(244033, "Flame Rend"), -- Need more info + -- aura_env.Alert.new(247079, "Empowered Flame Rend"), -- Need more info + -- aura_env.Alert.new(245983, "Flare"), -- Need more info + -- aura_env.Alert.new(246037, "Empowered Flare"), -- Need more info + -- Argus + -- aura_env.Alert.new(256457, "Cone of Death"), -- Need more info + aura_env.Alert.new(248396, "Soulblight", { "SPELL_AURA_APPLIED" }, "", "Run away from group"), + aura_env.Alert.new(257296, "Tortured Rage", { "SPELL_CAST_START" }, "Brace", ""), + aura_env.Alert.new(251570, "Soulbomb", { "SPELL_AURA_APPLIED" }, "Brace", "Run far away from group"), + + -- Mythic+ + -- Black Rook Hold + -- aura_env.Alert.new(225573, "Dark Mending"), + -- aura_env.Alert.new(200105, "Sacrifice Soul"), + -- aura_env.Alert.new(225732, "Strike Down"), + -- aura_env.Alert.new(194996, "Soul Echoes"), + -- aura_env.Alert.new(195254, "Swirling Scythe"), + -- aura_env.Alert.new(194956, "Reap Soul"), + aura_env.Alert.new(201858, "Shoot", { "SPELL_CAST_START" }, "", "LOS!"), + -- aura_env.Alert.new(200248, "Arcane Blitz"), + -- aura_env.Alert.new(200345, "Arrow Barrage"), + -- aura_env.Alert.new(200291, "Knife Dance"), + -- aura_env.Alert.new(200261, "Bonebreaking Strike"), + -- aura_env.Alert.new(197418, "Vengeful Shear"), + -- aura_env.Alert.new(201139, "Brutal Assault"), + -- aura_env.Alert.new(198245, "Brutal Haymaker"), + -- aura_env.Alert.new(198079, "Hateful Gaze"), + -- Cathedral of Eternal Night + -- aura_env.Alert.new(241937, "Shadow Wall"), + -- aura_env.Alert.new(238543, "Demonic Mending"), + -- aura_env.Alert.new(242792, "Vile Roots"), + -- aura_env.Alert.new(236627, "Floral Fulmination"), + -- aura_env.Alert.new(239217, "Blinding Glare"), + -- aura_env.Alert.new(237726, "Scornful Gaze"), + -- aura_env.Alert.new(190620, "Felblaze Orb"), + -- aura_env.Alert.new(239268, "Venom Storm"), + -- aura_env.Alert.new(234107, "Chaotic Energy"), + -- aura_env.Alert.new(236543, "Felsoul Cleave"), + -- aura_env.Alert.new(238315, "Shadow Sweep"), + -- aura_env.Alert.new(243168, "Demonic Upheaval"), + -- Court of Stars + -- aura_env.Alert.new(210261, "Sound Alarm"), + -- aura_env.Alert.new(215204, "Hinder"), + -- aura_env.Alert.new(209027, "Quelling Strike"), + -- aura_env.Alert.new(209516, "Mana Fang"), + -- aura_env.Alert.new(209485, "Drain Magic"), + -- aura_env.Alert.new(209404, "Seal Magic"), + -- aura_env.Alert.new(209495, "Charged Smash"), + -- aura_env.Alert.new(225100, "Charging Station"), + -- aura_env.Alert.new(219488, "Streetsweeper"), + -- aura_env.Alert.new(212784, "Eye Storm"), + -- aura_env.Alert.new(211464, "Fel Detonation"), + -- aura_env.Alert.new(207980, "Disintegration Beam"), + -- aura_env.Alert.new(207979, "Shockwave"), + -- aura_env.Alert.new(209628, "Piercing Gale"), + -- aura_env.Alert.new(209676, "Slicing Maelstrom"), + -- Darkheart Thicket + -- aura_env.Alert.new(200631, "Unnerving Screech"), + -- aura_env.Alert.new(200580, "Maddening Roar"), + -- aura_env.Alert.new(191326, "Breath of Corruption"), + -- aura_env.Alert.new(201400, "Dread Inferno"), + -- aura_env.Alert.new(200238, "Feed on the Weak"), + -- Eye of Azshara + -- aura_env.Alert.new(195172, "Mighty Slam"), + -- aura_env.Alert.new(195129, "Thundering Stomp"), + -- aura_env.Alert.new(195046, "Rejuvenating Waters"), + -- aura_env.Alert.new(162135, "Bellowing Roar"), + -- aura_env.Alert.new(197105, "Polymorh Fish"), + -- aura_env.Alert.new(193597, "Static Nova"), + -- aura_env.Alert.new(193611, "Focused Lightning"), + -- aura_env.Alert.new(196129, "Spray Sand"), + -- aura_env.Alert.new(196144, "Sandstorm"), + -- aura_env.Alert.new(196296, "Roiling Storm"), + -- aura_env.Alert.new(196290, "Chaotic Tempest"), + -- aura_env.Alert.new(191848, "Rampage"), + -- Halls of Valor + -- aura_env.Alert.new(198605, "Thunderstrike"), + -- aura_env.Alert.new(198888, "Lightning Breath"), + -- aura_env.Alert.new(191284, "Horn of Valor"), + -- aura_env.Alert.new(198934, "Rune of Healing"), + -- aura_env.Alert.new(215433, "Holy Radiance"), + -- aura_env.Alert.new(199210, "Penetrating Shot"), + -- aura_env.Alert.new(191976, "Arcing Bolt"), + -- aura_env.Alert.new(192305, "Eye of the Storm"), + -- aura_env.Alert.new(192307, "Sanctify"), + -- aura_env.Alert.new(192048, "Expel Light"), + -- aura_env.Alert.new(192018, "Shield of Light"), + -- aura_env.Alert.new(196512, "Claw Frenzy"), + -- aura_env.Alert.new(199652, "Sever"), + -- aura_env.Alert.new(199726, "Unruly Yell"), + -- aura_env.Alert.new(199674, "Wicked Dagger"), + -- aura_env.Alert.new(193826, "Ragnarok"), + -- aura_env.Alert.new(198263, "Radiant Tempest"), + -- aura_env.Alert.new(198072, "Spear of Light"), + -- aura_env.Alert.new(197961, "Runic Band"), + -- aura_env.Alert.new(198750, "Surge"), + -- Maw of Souls + -- aura_env.Alert.new(193364, "Screams of the Dead"), + -- aura_env.Alert.new(194442, "Six Pound Barrel"), + -- aura_env.Alert.new(194615, "Sea Legs"), + -- aura_env.Alert.new(192019, "Lantern of Darkness"), + -- aura_env.Alert.new(194099, "Bile Breath"), + -- aura_env.Alert.new(198405, "Bone Chilling Scream"), + -- aura_env.Alert.new(194325, "Fragment"), + -- aura_env.Alert.new(194216, "Cosmic Scythe"), + -- aura_env.Alert.new(195293, "Debilitating Shout"), + -- aura_env.Alert.new(185539, "Rapid Rupture"), + -- aura_env.Alert.new(198495, "Torrent"), + -- aura_env.Alert.new(202098, "Brackwater Barrage"), + -- Neltharion's Lair + -- aura_env.Alert.new(202181, "Stone Gaze"), + -- aura_env.Alert.new(226296, "Piercing Shards"), + -- aura_env.Alert.new(188169, "Razor Shards"), + -- aura_env.Alert.new(198496, "Sunder"), + -- aura_env.Alert.new(199176, "Spiked Tongue"), + -- aura_env.Alert.new(193585, "Bound"), + -- aura_env.Alert.new(200700, "Landslide"), + -- aura_env.Alert.new(200732, "Molten Crash"), + -- The Arcway + -- aura_env.Alert.new(211771, "Prophecies of Doom"), + -- aura_env.Alert.new(211037, "Celerity Zone"), + -- aura_env.Alert.new(195791, "Quarantine"), + -- aura_env.Alert.new(226285, "Demonic Ascension"), + -- aura_env.Alert.new(197810, "Wicked Slam"), + -- aura_env.Alert.new(211217, "Arcane Slicer"), + -- aura_env.Alert.new(211115, "Phase Breach"), + -- aura_env.Alert.new(196392, "Overcharge Mana"), + -- aura_env.Alert.new(200040, "Nether Venom"), + -- aura_env.Alert.new(200227, "Tangled Web"), + -- aura_env.Alert.new(220871, "Unstable Mana"), + -- Vault of the Wardens + -- aura_env.Alert.new(193069, "Nightmares"), + -- aura_env.Alert.new(197799, "Unleash Fury"), + -- aura_env.Alert.new(191735, "Deafening Screech"), + -- aura_env.Alert.new(190836, "Hatred"), + -- aura_env.Alert.new(202913, "Fel Mortar"), + -- aura_env.Alert.new(200898, "Teleport"), + -- aura_env.Alert.new(199917, "Shadow Crash"), + -- aura_env.Alert.new(202658, "Drain"), + -- aura_env.Alert.new(194945, "Lingering Gaze"), + -- aura_env.Alert.new(196249, "Meteor"), + -- aura_env.Alert.new(192631, "Lava Wreath"), + -- aura_env.Alert.new(197513, "Detonating Moonglaive"), + -- aura_env.Alert.new(189469, "Turn Kick"), + -- Upper Karazhan + -- aura_env.Alert.new(230083, "Nullification"), + -- aura_env.Alert.new(227267, "Summon Volatile Energy"), + -- aura_env.Alert.new(227254, "Evocation"), + -- aura_env.Alert.new(229662, "Fel Breath"), + -- aura_env.Alert.new(36247, "Fel Fireball"), + -- aura_env.Alert.new(227628, "Piercing Missiles"), + -- aura_env.Alert.new(227615, "Inferno Bolt"), + -- aura_env.Alert.new(227592, "Frostbite"), + -- aura_env.Alert.new(228269, "Flame Wreath"), + -- aura_env.Alert.new(227779, "Ceaseless Winter"), + -- aura_env.Alert.new(229706, "Leech Life"), + -- aura_env.Alert.new(229714, "Consume Magic"), + -- aura_env.Alert.new(229159, "Chaotic Shadows"), + -- aura_env.Alert.new(229083, "Burning Blast"), + -- aura_env.Alert.new(229151, "Disintegrate"), + -- Lower Karazhan + -- aura_env.Alert.new(228221, "Severe Dusting"), + -- aura_env.Alert.new(228225, "Sultry Heat"), + -- aura_env.Alert.new(232153, "Kara Kazham"), + -- aura_env.Alert.new(227987, "Dinner Bell"), + -- aura_env.Alert.new(228025, "Heat Wave"), + -- aura_env.Alert.new(227568, "Burning Leg Sweep"), + -- aura_env.Alert.new(227776, "Magic Magnificent"), + -- aura_env.Alert.new(227966, "Flashlight"), + -- aura_env.Alert.new(228279, "Shadow Rejuvenation"), + -- aura_env.Alert.new(228278, "Demoralizing Shout"), + -- aura_env.Alert.new(228277, "Shackles of Servitude"), + -- aura_env.Alert.new(226316, "Shadow Bolt Volley"), + -- aura_env.Alert.new(227508, "Mass Repentance"), + -- aura_env.Alert.new(227793, "Sacred Ground"), + -- aura_env.Alert.new(227463, "Whirling Edge"), + -- aura_env.Alert.new(227646, "Iron Whirlwind"), + -- aura_env.Alert.new(227672, "Will Breaker"), + -- aura_env.Alert.new(227404, "Intangible Presence"), + -- aura_env.Alert.new(227493, "Mortal Strike"), + -- aura_env.Alert.new(228852, "Shared Suffering"), + -- aura_env.Alert.new(228837, "Bellowing Roar"), +} + +---@type table> +aura_env.EventMap = {} +for _, alert in ipairs(alerts) do + for event, _ in pairs(alert.events) do + if not aura_env.EventMap[event] then + aura_env.EventMap[event] = {} + end + aura_env.EventMap[event][alert.id] = alert + end +end + +local function varargToString(...) + local output = {} + for i = 1, select("#", ...) do + output[#output + 1] = string.format("%d = %s", i, tostring(select(i, ...))) + end + return table.concat(output, "; ") +end + +-- C:\Users\Administrator\Seafile\Backup-WoW\Ruski\WTF\Account\phatphuckdave\SavedVariables\WeakAuras.lua +if not WeakAurasSaved then WeakAurasSaved = {} end +if not WeakAurasSaved.Cyka then WeakAurasSaved.Cyka = {} end +if not WeakAurasSaved.Cyka.CLEUExample then WeakAurasSaved.Cyka.CLEUExample = {} end +--/run WeakAurasSaved.Cyka.CLEUExample = {} +---@param spellName string +---@param spellId number +---@param subevent string +---@param ... any +aura_env.LogSpell = function(spellName, spellId, subevent, ...) + -- table.insert(WeakAurasSaved.Cyka.CLEUExample, varargToString(spellName, spellId, subevent, ...)) +end