From c61a4b0c046e9aa7abc94e7bc8c74dfc6b93480c Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Sun, 26 Jan 2025 22:44:59 +0100 Subject: [PATCH] Add structure for achievement sniffer --- Heimdall.lua | 17 ++++++++ Heimdall.toc | 3 +- Modules/AchievementSniffer.lua | 27 ++++++++++++ Modules/Config.lua | 75 +++++++++++++++++++++++++++++++++- 4 files changed, 119 insertions(+), 3 deletions(-) create mode 100644 Modules/AchievementSniffer.lua diff --git a/Heimdall.lua b/Heimdall.lua index a81e4ad..ca8b69f 100644 --- a/Heimdall.lua +++ b/Heimdall.lua @@ -58,6 +58,7 @@ local function init() ---@field NetworkMessenger InitTable ---@field StinkyCache InitTable ---@field Configurator InitTable + ---@field AchievementSniffer InitTable --- Config --- ---@class HeimdallConfig @@ -82,6 +83,7 @@ local function init() ---@field networkMessenger HeimdallNetworkMessengerConfig ---@field configurator HeimdallConfiguratorConfig ---@field stinkyCache HeimdallStinkyCacheConfig + ---@field achievementSniffer HeimdallAchievementSnifferConfig ---@field whisperNotify table ---@field addonPrefix string ---@field stinkies table @@ -255,6 +257,13 @@ local function init() ---@field commander string ---@field ttl number + ---@class HeimdallAchievementSnifferConfig + ---@field enabled boolean + ---@field debug boolean + ---@field texture string + ---@field offsetX number + ---@field offsetY number + --- Data --- ---@class HeimdallMessengerData ---@field queue table @@ -505,6 +514,13 @@ local function init() commander = shared.GetOrDefault(Heimdall_Data, { "config", "stinkyCache", "commander" }, "Heimdállr"), ttl = shared.GetOrDefault(Heimdall_Data, { "config", "stinkyCache", "ttl" }, 10), }, + achievementSniffer = { + enabled = shared.GetOrDefault(Heimdall_Data, { "config", "achievementSniffer", "enabled" }, false), + debug = shared.GetOrDefault(Heimdall_Data, { "config", "achievementSniffer", "debug" }, false), + texture = shared.GetOrDefault(Heimdall_Data, { "config", "achievementSniffer", "texture" }, "Aura53.tga"), + offsetX = shared.GetOrDefault(Heimdall_Data, { "config", "achievementSniffer", "offsetX" }, 0), + offsetY = shared.GetOrDefault(Heimdall_Data, { "config", "achievementSniffer", "offsetY" }, 0), + }, addonPrefix = shared.GetOrDefault(Heimdall_Data, { "config", "addonPrefix" }, "HEIMDALL"), channelLocale = shared.GetOrDefault(Heimdall_Data, { "config", "channelLocale" }, {}), } @@ -685,6 +701,7 @@ local function init() shared.NetworkMessenger.Init() shared.Configurator.Init() shared.StinkyCache.Init() + shared.AchievementSniffer.Init() print("Heimdall loaded!") end diff --git a/Heimdall.toc b/Heimdall.toc index 070af48..4d97c58 100644 --- a/Heimdall.toc +++ b/Heimdall.toc @@ -3,7 +3,7 @@ ## Version: 3.8.15 ## Notes: Watches over areas and alerts when hostiles spotted ## Author: Cyka -## SavedVariables: Heimdall_Data +## SavedVariables: Heimdall_Data, Heimdall_Achievements #core _L.lua @@ -33,4 +33,5 @@ Modules/Noter.lua Modules/NetworkMessenger.lua Modules/StinkyCache.lua Modules/Configurator.lua +Modules/AchievementSniffer.lua Heimdall.lua diff --git a/Modules/AchievementSniffer.lua b/Modules/AchievementSniffer.lua new file mode 100644 index 0000000..d588cf8 --- /dev/null +++ b/Modules/AchievementSniffer.lua @@ -0,0 +1,27 @@ +local addonname, shared = ... +---@cast shared HeimdallShared +---@cast addonname string +local ModuleName = "AchievementSniffer" + +local HeimdallRoot = "Interface\\AddOns\\Heimdall\\" +local TextureRoot = HeimdallRoot .. "Texture\\" + +---@diagnostic disable-next-line: missing-fields +shared.AchievementSniffer = {} +function shared.AchievementSniffer.Init() + if Heimdall_Data.config.achievementSniffer.debug then + print(string.format("[%s] Module initialized", ModuleName)) + end + + local framePool = {} + for i = 1, 40 do + local frame = CreateFrame("Frame") + frame.custom = { busy = false } + local texture = frame:CreateTexture(nil, "ARTWORK") + texture:SetAllPoints(frame) + texture:SetTexture(TextureRoot .. Heimdall_Data.config.achievementSniffer.texture) + table.insert(framePool, frame) + end + + print("[Heimdall] AchievementSniffer loaded") +end diff --git a/Modules/Config.lua b/Modules/Config.lua index 9c69fd3..927a3ba 100644 --- a/Modules/Config.lua +++ b/Modules/Config.lua @@ -571,13 +571,15 @@ function shared.Config.Init() configFrame:Add(debug, 2, 1) local russian = nil - local english = CreateBasicButton("HeimdallConfigEnglish", configFrame.frame, shared._L("english", Heimdall_Data.config.locale), function() + local english = CreateBasicButton("HeimdallConfigEnglish", configFrame.frame, + shared._L("english", Heimdall_Data.config.locale), function() Heimdall_Data.config.locale = "en" russian:UpdateColor(false) return Heimdall_Data.config.locale == "en" end) english:UpdateColor(Heimdall_Data.config.locale == "en") - russian = CreateBasicButton("HeimdallConfigRussian", configFrame.frame, shared._L("russian", Heimdall_Data.config.locale), function() + russian = CreateBasicButton("HeimdallConfigRussian", configFrame.frame, + shared._L("russian", Heimdall_Data.config.locale), function() Heimdall_Data.config.locale = "ru" english:UpdateColor(false) return Heimdall_Data.config.locale == "ru" @@ -1990,6 +1992,75 @@ function shared.Config.Init() networkMessengerConfigFrame:Add(interval, 2, 6) end + -- AchievementSniffer + do + local r, g, b, a = GetNextColor() + local achievementSnifferConfigFrame = GridFrame.new("HeimdallAchievementSnifferConfig", + UIParent, 12, 20) + achievementSnifferConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) + configFrame:Add(achievementSnifferConfigFrame, 14, 3) + + local title = CreateFancyText("HeimdallAchievementSnifferConfigTitle", achievementSnifferConfigFrame.frame, + shared._L("achievementSniffer", Heimdall_Data.config.locale), + { r, g, b, a }) + achievementSnifferConfigFrame:Add(title, 1, 8) + + local debugButton = CreateBasicButton("HeimdallAchievementSnifferConfigDebugButton", + achievementSnifferConfigFrame.frame, shared._L("debug", Heimdall_Data.config.locale), function() + Heimdall_Data.config.achievementSniffer.debug = not Heimdall_Data.config.achievementSniffer.debug + return Heimdall_Data.config.achievementSniffer.debug + end) + debugButton:UpdateColor(Heimdall_Data.config.achievementSniffer.debug) + achievementSnifferConfigFrame:Add(debugButton, 1, 4) + + local enableButton = CreateBasicButton("HeimdallAchievementSnifferConfigEnableButton", + achievementSnifferConfigFrame.frame, shared._L("enabled", Heimdall_Data.config.locale), function() + Heimdall_Data.config.achievementSniffer.enabled = not Heimdall_Data.config.achievementSniffer.enabled + return Heimdall_Data.config.achievementSniffer.enabled + end) + enableButton:UpdateColor(Heimdall_Data.config.achievementSniffer.enabled) + achievementSnifferConfigFrame:Add(enableButton, 2, 3) + + local texture = CreateBasicSmallEditBox("HeimdallAchievementSnifferConfigTexture", + achievementSnifferConfigFrame.frame, shared._L("texture", Heimdall_Data.config.locale), + Heimdall_Data.config.achievementSniffer.texture, + function(self) + local text = self:GetText() + Heimdall_Data.config.achievementSniffer.texture = text + end) + achievementSnifferConfigFrame:Add(texture, 2, 3) + + local offsetX = CreateBasicSmallEditBox("HeimdallAchievementSnifferConfigOffsetX", + achievementSnifferConfigFrame.frame, shared._L("offsetX", Heimdall_Data.config.locale), + tostring(Heimdall_Data.config.achievementSniffer.offsetX), + function(self) + local text = self:GetText() + if string.match(text, "%d+") then + Heimdall_Data.config.achievementSniffer.offsetX = tonumber(text) + print("Offset X set to", tostring(text)) + else + print("Invalid offset X", text) + self:SetText(tostring(Heimdall_Data.config.achievementSniffer.offsetX)) + end + end) + achievementSnifferConfigFrame:Add(offsetX, 2, 3) + + local offsetY = CreateBasicSmallEditBox("HeimdallAchievementSnifferConfigOffsetY", + achievementSnifferConfigFrame.frame, shared._L("offsetY", Heimdall_Data.config.locale), + tostring(Heimdall_Data.config.achievementSniffer.offsetY), + function(self) + local text = self:GetText() + if string.match(text, "%d+") then + Heimdall_Data.config.achievementSniffer.offsetY = tonumber(text) + print("Offset Y set to", tostring(text)) + else + print("Invalid offset Y", text) + self:SetText(tostring(Heimdall_Data.config.achievementSniffer.offsetY)) + end + end) + achievementSnifferConfigFrame:Add(offsetY, 2, 3) + end + -- Addon prefix do local r, g, b, a = GetNextColor()