From 9ebc95885e47b24a6c4d4d4394892351a2182d2e Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Wed, 1 Jan 2025 14:04:48 +0100 Subject: [PATCH] Rework main heimdall file to simplify config --- Heimdall.lua | 201 ++++++++++++--------------------------------------- 1 file changed, 47 insertions(+), 154 deletions(-) diff --git a/Heimdall.lua b/Heimdall.lua index 83fd7dc..6d19eb0 100644 --- a/Heimdall.lua +++ b/Heimdall.lua @@ -1,32 +1,20 @@ -local addonname, data = ... ----@cast data HeimdallData +local addonname, shared = ... +---@cast shared HeimdallShared ---@cast addonname string --- TODO: Maybe make a configuration weakaura, make use of weakaura options... -- TODO: Implement counting kills and display on whosniffer -- Take last N seconds of combatlog into account ie. count who does damage to who -- Maybe even make an alert when someone does too much damage to someone else... -- But that would not be trivial as of now, I can't think of a way to do it sensibly --- TODO: Implement auto grouping via agent, maybe find "+" or something --- TODO: Implement some sort of automatic grouping feature... --- Don't know how to elect leader yet... Who invites? --- Maybe we can just make it agent #6, have him always be the group leader? local function init() ---@class Heimdall_Data - ---@field who { data: table } + ---@field config HeimdallConfig ---@field whitelist table ---@field stinkies table - ---@field config HeimdallConfig if not Heimdall_Data then Heimdall_Data = {} end - if not Heimdall_Data.config then Heimdall_Data.config = {} end - -- We don't care about these persisting - -- Actually we don't want some of them to persist - -- For those we DO we use (global) Heimdall_Data - - ---@class HeimdallData - ---@field config HeimdallConfig + ---@class HeimdallShared ---@field raceMap table ---@field classColors table ---@field messenger HeimdallMessengerData @@ -96,7 +84,7 @@ local function init() ---@field whoTicker number? ---@field ignored table - data.GetOrDefault = function(table, keys, default) + shared.GetOrDefault = function(table, keys, default) local value = default if not table then return value end if not keys then return value end @@ -117,39 +105,31 @@ local function init() return value end - data.messenger = { + shared.messenger = { queue = {} } - data.who = { + shared.who = { ignored = {}, } - --/run Heimdall_Data.config = {inviter={enabled=false},deathReporter={enabled=false},spotter={enabled=false,everyone=false}} - --/run Heimdall_Data.config = {who={enabled=true},deathReporter={enabled=true},spotter={enabled=true}} - --/run Heimdall_Data.config = {deathReporter={enabled=false}} - --/run Heimdall_Data.config = {deathReporter={enabled=false},spotter={enabled=false}} - --/run Heimdall_Data.config = {deathReporter={enabled=false},spotter={enabled=true,everyone=false}} - --/run Heimdall_Data.config = {inviter={enabled=true},deathReporter={enabled=true},spotter={enabled=true,everyone=true}} - --/run Heimdall_Data.config = {inviter={enabled=true,keyword="+++"},deathReporter={enabled=true},spotter={enabled=true,everyone=true}} - --/run Heimdall_Data.config = {inviter={enabled=true,keyword="++"},deathReporter={enabled=true},spotter={enabled=true,everyone=false}} - --/run Heimdall_Data.config.who.enabled = true - data.config = { + + Heimdall_Data.config = { spotter = { - enabled = data.GetOrDefault(Heimdall_Data, { "config", "spotter", "enabled" }, true), - everyone = data.GetOrDefault(Heimdall_Data, { "config", "spotter", "everyone" }, false), - hostile = data.GetOrDefault(Heimdall_Data, { "config", "spotter", "hostile" }, true), - alliance = data.GetOrDefault(Heimdall_Data, { "config", "spotter", "alliance" }, true), - stinky = data.GetOrDefault(Heimdall_Data, { "config", "spotter", "stinky" }, true), - notifyChannel = data.GetOrDefault(Heimdall_Data, { "config", "spotter", "notifyChannel" }, "Agent"), - zoneOverride = data.GetOrDefault(Heimdall_Data, { "config", "spotter", "zoneOverride" }, nil), - throttleTime = data.GetOrDefault(Heimdall_Data, { "config", "spotter", "throttleTime" }, 10) + enabled = shared.GetOrDefault(Heimdall_Data, { "config", "spotter", "enabled" }, true), + everyone = shared.GetOrDefault(Heimdall_Data, { "config", "spotter", "everyone" }, false), + hostile = shared.GetOrDefault(Heimdall_Data, { "config", "spotter", "hostile" }, true), + alliance = shared.GetOrDefault(Heimdall_Data, { "config", "spotter", "alliance" }, true), + stinky = shared.GetOrDefault(Heimdall_Data, { "config", "spotter", "stinky" }, true), + notifyChannel = shared.GetOrDefault(Heimdall_Data, { "config", "spotter", "notifyChannel" }, "Agent"), + zoneOverride = shared.GetOrDefault(Heimdall_Data, { "config", "spotter", "zoneOverride" }, nil), + throttleTime = shared.GetOrDefault(Heimdall_Data, { "config", "spotter", "throttleTime" }, 10) }, who = { - enabled = data.GetOrDefault(Heimdall_Data, { "config", "who", "enabled" }, false), - ignored = data.GetOrDefault(Heimdall_Data, { "config", "who", "ignored" }, {}), - notifyChannel = data.GetOrDefault(Heimdall_Data, { "config", "who", "notifyChannel" }, "Agent"), - ttl = data.GetOrDefault(Heimdall_Data, { "config", "who", "ttl" }, 20), - doWhisper = data.GetOrDefault(Heimdall_Data, { "config", "who", "doWhisper" }, true), - zoneNotifyFor = data.GetOrDefault(Heimdall_Data, { "config", "who", "zoneNotifyFor" }, { + enabled = shared.GetOrDefault(Heimdall_Data, { "config", "who", "enabled" }, false), + ignored = shared.GetOrDefault(Heimdall_Data, { "config", "who", "ignored" }, {}), + notifyChannel = shared.GetOrDefault(Heimdall_Data, { "config", "who", "notifyChannel" }, "Agent"), + ttl = shared.GetOrDefault(Heimdall_Data, { "config", "who", "ttl" }, 20), + doWhisper = shared.GetOrDefault(Heimdall_Data, { "config", "who", "doWhisper" }, true), + zoneNotifyFor = shared.GetOrDefault(Heimdall_Data, { "config", "who", "zoneNotifyFor" }, { ["Orgrimmar"] = true, ["Thunder Bluff"] = true, ["Undercity"] = true, @@ -159,96 +139,27 @@ local function init() }), }, messenger = { - enabled = data.GetOrDefault(Heimdall_Data, { "config", "messenger", "enabled" }, true), + enabled = shared.GetOrDefault(Heimdall_Data, { "config", "messenger", "enabled" }, true), }, deathReporter = { - enabled = data.GetOrDefault(Heimdall_Data, { "config", "deathReporter", "enabled" }, false), - throttle = data.GetOrDefault(Heimdall_Data, { "config", "deathReporter", "throttle" }, 10), - doWhisper = data.GetOrDefault(Heimdall_Data, { "config", "deathReporter", "doWhisper" }, true), - notifyChannel = data.GetOrDefault(Heimdall_Data, { "config", "deathReporter", "notifyChannel" }, "Agent"), - zoneOverride = data.GetOrDefault(Heimdall_Data, { "config", "deathReporter", "zoneOverride" }, nil), - duelThrottle = data.GetOrDefault(Heimdall_Data, { "config", "deathReporter", "duelThrottle" }, 5), + enabled = shared.GetOrDefault(Heimdall_Data, { "config", "deathReporter", "enabled" }, false), + throttle = shared.GetOrDefault(Heimdall_Data, { "config", "deathReporter", "throttle" }, 10), + doWhisper = shared.GetOrDefault(Heimdall_Data, { "config", "deathReporter", "doWhisper" }, true), + notifyChannel = shared.GetOrDefault(Heimdall_Data, { "config", "deathReporter", "notifyChannel" }, "Agent"), + zoneOverride = shared.GetOrDefault(Heimdall_Data, { "config", "deathReporter", "zoneOverride" }, nil), + duelThrottle = shared.GetOrDefault(Heimdall_Data, { "config", "deathReporter", "duelThrottle" }, 5), }, - whisperNotify = data.GetOrDefault(Heimdall_Data, { "config", "whisperNotify" }, { - "Extazyk", - "Smokefire", - "Smokemantra", - "Хихихантер", - "Муркот", - "Растафаркрай", - "Frosstmorn", - "Pulsjkee", - "Paskoo", - "发酸的风景画", - }), - stinkies = data.GetOrDefault(Heimdall_Data, { "config", "stinkies" }, { - ["Ahhahahh"] = true, - ["Aye"] = true, - ["Bbd"] = true, - ["Blessly"] = true, - ["Bunkkeer"] = true, - ["Calmer"] = true, - ["Chuvirloeban"] = true, - ["Clairvoyant"] = true, - ["Dewdew"] = true, - ["Dwxrfshaman"] = true, - ["Ebanirot"] = true, - ["Heger"] = true, - ["Hmor"] = true, - ["Joule"] = true, - ["Kaøs"] = true, - ["Kromsaevmode"] = true, - ["Kugisara"] = true, - ["Lax"] = true, - ["Negron"] = true, - ["Oakskin"] = true, - ["Pizdosorkam"] = true, - ["Pussymism"] = true, - ["Rattenfenger"] = true, - ["Riener"] = true, - ["Rollbot"] = true, - ["Samuraqt"] = true, - ["Sekiiro"] = true, - ["Shadowmilf"] = true, - ["Sonikblaster"] = true, - ["Srakonyh"] = true, - ["Stuffo"] = true, - ["Subaruwrxsti"] = true, - ["Sukunexd"] = true, - ["Tomoki"] = true, - ["Unwashed"] = true, - ["Voitas"] = true, - ["Wataru"] = true, - ["Yooshima"] = true, - ["Анджелос"] = true, - ["Артейда"] = true, - ["Асталабиста"] = true, - ["Гебефрени"] = true, - ["Курлык"] = true, - ["Лжедмитресса"] = true, - ["Ловилуну"] = true, - ["Лопапа"] = true, - ["Неонанируй"] = true, - ["Паладийпал"] = true, - ["Психопаточка"] = true, - ["Сильверлейн"] = true, - ["Сосканереалк"] = true, - ["Счастьевам"] = true, - ["Фоська"] = true, - ["Фрил"] = true, - ["Ххантуля"] = true, - ["Чмодвенк"] = true, - ["Шпек"] = true, - }), + whisperNotify = shared.GetOrDefault(Heimdall_Data, { "config", "whisperNotify" }, { }), + stinkies = shared.GetOrDefault(Heimdall_Data, { "config", "stinkies" }, { }), inviter = { - enabled = data.GetOrDefault(Heimdall_Data, { "config", "inviter", "enabled" }, false), - listeningChannel = data.GetOrDefault(Heimdall_Data, { "config", "inviter", "listeningChannel" }, "Agent"), - keyword = data.GetOrDefault(Heimdall_Data, { "config", "inviter", "keyword" }, "+"), - whitelist = data.GetOrDefault(Heimdall_Data, { "config", "inviter", "whitelist" }, {}), + enabled = shared.GetOrDefault(Heimdall_Data, { "config", "inviter", "enabled" }, false), + listeningChannel = shared.GetOrDefault(Heimdall_Data, { "config", "inviter", "listeningChannel" }, "Agent"), + keyword = shared.GetOrDefault(Heimdall_Data, { "config", "inviter", "keyword" }, "+"), + whitelist = shared.GetOrDefault(Heimdall_Data, { "config", "inviter", "whitelist" }, {}), } } - data.raceMap = { + shared.raceMap = { ["Orc"] = "Horde", ["Undead"] = "Horde", ["Tauren"] = "Horde", @@ -272,7 +183,7 @@ local function init() ["Mag'har Orc"] = "Horde" } - data.classColors = { + shared.classColors = { ["Warrior"] = "C69B6D", ["Paladin"] = "F48CBA", ["Hunter"] = "AAD372", @@ -289,7 +200,7 @@ local function init() ---@param input string ---@return number - data.utf8len = function(input) + shared.utf8len = function(input) if not input then return 0 end @@ -317,9 +228,9 @@ local function init() ---@param targetLength number ---@param left boolean ---@return string - data.padString = function(input, targetLength, left) + shared.padString = function(input, targetLength, left) left = left or false - local len = data.utf8len(input) + local len = shared.utf8len(input) if len < targetLength then if left then input = input .. string.rep(" ", targetLength - len) @@ -330,11 +241,11 @@ local function init() return input end - data.Whoer.Init() - data.Messenger.Init() - data.Spotter.Init() - data.DeathReporter.Init() - data.Inviter.Init() + shared.Whoer.Init() + shared.Messenger.Init() + shared.Spotter.Init() + shared.DeathReporter.Init() + shared.Inviter.Init() print("Heimdall loaded!") end @@ -344,22 +255,4 @@ loadedFrame:SetScript("OnEvent", function(self, event, addonName) if addonName == addonname then init() end -end) - -local logoutFrame = CreateFrame("Frame") -logoutFrame:RegisterEvent("PLAYER_LOGOUT") -logoutFrame:SetScript("OnEvent", function(self, event) - Heimdall_Data.config.stinkies = data.config.stinkies - Heimdall_Data.config.inviter.whitelist = data.config.whitelist -end) - -SlashCmdList["HEIMDALL_TOGGLE_STINKY"] = function(input) - print("Toggling stinky: " .. tostring(input)) - if data.config.stinkies[input] then - data.config.stinkies[input] = nil - else - data.config.stinkies[input] = true - end - print(data.config.stinkies[input]) -end -SLASH_HEIMDALL_TOGGLE_STINKY1 = "/has" +end) \ No newline at end of file