diff --git a/Heimdall.lua b/Heimdall.lua index f041419..3e61a35 100644 --- a/Heimdall.lua +++ b/Heimdall.lua @@ -36,30 +36,30 @@ local function init() ---@field Memoize fun(f: function): function ---@field GetLocaleForChannel fun(channel: string): string ---@field WhoQueryService WhoQueryService - ---@field Whoer InitTable|{ShouldNotifyForZone: fun(zone: string): boolean} - ---@field AchievementSniffer InitTable + ---@field AchievementSniffer AchievementSniffer ---@field AgentTracker AgentTracker - ---@field BonkDetector InitTable - ---@field Bully InitTable - ---@field CombatAlerter InitTable - ---@field Commander InitTable - ---@field Config InitTable - ---@field Configurator InitTable - ---@field DeathReporter InitTable - ---@field Dueler InitTable - ---@field Echoer InitTable - ---@field Emoter InitTable - ---@field Inviter InitTable - ---@field Macroer InitTable - ---@field Messenger InitTable - ---@field MinimapTagger InitTable - ---@field Network InitTable - ---@field NetworkMessenger InitTable - ---@field Noter InitTable - ---@field Sniffer InitTable - ---@field Spotter InitTable - ---@field StinkyCache InitTable + ---@field BonkDetector BonkDetector + ---@field Bully Bully + ---@field CombatAlerter CombatAlerter + ---@field Commander Commander + ---@field Config Config + ---@field Configurator Configurator + ---@field DeathReporter DeathReporter + ---@field Dueler Dueler + ---@field Echoer Echoer + ---@field Emoter Emoter + ---@field Inviter Inviter + ---@field Macroer Macroer + ---@field Messenger Messenger + ---@field MinimapTagger MinimapTagger + ---@field Network Network + ---@field NetworkMessenger NetworkMessenger + ---@field Noter Noter + ---@field Sniffer Sniffer + ---@field Spotter Spotter + ---@field StinkyCache StinkyCache ---@field StinkyTracker StinkyTracker + ---@field Whoer Whoer --- Config --- ---@class HeimdallConfig @@ -119,19 +119,6 @@ local function init() ---@field debug boolean ---@field interval number - ---@class HeimdallInviterConfig - ---@field enabled boolean - ---@field debug boolean - ---@field channels string[] - ---@field keyword string - ---@field allAssist boolean - ---@field agentsAssist boolean - ---@field throttle number - ---@field kickOffline boolean - ---@field cleanupInterval number - ---@field afkThreshold number - ---@field listeningChannel table - ---@class HeimdallDuelerConfig ---@field enabled boolean ---@field debug boolean @@ -149,25 +136,12 @@ local function init() ---@field channels string[] ---@field prefix string - ---@class HeimdallMacroerConfig - ---@field enabled boolean - ---@field debug boolean - ---@field priority string[] - ---@class HeimdallStinkyTrackerConfig ---@field enabled boolean ---@field debug boolean ---@field ignoredTimeout number ---@field channels string[] - ---@class HeimdallSnifferConfig - ---@field enabled boolean - ---@field debug boolean - ---@field channels string[] - ---@field throttle number - ---@field zoneOverride string? - ---@field stinky boolean - ---@class HeimdallMinimapTaggerConfig ---@field enabled boolean ---@field debug boolean diff --git a/Modules/AchievementSniffer.lua b/Modules/AchievementSniffer.lua index 1c0e248..de00060 100644 --- a/Modules/AchievementSniffer.lua +++ b/Modules/AchievementSniffer.lua @@ -74,220 +74,221 @@ local Achievements = { 12448, } ----@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 guidMap = {} - - ---@class AchievementData - ---@field id number - ---@field date string - ---@field completed boolean - - ---@class Heimdall_Achievements - ---@field players table> - ---@field alreadySeen table - ---@field rescan boolean - if not Heimdall_Achievements then Heimdall_Achievements = {} end - if not Heimdall_Achievements.players then Heimdall_Achievements.players = {} end - if not Heimdall_Achievements.alreadySeen then Heimdall_Achievements.alreadySeen = {} end - - --local framePool = {} - --for i = 1, 40 do - -- local frame = CreateFrame("Frame", "HeimdallAchievementSnifferNameplate" .. i, UIParent) - -- local texture = frame:CreateTexture(nil, "ARTWORK") - -- texture:SetAllPoints(frame) - -- texture:SetTexture(TextureRoot .. Heimdall_Data.config.achievementSniffer.texture) - -- frame.texture = texture - -- frame:Hide() - -- table.insert(framePool, frame) - --end - - ---@param name string - ---@return boolean - local function ShouldInspect(name) - local should = false - if not Heimdall_Achievements.players[name] then - if Heimdall_Data.config.achievementSniffer.debug then - print(string.format("[%s] Player %s does not have prior achievement data", ModuleName, name)) - end - should = true - end - if Heimdall_Achievements.alreadySeen[name] then - if Heimdall_Data.config.achievementSniffer.debug then - print(string.format("[%s] Player %s has already been seen", ModuleName, name)) - end - -- Save some memory - Heimdall_Achievements.players[name] = nil - should = false - end - if Heimdall_Data.config.achievementSniffer.rescan then - if Heimdall_Data.config.achievementSniffer.debug then - print(string.format("[%s] Rescan is enabled", ModuleName)) - end - should = true - end - return should - end - - -- It's not working well AT ALL - -- I don't know how to do it better - -- It simply just does not work... - --local function UpdateFrames() - -- for i, frame in ipairs(framePool) do - -- local unit = "nameplate" .. i - -- if not UnitExists(unit) then - -- --if Heimdall_Data.config.achievementSniffer.debug then - -- -- print(string.format("[%s] Unit %s does not exist, hiding frame", ModuleName, unit)) - -- --end - -- frame:Hide() - -- else - -- --local unitFrame = _G[string.format("ElvUI_NamePlate%dHealthBar", i)] - -- local unitFrame = _G[string.format("NamePlate%d", i)] - -- if unitFrame == nil then - -- if Heimdall_Data.config.achievementSniffer.debug then - -- print(string.format("[%s] Unit frame for %s not found", ModuleName, unit)) - -- end - -- frame:Hide() - -- else - -- local unitName = UnitName(unit) - -- if Heimdall_Data.config.achievementSniffer.debug then - -- print(string.format("[%s] Unit frame found for %s (%s)", ModuleName, unit, unitName)) - -- end - -- frame:Show() - -- frame:SetSize(32, 32) - -- frame:SetFrameStrata("HIGH") - -- frame:SetFrameLevel(100) - -- frame:SetScale(Heimdall_Data.config.achievementSniffer.iconScale) - -- frame.texture:SetTexture(TextureRoot .. Heimdall_Data.config.achievementSniffer.texture) - -- frame:SetPoint("CENTER", unitFrame, "CENTER", - -- Heimdall_Data.config.achievementSniffer.offsetX, - -- Heimdall_Data.config.achievementSniffer.offsetY) - -- frame:SetParent(unitFrame) - -- frame:SetAlpha(1) - -- local exists = ShouldInspect(unitName) - -- if exists then - -- frame.texture:SetVertexColor(1, 0, 0, 1) - -- else - -- frame.texture:SetVertexColor(0, 1, 0, 1) - -- end - -- if Heimdall_Data.config.achievementSniffer.debug then - -- print(string.format("[%s] Frame updated for %s", ModuleName, unitName)) - -- end - -- end - -- end - -- end - --end - - ---@param unit string - local function TryInspect(unit) - local targetPlayer = UnitIsPlayer(unit) - if not targetPlayer then return end - local targetName = UnitName(unit) - local targetGuid = UnitGUID(unit) - guidMap[targetGuid] = targetName - - if not ShouldInspect(targetName) then - if Heimdall_Data.config.achievementSniffer.debug then - print(string.format("[%s] Not inspecting player: %s", ModuleName, targetName)) - end - return - end - - local canInspect = CheckInteractDistance(unit, 1) - if canInspect then - if Heimdall_Data.config.achievementSniffer.debug then - print(string.format("[%s] Inspecting player: %s", ModuleName, targetName)) - end - SetAchievementComparisonUnit(unit) - else - if Heimdall_Data.config.achievementSniffer.debug then - print(string.format("[%s] Cannot inspect player (too far?): %s", ModuleName, targetName)) - end - end - end - - ---@param name string - local function Scan(name) +---@class AchievementSniffer +shared.AchievementSniffer = { + Init = function() if Heimdall_Data.config.achievementSniffer.debug then - print(string.format("[%s] Scanning achievements for %s", ModuleName, name)) + print(string.format("[%s] Module initialized", ModuleName)) end - Heimdall_Achievements.players[name] = {} - for i, aid in ipairs(Achievements) do - local completed, month, day, year = GetAchievementComparisonInfo(aid) - if completed then - ---@type string - local yearstr = "" .. year - if year < 100 then yearstr = "20" .. year end + local guidMap = {} - local date = string.format("%04d-%02d-%02d", yearstr, month, day) + ---@class AchievementData + ---@field id number + ---@field date string + ---@field completed boolean - local data = { - id = aid, - date = date, - completed = completed, - } + ---@class Heimdall_Achievements + ---@field players table> + ---@field alreadySeen table + ---@field rescan boolean + if not Heimdall_Achievements then Heimdall_Achievements = {} end + if not Heimdall_Achievements.players then Heimdall_Achievements.players = {} end + if not Heimdall_Achievements.alreadySeen then Heimdall_Achievements.alreadySeen = {} end + + --local framePool = {} + --for i = 1, 40 do + -- local frame = CreateFrame("Frame", "HeimdallAchievementSnifferNameplate" .. i, UIParent) + -- local texture = frame:CreateTexture(nil, "ARTWORK") + -- texture:SetAllPoints(frame) + -- texture:SetTexture(TextureRoot .. Heimdall_Data.config.achievementSniffer.texture) + -- frame.texture = texture + -- frame:Hide() + -- table.insert(framePool, frame) + --end + + ---@param name string + ---@return boolean + local function ShouldInspect(name) + local should = false + if not Heimdall_Achievements.players[name] then if Heimdall_Data.config.achievementSniffer.debug then - print(string.format("[%s] Achievement %d completed on %s", ModuleName, aid, date)) + print(string.format("[%s] Player %s does not have prior achievement data", ModuleName, name)) + end + should = true + end + if Heimdall_Achievements.alreadySeen[name] then + if Heimdall_Data.config.achievementSniffer.debug then + print(string.format("[%s] Player %s has already been seen", ModuleName, name)) + end + -- Save some memory + Heimdall_Achievements.players[name] = nil + should = false + end + if Heimdall_Data.config.achievementSniffer.rescan then + if Heimdall_Data.config.achievementSniffer.debug then + print(string.format("[%s] Rescan is enabled", ModuleName)) + end + should = true + end + return should + end + + -- It's not working well AT ALL + -- I don't know how to do it better + -- It simply just does not work... + --local function UpdateFrames() + -- for i, frame in ipairs(framePool) do + -- local unit = "nameplate" .. i + -- if not UnitExists(unit) then + -- --if Heimdall_Data.config.achievementSniffer.debug then + -- -- print(string.format("[%s] Unit %s does not exist, hiding frame", ModuleName, unit)) + -- --end + -- frame:Hide() + -- else + -- --local unitFrame = _G[string.format("ElvUI_NamePlate%dHealthBar", i)] + -- local unitFrame = _G[string.format("NamePlate%d", i)] + -- if unitFrame == nil then + -- if Heimdall_Data.config.achievementSniffer.debug then + -- print(string.format("[%s] Unit frame for %s not found", ModuleName, unit)) + -- end + -- frame:Hide() + -- else + -- local unitName = UnitName(unit) + -- if Heimdall_Data.config.achievementSniffer.debug then + -- print(string.format("[%s] Unit frame found for %s (%s)", ModuleName, unit, unitName)) + -- end + -- frame:Show() + -- frame:SetSize(32, 32) + -- frame:SetFrameStrata("HIGH") + -- frame:SetFrameLevel(100) + -- frame:SetScale(Heimdall_Data.config.achievementSniffer.iconScale) + -- frame.texture:SetTexture(TextureRoot .. Heimdall_Data.config.achievementSniffer.texture) + -- frame:SetPoint("CENTER", unitFrame, "CENTER", + -- Heimdall_Data.config.achievementSniffer.offsetX, + -- Heimdall_Data.config.achievementSniffer.offsetY) + -- frame:SetParent(unitFrame) + -- frame:SetAlpha(1) + -- local exists = ShouldInspect(unitName) + -- if exists then + -- frame.texture:SetVertexColor(1, 0, 0, 1) + -- else + -- frame.texture:SetVertexColor(0, 1, 0, 1) + -- end + -- if Heimdall_Data.config.achievementSniffer.debug then + -- print(string.format("[%s] Frame updated for %s", ModuleName, unitName)) + -- end + -- end + -- end + -- end + --end + + ---@param unit string + local function TryInspect(unit) + local targetPlayer = UnitIsPlayer(unit) + if not targetPlayer then return end + local targetName = UnitName(unit) + local targetGuid = UnitGUID(unit) + guidMap[targetGuid] = targetName + + if not ShouldInspect(targetName) then + if Heimdall_Data.config.achievementSniffer.debug then + print(string.format("[%s] Not inspecting player: %s", ModuleName, targetName)) + end + return + end + + local canInspect = CheckInteractDistance(unit, 1) + if canInspect then + if Heimdall_Data.config.achievementSniffer.debug then + print(string.format("[%s] Inspecting player: %s", ModuleName, targetName)) + end + SetAchievementComparisonUnit(unit) + else + if Heimdall_Data.config.achievementSniffer.debug then + print(string.format("[%s] Cannot inspect player (too far?): %s", ModuleName, targetName)) end - Heimdall_Achievements.players[name][aid] = data end end - --UpdateFrames() - end - local nameplateFrame = CreateFrame("Frame") - nameplateFrame:RegisterEvent("NAME_PLATE_UNIT_ADDED") - nameplateFrame:RegisterEvent("NAME_PLATE_UNIT_REMOVED") - nameplateFrame:SetScript("OnEvent", function(self, event, unit) - if not Heimdall_Data.config.achievementSniffer.enabled then return end - if Heimdall_Data.config.achievementSniffer.debug then - print(string.format("[%s] Event triggered: %s for unit: %s", ModuleName, event, unit)) - end - if event == "NAME_PLATE_UNIT_ADDED" then TryInspect(unit) end - --UpdateFrames() - end) - - local inspectFrame = CreateFrame("Frame") - inspectFrame:RegisterEvent("INSPECT_ACHIEVEMENT_READY") - inspectFrame:SetScript("OnEvent", function(self, event, guid) - if not Heimdall_Data.config.achievementSniffer.enabled then return end - local name = guidMap[guid] - if not name then + ---@param name string + local function Scan(name) if Heimdall_Data.config.achievementSniffer.debug then - print(string.format("[%s] No name found for guid: %s", ModuleName, guid)) + print(string.format("[%s] Scanning achievements for %s", ModuleName, name)) end - return - end - if Heimdall_Data.config.achievementSniffer.debug then - print(string.format("[%s] Event triggered: %s for player: %s", ModuleName, event, name)) - end - Scan(name) - end) + Heimdall_Achievements.players[name] = {} + for i, aid in ipairs(Achievements) do + local completed, month, day, year = GetAchievementComparisonInfo(aid) + if completed then + ---@type string + local yearstr = "" .. year + if year < 100 then yearstr = "20" .. year end - local function Tick() - C_Timer.NewTimer(Heimdall_Data.config.achievementSniffer.scanInterval, Tick) - if not Heimdall_Data.config.achievementSniffer.enabled then return end + local date = string.format("%04d-%02d-%02d", yearstr, month, day) - if Heimdall_Data.config.achievementSniffer.debug then - print(string.format("[%s] Scanning achievements for everyone on screen", ModuleName)) - end - for i = 1, 40 do - local unit = "nameplate" .. i - if UnitExists(unit) then - TryInspect(unit) - --else - -- if Heimdall_Data.config.achievementSniffer.debug then - -- print(string.format("[%s] Unit %s does not exist, nothing to inspect", ModuleName, unit)) - -- end + local data = { + id = aid, + date = date, + completed = completed, + } + if Heimdall_Data.config.achievementSniffer.debug then + print(string.format("[%s] Achievement %d completed on %s", ModuleName, aid, date)) + end + Heimdall_Achievements.players[name][aid] = data + end end + --UpdateFrames() end - --UpdateFrames() - end - Tick() - print("[Heimdall] AchievementSniffer loaded") -end + local nameplateFrame = CreateFrame("Frame") + nameplateFrame:RegisterEvent("NAME_PLATE_UNIT_ADDED") + nameplateFrame:RegisterEvent("NAME_PLATE_UNIT_REMOVED") + nameplateFrame:SetScript("OnEvent", function(self, event, unit) + if not Heimdall_Data.config.achievementSniffer.enabled then return end + if Heimdall_Data.config.achievementSniffer.debug then + print(string.format("[%s] Event triggered: %s for unit: %s", ModuleName, event, unit)) + end + if event == "NAME_PLATE_UNIT_ADDED" then TryInspect(unit) end + --UpdateFrames() + end) + + local inspectFrame = CreateFrame("Frame") + inspectFrame:RegisterEvent("INSPECT_ACHIEVEMENT_READY") + inspectFrame:SetScript("OnEvent", function(self, event, guid) + if not Heimdall_Data.config.achievementSniffer.enabled then return end + local name = guidMap[guid] + if not name then + if Heimdall_Data.config.achievementSniffer.debug then + print(string.format("[%s] No name found for guid: %s", ModuleName, guid)) + end + return + end + if Heimdall_Data.config.achievementSniffer.debug then + print(string.format("[%s] Event triggered: %s for player: %s", ModuleName, event, name)) + end + Scan(name) + end) + + local function Tick() + C_Timer.NewTimer(Heimdall_Data.config.achievementSniffer.scanInterval, Tick) + if not Heimdall_Data.config.achievementSniffer.enabled then return end + + if Heimdall_Data.config.achievementSniffer.debug then + print(string.format("[%s] Scanning achievements for everyone on screen", ModuleName)) + end + for i = 1, 40 do + local unit = "nameplate" .. i + if UnitExists(unit) then + TryInspect(unit) + --else + -- if Heimdall_Data.config.achievementSniffer.debug then + -- print(string.format("[%s] Unit %s does not exist, nothing to inspect", ModuleName, unit)) + -- end + end + end + --UpdateFrames() + end + Tick() + + print("[Heimdall] AchievementSniffer loaded") + end, +} diff --git a/Modules/BonkDetector.lua b/Modules/BonkDetector.lua index 1b8767f..d0467de 100644 --- a/Modules/BonkDetector.lua +++ b/Modules/BonkDetector.lua @@ -1,5 +1,6 @@ local _, shared = ... ---@cast shared HeimdallShared +local ModuleName = "BonkDetector" ---@class HeimdallBonkDetectorConfig ---@field enabled boolean @@ -7,8 +8,7 @@ local _, shared = ... ---@field channels string[] ---@field throttle number -local ModuleName = "BonkDetector" - +---@class BonkDetector shared.BonkDetector = { ---@return nil Init = function() diff --git a/Modules/Bully.lua b/Modules/Bully.lua index 0dc02e0..c8f87c8 100644 --- a/Modules/Bully.lua +++ b/Modules/Bully.lua @@ -1,12 +1,12 @@ local _, shared = ... ---@cast shared HeimdallShared +local ModuleName = "Bully" ---@class HeimdallBullyConfig ---@field enabled boolean ---@field debug boolean -local ModuleName = "Bully" - +---@class Bully shared.Bully = { ---@return nil Init = function() diff --git a/Modules/Commander.lua b/Modules/Commander.lua index bc10425..c107566 100644 --- a/Modules/Commander.lua +++ b/Modules/Commander.lua @@ -1,394 +1,389 @@ -local _, shared = ... ----@cast shared HeimdallShared - ----@class HeimdallCommanderConfig ----@field enabled boolean ----@field debug boolean ----@field channels string[] ----@field commander string ----@field commands table - -local ModuleName = "Commander" - -local helpMessages = { - ru = { - "1) who - пишет вам никнеймы текущих врагов и локу.", - "2) classes - покажет классы врагов и число.", - "3) howmany - общее число врагов (дурик 4 . огри 2 ) ", - "4) + - атоинвайт в сбор пати и сброса кд.", - "5) ++ -автоинвайт в пати аликов (если нужен рефрак)", - "6 ) note Никнейм текст - добавление заметки.", - "7) note Никнейм - посмотреть последние заметки.", - "8) note Никнейм 5 - посмотреть конкретную заметку.", - "9) note Никнейм 1..5 - посмотреть заметки от 1 до 5", - "10) note Никнейм delete 1 - удалить заметку номер 1", - "11) note Никнейм delete 1..5 - удалить заметки 1 до 5", - }, - en = { - "1) who - reports currently tracked stinkies in orgrimmar and durotar", - "2) classes - reports stinkies grouped by class", - "3) howmany - reports stinkies grouped by zone", - "4) + - automatically invites to group with duel rogue for cd reset", - "5) ++ - automatically invites to alliance group", - "6) note - adds a note for the specified character.", - "7) note - lists the last N notes for the character.", - "8) note i - lists the i-th note for the character.", - "9) note i..j - lists notes from i to j for the character.", - "10) note delete i - deletes the i-th note for the character.", - "11) note delete i..j - deletes notes from i to j for the character.", - }, -} - ----@class Commander -shared.Commander = { - Init = function() - ---@param text string - ---@param size number - ---@return string[] - local function Partition(text, size) - local words = {} - for word in text:gmatch("[^,]+") do - words[#words + 1] = word - end - - local ret = {} - local currentChunk = "" - - for _, word in ipairs(words) do - if #currentChunk + #word + 1 <= size then - currentChunk = currentChunk .. (currentChunk == "" and word or " " .. word) - else - if #currentChunk > 0 then ret[#ret + 1] = currentChunk end - currentChunk = word - end - end - - if #currentChunk > 0 then ret[#ret + 1] = currentChunk end - - return ret - end - ---@param arr table - ---@return string[] - local function Count(arr) - local ret = {} - for _, player in pairs(arr) do - if shared.Whoer.ShouldNotifyForZone(player.zone) then ret[player.zone] = (ret[player.zone] or 0) + 1 end - end - local text = {} - for zone, count in pairs(ret) do - text[#text + 1] = string.format("%s: %d", zone, count) - end - return text - end - ---@param arr table - ---@return string[] - local function CountPartitioned(arr) - local count = Count(arr) - local text = {} - ---@diagnostic disable-next-line: param-type-mismatch something wrong with luals, it's picking up the "wrong" unpack - for _, line in pairs(Partition(strjoin(", ", unpack(count)), 200)) do - text[#text + 1] = line - end - return text - end - ---@param arr table - ---@return string[] - local function Who(arr) - local ret = {} - for _, player in pairs(arr) do - if shared.Whoer.ShouldNotifyForZone(player.zone) then - ret[#ret + 1] = string.format( - "%s/%s (%s) %s", - player.name, - player.class, - player.zone, - player.stinky and "(!!!!)" or "" - ) - end - end - if Heimdall_Data.config.commander.debug then - print(string.format("[%s] Command result: %s", ModuleName, strjoin(", ", unpack(ret)))) - end - return ret - end - ---@param arr table - ---@return string[] - local function WhoPartitioned(arr) - local who = Who(arr) - local text = {} - ---@diagnostic disable-next-line: param-type-mismatch something wrong with luals, it's picking up the "wrong" unpack - for _, line in pairs(Partition(strjoin(", ", unpack(who)), 200)) do - text[#text + 1] = "who: " .. line - end - return text - end - ---@param arr table - ---@return string[] - local function CountClass(arr) - local ret = {} - for _, player in pairs(arr) do - if shared.Whoer.ShouldNotifyForZone(player.zone) then - ret[player.class] = (ret[player.class] or 0) + 1 - end - end - local text = {} - for class, count in pairs(ret) do - text[#text + 1] = string.format("%s: %d", class, count) - end - if Heimdall_Data.config.commander.debug then - print(string.format("[%s] Message text: %s", ModuleName, strjoin(", ", unpack(text)))) - end - return text - end - ---@param arr table - ---@return string[] - local function CountClassPartitioned(arr) - local countClass = CountClass(arr) - local text = {} - ---@diagnostic disable-next-line: param-type-mismatch something wrong with luals, it's picking up the "wrong" unpack - for _, line in pairs(Partition(strjoin(", ", unpack(countClass)), 200)) do - text[#text + 1] = line - end - return text - end - local function CountClassPartitionedStinkies() - if Heimdall_Data.config.commander.debug then - print(string.format("[%s] Executing: CountClassPartitionedStinkies", ModuleName)) - end - local res = CountClassPartitioned(HeimdallStinkies) - if #res == 0 then return { "No stinkies found" } end - return res - end - local function WhoPartitionedStinkies() - if Heimdall_Data.config.commander.debug then - print(string.format("[%s] Executing: WhoPartitionedStinkies", ModuleName)) - shared.dumpTable(HeimdallStinkies) - end - local res = WhoPartitioned(HeimdallStinkies) - if #res == 0 then return { "No stinkies found" } end - return res - end - local function CountPartitionedStinkies() - if Heimdall_Data.config.commander.debug then - print(string.format("[%s] Executing: CountPartitionedStinkies", ModuleName)) - end - local res = CountPartitioned(HeimdallStinkies) - if #res == 0 then return { "No stinkies found" } end - return res - end - local function HelpRu() - if Heimdall_Data.config.commander.debug then print(string.format("[%s] Executing: HelpRu", ModuleName)) end - return helpMessages.ru - end - local function HelpEn() - if Heimdall_Data.config.commander.debug then print(string.format("[%s] Executing: HelpEn", ModuleName)) end - return helpMessages.en - end - local groupInviteFrame = CreateFrame("Frame") - groupInviteFrame:SetScript("OnEvent", function(self, event, ...) - if Heimdall_Data.config.commander.debug then print(string.format("[%s] Event received", ModuleName)) end - AcceptGroup() - groupInviteFrame:UnregisterEvent("PARTY_INVITE_REQUEST") - C_Timer.NewTimer(0.1, function() - if Heimdall_Data.config.commander.debug then - print(string.format("[%s] Click event triggered", ModuleName)) - end - _G["StaticPopup1Button1"]:Click() - end, 1) - end) - local function JoinGroup() - if Heimdall_Data.config.commander.debug then - print(string.format("[%s] JoinGroup command received", ModuleName)) - end - groupInviteFrame:RegisterEvent("PARTY_INVITE_REQUEST") - C_Timer.NewTimer(10, function() groupInviteFrame:UnregisterEvent("PARTY_INVITE_REQUEST") end, 1) - return { "+" } - end - local function LeaveGroup() - if Heimdall_Data.config.commander.debug then - print(string.format("[%s] LeaveGroup command received", ModuleName)) - end - LeaveParty() - return {} - end - ---@param target string - local function FollowTarget(target) - if Heimdall_Data.config.commander.debug then - print(string.format("[%s] Following target: %s", ModuleName, target)) - end - if not target then return end - FollowUnit(target) - return {} - end - - ---@param args string[] - local function MacroTarget(args) - if Heimdall_Data.config.commander.debug then - ---@diagnostic disable-next-line: param-type-mismatch something wrong with luals, it's picking up the "wrong" unpack - print(string.format("[%s] Macroing: %s", ModuleName, strjoin(" ", unpack(args)))) - end - if #args < 2 or #args % 2 ~= 0 then - if #args < 2 or #args % 2 ~= 0 then - if Heimdall_Data.config.commander.debug then - print(string.format("[%s] Invalid number of arguments for MacroTarget", ModuleName)) - end - return {} - end - end - table.remove(args, 1) - - for i = 1, #args do - local stinky = strtrim(args[i]) - local name = stinky:match("([^/]+)") - local class = stinky:match("/([^ $]+)") - if Heimdall_Data.config.commander.debug then - print(string.format("[%s] Adding stinky: %s/%s", ModuleName, name, tostring(class))) - end - shared.StinkyTracker.Track({ - name = name, - class = class or "unknown", - seenAt = GetTime(), - hostile = true, - }) - if Heimdall_Data.config.commander.debug then - print(string.format("[%s] Added stinky: %s/%s", ModuleName, name, tostring(class))) - end - end - return {} - end - - ---@param args string[] - local function IgnoreMacroTarget(args) - if Heimdall_Data.config.commander.debug then - ---@diagnostic disable-next-line: param-type-mismatch something wrong with luals, it's picking up the "wrong" unpack - print(string.format("[%s] Macroing: %s", ModuleName, strjoin(" ", unpack(args)))) - end - if #args < 1 then - if Heimdall_Data.config.commander.debug then - print(string.format("[%s] Invalid number of arguments for IgnoreMacroTarget", ModuleName)) - end - return {} - end - table.remove(args, 1) - - for i = 1, #args do - local stinky = strtrim(args[i]) - local name = stinky:match("([^/]+)") - if Heimdall_Data.config.commander.debug then - print(string.format("[%s] Ignoring stinky: %s", ModuleName, name)) - end - shared.StinkyTracker.Ignore(name) - end - return {} - end - - ---@class Command - ---@field keywordRe string - ---@field commanderOnly boolean - ---@field callback fun(...: any): string[] - - local commands = { - { keywordRe = "^who$", commanderOnly = false, callback = WhoPartitionedStinkies }, - { keywordRe = "^howmany$", commanderOnly = false, callback = CountPartitionedStinkies }, - { keywordRe = "^classes$", commanderOnly = false, callback = CountClassPartitionedStinkies }, - { keywordRe = "^help$", commanderOnly = false, callback = HelpRu }, - { keywordRe = "^helpen$", commanderOnly = false, callback = HelpEn }, - { keywordRe = "^joingroup$", commanderOnly = false, callback = JoinGroup }, - { keywordRe = "^leavegroup$", commanderOnly = false, callback = LeaveGroup }, - { keywordRe = "^follow$", commanderOnly = false, callback = FollowTarget }, - { keywordRe = "^macro", commanderOnly = false, callback = MacroTarget }, - { keywordRe = "^ignore", commanderOnly = false, callback = IgnoreMacroTarget }, - } - - local commanderChannelFrame = CreateFrame("Frame") - commanderChannelFrame:RegisterEvent("CHAT_MSG_CHANNEL") - commanderChannelFrame:SetScript("OnEvent", function(self, event, msg, sender, ...) - --if Heimdall_Data.config.commander.debug then - -- print(string.format("[%s] Event received", ModuleName)) - -- shared.dumpTable(Heimdall_Data.config.commander) - --end - if not Heimdall_Data.config.commander.enabled then - --if Heimdall_Data.config.commander.debug then - -- print(string.format("[%s] Module disabled, ignoring event", ModuleName)) - --end - return - end - local channelId = select(6, ...) - local _, channelname = GetChannelName(channelId) - local ok = false - for _, channel in pairs(Heimdall_Data.config.commander.channels) do - if channel == channelname then - ok = true - break - end - end - if not ok then - if Heimdall_Data.config.commander.debug then - print( - string.format( - "[%s] Channel name '%s' does not match any of the channels '%s'", - ModuleName, - channelname, - table.concat(Heimdall_Data.config.commander.channels, ", ") - ) - ) - end - return - end - - sender = string.match(sender, "^[^-]+") - if Heimdall_Data.config.commander.debug then - print(string.format("[%s] Message from: %s", ModuleName, sender)) - shared.dumpTable(Heimdall_Data.config.commander) - end - - for _, command in ipairs(commands) do - local enabled = Heimdall_Data.config.commander.commands[command.keywordRe] == true or false - if Heimdall_Data.config.commander.debug then - print( - string.format("[%s] Command match: %s = %s", ModuleName, command.keywordRe, tostring(enabled)) - ) - end - if - enabled - and ( - not command.commanderOnly - -- if Heimdall_Data.config.commander.debug then print(string.format("[%s] Ignoring command, sender %s not commander %s", ModuleName, sender, Heimdall_Data.config.commander.commander)) end - - - - - or (command.commanderOnly and sender == Heimdall_Data.config.commander.commander) - ) - then - if msg:match(command.keywordRe) then - ---@diagnostic disable-next-line: redundant-parameter Currently luals does not support variadic functions as a @field - local messages = command.callback({ strsplit(",", msg) }) - if Heimdall_Data.config.commander.debug then - ---@diagnostic disable-next-line: param-type-mismatch - print( - string.format("[%s] Messages to send: %s", ModuleName, strjoin(", ", unpack(messages))) - ) - end - for _, message in ipairs(messages) do - ---@type Message - local returnmsg = { - channel = "C", - data = channelname, - message = message, - } - if Heimdall_Data.config.commander.debug then - print(string.format("[%s] Queuing message", ModuleName)) - shared.dumpTable(msg) - end - --table.insert(shared.messenger.queue, msg) - table.insert(shared.networkMessenger.queue, returnmsg) - end - end - end - end - end) - - print("[Heimdall] Commander module loaded") - end, -} +local _, shared = ... +---@cast shared HeimdallShared +local ModuleName = "Commander" + +---@class HeimdallCommanderConfig +---@field enabled boolean +---@field debug boolean +---@field channels string[] +---@field commander string +---@field commands table + +local helpMessages = { + ru = { + "1) who - пишет вам никнеймы текущих врагов и локу.", + "2) classes - покажет классы врагов и число.", + "3) howmany - общее число врагов (дурик 4 . огри 2 ) ", + "4) + - атоинвайт в сбор пати и сброса кд.", + "5) ++ -автоинвайт в пати аликов (если нужен рефрак)", + "6 ) note Никнейм текст - добавление заметки.", + "7) note Никнейм - посмотреть последние заметки.", + "8) note Никнейм 5 - посмотреть конкретную заметку.", + "9) note Никнейм 1..5 - посмотреть заметки от 1 до 5", + "10) note Никнейм delete 1 - удалить заметку номер 1", + "11) note Никнейм delete 1..5 - удалить заметки 1 до 5", + }, + en = { + "1) who - reports currently tracked stinkies in orgrimmar and durotar", + "2) classes - reports stinkies grouped by class", + "3) howmany - reports stinkies grouped by zone", + "4) + - automatically invites to group with duel rogue for cd reset", + "5) ++ - automatically invites to alliance group", + "6) note - adds a note for the specified character.", + "7) note - lists the last N notes for the character.", + "8) note i - lists the i-th note for the character.", + "9) note i..j - lists notes from i to j for the character.", + "10) note delete i - deletes the i-th note for the character.", + "11) note delete i..j - deletes notes from i to j for the character.", + }, +} + +---@class Commander +shared.Commander = { + Init = function() + ---@param text string + ---@param size number + ---@return string[] + local function Partition(text, size) + local words = {} + for word in text:gmatch("[^,]+") do + words[#words + 1] = word + end + + local ret = {} + local currentChunk = "" + + for _, word in ipairs(words) do + if #currentChunk + #word + 1 <= size then + currentChunk = currentChunk .. (currentChunk == "" and word or " " .. word) + else + if #currentChunk > 0 then ret[#ret + 1] = currentChunk end + currentChunk = word + end + end + + if #currentChunk > 0 then ret[#ret + 1] = currentChunk end + + return ret + end + ---@param arr table + ---@return string[] + local function Count(arr) + local ret = {} + for _, player in pairs(arr) do + if shared.Whoer.ShouldNotifyForZone(player.zone) then ret[player.zone] = (ret[player.zone] or 0) + 1 end + end + local text = {} + for zone, count in pairs(ret) do + text[#text + 1] = string.format("%s: %d", zone, count) + end + return text + end + ---@param arr table + ---@return string[] + local function CountPartitioned(arr) + local count = Count(arr) + local text = {} + ---@diagnostic disable-next-line: param-type-mismatch something wrong with luals, it's picking up the "wrong" unpack + for _, line in pairs(Partition(strjoin(", ", unpack(count)), 200)) do + text[#text + 1] = line + end + return text + end + ---@param arr table + ---@return string[] + local function Who(arr) + local ret = {} + for _, player in pairs(arr) do + if shared.Whoer.ShouldNotifyForZone(player.zone) then + ret[#ret + 1] = string.format( + "%s/%s (%s) %s", + player.name, + player.class, + player.zone, + player.stinky and "(!!!!)" or "" + ) + end + end + if Heimdall_Data.config.commander.debug then + print(string.format("[%s] Command result: %s", ModuleName, strjoin(", ", unpack(ret)))) + end + return ret + end + ---@param arr table + ---@return string[] + local function WhoPartitioned(arr) + local who = Who(arr) + local text = {} + ---@diagnostic disable-next-line: param-type-mismatch something wrong with luals, it's picking up the "wrong" unpack + for _, line in pairs(Partition(strjoin(", ", unpack(who)), 200)) do + text[#text + 1] = "who: " .. line + end + return text + end + ---@param arr table + ---@return string[] + local function CountClass(arr) + local ret = {} + for _, player in pairs(arr) do + if shared.Whoer.ShouldNotifyForZone(player.zone) then + ret[player.class] = (ret[player.class] or 0) + 1 + end + end + local text = {} + for class, count in pairs(ret) do + text[#text + 1] = string.format("%s: %d", class, count) + end + if Heimdall_Data.config.commander.debug then + print(string.format("[%s] Message text: %s", ModuleName, strjoin(", ", unpack(text)))) + end + return text + end + ---@param arr table + ---@return string[] + local function CountClassPartitioned(arr) + local countClass = CountClass(arr) + local text = {} + ---@diagnostic disable-next-line: param-type-mismatch something wrong with luals, it's picking up the "wrong" unpack + for _, line in pairs(Partition(strjoin(", ", unpack(countClass)), 200)) do + text[#text + 1] = line + end + return text + end + local function CountClassPartitionedStinkies() + if Heimdall_Data.config.commander.debug then + print(string.format("[%s] Executing: CountClassPartitionedStinkies", ModuleName)) + end + local res = CountClassPartitioned(HeimdallStinkies) + if #res == 0 then return { "No stinkies found" } end + return res + end + local function WhoPartitionedStinkies() + if Heimdall_Data.config.commander.debug then + print(string.format("[%s] Executing: WhoPartitionedStinkies", ModuleName)) + shared.dumpTable(HeimdallStinkies) + end + local res = WhoPartitioned(HeimdallStinkies) + if #res == 0 then return { "No stinkies found" } end + return res + end + local function CountPartitionedStinkies() + if Heimdall_Data.config.commander.debug then + print(string.format("[%s] Executing: CountPartitionedStinkies", ModuleName)) + end + local res = CountPartitioned(HeimdallStinkies) + if #res == 0 then return { "No stinkies found" } end + return res + end + local function HelpRu() + if Heimdall_Data.config.commander.debug then print(string.format("[%s] Executing: HelpRu", ModuleName)) end + return helpMessages.ru + end + local function HelpEn() + if Heimdall_Data.config.commander.debug then print(string.format("[%s] Executing: HelpEn", ModuleName)) end + return helpMessages.en + end + local groupInviteFrame = CreateFrame("Frame") + groupInviteFrame:SetScript("OnEvent", function(self, event, ...) + if Heimdall_Data.config.commander.debug then print(string.format("[%s] Event received", ModuleName)) end + AcceptGroup() + groupInviteFrame:UnregisterEvent("PARTY_INVITE_REQUEST") + C_Timer.NewTimer(0.1, function() + if Heimdall_Data.config.commander.debug then + print(string.format("[%s] Click event triggered", ModuleName)) + end + _G["StaticPopup1Button1"]:Click() + end, 1) + end) + local function JoinGroup() + if Heimdall_Data.config.commander.debug then + print(string.format("[%s] JoinGroup command received", ModuleName)) + end + groupInviteFrame:RegisterEvent("PARTY_INVITE_REQUEST") + C_Timer.NewTimer(10, function() groupInviteFrame:UnregisterEvent("PARTY_INVITE_REQUEST") end, 1) + return { "+" } + end + local function LeaveGroup() + if Heimdall_Data.config.commander.debug then + print(string.format("[%s] LeaveGroup command received", ModuleName)) + end + LeaveParty() + return {} + end + ---@param target string + local function FollowTarget(target) + if Heimdall_Data.config.commander.debug then + print(string.format("[%s] Following target: %s", ModuleName, target)) + end + if not target then return end + FollowUnit(target) + return {} + end + + ---@param args string[] + local function MacroTarget(args) + if Heimdall_Data.config.commander.debug then + ---@diagnostic disable-next-line: param-type-mismatch something wrong with luals, it's picking up the "wrong" unpack + print(string.format("[%s] Macroing: %s", ModuleName, strjoin(" ", unpack(args)))) + end + if #args < 2 or #args % 2 ~= 0 then + if #args < 2 or #args % 2 ~= 0 then + if Heimdall_Data.config.commander.debug then + print(string.format("[%s] Invalid number of arguments for MacroTarget", ModuleName)) + end + return {} + end + end + table.remove(args, 1) + + for i = 1, #args do + local stinky = strtrim(args[i]) + local name = stinky:match("([^/]+)") + local class = stinky:match("/([^ $]+)") + if Heimdall_Data.config.commander.debug then + print(string.format("[%s] Adding stinky: %s/%s", ModuleName, name, tostring(class))) + end + shared.StinkyTracker.Track({ + name = name, + class = class or "unknown", + seenAt = GetTime(), + hostile = true, + }) + if Heimdall_Data.config.commander.debug then + print(string.format("[%s] Added stinky: %s/%s", ModuleName, name, tostring(class))) + end + end + return {} + end + + ---@param args string[] + local function IgnoreMacroTarget(args) + if Heimdall_Data.config.commander.debug then + ---@diagnostic disable-next-line: param-type-mismatch something wrong with luals, it's picking up the "wrong" unpack + print(string.format("[%s] Macroing: %s", ModuleName, strjoin(" ", unpack(args)))) + end + if #args < 1 then + if Heimdall_Data.config.commander.debug then + print(string.format("[%s] Invalid number of arguments for IgnoreMacroTarget", ModuleName)) + end + return {} + end + table.remove(args, 1) + + for i = 1, #args do + local stinky = strtrim(args[i]) + local name = stinky:match("([^/]+)") + if Heimdall_Data.config.commander.debug then + print(string.format("[%s] Ignoring stinky: %s", ModuleName, name)) + end + shared.StinkyTracker.Ignore(name) + end + return {} + end + + ---@class Command + ---@field keywordRe string + ---@field commanderOnly boolean + ---@field callback fun(...: any): string[] + + local commands = { + { keywordRe = "^who$", commanderOnly = false, callback = WhoPartitionedStinkies }, + { keywordRe = "^howmany$", commanderOnly = false, callback = CountPartitionedStinkies }, + { keywordRe = "^classes$", commanderOnly = false, callback = CountClassPartitionedStinkies }, + { keywordRe = "^help$", commanderOnly = false, callback = HelpRu }, + { keywordRe = "^helpen$", commanderOnly = false, callback = HelpEn }, + { keywordRe = "^joingroup$", commanderOnly = false, callback = JoinGroup }, + { keywordRe = "^leavegroup$", commanderOnly = false, callback = LeaveGroup }, + { keywordRe = "^follow$", commanderOnly = false, callback = FollowTarget }, + { keywordRe = "^macro", commanderOnly = false, callback = MacroTarget }, + { keywordRe = "^ignore", commanderOnly = false, callback = IgnoreMacroTarget }, + } + + local commanderChannelFrame = CreateFrame("Frame") + commanderChannelFrame:RegisterEvent("CHAT_MSG_CHANNEL") + commanderChannelFrame:SetScript("OnEvent", function(self, event, msg, sender, ...) + --if Heimdall_Data.config.commander.debug then + -- print(string.format("[%s] Event received", ModuleName)) + -- shared.dumpTable(Heimdall_Data.config.commander) + --end + if not Heimdall_Data.config.commander.enabled then + --if Heimdall_Data.config.commander.debug then + -- print(string.format("[%s] Module disabled, ignoring event", ModuleName)) + --end + return + end + local channelId = select(6, ...) + local _, channelname = GetChannelName(channelId) + local ok = false + for _, channel in pairs(Heimdall_Data.config.commander.channels) do + if channel == channelname then + ok = true + break + end + end + if not ok then + if Heimdall_Data.config.commander.debug then + print( + string.format( + "[%s] Channel name '%s' does not match any of the channels '%s'", + ModuleName, + channelname, + table.concat(Heimdall_Data.config.commander.channels, ", ") + ) + ) + end + return + end + + sender = string.match(sender, "^[^-]+") + if Heimdall_Data.config.commander.debug then + print(string.format("[%s] Message from: %s", ModuleName, sender)) + shared.dumpTable(Heimdall_Data.config.commander) + end + + for _, command in ipairs(commands) do + local enabled = Heimdall_Data.config.commander.commands[command.keywordRe] == true or false + if Heimdall_Data.config.commander.debug then + print( + string.format("[%s] Command match: %s = %s", ModuleName, command.keywordRe, tostring(enabled)) + ) + end + if + enabled + and ( + not command.commanderOnly + -- if Heimdall_Data.config.commander.debug then print(string.format("[%s] Ignoring command, sender %s not commander %s", ModuleName, sender, Heimdall_Data.config.commander.commander)) end + or (command.commanderOnly and sender == Heimdall_Data.config.commander.commander) + ) + then + if msg:match(command.keywordRe) then + ---@diagnostic disable-next-line: redundant-parameter Currently luals does not support variadic functions as a @field + local messages = command.callback({ strsplit(",", msg) }) + if Heimdall_Data.config.commander.debug then + ---@diagnostic disable-next-line: param-type-mismatch + print( + string.format("[%s] Messages to send: %s", ModuleName, strjoin(", ", unpack(messages))) + ) + end + for _, message in ipairs(messages) do + ---@type Message + local returnmsg = { + channel = "C", + data = channelname, + message = message, + } + if Heimdall_Data.config.commander.debug then + print(string.format("[%s] Queuing message", ModuleName)) + shared.dumpTable(msg) + end + --table.insert(shared.messenger.queue, msg) + table.insert(shared.networkMessenger.queue, returnmsg) + end + end + end + end + end) + + print("[Heimdall] Commander module loaded") + end, +} diff --git a/Modules/Config.lua b/Modules/Config.lua index 2ad959f..2c6182b 100644 --- a/Modules/Config.lua +++ b/Modules/Config.lua @@ -1,5 +1,6 @@ local _, shared = ... ---@cast shared HeimdallShared +local ModuleName = "Config" ---@param str string ---@return table @@ -398,2267 +399,2271 @@ end --HeimdallTestFrame:SetWidth(512) --configFrame:Add(HeimdallTestFrame, 20, 12) ----@diagnostic disable-next-line: missing-fields -shared.Config = {} -function shared.Config.Init() - configFrame.frame:SetScale(Heimdall_Data.config.scale) +---@class Config +shared.Config = { + Init = function() + configFrame.frame:SetScale(Heimdall_Data.config.scale) - local buttonColors = { - enabled = { 0, 1, 0, 1 }, - disabled = { 1, 0, 0, 1 }, - } - local function CreateFancyText(name, parent, text, color) - local r, g, b, a = unpack(color) - local textFrame = CreateFrame("Frame", name .. "TextFrame", parent) - local textElement = textFrame:CreateFontString(nil, "ARTWORK", "GameFontNormal") - textElement:SetText(text) - textElement:SetTextColor(r, g, b, a) - textElement:SetPoint("CENTER", textFrame, "CENTER", 0, 0) - textFrame:SetBackdrop({ - bgFile = "Interface/Tooltips/UI-Tooltip-Background", - edgeFile = "Interface/Tooltips/UI-Tooltip-Border", - tile = true, - tileSize = 2, - edgeSize = 12, - }) - textFrame:SetBackdropColor(r, g, b, 0.3) - textFrame:SetBackdropBorderColor(r, g, b, 0.5) - return textFrame - end - ---@param name string - ---@param parent Frame - ---@param onClick fun(): boolean - local function CreateBasicButton(name, parent, text, onClick) - local button = CreateFrame("Frame", name, parent) - button:SetScript("OnMouseDown", function() - local res = onClick() - local color = res and buttonColors.enabled or buttonColors.disabled - button:SetBackdropColor(unpack(color)) - end) - button:SetBackdrop({ - bgFile = "Interface/Tooltips/UI-Tooltip-Background", - edgeFile = "Interface/Tooltips/UI-Tooltip-Border", - tile = true, - tileSize = 2, - edgeSize = 12, - insets = { - left = 2, - right = 2, - top = 2, - bottom = 2, - }, - }) - button.UpdateColor = function(self, state) - local color = state and buttonColors.enabled or buttonColors.disabled - self:SetBackdropColor(unpack(color)) + local buttonColors = { + enabled = { 0, 1, 0, 1 }, + disabled = { 1, 0, 0, 1 }, + } + local function CreateFancyText(name, parent, text, color) + local r, g, b, a = unpack(color) + local textFrame = CreateFrame("Frame", name .. "TextFrame", parent) + local textElement = textFrame:CreateFontString(nil, "ARTWORK", "GameFontNormal") + textElement:SetText(text) + textElement:SetTextColor(r, g, b, a) + textElement:SetPoint("CENTER", textFrame, "CENTER", 0, 0) + textFrame:SetBackdrop({ + bgFile = "Interface/Tooltips/UI-Tooltip-Background", + edgeFile = "Interface/Tooltips/UI-Tooltip-Border", + tile = true, + tileSize = 2, + edgeSize = 12, + }) + textFrame:SetBackdropColor(r, g, b, 0.3) + textFrame:SetBackdropBorderColor(r, g, b, 0.5) + return textFrame end - --spotterEnableButton:SetChecked(Heimdall_Data.config.spotter.enabled) - local spotterEnableButtonLabel = button:CreateFontString(nil, "OVERLAY", "GameFontNormal") - spotterEnableButtonLabel:SetText(text or "") - spotterEnableButtonLabel:SetAllPoints(button) - return button - end - ---@param name string - ---@param parent Frame - ---@param text string - ---@param onDone fun(editBox: EditBox) - ---@return GridFrame - local function CreateBasicSmallEditBox(name, parent, text, initialValue, onDone) - local container = GridFrame.new(name, parent, 1, 1) - ---@type Frame - local editBoxFrame = CreateFrame("Frame", name .. "EditBoxFrame", container.frame) - ---@type EditBox - local editBox = CreateFrame("EditBox", name .. "EditBox", editBoxFrame) - ---@type Frame - local textFrame = CreateFrame("Frame", name .. "TextFrame", container.frame) - ---@type FontString - local textElement = textFrame:CreateFontString(nil, "OVERLAY", "GameFontNormal") - textElement:SetText(text) - - editBox:SetAutoFocus(false) - editBox:SetFontObject("GameFontNormal") - editBox:SetText("") - editBox:SetBackdrop({ - bgFile = "Interface/Tooltips/UI-Tooltip-Background", - edgeFile = "Interface/Tooltips/UI-Tooltip-Border", - tile = true, - tileSize = 2, - edgeSize = 12, - insets = { - left = 2, - right = 2, - top = 2, - bottom = 2, - }, - }) - editBox:SetBackdropColor(0.8, 0.8, 0.8, 1) - editBox:SetBackdropBorderColor(0.5, 0.5, 0.5, 1) - editBox:SetTextInsets(6, 6, 0, 0) - editBox:SetScript("OnEnterPressed", function() editBox:ClearFocus() end) - editBox:SetScript("OnEscapePressed", function() editBox:ClearFocus() end) - editBox:SetScript("OnEditFocusLost", function() onDone(editBox) end) - editBox:SetText(initialValue or "") - container:Add(textFrame, 1, 1) - container:Add(editBox, 2, 1) - textElement:SetPoint("TOPLEFT", textFrame, "TOPLEFT", 2, -2) - return container - end - ---@param name string - ---@param parent Frame - ---@param text string - ---@param onDone fun(editBox: EditBox) - ---@return GridFrame - local function CreateBasicBigEditBox(name, parent, text, initialValue, onDone) - local container = GridFrame.new(name, parent, 1, 100) - ---@type Frame - local editBoxFrame = CreateFrame("Frame", name .. "EditBoxFrame", container.frame) - ---@type EditBox - local editBox = CreateFrame("EditBox", name .. "EditBox", editBoxFrame) - ---@type Frame - local textFrame = CreateFrame("Frame", name .. "TextFrame", container.frame) - ---@type FontString - local textElement = textFrame:CreateFontString(nil, "OVERLAY", "GameFontNormal") - textElement:SetText(text) - - editBoxFrame:SetBackdrop({ - bgFile = "Interface/Tooltips/UI-Tooltip-Background", - edgeFile = "Interface/Tooltips/UI-Tooltip-Border", - tile = true, - tileSize = 2, - edgeSize = 12, - insets = { - left = 2, - right = 2, - top = 2, - bottom = 2, - }, - }) - editBoxFrame:SetBackdropColor(0.8, 0.8, 0.8, 1) - editBoxFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1) - - editBox:SetAllPoints(editBoxFrame) - editBox:SetAutoFocus(false) - editBox:SetFontObject("GameFontNormal") - editBox:SetText(initialValue or "") - editBox:SetTextInsets(6, 6, 6, 6) - editBox:SetMultiLine(true) - editBox:SetSize(280, 100) - editBox:SetMaxLetters(100000) - editBox:SetScript("OnEscapePressed", function() editBox:ClearFocus() end) - editBox:SetScript("OnEditFocusLost", function() onDone(editBox) end) - container:Add(textFrame, 1, 1) - container:Add(editBoxFrame, 7, 1) - textElement:SetPoint("TOPLEFT", textFrame, "TOPLEFT", 2, -2) - return container - end - - local scale = CreateBasicSmallEditBox( - "HeimdallConfigScale", - configFrame.frame, - "Scale", - Heimdall_Data.config.scale, - function(self) - local text = self:GetText() - if string.match(text, "^%d+%.*%d*$") then - Heimdall_Data.config.scale = tonumber(text) - configFrame.frame:SetScale(Heimdall_Data.config.scale) - else - print(string.format("Invalid scale: %s, please use numbers", text)) - self:SetText(tostring(Heimdall_Data.config.scale)) + ---@param name string + ---@param parent Frame + ---@param onClick fun(): boolean + local function CreateBasicButton(name, parent, text, onClick) + local button = CreateFrame("Frame", name, parent) + button:SetScript("OnMouseDown", function() + local res = onClick() + local color = res and buttonColors.enabled or buttonColors.disabled + button:SetBackdropColor(unpack(color)) + end) + button:SetBackdrop({ + bgFile = "Interface/Tooltips/UI-Tooltip-Background", + edgeFile = "Interface/Tooltips/UI-Tooltip-Border", + tile = true, + tileSize = 2, + edgeSize = 12, + insets = { + left = 2, + right = 2, + top = 2, + bottom = 2, + }, + }) + button.UpdateColor = function(self, state) + local color = state and buttonColors.enabled or buttonColors.disabled + self:SetBackdropColor(unpack(color)) end + --spotterEnableButton:SetChecked(Heimdall_Data.config.spotter.enabled) + local spotterEnableButtonLabel = button:CreateFontString(nil, "OVERLAY", "GameFontNormal") + spotterEnableButtonLabel:SetText(text or "") + spotterEnableButtonLabel:SetAllPoints(button) + return button end - ) - configFrame:Add(scale, 2, 2) - local title = configFrame.frame:CreateFontString(nil, "ARTWORK", "GameFontNormal") - title:SetText(string.format("%s - v%s", shared._L("heimdallConfig", Heimdall_Data.config.locale), shared.VERSION)) - configFrame:Add(title, 2, 7) + ---@param name string + ---@param parent Frame + ---@param text string + ---@param onDone fun(editBox: EditBox) + ---@return GridFrame + local function CreateBasicSmallEditBox(name, parent, text, initialValue, onDone) + local container = GridFrame.new(name, parent, 1, 1) + ---@type Frame + local editBoxFrame = CreateFrame("Frame", name .. "EditBoxFrame", container.frame) + ---@type EditBox + local editBox = CreateFrame("EditBox", name .. "EditBox", editBoxFrame) + ---@type Frame + local textFrame = CreateFrame("Frame", name .. "TextFrame", container.frame) + ---@type FontString + local textElement = textFrame:CreateFontString(nil, "OVERLAY", "GameFontNormal") + textElement:SetText(text) - local debug = CreateBasicButton( - "HeimdallConfigDebug", - configFrame.frame, - shared._L("debug", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.debug = not Heimdall_Data.config.debug - return Heimdall_Data.config.debug + editBox:SetAutoFocus(false) + editBox:SetFontObject("GameFontNormal") + editBox:SetText("") + editBox:SetBackdrop({ + bgFile = "Interface/Tooltips/UI-Tooltip-Background", + edgeFile = "Interface/Tooltips/UI-Tooltip-Border", + tile = true, + tileSize = 2, + edgeSize = 12, + insets = { + left = 2, + right = 2, + top = 2, + bottom = 2, + }, + }) + editBox:SetBackdropColor(0.8, 0.8, 0.8, 1) + editBox:SetBackdropBorderColor(0.5, 0.5, 0.5, 1) + editBox:SetTextInsets(6, 6, 0, 0) + editBox:SetScript("OnEnterPressed", function() editBox:ClearFocus() end) + editBox:SetScript("OnEscapePressed", function() editBox:ClearFocus() end) + editBox:SetScript("OnEditFocusLost", function() onDone(editBox) end) + editBox:SetText(initialValue or "") + container:Add(textFrame, 1, 1) + container:Add(editBox, 2, 1) + textElement:SetPoint("TOPLEFT", textFrame, "TOPLEFT", 2, -2) + return container end - ) - debug:UpdateColor(Heimdall_Data.config.debug) - configFrame:Add(debug, 2, 1) + ---@param name string + ---@param parent Frame + ---@param text string + ---@param onDone fun(editBox: EditBox) + ---@return GridFrame + local function CreateBasicBigEditBox(name, parent, text, initialValue, onDone) + local container = GridFrame.new(name, parent, 1, 100) + ---@type Frame + local editBoxFrame = CreateFrame("Frame", name .. "EditBoxFrame", container.frame) + ---@type EditBox + local editBox = CreateFrame("EditBox", name .. "EditBox", editBoxFrame) + ---@type Frame + local textFrame = CreateFrame("Frame", name .. "TextFrame", container.frame) + ---@type FontString + local textElement = textFrame:CreateFontString(nil, "OVERLAY", "GameFontNormal") + textElement:SetText(text) - local russian = nil - local english = CreateBasicButton( - "HeimdallConfigEnglish", - configFrame.frame, - shared._L("english", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.locale = "en" - if russian then russian:UpdateColor(false) end - return Heimdall_Data.config.locale == "en" + editBoxFrame:SetBackdrop({ + bgFile = "Interface/Tooltips/UI-Tooltip-Background", + edgeFile = "Interface/Tooltips/UI-Tooltip-Border", + tile = true, + tileSize = 2, + edgeSize = 12, + insets = { + left = 2, + right = 2, + top = 2, + bottom = 2, + }, + }) + editBoxFrame:SetBackdropColor(0.8, 0.8, 0.8, 1) + editBoxFrame:SetBackdropBorderColor(0.5, 0.5, 0.5, 1) + + editBox:SetAllPoints(editBoxFrame) + editBox:SetAutoFocus(false) + editBox:SetFontObject("GameFontNormal") + editBox:SetText(initialValue or "") + editBox:SetTextInsets(6, 6, 6, 6) + editBox:SetMultiLine(true) + editBox:SetSize(280, 100) + editBox:SetMaxLetters(100000) + editBox:SetScript("OnEscapePressed", function() editBox:ClearFocus() end) + editBox:SetScript("OnEditFocusLost", function() onDone(editBox) end) + container:Add(textFrame, 1, 1) + container:Add(editBoxFrame, 7, 1) + textElement:SetPoint("TOPLEFT", textFrame, "TOPLEFT", 2, -2) + return container end - ) - english:UpdateColor(Heimdall_Data.config.locale == "en") - 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" + + local scale = CreateBasicSmallEditBox( + "HeimdallConfigScale", + configFrame.frame, + "Scale", + Heimdall_Data.config.scale, + function(self) + local text = self:GetText() + if string.match(text, "^%d+%.*%d*$") then + Heimdall_Data.config.scale = tonumber(text) + configFrame.frame:SetScale(Heimdall_Data.config.scale) + else + print(string.format("Invalid scale: %s, please use numbers", text)) + self:SetText(tostring(Heimdall_Data.config.scale)) + end + end + ) + configFrame:Add(scale, 2, 2) + local title = configFrame.frame:CreateFontString(nil, "ARTWORK", "GameFontNormal") + title:SetText( + string.format("%s - v%s", shared._L("heimdallConfig", Heimdall_Data.config.locale), shared.VERSION) + ) + configFrame:Add(title, 2, 7) + + local debug = CreateBasicButton( + "HeimdallConfigDebug", + configFrame.frame, + shared._L("debug", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.debug = not Heimdall_Data.config.debug + return Heimdall_Data.config.debug + end + ) + debug:UpdateColor(Heimdall_Data.config.debug) + configFrame:Add(debug, 2, 1) + + local russian = nil + local english = CreateBasicButton( + "HeimdallConfigEnglish", + configFrame.frame, + shared._L("english", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.locale = "en" + if russian then russian:UpdateColor(false) end + 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() + Heimdall_Data.config.locale = "ru" + english:UpdateColor(false) + return Heimdall_Data.config.locale == "ru" + end + ) + russian:UpdateColor(Heimdall_Data.config.locale == "ru") + configFrame:Add(english, 2, 1) + configFrame:Add(russian, 2, 1) + + -- Spotter + do + local r, g, b, a = GetNextColor() + local spotterConfigFrame = GridFrame.new("HeimdallSpotterConfig", UIParent, 12, 20) + spotterConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) + configFrame:Add(spotterConfigFrame, 9, 3) + + title = CreateFancyText( + "HeimdallSpotterConfigTitle", + spotterConfigFrame.frame, + shared._L("spotter", Heimdall_Data.config.locale), + { r, g, b, a } + ) + spotterConfigFrame:Add(title, 1, 8) + local debugButton = CreateBasicButton( + "HeimdallSpotterConfigDebugButton", + spotterConfigFrame.frame, + shared._L("debug", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.spotter.debug = not Heimdall_Data.config.spotter.debug + return Heimdall_Data.config.spotter.debug + end + ) + debugButton:UpdateColor(Heimdall_Data.config.spotter.debug) + spotterConfigFrame:Add(debugButton, 1, 4) + + local enableButton = CreateBasicButton( + "HeimdallSpotterConfigEnableButton", + spotterConfigFrame.frame, + shared._L("enabled", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.spotter.enabled = not Heimdall_Data.config.spotter.enabled + return Heimdall_Data.config.spotter.enabled + end + ) + enableButton:UpdateColor(Heimdall_Data.config.spotter.enabled) + spotterConfigFrame:Add(enableButton, 1, 6) + + local everyoneButton = CreateBasicButton( + "HeimdallSpotterConfigEveryoneButton", + spotterConfigFrame.frame, + shared._L("everyone", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.spotter.everyone = not Heimdall_Data.config.spotter.everyone + return Heimdall_Data.config.spotter.everyone + end + ) + everyoneButton:UpdateColor(Heimdall_Data.config.spotter.everyone) + spotterConfigFrame:Add(everyoneButton, 1, 6) + + local hostileButton = CreateBasicButton( + "HeimdallSpotterConfigHostileButton", + spotterConfigFrame.frame, + shared._L("hostile", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.spotter.hostile = not Heimdall_Data.config.spotter.hostile + return Heimdall_Data.config.spotter.hostile + end + ) + hostileButton:UpdateColor(Heimdall_Data.config.spotter.hostile) + spotterConfigFrame:Add(hostileButton, 1, 4) + + local allianceButton = CreateBasicButton( + "HeimdallSpotterConfigAllianceButton", + spotterConfigFrame.frame, + shared._L("alliance", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.spotter.alliance = not Heimdall_Data.config.spotter.alliance + return Heimdall_Data.config.spotter.alliance + end + ) + allianceButton:UpdateColor(Heimdall_Data.config.spotter.alliance) + spotterConfigFrame:Add(allianceButton, 1, 4) + + local stinkyButton = CreateBasicButton( + "HeimdallSpotterConfigStinkyButton", + spotterConfigFrame.frame, + shared._L("stinky", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.spotter.stinky = not Heimdall_Data.config.spotter.stinky + return Heimdall_Data.config.spotter.stinky + end + ) + stinkyButton:UpdateColor(Heimdall_Data.config.spotter.stinky) + spotterConfigFrame:Add(stinkyButton, 1, 4) + + local channels = CreateBasicSmallEditBox( + "HeimdallSpotterConfigChannels", + spotterConfigFrame.frame, + shared._L("channels", Heimdall_Data.config.locale), + table.concat(Heimdall_Data.config.spotter.channels or {}, ","), + function(self) + local text = self:GetText() + Heimdall_Data.config.spotter.channels = StringToArray(text, ",") + print("Channels set to") + shared.dumpTable(Heimdall_Data.config.spotter.channels) + end + ) + spotterConfigFrame:Add(channels, 2, 4) + + local zoneOverride = CreateBasicSmallEditBox( + "HeimdallSpotterConfigZoneOverride", + spotterConfigFrame.frame, + shared._L("zoneOverride", Heimdall_Data.config.locale), + Heimdall_Data.config.spotter.zoneOverride, + function(self) + local text = self:GetText() + if string.match(text, "%S+") then + Heimdall_Data.config.spotter.zoneOverride = text + print("Zone override set to", tostring(text)) + else + print("Invalid zone override", tostring(text)) + self:SetText(Heimdall_Data.config.spotter.zoneOverride) + end + end + ) + spotterConfigFrame:Add(zoneOverride, 2, 4) + + local throttleTime = CreateBasicSmallEditBox( + "HeimdallSpotterConfigThrottleTime", + spotterConfigFrame.frame, + shared._L("throttle", Heimdall_Data.config.locale), + Heimdall_Data.config.spotter.throttleTime, + function(self) + local text = self:GetText() + if string.match(text, "%d+") then + Heimdall_Data.config.spotter.throttleTime = tonumber(text) + else + print("Invalid throttle time", tostring(text)) + self:SetText(Heimdall_Data.config.spotter.throttleTime) + end + end + ) + spotterConfigFrame:Add(throttleTime, 2, 4) end - ) - russian:UpdateColor(Heimdall_Data.config.locale == "ru") - configFrame:Add(english, 2, 1) - configFrame:Add(russian, 2, 1) - -- Spotter - do - local r, g, b, a = GetNextColor() - local spotterConfigFrame = GridFrame.new("HeimdallSpotterConfig", UIParent, 12, 20) - spotterConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) - configFrame:Add(spotterConfigFrame, 9, 3) + -- Whoer + do + local r, g, b, a = GetNextColor() + local whoerConfigFrame = GridFrame.new("HeimdallWhoerConfig", UIParent, 12, 20) + whoerConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) + configFrame:Add(whoerConfigFrame, 30, 6) - title = CreateFancyText( - "HeimdallSpotterConfigTitle", - spotterConfigFrame.frame, - shared._L("spotter", Heimdall_Data.config.locale), - { r, g, b, a } - ) - spotterConfigFrame:Add(title, 1, 8) - local debugButton = CreateBasicButton( - "HeimdallSpotterConfigDebugButton", - spotterConfigFrame.frame, - shared._L("debug", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.spotter.debug = not Heimdall_Data.config.spotter.debug - return Heimdall_Data.config.spotter.debug - end - ) - debugButton:UpdateColor(Heimdall_Data.config.spotter.debug) - spotterConfigFrame:Add(debugButton, 1, 4) - - local enableButton = CreateBasicButton( - "HeimdallSpotterConfigEnableButton", - spotterConfigFrame.frame, - shared._L("enabled", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.spotter.enabled = not Heimdall_Data.config.spotter.enabled - return Heimdall_Data.config.spotter.enabled - end - ) - enableButton:UpdateColor(Heimdall_Data.config.spotter.enabled) - spotterConfigFrame:Add(enableButton, 1, 6) - - local everyoneButton = CreateBasicButton( - "HeimdallSpotterConfigEveryoneButton", - spotterConfigFrame.frame, - shared._L("everyone", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.spotter.everyone = not Heimdall_Data.config.spotter.everyone - return Heimdall_Data.config.spotter.everyone - end - ) - everyoneButton:UpdateColor(Heimdall_Data.config.spotter.everyone) - spotterConfigFrame:Add(everyoneButton, 1, 6) - - local hostileButton = CreateBasicButton( - "HeimdallSpotterConfigHostileButton", - spotterConfigFrame.frame, - shared._L("hostile", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.spotter.hostile = not Heimdall_Data.config.spotter.hostile - return Heimdall_Data.config.spotter.hostile - end - ) - hostileButton:UpdateColor(Heimdall_Data.config.spotter.hostile) - spotterConfigFrame:Add(hostileButton, 1, 4) - - local allianceButton = CreateBasicButton( - "HeimdallSpotterConfigAllianceButton", - spotterConfigFrame.frame, - shared._L("alliance", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.spotter.alliance = not Heimdall_Data.config.spotter.alliance - return Heimdall_Data.config.spotter.alliance - end - ) - allianceButton:UpdateColor(Heimdall_Data.config.spotter.alliance) - spotterConfigFrame:Add(allianceButton, 1, 4) - - local stinkyButton = CreateBasicButton( - "HeimdallSpotterConfigStinkyButton", - spotterConfigFrame.frame, - shared._L("stinky", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.spotter.stinky = not Heimdall_Data.config.spotter.stinky - return Heimdall_Data.config.spotter.stinky - end - ) - stinkyButton:UpdateColor(Heimdall_Data.config.spotter.stinky) - spotterConfigFrame:Add(stinkyButton, 1, 4) - - local channels = CreateBasicSmallEditBox( - "HeimdallSpotterConfigChannels", - spotterConfigFrame.frame, - shared._L("channels", Heimdall_Data.config.locale), - table.concat(Heimdall_Data.config.spotter.channels or {}, ","), - function(self) - local text = self:GetText() - Heimdall_Data.config.spotter.channels = StringToArray(text, ",") - print("Channels set to") - shared.dumpTable(Heimdall_Data.config.spotter.channels) - end - ) - spotterConfigFrame:Add(channels, 2, 4) - - local zoneOverride = CreateBasicSmallEditBox( - "HeimdallSpotterConfigZoneOverride", - spotterConfigFrame.frame, - shared._L("zoneOverride", Heimdall_Data.config.locale), - Heimdall_Data.config.spotter.zoneOverride, - function(self) - local text = self:GetText() - if string.match(text, "%S+") then - Heimdall_Data.config.spotter.zoneOverride = text - print("Zone override set to", tostring(text)) - else - print("Invalid zone override", tostring(text)) - self:SetText(Heimdall_Data.config.spotter.zoneOverride) + title = CreateFancyText( + "HeimdallWhoerConfigTitle", + whoerConfigFrame.frame, + shared._L("whoer", Heimdall_Data.config.locale), + { r, g, b, a } + ) + whoerConfigFrame:Add(title, 1, 8) + local debugButton = CreateBasicButton( + "HeimdallWhoerConfigDebugButton", + whoerConfigFrame.frame, + shared._L("debug", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.who.debug = not Heimdall_Data.config.who.debug + return Heimdall_Data.config.who.debug end - end - ) - spotterConfigFrame:Add(zoneOverride, 2, 4) + ) + debugButton:UpdateColor(Heimdall_Data.config.who.debug) + whoerConfigFrame:Add(debugButton, 1, 4) - local throttleTime = CreateBasicSmallEditBox( - "HeimdallSpotterConfigThrottleTime", - spotterConfigFrame.frame, - shared._L("throttle", Heimdall_Data.config.locale), - Heimdall_Data.config.spotter.throttleTime, - function(self) - local text = self:GetText() - if string.match(text, "%d+") then - Heimdall_Data.config.spotter.throttleTime = tonumber(text) - else - print("Invalid throttle time", tostring(text)) - self:SetText(Heimdall_Data.config.spotter.throttleTime) + local enableButton = CreateBasicButton( + "HeimdallWhoerConfigEnableButton", + whoerConfigFrame.frame, + shared._L("enabled", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.who.enabled = not Heimdall_Data.config.who.enabled + return Heimdall_Data.config.who.enabled end - end - ) - spotterConfigFrame:Add(throttleTime, 2, 4) - end + ) + enableButton:UpdateColor(Heimdall_Data.config.who.enabled) + whoerConfigFrame:Add(enableButton, 2, 3) - -- Whoer - do - local r, g, b, a = GetNextColor() - local whoerConfigFrame = GridFrame.new("HeimdallWhoerConfig", UIParent, 12, 20) - whoerConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) - configFrame:Add(whoerConfigFrame, 30, 6) - - title = CreateFancyText( - "HeimdallWhoerConfigTitle", - whoerConfigFrame.frame, - shared._L("whoer", Heimdall_Data.config.locale), - { r, g, b, a } - ) - whoerConfigFrame:Add(title, 1, 8) - local debugButton = CreateBasicButton( - "HeimdallWhoerConfigDebugButton", - whoerConfigFrame.frame, - shared._L("debug", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.who.debug = not Heimdall_Data.config.who.debug - return Heimdall_Data.config.who.debug - end - ) - debugButton:UpdateColor(Heimdall_Data.config.who.debug) - whoerConfigFrame:Add(debugButton, 1, 4) - - local enableButton = CreateBasicButton( - "HeimdallWhoerConfigEnableButton", - whoerConfigFrame.frame, - shared._L("enabled", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.who.enabled = not Heimdall_Data.config.who.enabled - return Heimdall_Data.config.who.enabled - end - ) - enableButton:UpdateColor(Heimdall_Data.config.who.enabled) - whoerConfigFrame:Add(enableButton, 2, 3) - - local doWhisperButton = CreateBasicButton( - "HeimdallWhoerConfigDoWhisperButton", - whoerConfigFrame.frame, - shared._L("doWhisper", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.who.doWhisper = not Heimdall_Data.config.who.doWhisper - return Heimdall_Data.config.who.doWhisper - end - ) - doWhisperButton:UpdateColor(Heimdall_Data.config.who.doWhisper) - whoerConfigFrame:Add(doWhisperButton, 2, 3) - - local channels = CreateBasicSmallEditBox( - "HeimdallWhoerConfigChannels", - whoerConfigFrame.frame, - shared._L("channels", Heimdall_Data.config.locale), - table.concat(Heimdall_Data.config.who.channels or {}, ","), - function(self) - local text = self:GetText() - Heimdall_Data.config.who.channels = StringToArray(text, ",") - print("Channels set to") - shared.dumpTable(Heimdall_Data.config.who.channels) - end - ) - whoerConfigFrame:Add(channels, 2, 3) - - local ttl = CreateBasicSmallEditBox( - "HeimdallWhoerConfigTTL", - whoerConfigFrame.frame, - shared._L("ttl", Heimdall_Data.config.locale), - Heimdall_Data.config.who.ttl, - function(self) - local text = self:GetText() - if string.match(text, "%d+") then - Heimdall_Data.config.who.ttl = tonumber(text) - print("TTL set to", tostring(text)) - else - print("Invalid TTL", tostring(text)) - self:SetText(Heimdall_Data.config.who.ttl) + local doWhisperButton = CreateBasicButton( + "HeimdallWhoerConfigDoWhisperButton", + whoerConfigFrame.frame, + shared._L("doWhisper", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.who.doWhisper = not Heimdall_Data.config.who.doWhisper + return Heimdall_Data.config.who.doWhisper end - end - ) - whoerConfigFrame:Add(ttl, 2, 3) + ) + doWhisperButton:UpdateColor(Heimdall_Data.config.who.doWhisper) + whoerConfigFrame:Add(doWhisperButton, 2, 3) - local ignored = CreateBasicBigEditBox( - "HeimdallWhoerConfigIgnored", - whoerConfigFrame.frame, - shared._L("ignored", Heimdall_Data.config.locale), - MapKeyToString(Heimdall_Data.config.who.ignored or {}, ","), - function(self) - local ignored = StringToMap(self:GetText(), ",") - Heimdall_Data.config.who.ignored = ignored - end - ) - whoerConfigFrame:Add(ignored, 4, 6) - - local zoneNotifyFor = CreateBasicBigEditBox( - "HeimdallWhoerConfigZoneNotifyFor", - whoerConfigFrame.frame, - shared._L("zoneNotifyFor", Heimdall_Data.config.locale), - MapKeyToString(Heimdall_Data.config.who.zoneNotifyFor or {}, "\n"), - function(self) - local zoneNotifyFor = StringToMap(self:GetText(), "\n") - Heimdall_Data.config.who.zoneNotifyFor = zoneNotifyFor - end - ) - whoerConfigFrame:Add(zoneNotifyFor, 4, 6) - - local whoQueries = CreateBasicBigEditBox( - "HeimdallWhoerConfigQueries", - whoerConfigFrame.frame, - shared._L("queries", Heimdall_Data.config.locale), - shared.WhoQueryService.WhoQueriesToString(shared.WhoQueryService.queries or {}), - function(self) - Heimdall_Data.config.who.queries = self:GetText() - shared.WhoQueryService.queries = shared.WhoQueryService.WhoQueriesFromString(self:GetText()) - end - ) - whoerConfigFrame:Add(whoQueries, 12, 12) - end - - -- Messenger - do - local r, g, b, a = GetNextColor() - local messengerConfigFrame = GridFrame.new("HeimdallMessengerConfig", UIParent, 12, 20) - messengerConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) - configFrame:Add(messengerConfigFrame, 6, 3) - - title = CreateFancyText( - "HeimdallMessengerConfigTitle", - messengerConfigFrame.frame, - shared._L("messenger", Heimdall_Data.config.locale), - { r, g, b, a } - ) - messengerConfigFrame:Add(title, 1, 8) - local debugButton = CreateBasicButton( - "HeimdallMessengerConfigDebugButton", - messengerConfigFrame.frame, - shared._L("debug", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.messenger.debug = not Heimdall_Data.config.messenger.debug - return Heimdall_Data.config.messenger.debug - end - ) - debugButton:UpdateColor(Heimdall_Data.config.messenger.debug) - messengerConfigFrame:Add(debugButton, 1, 4) - - local enableButton = CreateBasicButton( - "HeimdallMessengerConfigEnableButton", - messengerConfigFrame.frame, - shared._L("enabled", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.messenger.enabled = not Heimdall_Data.config.messenger.enabled - return Heimdall_Data.config.messenger.enabled - end - ) - enableButton:UpdateColor(Heimdall_Data.config.messenger.enabled) - messengerConfigFrame:Add(enableButton, 2, 3) - - local interval = CreateBasicSmallEditBox( - "HeimdallMessengerConfigInterval", - messengerConfigFrame.frame, - shared._L("interval", Heimdall_Data.config.locale), - Heimdall_Data.config.messenger.interval, - function(self) - local text = self:GetText() - if string.match(text, "%d+") then - Heimdall_Data.config.messenger.interval = tonumber(text) - print("Interval set to", tostring(text)) - else - print("Invalid interval", tostring(text)) - self:SetText(tostring(Heimdall_Data.config.messenger.interval)) + local channels = CreateBasicSmallEditBox( + "HeimdallWhoerConfigChannels", + whoerConfigFrame.frame, + shared._L("channels", Heimdall_Data.config.locale), + table.concat(Heimdall_Data.config.who.channels or {}, ","), + function(self) + local text = self:GetText() + Heimdall_Data.config.who.channels = StringToArray(text, ",") + print("Channels set to") + shared.dumpTable(Heimdall_Data.config.who.channels) end - end - ) - messengerConfigFrame:Add(interval, 2, 3) - end + ) + whoerConfigFrame:Add(channels, 2, 3) - -- Death Reporter - do - local r, g, b, a = GetNextColor() - local deathReporterConfigFrame = GridFrame.new("HeimdallDeathReporterConfig", UIParent, 12, 20) - deathReporterConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) - configFrame:Add(deathReporterConfigFrame, 10, 3) - - title = CreateFancyText( - "HeimdallDeathReporterConfigTitle", - deathReporterConfigFrame.frame, - shared._L("deathReporter", Heimdall_Data.config.locale), - { r, g, b, a } - ) - deathReporterConfigFrame:Add(title, 1, 8) - local debugButton = CreateBasicButton( - "HeimdallDeathReporterConfigDebugButton", - deathReporterConfigFrame.frame, - shared._L("debug", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.deathReporter.debug = not Heimdall_Data.config.deathReporter.debug - return Heimdall_Data.config.deathReporter.debug - end - ) - debugButton:UpdateColor(Heimdall_Data.config.deathReporter.debug) - deathReporterConfigFrame:Add(debugButton, 1, 4) - - local enableButton = CreateBasicButton( - "HeimdallDeathReporterConfigEnableButton", - deathReporterConfigFrame.frame, - shared._L("enabled", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.deathReporter.enabled = not Heimdall_Data.config.deathReporter.enabled - return Heimdall_Data.config.deathReporter.enabled - end - ) - enableButton:UpdateColor(Heimdall_Data.config.deathReporter.enabled) - deathReporterConfigFrame:Add(enableButton, 1, 6) - - local doWhisperButton = CreateBasicButton( - "HeimdallDeathReporterConfigDoWhisperButton", - deathReporterConfigFrame.frame, - shared._L("doWhisper", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.deathReporter.doWhisper = not Heimdall_Data.config.deathReporter.doWhisper - return Heimdall_Data.config.deathReporter.doWhisper - end - ) - doWhisperButton:UpdateColor(Heimdall_Data.config.deathReporter.doWhisper) - deathReporterConfigFrame:Add(doWhisperButton, 1, 6) - - local throttleTime = CreateBasicSmallEditBox( - "HeimdallDeathReporterConfigThrottleTime", - deathReporterConfigFrame.frame, - shared._L("throttle", Heimdall_Data.config.locale), - Heimdall_Data.config.deathReporter.throttle, - function(self) - local text = self:GetText() - if string.match(text, "%d+") then - Heimdall_Data.config.deathReporter.throttle = tonumber(text) - print("Throttle time set to", tostring(text)) - else - print("Invalid throttle time", tostring(text)) - self:SetText(tostring(Heimdall_Data.config.deathReporter.throttle)) + local ttl = CreateBasicSmallEditBox( + "HeimdallWhoerConfigTTL", + whoerConfigFrame.frame, + shared._L("ttl", Heimdall_Data.config.locale), + Heimdall_Data.config.who.ttl, + function(self) + local text = self:GetText() + if string.match(text, "%d+") then + Heimdall_Data.config.who.ttl = tonumber(text) + print("TTL set to", tostring(text)) + else + print("Invalid TTL", tostring(text)) + self:SetText(Heimdall_Data.config.who.ttl) + end end - end - ) - deathReporterConfigFrame:Add(throttleTime, 2, 6) + ) + whoerConfigFrame:Add(ttl, 2, 3) - local duelThrottle = CreateBasicSmallEditBox( - "HeimdallDeathReporterConfigDuelThrottle", - deathReporterConfigFrame.frame, - shared._L("duelThrottle", Heimdall_Data.config.locale), - Heimdall_Data.config.deathReporter.duelThrottle, - function(self) - local text = self:GetText() - if string.match(text, "%d+") then - Heimdall_Data.config.deathReporter.duelThrottle = tonumber(text) - print("Duel throttle set to", tostring(text)) - else - print("Invalid duel throttle", tostring(text)) - self:SetText(Heimdall_Data.config.deathReporter.duelThrottle) + local ignored = CreateBasicBigEditBox( + "HeimdallWhoerConfigIgnored", + whoerConfigFrame.frame, + shared._L("ignored", Heimdall_Data.config.locale), + MapKeyToString(Heimdall_Data.config.who.ignored or {}, ","), + function(self) + local ignored = StringToMap(self:GetText(), ",") + Heimdall_Data.config.who.ignored = ignored end - end - ) - deathReporterConfigFrame:Add(duelThrottle, 2, 6) + ) + whoerConfigFrame:Add(ignored, 4, 6) - local channels = CreateBasicSmallEditBox( - "HeimdallDeathReporterConfigChannels", - deathReporterConfigFrame.frame, - shared._L("channels", Heimdall_Data.config.locale), - table.concat(Heimdall_Data.config.deathReporter.channels or {}, ","), - function(self) - local text = self:GetText() - Heimdall_Data.config.deathReporter.channels = StringToArray(text, ",") - print("Channels set to") - shared.dumpTable(Heimdall_Data.config.deathReporter.channels) - end - ) - deathReporterConfigFrame:Add(channels, 2, 6) - - local zoneOverride = CreateBasicSmallEditBox( - "HeimdallDeathReporterConfigZoneOverride", - deathReporterConfigFrame.frame, - shared._L("zoneOverride", Heimdall_Data.config.locale), - Heimdall_Data.config.deathReporter.zoneOverride, - function(self) - local text = self:GetText() - if string.match(text, "%S+") then - Heimdall_Data.config.deathReporter.zoneOverride = text - print("Zone override set to", tostring(text)) - else - print("Invalid zone override", tostring(text)) - self:SetText(Heimdall_Data.config.deathReporter.zoneOverride) + local zoneNotifyFor = CreateBasicBigEditBox( + "HeimdallWhoerConfigZoneNotifyFor", + whoerConfigFrame.frame, + shared._L("zoneNotifyFor", Heimdall_Data.config.locale), + MapKeyToString(Heimdall_Data.config.who.zoneNotifyFor or {}, "\n"), + function(self) + local zoneNotifyFor = StringToMap(self:GetText(), "\n") + Heimdall_Data.config.who.zoneNotifyFor = zoneNotifyFor end - end - ) - deathReporterConfigFrame:Add(zoneOverride, 2, 6) - end + ) + whoerConfigFrame:Add(zoneNotifyFor, 4, 6) - -- Inviter - do - local r, g, b, a = GetNextColor() - local inviterConfigFrame = GridFrame.new("HeimdallInviterConfig", UIParent, 12, 20) - inviterConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) - configFrame:Add(inviterConfigFrame, 13, 3) - - title = CreateFancyText( - "HeimdallInviterConfigTitle", - inviterConfigFrame.frame, - shared._L("inviter", Heimdall_Data.config.locale), - { r, g, b, a } - ) - inviterConfigFrame:Add(title, 1, 8) - local debugButton = CreateBasicButton( - "HeimdallInviterConfigDebugButton", - inviterConfigFrame.frame, - shared._L("debug", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.inviter.debug = not Heimdall_Data.config.inviter.debug - return Heimdall_Data.config.inviter.debug - end - ) - debugButton:UpdateColor(Heimdall_Data.config.inviter.debug) - inviterConfigFrame:Add(debugButton, 1, 4) - - local enableButton = CreateBasicButton( - "HeimdallInviterConfigEnableButton", - inviterConfigFrame.frame, - shared._L("enabled", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.inviter.enabled = not Heimdall_Data.config.inviter.enabled - return Heimdall_Data.config.inviter.enabled - end - ) - enableButton:UpdateColor(Heimdall_Data.config.inviter.enabled) - inviterConfigFrame:Add(enableButton, 1, 3) - - local allAssistButton = CreateBasicButton( - "HeimdallInviterConfigAllAssistButton", - inviterConfigFrame.frame, - shared._L("allAssist", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.inviter.allAssist = not Heimdall_Data.config.inviter.allAssist - return Heimdall_Data.config.inviter.allAssist - end - ) - allAssistButton:UpdateColor(Heimdall_Data.config.inviter.allAssist) - inviterConfigFrame:Add(allAssistButton, 1, 3) - - local agentsAssist = CreateBasicButton( - "HeimdallInviterConfigAgentsAssistButton", - inviterConfigFrame.frame, - shared._L("agentsAssist", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.inviter.agentsAssist = not Heimdall_Data.config.inviter.agentsAssist - return Heimdall_Data.config.inviter.agentsAssist - end - ) - agentsAssist:UpdateColor(Heimdall_Data.config.inviter.agentsAssist) - inviterConfigFrame:Add(agentsAssist, 1, 3) - - local kickOffline = CreateBasicButton( - "HeimdallInviterConfigKickOfflineButton", - inviterConfigFrame.frame, - shared._L("kickOffline", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.inviter.kickOffline = not Heimdall_Data.config.inviter.kickOffline - return Heimdall_Data.config.inviter.kickOffline - end - ) - kickOffline:UpdateColor(Heimdall_Data.config.inviter.kickOffline) - inviterConfigFrame:Add(kickOffline, 1, 3) - - local throttle = CreateBasicSmallEditBox( - "HeimdallInviterConfigThrottle", - inviterConfigFrame.frame, - shared._L("throttle", Heimdall_Data.config.locale), - Heimdall_Data.config.inviter.throttle, - function(self) - local text = self:GetText() - if string.match(text, "%d+") then - Heimdall_Data.config.inviter.throttle = tonumber(text) - print("Throttle time set to", tostring(text)) - else - print("Invalid throttle time", tostring(text)) - self:SetText(Heimdall_Data.config.inviter.throttle) + local whoQueries = CreateBasicBigEditBox( + "HeimdallWhoerConfigQueries", + whoerConfigFrame.frame, + shared._L("queries", Heimdall_Data.config.locale), + shared.WhoQueryService.WhoQueriesToString(shared.WhoQueryService.queries or {}), + function(self) + Heimdall_Data.config.who.queries = self:GetText() + shared.WhoQueryService.queries = shared.WhoQueryService.WhoQueriesFromString(self:GetText()) end - end - ) - inviterConfigFrame:Add(throttle, 2, 6) + ) + whoerConfigFrame:Add(whoQueries, 12, 12) + end - local channels = CreateBasicSmallEditBox( - "HeimdallInviterConfigChannels", - inviterConfigFrame.frame, - shared._L("channels", Heimdall_Data.config.locale), - table.concat(Heimdall_Data.config.inviter.channels or {}, ","), - function(self) - local text = self:GetText() - Heimdall_Data.config.inviter.channels = StringToArray(text, ",") - print("Channels set to") - shared.dumpTable(Heimdall_Data.config.inviter.channels) - end - ) - inviterConfigFrame:Add(channels, 2, 6) + -- Messenger + do + local r, g, b, a = GetNextColor() + local messengerConfigFrame = GridFrame.new("HeimdallMessengerConfig", UIParent, 12, 20) + messengerConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) + configFrame:Add(messengerConfigFrame, 6, 3) - local keyword = CreateBasicSmallEditBox( - "HeimdallInviterConfigKeywords", - inviterConfigFrame.frame, - shared._L("keyword", Heimdall_Data.config.locale), - Heimdall_Data.config.inviter.keyword, - function(self) - local text = self:GetText() - if string.match(text, "%S+") then - Heimdall_Data.config.inviter.keyword = text - print("Keyword set to", tostring(text)) - else - print("Invalid keyword", tostring(text)) - self:SetText(Heimdall_Data.config.inviter.keyword) + title = CreateFancyText( + "HeimdallMessengerConfigTitle", + messengerConfigFrame.frame, + shared._L("messenger", Heimdall_Data.config.locale), + { r, g, b, a } + ) + messengerConfigFrame:Add(title, 1, 8) + local debugButton = CreateBasicButton( + "HeimdallMessengerConfigDebugButton", + messengerConfigFrame.frame, + shared._L("debug", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.messenger.debug = not Heimdall_Data.config.messenger.debug + return Heimdall_Data.config.messenger.debug end - end - ) - inviterConfigFrame:Add(keyword, 2, 6) + ) + debugButton:UpdateColor(Heimdall_Data.config.messenger.debug) + messengerConfigFrame:Add(debugButton, 1, 4) - local cleanupInterval = CreateBasicSmallEditBox( - "HeimdallInviterConfigCleanupInterval", - inviterConfigFrame.frame, - shared._L("cleanupInterval", Heimdall_Data.config.locale), - Heimdall_Data.config.inviter.cleanupInterval, - function(self) - local text = self:GetText() - if string.match(text, "%d+") then - Heimdall_Data.config.inviter.cleanupInterval = tonumber(text) - print("Cleanup interval set to", tostring(text)) - else - print("Invalid cleanup interval", tostring(text)) - self:SetText(Heimdall_Data.config.inviter.cleanupInterval) + local enableButton = CreateBasicButton( + "HeimdallMessengerConfigEnableButton", + messengerConfigFrame.frame, + shared._L("enabled", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.messenger.enabled = not Heimdall_Data.config.messenger.enabled + return Heimdall_Data.config.messenger.enabled end - end - ) - inviterConfigFrame:Add(cleanupInterval, 2, 6) + ) + enableButton:UpdateColor(Heimdall_Data.config.messenger.enabled) + messengerConfigFrame:Add(enableButton, 2, 3) - local afkThreshold = CreateBasicSmallEditBox( - "HeimdallInviterConfigAfkThreshold", - inviterConfigFrame.frame, - shared._L("afkThreshold", Heimdall_Data.config.locale), - Heimdall_Data.config.inviter.afkThreshold, - function(self) - local text = self:GetText() - if string.match(text, "%d+") then - Heimdall_Data.config.inviter.afkThreshold = tonumber(text) - print("Afk threshold set to", tostring(text)) + local interval = CreateBasicSmallEditBox( + "HeimdallMessengerConfigInterval", + messengerConfigFrame.frame, + shared._L("interval", Heimdall_Data.config.locale), + Heimdall_Data.config.messenger.interval, + function(self) + local text = self:GetText() + if string.match(text, "%d+") then + Heimdall_Data.config.messenger.interval = tonumber(text) + print("Interval set to", tostring(text)) + else + print("Invalid interval", tostring(text)) + self:SetText(tostring(Heimdall_Data.config.messenger.interval)) + end end - end - ) - inviterConfigFrame:Add(afkThreshold, 2, 6) - end + ) + messengerConfigFrame:Add(interval, 2, 3) + end - -- Dueler - do - local r, g, b, a = GetNextColor() - local duelerConfigFrame = GridFrame.new("HeimdallDuelerConfig", UIParent, 12, 20) - duelerConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) - configFrame:Add(duelerConfigFrame, 4, 3) + -- Death Reporter + do + local r, g, b, a = GetNextColor() + local deathReporterConfigFrame = GridFrame.new("HeimdallDeathReporterConfig", UIParent, 12, 20) + deathReporterConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) + configFrame:Add(deathReporterConfigFrame, 10, 3) - title = CreateFancyText( - "HeimdallDuelerConfigTitle", - duelerConfigFrame.frame, - shared._L("dueler", Heimdall_Data.config.locale), - { r, g, b, a } - ) - duelerConfigFrame:Add(title, 1, 8) - local debugButton = CreateBasicButton( - "HeimdallDuelerConfigDebugButton", - duelerConfigFrame.frame, - shared._L("debug", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.dueler.debug = not Heimdall_Data.config.dueler.debug - return Heimdall_Data.config.dueler.debug - end - ) - debugButton:UpdateColor(Heimdall_Data.config.dueler.debug) - duelerConfigFrame:Add(debugButton, 1, 4) - - local enableButton = CreateBasicButton( - "HeimdallInviterConfigEnableButton", - duelerConfigFrame.frame, - shared._L("enabled", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.dueler.enabled = not Heimdall_Data.config.dueler.enabled - return Heimdall_Data.config.dueler.enabled - end - ) - enableButton:UpdateColor(Heimdall_Data.config.dueler.enabled) - duelerConfigFrame:Add(enableButton, 1, 6) - - local declineOther = CreateBasicButton( - "HeimdallDuelerConfigDeclineOtherButton", - duelerConfigFrame.frame, - shared._L("declineOther", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.dueler.declineOther = not Heimdall_Data.config.dueler.declineOther - return Heimdall_Data.config.dueler.declineOther - end - ) - declineOther:UpdateColor(Heimdall_Data.config.dueler.declineOther) - duelerConfigFrame:Add(declineOther, 1, 6) - end - - -- Agent Tracker - do - local r, g, b, a = GetNextColor() - local agentTrackerConfigFrame = GridFrame.new("HeimdallAgentTrackerConfig", UIParent, 12, 20) - agentTrackerConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) - configFrame:Add(agentTrackerConfigFrame, 5, 3) - - title = CreateFancyText( - "HeimdallAgentTrackerConfigTitle", - agentTrackerConfigFrame.frame, - shared._L("agentTracker", Heimdall_Data.config.locale), - { r, g, b, a } - ) - agentTrackerConfigFrame:Add(title, 1, 8) - local debugButton = CreateBasicButton( - "HeimdallAgentTrackerConfigDebugButton", - agentTrackerConfigFrame.frame, - shared._L("debug", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.agentTracker.debug = not Heimdall_Data.config.agentTracker.debug - return Heimdall_Data.config.agentTracker.debug - end - ) - debugButton:UpdateColor(Heimdall_Data.config.agentTracker.debug) - agentTrackerConfigFrame:Add(debugButton, 1, 4) - - local enableButton = CreateBasicButton( - "HeimdallAgentTrackerConfigEnableButton", - agentTrackerConfigFrame.frame, - shared._L("enabled", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.agentTracker.enabled = not Heimdall_Data.config.agentTracker.enabled - return Heimdall_Data.config.agentTracker.enabled - end - ) - enableButton:UpdateColor(Heimdall_Data.config.agentTracker.enabled) - agentTrackerConfigFrame:Add(enableButton, 2, 6) - - local channels = CreateBasicSmallEditBox( - "HeimdallAgentTrackerConfigChannels", - agentTrackerConfigFrame.frame, - shared._L("channels", Heimdall_Data.config.locale), - table.concat(Heimdall_Data.config.agentTracker.channels or {}, ","), - function(self) - local text = self:GetText() - Heimdall_Data.config.agentTracker.channels = StringToArray(text, ",") - print("Channels set to") - shared.dumpTable(Heimdall_Data.config.agentTracker.channels) - end - ) - agentTrackerConfigFrame:Add(channels, 2, 6) - end - - -- Stinky Tracker - do - local r, g, b, a = GetNextColor() - local stinkyTrackerConfigFrame = GridFrame.new("HeimdallStinkyTrackerConfig", UIParent, 12, 20) - stinkyTrackerConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) - configFrame:Add(stinkyTrackerConfigFrame, 5, 3) - - title = CreateFancyText( - "HeimdallStinkyTrackerConfigTitle", - stinkyTrackerConfigFrame.frame, - shared._L("stinkyTracker", Heimdall_Data.config.locale), - { r, g, b, a } - ) - stinkyTrackerConfigFrame:Add(title, 1, 8) - local debugButton = CreateBasicButton( - "HeimdallStinkyTrackerConfigDebugButton", - stinkyTrackerConfigFrame.frame, - shared._L("debug", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.stinkyTracker.debug = not Heimdall_Data.config.stinkyTracker.debug - return Heimdall_Data.config.stinkyTracker.debug - end - ) - debugButton:UpdateColor(Heimdall_Data.config.stinkyTracker.debug) - stinkyTrackerConfigFrame:Add(debugButton, 1, 4) - - local enableButton = CreateBasicButton( - "HeimdallStinkyTrackerConfigEnableButton", - stinkyTrackerConfigFrame.frame, - shared._L("enabled", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.stinkyTracker.enabled = not Heimdall_Data.config.stinkyTracker.enabled - return Heimdall_Data.config.stinkyTracker.enabled - end - ) - enableButton:UpdateColor(Heimdall_Data.config.stinkyTracker.enabled) - stinkyTrackerConfigFrame:Add(enableButton, 2, 6) - - local channels = CreateBasicSmallEditBox( - "HeimdallStinkyTrackerConfigChannels", - stinkyTrackerConfigFrame.frame, - shared._L("channels", Heimdall_Data.config.locale), - table.concat(Heimdall_Data.config.stinkyTracker.channels or {}, ","), - function(self) - local text = self:GetText() - Heimdall_Data.config.stinkyTracker.channels = StringToArray(text, ",") - print("Channels set to") - shared.dumpTable(Heimdall_Data.config.stinkyTracker.channels) - end - ) - stinkyTrackerConfigFrame:Add(channels, 2, 6) - end - - -- Emoter - do - local r, g, b, a = GetNextColor() - local emoterConfigFrame = GridFrame.new("HeimdallEmoterConfig", UIParent, 12, 20) - emoterConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) - configFrame:Add(emoterConfigFrame, 7, 3) - - title = CreateFancyText( - "HeimdallEmoterConfigTitle", - emoterConfigFrame.frame, - shared._L("emoter", Heimdall_Data.config.locale), - { r, g, b, a } - ) - emoterConfigFrame:Add(title, 1, 8) - local debugButton = CreateBasicButton( - "HeimdallEmoterConfigDebugButton", - emoterConfigFrame.frame, - shared._L("debug", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.emoter.debug = not Heimdall_Data.config.emoter.debug - return Heimdall_Data.config.emoter.debug - end - ) - debugButton:UpdateColor(Heimdall_Data.config.emoter.debug) - emoterConfigFrame:Add(debugButton, 1, 4) - - local enableButton = CreateBasicButton( - "HeimdallEmoterConfigEnableButton", - emoterConfigFrame.frame, - shared._L("enabled", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.emoter.enabled = not Heimdall_Data.config.emoter.enabled - return Heimdall_Data.config.emoter.enabled - end - ) - enableButton:UpdateColor(Heimdall_Data.config.emoter.enabled) - emoterConfigFrame:Add(enableButton, 1, 12) - - local channels = CreateBasicSmallEditBox( - "HeimdallEmoterConfigChannels", - emoterConfigFrame.frame, - shared._L("channels", Heimdall_Data.config.locale), - table.concat(Heimdall_Data.config.emoter.channels or {}, ","), - function(self) - local text = self:GetText() - Heimdall_Data.config.emoter.channels = StringToArray(text, ",") - print("Channels set to") - shared.dumpTable(Heimdall_Data.config.emoter.channels) - end - ) - emoterConfigFrame:Add(channels, 2, 6) - - local prefix = CreateBasicSmallEditBox( - "HeimdallEmoterConfigPrefix", - emoterConfigFrame.frame, - shared._L("prefix", Heimdall_Data.config.locale), - Heimdall_Data.config.emoter.prefix, - function(self) - local text = self:GetText() - if string.match(text, "%S+") then - Heimdall_Data.config.emoter.prefix = text - print("Prefix set to", tostring(text)) - else - print("Invalid prefix", tostring(text)) - self:SetText(Heimdall_Data.config.emoter.prefix) + title = CreateFancyText( + "HeimdallDeathReporterConfigTitle", + deathReporterConfigFrame.frame, + shared._L("deathReporter", Heimdall_Data.config.locale), + { r, g, b, a } + ) + deathReporterConfigFrame:Add(title, 1, 8) + local debugButton = CreateBasicButton( + "HeimdallDeathReporterConfigDebugButton", + deathReporterConfigFrame.frame, + shared._L("debug", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.deathReporter.debug = not Heimdall_Data.config.deathReporter.debug + return Heimdall_Data.config.deathReporter.debug end - end - ) - emoterConfigFrame:Add(prefix, 2, 6) - end + ) + debugButton:UpdateColor(Heimdall_Data.config.deathReporter.debug) + deathReporterConfigFrame:Add(debugButton, 1, 4) - -- Echoer - do - local r, g, b, a = GetNextColor() - local echoerConfigFrame = GridFrame.new("HeimdallEchoerConfig", UIParent, 12, 20) - echoerConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) - configFrame:Add(echoerConfigFrame, 7, 3) - - title = CreateFancyText( - "HeimdallEchoerConfigTitle", - echoerConfigFrame.frame, - shared._L("echoer", Heimdall_Data.config.locale), - { r, g, b, a } - ) - echoerConfigFrame:Add(title, 1, 8) - local debugButton = CreateBasicButton( - "HeimdallEchoerConfigDebugButton", - echoerConfigFrame.frame, - shared._L("debug", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.echoer.debug = not Heimdall_Data.config.echoer.debug - return Heimdall_Data.config.echoer.debug - end - ) - debugButton:UpdateColor(Heimdall_Data.config.echoer.debug) - echoerConfigFrame:Add(debugButton, 1, 4) - - local enableButton = CreateBasicButton( - "HeimdallEmoterConfigEnableButton", - echoerConfigFrame.frame, - shared._L("enabled", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.echoer.enabled = not Heimdall_Data.config.echoer.enabled - return Heimdall_Data.config.echoer.enabled - end - ) - enableButton:UpdateColor(Heimdall_Data.config.echoer.enabled) - echoerConfigFrame:Add(enableButton, 1, 12) - - local channels = CreateBasicSmallEditBox( - "HeimdallEmoterConfigChannels", - echoerConfigFrame.frame, - shared._L("channels", Heimdall_Data.config.locale), - table.concat(Heimdall_Data.config.echoer.channels or {}, ","), - function(self) - local text = self:GetText() - Heimdall_Data.config.echoer.channels = StringToArray(text, ",") - print("Channels set to") - shared.dumpTable(Heimdall_Data.config.echoer.channels) - end - ) - echoerConfigFrame:Add(channels, 2, 6) - - local prefix = CreateBasicSmallEditBox( - "HeimdallEmoterConfigPrefix", - echoerConfigFrame.frame, - shared._L("prefix", Heimdall_Data.config.locale), - Heimdall_Data.config.echoer.prefix, - function(self) - local text = self:GetText() - if string.match(text, "%S+") then - Heimdall_Data.config.echoer.prefix = text - print("Prefix set to", tostring(text)) - else - print("Invalid prefix", tostring(text)) - self:SetText(Heimdall_Data.config.echoer.prefix) + local enableButton = CreateBasicButton( + "HeimdallDeathReporterConfigEnableButton", + deathReporterConfigFrame.frame, + shared._L("enabled", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.deathReporter.enabled = not Heimdall_Data.config.deathReporter.enabled + return Heimdall_Data.config.deathReporter.enabled end - end - ) - echoerConfigFrame:Add(prefix, 2, 6) - end + ) + enableButton:UpdateColor(Heimdall_Data.config.deathReporter.enabled) + deathReporterConfigFrame:Add(enableButton, 1, 6) - -- Commander - do - local r, g, b, a = GetNextColor() - local commanderConfigFrame = GridFrame.new("HeimdallCommanderConfig", UIParent, 12, 20) - commanderConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) - configFrame:Add(commanderConfigFrame, 10, 3) - - title = CreateFancyText( - "HeimdallCommanderConfigTitle", - commanderConfigFrame.frame, - shared._L("commander", Heimdall_Data.config.locale), - { r, g, b, a } - ) - commanderConfigFrame:Add(title, 1, 8) - local debugButton = CreateBasicButton( - "HeimdallCommanderConfigDebugButton", - commanderConfigFrame.frame, - shared._L("debug", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.commander.debug = not Heimdall_Data.config.commander.debug - return Heimdall_Data.config.commander.debug - end - ) - debugButton:UpdateColor(Heimdall_Data.config.commander.debug) - commanderConfigFrame:Add(debugButton, 1, 4) - - local enableButton = CreateBasicButton( - "HeimdallCommanderConfigEnableButton", - commanderConfigFrame.frame, - shared._L("enabled", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.commander.enabled = not Heimdall_Data.config.commander.enabled - return Heimdall_Data.config.commander.enabled - end - ) - enableButton:UpdateColor(Heimdall_Data.config.commander.enabled) - commanderConfigFrame:Add(enableButton, 1, 12) - - local channels = CreateBasicSmallEditBox( - "HeimdallCommanderConfigChannels", - commanderConfigFrame.frame, - shared._L("channels", Heimdall_Data.config.locale), - table.concat(Heimdall_Data.config.commander.channels or {}, ","), - function(self) - local text = self:GetText() - Heimdall_Data.config.commander.channels = StringToArray(text, ",") - print("Channels set to") - shared.dumpTable(Heimdall_Data.config.commander.channels) - end - ) - commanderConfigFrame:Add(channels, 2, 6) - - local commander = CreateBasicSmallEditBox( - "HeimdallCommanderConfigCommander", - commanderConfigFrame.frame, - shared._L("commander", Heimdall_Data.config.locale), - Heimdall_Data.config.commander.commander, - function(self) - local text = self:GetText() - if string.match(text, "%S+") then - Heimdall_Data.config.commander.commander = text - print("Commander set to", tostring(text)) - else - print("Invalid commander", tostring(text)) - self:SetText(Heimdall_Data.config.commander.commander) + local doWhisperButton = CreateBasicButton( + "HeimdallDeathReporterConfigDoWhisperButton", + deathReporterConfigFrame.frame, + shared._L("doWhisper", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.deathReporter.doWhisper = not Heimdall_Data.config.deathReporter.doWhisper + return Heimdall_Data.config.deathReporter.doWhisper end - end - ) - commanderConfigFrame:Add(commander, 2, 6) + ) + doWhisperButton:UpdateColor(Heimdall_Data.config.deathReporter.doWhisper) + deathReporterConfigFrame:Add(doWhisperButton, 1, 6) - local commands = CreateBasicSmallEditBox( - "HeimdallCommanderConfigCommands", - commanderConfigFrame.frame, - shared._L("commands", Heimdall_Data.config.locale), - MapKeyToString(Heimdall_Data.config.commander.commands, ", "), - function(self) - local text = self:GetText() - Heimdall_Data.config.commander.commands = StringToMap(text, ",") - end - ) - commanderConfigFrame:Add(commands, 2, 12) - end - - -- Macroer - do - local r, g, b, a = GetNextColor() - local macroerConfigFrame = GridFrame.new("HeimdallMacroerConfig", UIParent, 12, 20) - macroerConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) - configFrame:Add(macroerConfigFrame, 6, 3) - - title = CreateFancyText( - "HeimdallMacroerConfigTitle", - macroerConfigFrame.frame, - shared._L("macroer", Heimdall_Data.config.locale), - { r, g, b, a } - ) - macroerConfigFrame:Add(title, 1, 8) - local debugButton = CreateBasicButton( - "HeimdallMacroerConfigDebugButton", - macroerConfigFrame.frame, - shared._L("debug", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.macroer.debug = not Heimdall_Data.config.macroer.debug - return Heimdall_Data.config.macroer.debug - end - ) - debugButton:UpdateColor(Heimdall_Data.config.macroer.debug) - macroerConfigFrame:Add(debugButton, 1, 4) - - local enableButton = CreateBasicButton( - "HeimdallCommanderConfigEnableButton", - macroerConfigFrame.frame, - shared._L("enabled", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.macroer.enabled = not Heimdall_Data.config.macroer.enabled - return Heimdall_Data.config.macroer.enabled - end - ) - enableButton:UpdateColor(Heimdall_Data.config.macroer.enabled) - macroerConfigFrame:Add(enableButton, 1, 12) - - local priority = CreateBasicSmallEditBox( - "HeimdallMacroerConfigPriority", - macroerConfigFrame.frame, - shared._L("priority", Heimdall_Data.config.locale), - table.concat(Heimdall_Data.config.macroer.priority, ", "), - function(self) - local text = self:GetText() - Heimdall_Data.config.macroer.priority = StringToArray(text, ",") - end - ) - macroerConfigFrame:Add(priority, 2, 12) - end - - -- Combat Alerter - do - local r, g, b, a = GetNextColor() - local combatAlerterConfigFrame = GridFrame.new("HeimdallCombatAlerterConfig", UIParent, 12, 20) - combatAlerterConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) - configFrame:Add(combatAlerterConfigFrame, 5, 3) - - title = CreateFancyText( - "HeimdallCombatAlerterConfigTitle", - combatAlerterConfigFrame.frame, - shared._L("combatAlerter", Heimdall_Data.config.locale), - { r, g, b, a } - ) - combatAlerterConfigFrame:Add(title, 1, 8) - local debugButton = CreateBasicButton( - "HeimdallCombatAlerterConfigDebugButton", - combatAlerterConfigFrame.frame, - shared._L("debug", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.combatAlerter.debug = not Heimdall_Data.config.combatAlerter.debug - return Heimdall_Data.config.combatAlerter.debug - end - ) - debugButton:UpdateColor(Heimdall_Data.config.combatAlerter.debug) - combatAlerterConfigFrame:Add(debugButton, 1, 4) - - local enableButton = CreateBasicButton( - "HeimdallCombatAlerterConfigEnableButton", - combatAlerterConfigFrame.frame, - shared._L("enabled", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.combatAlerter.enabled = not Heimdall_Data.config.combatAlerter.enabled - return Heimdall_Data.config.combatAlerter.enabled - end - ) - enableButton:UpdateColor(Heimdall_Data.config.combatAlerter.enabled) - combatAlerterConfigFrame:Add(enableButton, 2, 6) - - local channels = CreateBasicSmallEditBox( - "HeimdallCombatAlerterConfigChannels", - combatAlerterConfigFrame.frame, - shared._L("channels", Heimdall_Data.config.locale), - table.concat(Heimdall_Data.config.combatAlerter.channels or {}, ","), - function(self) - local text = self:GetText() - Heimdall_Data.config.combatAlerter.channels = StringToArray(text, ",") - print("Channels set to") - shared.dumpTable(Heimdall_Data.config.combatAlerter.channels) - end - ) - combatAlerterConfigFrame:Add(channels, 2, 6) - end - - -- Sniffer - do - local r, g, b, a = GetNextColor() - local snifferConfigFrame = GridFrame.new("HeimdallSnifferConfig", UIParent, 12, 20) - snifferConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) - configFrame:Add(snifferConfigFrame, 8, 3) - - title = CreateFancyText( - "HeimdallSnifferConfigTitle", - snifferConfigFrame.frame, - shared._L("sniffer", Heimdall_Data.config.locale), - { r, g, b, a } - ) - snifferConfigFrame:Add(title, 1, 8) - local debugButton = CreateBasicButton( - "HeimdallSnifferConfigDebugButton", - snifferConfigFrame.frame, - shared._L("debug", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.sniffer.debug = not Heimdall_Data.config.sniffer.debug - return Heimdall_Data.config.sniffer.debug - end - ) - debugButton:UpdateColor(Heimdall_Data.config.sniffer.debug) - snifferConfigFrame:Add(debugButton, 1, 4) - - local enableButton = CreateBasicButton( - "HeimdallSnifferConfigEnableButton", - snifferConfigFrame.frame, - shared._L("enabled", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.sniffer.enabled = not Heimdall_Data.config.sniffer.enabled - return Heimdall_Data.config.sniffer.enabled - end - ) - enableButton:UpdateColor(Heimdall_Data.config.sniffer.enabled) - snifferConfigFrame:Add(enableButton, 2, 3) - - local stinkyButton = CreateBasicButton( - "HeimdallSnifferConfigStinkyButton", - snifferConfigFrame.frame, - shared._L("stinky", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.sniffer.stinky = not Heimdall_Data.config.sniffer.stinky - return Heimdall_Data.config.sniffer.stinky - end - ) - stinkyButton:UpdateColor(Heimdall_Data.config.sniffer.stinky) - snifferConfigFrame:Add(stinkyButton, 2, 3) - - local channels = CreateBasicSmallEditBox( - "HeimdallSnifferConfigChannels", - snifferConfigFrame.frame, - shared._L("channels", Heimdall_Data.config.locale), - table.concat(Heimdall_Data.config.sniffer.channels or {}, ","), - function(self) - local text = self:GetText() - Heimdall_Data.config.sniffer.channels = StringToArray(text, ",") - print("Channels set to") - shared.dumpTable(Heimdall_Data.config.sniffer.channels) - end - ) - snifferConfigFrame:Add(channels, 2, 6) - - local throttle = CreateBasicSmallEditBox( - "HeimdallSnifferConfigThrottle", - snifferConfigFrame.frame, - shared._L("throttle", Heimdall_Data.config.locale), - Heimdall_Data.config.sniffer.throttle, - function(self) - local text = self:GetText() - if string.match(text, "%d+") then - Heimdall_Data.config.sniffer.throttle = tonumber(text) - print("Throttle set to", tostring(text)) - else - print("Invalid throttle", tostring(text)) - self:SetText(Heimdall_Data.config.sniffer.throttle) + local throttleTime = CreateBasicSmallEditBox( + "HeimdallDeathReporterConfigThrottleTime", + deathReporterConfigFrame.frame, + shared._L("throttle", Heimdall_Data.config.locale), + Heimdall_Data.config.deathReporter.throttle, + function(self) + local text = self:GetText() + if string.match(text, "%d+") then + Heimdall_Data.config.deathReporter.throttle = tonumber(text) + print("Throttle time set to", tostring(text)) + else + print("Invalid throttle time", tostring(text)) + self:SetText(tostring(Heimdall_Data.config.deathReporter.throttle)) + end end - end - ) - snifferConfigFrame:Add(throttle, 2, 6) + ) + deathReporterConfigFrame:Add(throttleTime, 2, 6) - local zoneOverride = CreateBasicSmallEditBox( - "HeimdallSnifferConfigZoneOverride", - snifferConfigFrame.frame, - shared._L("zoneOverride", Heimdall_Data.config.locale), - Heimdall_Data.config.sniffer.zoneOverride, - function(self) - local text = self:GetText() - if string.match(text, "%S+") then - Heimdall_Data.config.sniffer.zoneOverride = text - print("Zone override set to", tostring(text)) - else - print("Invalid zone override", tostring(text)) - self:SetText(Heimdall_Data.config.sniffer.zoneOverride) + local duelThrottle = CreateBasicSmallEditBox( + "HeimdallDeathReporterConfigDuelThrottle", + deathReporterConfigFrame.frame, + shared._L("duelThrottle", Heimdall_Data.config.locale), + Heimdall_Data.config.deathReporter.duelThrottle, + function(self) + local text = self:GetText() + if string.match(text, "%d+") then + Heimdall_Data.config.deathReporter.duelThrottle = tonumber(text) + print("Duel throttle set to", tostring(text)) + else + print("Invalid duel throttle", tostring(text)) + self:SetText(Heimdall_Data.config.deathReporter.duelThrottle) + end end - end - ) - snifferConfigFrame:Add(zoneOverride, 2, 6) - end + ) + deathReporterConfigFrame:Add(duelThrottle, 2, 6) - -- BonkDetector - do - local r, g, b, a = GetNextColor() - local bonkDetectorConfigFrame = GridFrame.new("HeimdallBonkDetectorConfig", UIParent, 12, 20) - bonkDetectorConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) - configFrame:Add(bonkDetectorConfigFrame, 7, 3) - - title = CreateFancyText( - "HeimdallBonkDetectorConfigTitle", - bonkDetectorConfigFrame.frame, - shared._L("bonkDetector", Heimdall_Data.config.locale), - { r, g, b, a } - ) - bonkDetectorConfigFrame:Add(title, 1, 8) - - local debugButton = CreateBasicButton( - "HeimdallBonkDetectorConfigDebugButton", - bonkDetectorConfigFrame.frame, - shared._L("debug", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.bonkDetector.debug = not Heimdall_Data.config.bonkDetector.debug - return Heimdall_Data.config.bonkDetector.debug - end - ) - debugButton:UpdateColor(Heimdall_Data.config.bonkDetector.debug) - bonkDetectorConfigFrame:Add(debugButton, 1, 4) - - local enableButton = CreateBasicButton( - "HeimdallBonkDetectorConfigEnableButton", - bonkDetectorConfigFrame.frame, - shared._L("enabled", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.bonkDetector.enabled = not Heimdall_Data.config.bonkDetector.enabled - return Heimdall_Data.config.bonkDetector.enabled - end - ) - enableButton:UpdateColor(Heimdall_Data.config.bonkDetector.enabled) - bonkDetectorConfigFrame:Add(enableButton, 1, 12) - - local channels = CreateBasicSmallEditBox( - "HeimdallBonkDetectorConfigChannels", - bonkDetectorConfigFrame.frame, - shared._L("channels", Heimdall_Data.config.locale), - table.concat(Heimdall_Data.config.bonkDetector.channels or {}, ","), - function(self) - local text = self:GetText() - Heimdall_Data.config.bonkDetector.channels = StringToArray(text, ",") - print("Channels set to") - shared.dumpTable(Heimdall_Data.config.bonkDetector.channels) - end - ) - bonkDetectorConfigFrame:Add(channels, 2, 6) - - local throttle = CreateBasicSmallEditBox( - "HeimdallBonkDetectorConfigThrottle", - bonkDetectorConfigFrame.frame, - shared._L("throttle", Heimdall_Data.config.locale), - Heimdall_Data.config.bonkDetector.throttle, - function(self) - local text = self:GetText() - if string.match(text, "%d+") then - Heimdall_Data.config.bonkDetector.throttle = tonumber(text) - print("Throttle set to", tostring(text)) - else - print("Invalid throttle", tostring(text)) - self:SetText(Heimdall_Data.config.bonkDetector.throttle) + local channels = CreateBasicSmallEditBox( + "HeimdallDeathReporterConfigChannels", + deathReporterConfigFrame.frame, + shared._L("channels", Heimdall_Data.config.locale), + table.concat(Heimdall_Data.config.deathReporter.channels or {}, ","), + function(self) + local text = self:GetText() + Heimdall_Data.config.deathReporter.channels = StringToArray(text, ",") + print("Channels set to") + shared.dumpTable(Heimdall_Data.config.deathReporter.channels) end - end - ) - bonkDetectorConfigFrame:Add(throttle, 2, 6) - end + ) + deathReporterConfigFrame:Add(channels, 2, 6) - -- Minimap Tagger - do - local r, g, b, a = GetNextColor() - local minimapTaggerConfigFrame = GridFrame.new("HeimdallMinimapTaggerConfig", UIParent, 12, 20) - minimapTaggerConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) - configFrame:Add(minimapTaggerConfigFrame, 18, 6) - - title = CreateFancyText( - "HeimdallMinimapTaggerConfigTitle", - minimapTaggerConfigFrame.frame, - shared._L("minimapTagger", Heimdall_Data.config.locale), - { r, g, b, a } - ) - minimapTaggerConfigFrame:Add(title, 1, 8) - local debugButton = CreateBasicButton( - "HeimdallMinimapTaggerConfigDebugButton", - minimapTaggerConfigFrame.frame, - shared._L("debug", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.minimapTagger.debug = not Heimdall_Data.config.minimapTagger.debug - return Heimdall_Data.config.minimapTagger.debug - end - ) - debugButton:UpdateColor(Heimdall_Data.config.minimapTagger.debug) - minimapTaggerConfigFrame:Add(debugButton, 1, 4) - - local enableButton = CreateBasicButton( - "HeimdallMinimapTaggerConfigEnableButton", - minimapTaggerConfigFrame.frame, - shared._L("enabled", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.minimapTagger.enabled = not Heimdall_Data.config.minimapTagger.enabled - return Heimdall_Data.config.minimapTagger.enabled - end - ) - enableButton:UpdateColor(Heimdall_Data.config.minimapTagger.enabled) - minimapTaggerConfigFrame:Add(enableButton, 2, 6) - - local channels = CreateBasicSmallEditBox( - "HeimdallMinimapTaggerConfigChannels", - minimapTaggerConfigFrame.frame, - shared._L("channels", Heimdall_Data.config.locale), - table.concat(Heimdall_Data.config.minimapTagger.channels or {}, ","), - function(self) - local text = self:GetText() - Heimdall_Data.config.minimapTagger.channels = StringToArray(text, ",") - print("Channels set to") - shared.dumpTable(Heimdall_Data.config.minimapTagger.channels) - end - ) - minimapTaggerConfigFrame:Add(channels, 2, 3) - - scale = CreateBasicSmallEditBox( - "HeimdallMinimapTaggerConfigScale", - minimapTaggerConfigFrame.frame, - shared._L("scale", Heimdall_Data.config.locale), - Heimdall_Data.config.minimapTagger.scale, - function(self) - local text = self:GetText() - if string.match(text, "%d+") then - Heimdall_Data.config.minimapTagger.scale = tonumber(text) - print("Scale set to", tostring(text)) + local zoneOverride = CreateBasicSmallEditBox( + "HeimdallDeathReporterConfigZoneOverride", + deathReporterConfigFrame.frame, + shared._L("zoneOverride", Heimdall_Data.config.locale), + Heimdall_Data.config.deathReporter.zoneOverride, + function(self) + local text = self:GetText() + if string.match(text, "%S+") then + Heimdall_Data.config.deathReporter.zoneOverride = text + print("Zone override set to", tostring(text)) + else + print("Invalid zone override", tostring(text)) + self:SetText(Heimdall_Data.config.deathReporter.zoneOverride) + end end - end - ) - minimapTaggerConfigFrame:Add(scale, 2, 3) + ) + deathReporterConfigFrame:Add(zoneOverride, 2, 6) + end - --region Tag - local tagSound = CreateBasicButton( - "HeimdallMinimapTaggerConfigTagSound", - minimapTaggerConfigFrame.frame, - shared._L("tagSound", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.minimapTagger.tagSound = not Heimdall_Data.config.minimapTagger.tagSound - return Heimdall_Data.config.minimapTagger.tagSound - end - ) - tagSound:UpdateColor(Heimdall_Data.config.minimapTagger.tagSound) - minimapTaggerConfigFrame:Add(tagSound, 2, 1) + -- Inviter + do + local r, g, b, a = GetNextColor() + local inviterConfigFrame = GridFrame.new("HeimdallInviterConfig", UIParent, 12, 20) + inviterConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) + configFrame:Add(inviterConfigFrame, 13, 3) - local tagTTL = CreateBasicSmallEditBox( - "HeimdallMinimapTaggerConfigTagTTL", - minimapTaggerConfigFrame.frame, - shared._L("ttl", Heimdall_Data.config.locale), - Heimdall_Data.config.minimapTagger.tagTTL, - function(self) - local text = self:GetText() - if string.match(text, "%d+") then - Heimdall_Data.config.minimapTagger.tagTTL = tonumber(text) - print("Tag TTL set to", tostring(text)) - else - print("Invalid tag TTL", tostring(text)) - self:SetText(Heimdall_Data.config.minimapTagger.tagTTL) + title = CreateFancyText( + "HeimdallInviterConfigTitle", + inviterConfigFrame.frame, + shared._L("inviter", Heimdall_Data.config.locale), + { r, g, b, a } + ) + inviterConfigFrame:Add(title, 1, 8) + local debugButton = CreateBasicButton( + "HeimdallInviterConfigDebugButton", + inviterConfigFrame.frame, + shared._L("debug", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.inviter.debug = not Heimdall_Data.config.inviter.debug + return Heimdall_Data.config.inviter.debug end - end - ) - minimapTaggerConfigFrame:Add(tagTTL, 2, 1) + ) + debugButton:UpdateColor(Heimdall_Data.config.inviter.debug) + inviterConfigFrame:Add(debugButton, 1, 4) - local tagSoundThrottle = CreateBasicSmallEditBox( - "HeimdallMinimapTaggerConfigTagSoundThrottle", - minimapTaggerConfigFrame.frame, - shared._L("soundThrottle", Heimdall_Data.config.locale), - Heimdall_Data.config.minimapTagger.tagSoundThrottle, - function(self) - local text = self:GetText() - if string.match(text, "%d+") then - Heimdall_Data.config.minimapTagger.tagSoundThrottle = tonumber(text) - print("Tag sound throttle set to", tostring(text)) - else - print("Invalid tag sound throttle", tostring(text)) - self:SetText(Heimdall_Data.config.minimapTagger.tagSoundThrottle) + local enableButton = CreateBasicButton( + "HeimdallInviterConfigEnableButton", + inviterConfigFrame.frame, + shared._L("enabled", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.inviter.enabled = not Heimdall_Data.config.inviter.enabled + return Heimdall_Data.config.inviter.enabled end - end - ) - minimapTaggerConfigFrame:Add(tagSoundThrottle, 2, 2) + ) + enableButton:UpdateColor(Heimdall_Data.config.inviter.enabled) + inviterConfigFrame:Add(enableButton, 1, 3) - local tagSoundFile = CreateBasicSmallEditBox( - "HeimdallMinimapTaggerConfigTagSoundFile", - minimapTaggerConfigFrame.frame, - shared._L("soundFile", Heimdall_Data.config.locale), - Heimdall_Data.config.minimapTagger.tagSoundFile, - function(self) - local text = self:GetText() - if string.match(text, "%S+") then - Heimdall_Data.config.minimapTagger.tagSoundFile = text - print("Tag sound file set to", tostring(text)) - else - print("Invalid tag sound file", tostring(text)) - self:SetText(Heimdall_Data.config.minimapTagger.tagSoundFile) + local allAssistButton = CreateBasicButton( + "HeimdallInviterConfigAllAssistButton", + inviterConfigFrame.frame, + shared._L("allAssist", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.inviter.allAssist = not Heimdall_Data.config.inviter.allAssist + return Heimdall_Data.config.inviter.allAssist end - end - ) - minimapTaggerConfigFrame:Add(tagSoundFile, 2, 4) + ) + allAssistButton:UpdateColor(Heimdall_Data.config.inviter.allAssist) + inviterConfigFrame:Add(allAssistButton, 1, 3) - local tagTexture = CreateBasicSmallEditBox( - "HeimdallMinimapTaggerConfigTagTexture", - minimapTaggerConfigFrame.frame, - shared._L("textureFile", Heimdall_Data.config.locale), - Heimdall_Data.config.minimapTagger.tagTextureFile, - function(self) - local text = self:GetText() - if string.match(text, "%S+") then - Heimdall_Data.config.minimapTagger.tagTextureFile = text - print("Tag texture file set to", tostring(text)) + local agentsAssist = CreateBasicButton( + "HeimdallInviterConfigAgentsAssistButton", + inviterConfigFrame.frame, + shared._L("agentsAssist", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.inviter.agentsAssist = not Heimdall_Data.config.inviter.agentsAssist + return Heimdall_Data.config.inviter.agentsAssist end - end - ) - minimapTaggerConfigFrame:Add(tagTexture, 2, 4) - --endregion - --region Alert - local alertSound = CreateBasicButton( - "HeimdallMinimapTaggerConfigAlertSound", - minimapTaggerConfigFrame.frame, - shared._L("alertSound", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.minimapTagger.alertSound = not Heimdall_Data.config.minimapTagger.alertSound - return Heimdall_Data.config.minimapTagger.alertSound - end - ) - alertSound:UpdateColor(Heimdall_Data.config.minimapTagger.alertSound) - minimapTaggerConfigFrame:Add(alertSound, 2, 1) + ) + agentsAssist:UpdateColor(Heimdall_Data.config.inviter.agentsAssist) + inviterConfigFrame:Add(agentsAssist, 1, 3) - local alertTTL = CreateBasicSmallEditBox( - "HeimdallMinimapTaggerConfigAlertTTL", - minimapTaggerConfigFrame.frame, - shared._L("ttl", Heimdall_Data.config.locale), - Heimdall_Data.config.minimapTagger.alertTTL, - function(self) - local text = self:GetText() - if string.match(text, "%d+") then - Heimdall_Data.config.minimapTagger.alertTTL = tonumber(text) - print("Alert TTL set to", tostring(text)) + local kickOffline = CreateBasicButton( + "HeimdallInviterConfigKickOfflineButton", + inviterConfigFrame.frame, + shared._L("kickOffline", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.inviter.kickOffline = not Heimdall_Data.config.inviter.kickOffline + return Heimdall_Data.config.inviter.kickOffline end - end - ) - minimapTaggerConfigFrame:Add(alertTTL, 2, 1) + ) + kickOffline:UpdateColor(Heimdall_Data.config.inviter.kickOffline) + inviterConfigFrame:Add(kickOffline, 1, 3) - local alertSoundThrottle = CreateBasicSmallEditBox( - "HeimdallMinimapTaggerConfigAlertSoundThrottle", - minimapTaggerConfigFrame.frame, - shared._L("soundThrottle", Heimdall_Data.config.locale), - Heimdall_Data.config.minimapTagger.alertSoundThrottle, - function(self) - local text = self:GetText() - if string.match(text, "%d+") then - Heimdall_Data.config.minimapTagger.alertSoundThrottle = tonumber(text) - print("Alert sound throttle set to", tostring(text)) + local throttle = CreateBasicSmallEditBox( + "HeimdallInviterConfigThrottle", + inviterConfigFrame.frame, + shared._L("throttle", Heimdall_Data.config.locale), + Heimdall_Data.config.inviter.throttle, + function(self) + local text = self:GetText() + if string.match(text, "%d+") then + Heimdall_Data.config.inviter.throttle = tonumber(text) + print("Throttle time set to", tostring(text)) + else + print("Invalid throttle time", tostring(text)) + self:SetText(Heimdall_Data.config.inviter.throttle) + end end - end - ) - minimapTaggerConfigFrame:Add(alertSoundThrottle, 2, 2) + ) + inviterConfigFrame:Add(throttle, 2, 6) - local alertSoundFile = CreateBasicSmallEditBox( - "HeimdallMinimapTaggerConfigAlertSoundFile", - minimapTaggerConfigFrame.frame, - shared._L("soundFile", Heimdall_Data.config.locale), - Heimdall_Data.config.minimapTagger.alertSoundFile, - function(self) - local text = self:GetText() - if string.match(text, "%S+") then - Heimdall_Data.config.minimapTagger.alertSoundFile = text - print("Alert sound file set to", tostring(text)) + local channels = CreateBasicSmallEditBox( + "HeimdallInviterConfigChannels", + inviterConfigFrame.frame, + shared._L("channels", Heimdall_Data.config.locale), + table.concat(Heimdall_Data.config.inviter.channels or {}, ","), + function(self) + local text = self:GetText() + Heimdall_Data.config.inviter.channels = StringToArray(text, ",") + print("Channels set to") + shared.dumpTable(Heimdall_Data.config.inviter.channels) end - end - ) - minimapTaggerConfigFrame:Add(alertSoundFile, 2, 4) + ) + inviterConfigFrame:Add(channels, 2, 6) - local alertTexture = CreateBasicSmallEditBox( - "HeimdallMinimapTaggerConfigAlertTexture", - minimapTaggerConfigFrame.frame, - shared._L("textureFile", Heimdall_Data.config.locale), - Heimdall_Data.config.minimapTagger.alertTextureFile, - function(self) - local text = self:GetText() - if string.match(text, "%S+") then - Heimdall_Data.config.minimapTagger.alertTextureFile = text - print("Alert texture file set to", tostring(text)) + local keyword = CreateBasicSmallEditBox( + "HeimdallInviterConfigKeywords", + inviterConfigFrame.frame, + shared._L("keyword", Heimdall_Data.config.locale), + Heimdall_Data.config.inviter.keyword, + function(self) + local text = self:GetText() + if string.match(text, "%S+") then + Heimdall_Data.config.inviter.keyword = text + print("Keyword set to", tostring(text)) + else + print("Invalid keyword", tostring(text)) + self:SetText(Heimdall_Data.config.inviter.keyword) + end end - end - ) - minimapTaggerConfigFrame:Add(alertTexture, 2, 4) - --endregion - --region Combat - local combatSound = CreateBasicButton( - "HeimdallMinimapTaggerConfigCombatSound", - minimapTaggerConfigFrame.frame, - shared._L("combatSound", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.minimapTagger.combatSound = not Heimdall_Data.config.minimapTagger.combatSound - return Heimdall_Data.config.minimapTagger.combatSound - end - ) - combatSound:UpdateColor(Heimdall_Data.config.minimapTagger.combatSound) - minimapTaggerConfigFrame:Add(combatSound, 2, 1) + ) + inviterConfigFrame:Add(keyword, 2, 6) - local combatTTL = CreateBasicSmallEditBox( - "HeimdallMinimapTaggerConfigCombatTTL", - minimapTaggerConfigFrame.frame, - shared._L("ttl", Heimdall_Data.config.locale), - Heimdall_Data.config.minimapTagger.combatTTL, - function(self) - local text = self:GetText() - if string.match(text, "%d+") then - Heimdall_Data.config.minimapTagger.combatTTL = tonumber(text) - print("Combat TTL set to", tostring(text)) + local cleanupInterval = CreateBasicSmallEditBox( + "HeimdallInviterConfigCleanupInterval", + inviterConfigFrame.frame, + shared._L("cleanupInterval", Heimdall_Data.config.locale), + Heimdall_Data.config.inviter.cleanupInterval, + function(self) + local text = self:GetText() + if string.match(text, "%d+") then + Heimdall_Data.config.inviter.cleanupInterval = tonumber(text) + print("Cleanup interval set to", tostring(text)) + else + print("Invalid cleanup interval", tostring(text)) + self:SetText(Heimdall_Data.config.inviter.cleanupInterval) + end end - end - ) - minimapTaggerConfigFrame:Add(combatTTL, 2, 1) + ) + inviterConfigFrame:Add(cleanupInterval, 2, 6) - local combatSoundThrottle = CreateBasicSmallEditBox( - "HeimdallMinimapTaggerConfigCombatSoundThrottle", - minimapTaggerConfigFrame.frame, - shared._L("soundThrottle", Heimdall_Data.config.locale), - Heimdall_Data.config.minimapTagger.combatSoundThrottle, - function(self) - local text = self:GetText() - if string.match(text, "%d+") then - Heimdall_Data.config.minimapTagger.combatSoundThrottle = tonumber(text) - print("Combat sound throttle set to", tostring(text)) + local afkThreshold = CreateBasicSmallEditBox( + "HeimdallInviterConfigAfkThreshold", + inviterConfigFrame.frame, + shared._L("afkThreshold", Heimdall_Data.config.locale), + Heimdall_Data.config.inviter.afkThreshold, + function(self) + local text = self:GetText() + if string.match(text, "%d+") then + Heimdall_Data.config.inviter.afkThreshold = tonumber(text) + print("Afk threshold set to", tostring(text)) + end end - end - ) - minimapTaggerConfigFrame:Add(combatSoundThrottle, 2, 2) + ) + inviterConfigFrame:Add(afkThreshold, 2, 6) + end - local combatSoundFile = CreateBasicSmallEditBox( - "HeimdallMinimapTaggerConfigCombatSoundFile", - minimapTaggerConfigFrame.frame, - shared._L("soundFile", Heimdall_Data.config.locale), - Heimdall_Data.config.minimapTagger.combatSoundFile, - function(self) - local text = self:GetText() - if string.match(text, "%S+") then - Heimdall_Data.config.minimapTagger.combatSoundFile = text - print("Combat sound file set to", tostring(text)) + -- Dueler + do + local r, g, b, a = GetNextColor() + local duelerConfigFrame = GridFrame.new("HeimdallDuelerConfig", UIParent, 12, 20) + duelerConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) + configFrame:Add(duelerConfigFrame, 4, 3) + + title = CreateFancyText( + "HeimdallDuelerConfigTitle", + duelerConfigFrame.frame, + shared._L("dueler", Heimdall_Data.config.locale), + { r, g, b, a } + ) + duelerConfigFrame:Add(title, 1, 8) + local debugButton = CreateBasicButton( + "HeimdallDuelerConfigDebugButton", + duelerConfigFrame.frame, + shared._L("debug", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.dueler.debug = not Heimdall_Data.config.dueler.debug + return Heimdall_Data.config.dueler.debug end - end - ) - minimapTaggerConfigFrame:Add(combatSoundFile, 2, 4) - local combatTexture = CreateBasicSmallEditBox( - "HeimdallMinimapTaggerConfigCombatTexture", - minimapTaggerConfigFrame.frame, - shared._L("textureFile", Heimdall_Data.config.locale), - Heimdall_Data.config.minimapTagger.combatTextureFile, - function(self) - local text = self:GetText() - if string.match(text, "%S+") then - Heimdall_Data.config.minimapTagger.combatTextureFile = text - print("Combat texture file set to", tostring(text)) + ) + debugButton:UpdateColor(Heimdall_Data.config.dueler.debug) + duelerConfigFrame:Add(debugButton, 1, 4) + + local enableButton = CreateBasicButton( + "HeimdallInviterConfigEnableButton", + duelerConfigFrame.frame, + shared._L("enabled", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.dueler.enabled = not Heimdall_Data.config.dueler.enabled + return Heimdall_Data.config.dueler.enabled end - end - ) - minimapTaggerConfigFrame:Add(combatTexture, 2, 4) - --endregion - --region Help - local helpSound = CreateBasicButton( - "HeimdallMinimapTaggerConfigHelpSound", - minimapTaggerConfigFrame.frame, - shared._L("helpSound", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.minimapTagger.helpSound = not Heimdall_Data.config.minimapTagger.helpSound - return Heimdall_Data.config.minimapTagger.helpSound - end - ) - helpSound:UpdateColor(Heimdall_Data.config.minimapTagger.helpSound) - minimapTaggerConfigFrame:Add(helpSound, 2, 1) + ) + enableButton:UpdateColor(Heimdall_Data.config.dueler.enabled) + duelerConfigFrame:Add(enableButton, 1, 6) - local helpTTL = CreateBasicSmallEditBox( - "HeimdallMinimapTaggerConfigHelpTTL", - minimapTaggerConfigFrame.frame, - shared._L("ttl", Heimdall_Data.config.locale), - Heimdall_Data.config.minimapTagger.helpTTL, - function(self) - local text = self:GetText() - if string.match(text, "%d+") then - Heimdall_Data.config.minimapTagger.helpTTL = tonumber(text) - print("Help TTL set to", tostring(text)) + local declineOther = CreateBasicButton( + "HeimdallDuelerConfigDeclineOtherButton", + duelerConfigFrame.frame, + shared._L("declineOther", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.dueler.declineOther = not Heimdall_Data.config.dueler.declineOther + return Heimdall_Data.config.dueler.declineOther end - end - ) - minimapTaggerConfigFrame:Add(helpTTL, 2, 1) + ) + declineOther:UpdateColor(Heimdall_Data.config.dueler.declineOther) + duelerConfigFrame:Add(declineOther, 1, 6) + end - local helpSoundThrottle = CreateBasicSmallEditBox( - "HeimdallMinimapTaggerConfigHelpSoundThrottle", - minimapTaggerConfigFrame.frame, - shared._L("soundThrottle", Heimdall_Data.config.locale), - Heimdall_Data.config.minimapTagger.helpSoundThrottle, - function(self) - local text = self:GetText() - if string.match(text, "%d+") then - Heimdall_Data.config.minimapTagger.helpSoundThrottle = tonumber(text) - print("Help sound throttle set to", tostring(text)) + -- Agent Tracker + do + local r, g, b, a = GetNextColor() + local agentTrackerConfigFrame = GridFrame.new("HeimdallAgentTrackerConfig", UIParent, 12, 20) + agentTrackerConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) + configFrame:Add(agentTrackerConfigFrame, 5, 3) + + title = CreateFancyText( + "HeimdallAgentTrackerConfigTitle", + agentTrackerConfigFrame.frame, + shared._L("agentTracker", Heimdall_Data.config.locale), + { r, g, b, a } + ) + agentTrackerConfigFrame:Add(title, 1, 8) + local debugButton = CreateBasicButton( + "HeimdallAgentTrackerConfigDebugButton", + agentTrackerConfigFrame.frame, + shared._L("debug", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.agentTracker.debug = not Heimdall_Data.config.agentTracker.debug + return Heimdall_Data.config.agentTracker.debug end - end - ) - minimapTaggerConfigFrame:Add(helpSoundThrottle, 2, 2) + ) + debugButton:UpdateColor(Heimdall_Data.config.agentTracker.debug) + agentTrackerConfigFrame:Add(debugButton, 1, 4) - local helpSoundFile = CreateBasicSmallEditBox( - "HeimdallMinimapTaggerConfigHelpSoundFile", - minimapTaggerConfigFrame.frame, - shared._L("soundFile", Heimdall_Data.config.locale), - Heimdall_Data.config.minimapTagger.helpSoundFile, - function(self) - local text = self:GetText() - if string.match(text, "%S+") then - Heimdall_Data.config.minimapTagger.helpSoundFile = text - print("Help sound file set to", tostring(text)) + local enableButton = CreateBasicButton( + "HeimdallAgentTrackerConfigEnableButton", + agentTrackerConfigFrame.frame, + shared._L("enabled", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.agentTracker.enabled = not Heimdall_Data.config.agentTracker.enabled + return Heimdall_Data.config.agentTracker.enabled end - end - ) - minimapTaggerConfigFrame:Add(helpSoundFile, 2, 4) - local helpTexture = CreateBasicSmallEditBox( - "HeimdallMinimapTaggerConfigHelpTexture", - minimapTaggerConfigFrame.frame, - shared._L("textureFile", Heimdall_Data.config.locale), - Heimdall_Data.config.minimapTagger.helpTextureFile, - function(self) - local text = self:GetText() - if string.match(text, "%S+") then - Heimdall_Data.config.minimapTagger.helpTextureFile = text - print("Help texture file set to", tostring(text)) + ) + enableButton:UpdateColor(Heimdall_Data.config.agentTracker.enabled) + agentTrackerConfigFrame:Add(enableButton, 2, 6) + + local channels = CreateBasicSmallEditBox( + "HeimdallAgentTrackerConfigChannels", + agentTrackerConfigFrame.frame, + shared._L("channels", Heimdall_Data.config.locale), + table.concat(Heimdall_Data.config.agentTracker.channels or {}, ","), + function(self) + local text = self:GetText() + Heimdall_Data.config.agentTracker.channels = StringToArray(text, ",") + print("Channels set to") + shared.dumpTable(Heimdall_Data.config.agentTracker.channels) end - end - ) - minimapTaggerConfigFrame:Add(helpTexture, 2, 4) - --endregion - end + ) + agentTrackerConfigFrame:Add(channels, 2, 6) + end - -- Noter - do - local r, g, b, a = GetNextColor() - local noterConfigFrame = GridFrame.new("HeimdallNoterConfig", UIParent, 12, 20) - noterConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) - configFrame:Add(noterConfigFrame, 7, 3) + -- Stinky Tracker + do + local r, g, b, a = GetNextColor() + local stinkyTrackerConfigFrame = GridFrame.new("HeimdallStinkyTrackerConfig", UIParent, 12, 20) + stinkyTrackerConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) + configFrame:Add(stinkyTrackerConfigFrame, 5, 3) - title = CreateFancyText( - "HeimdallNoterConfigTitle", - noterConfigFrame.frame, - shared._L("noter", Heimdall_Data.config.locale), - { r, g, b, a } - ) - noterConfigFrame:Add(title, 1, 8) - - local debugButton = CreateBasicButton( - "HeimdallNoterConfigDebugButton", - noterConfigFrame.frame, - shared._L("debug", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.noter.debug = not Heimdall_Data.config.noter.debug - return Heimdall_Data.config.noter.debug - end - ) - debugButton:UpdateColor(Heimdall_Data.config.noter.debug) - noterConfigFrame:Add(debugButton, 1, 4) - - local enableButton = CreateBasicButton( - "HeimdallNoterConfigEnableButton", - noterConfigFrame.frame, - shared._L("enabled", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.noter.enabled = not Heimdall_Data.config.noter.enabled - return Heimdall_Data.config.noter.enabled - end - ) - enableButton:UpdateColor(Heimdall_Data.config.noter.enabled) - noterConfigFrame:Add(enableButton, 1, 12) - - local channels = CreateBasicSmallEditBox( - "HeimdallNoterConfigChannels", - noterConfigFrame.frame, - shared._L("channels", Heimdall_Data.config.locale), - table.concat(Heimdall_Data.config.noter.channels or {}, ","), - function(self) - local text = self:GetText() - Heimdall_Data.config.noter.channels = StringToArray(text, ",") - print("Channels set to") - shared.dumpTable(Heimdall_Data.config.noter.channels) - end - ) - noterConfigFrame:Add(channels, 2, 6) - - local lastNotes = CreateBasicSmallEditBox( - "HeimdallNoterConfigLastNotes", - noterConfigFrame.frame, - shared._L("lastNotes", Heimdall_Data.config.locale), - tostring(Heimdall_Data.config.noter.lastNotes), - function(self) - local text = self:GetText() - local value = tonumber(text) - if value and value > 0 then - Heimdall_Data.config.noter.lastNotes = value - print("Last notes set to", value) - else - print("Invalid number of last notes", text) - self:SetText(tostring(Heimdall_Data.config.noter.lastNotes)) + title = CreateFancyText( + "HeimdallStinkyTrackerConfigTitle", + stinkyTrackerConfigFrame.frame, + shared._L("stinkyTracker", Heimdall_Data.config.locale), + { r, g, b, a } + ) + stinkyTrackerConfigFrame:Add(title, 1, 8) + local debugButton = CreateBasicButton( + "HeimdallStinkyTrackerConfigDebugButton", + stinkyTrackerConfigFrame.frame, + shared._L("debug", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.stinkyTracker.debug = not Heimdall_Data.config.stinkyTracker.debug + return Heimdall_Data.config.stinkyTracker.debug end - end - ) - noterConfigFrame:Add(lastNotes, 2, 6) - end + ) + debugButton:UpdateColor(Heimdall_Data.config.stinkyTracker.debug) + stinkyTrackerConfigFrame:Add(debugButton, 1, 4) - -- Network - do - local r, g, b, a = GetNextColor() - local networkConfigFrame = GridFrame.new("HeimdallNetworkConfig", UIParent, 12, 20) - networkConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) - configFrame:Add(networkConfigFrame, 11, 3) - - title = CreateFancyText( - "HeimdallNetworkConfigTitle", - networkConfigFrame.frame, - shared._L("network", Heimdall_Data.config.locale), - { r, g, b, a } - ) - networkConfigFrame:Add(title, 1, 8) - - local debugButton = CreateBasicButton( - "HeimdallNetworkConfigDebugButton", - networkConfigFrame.frame, - shared._L("debug", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.network.debug = not Heimdall_Data.config.network.debug - return Heimdall_Data.config.network.debug - end - ) - debugButton:UpdateColor(Heimdall_Data.config.network.debug) - networkConfigFrame:Add(debugButton, 1, 4) - - local enableButton = CreateBasicButton( - "HeimdallNetworkConfigEnableButton", - networkConfigFrame.frame, - shared._L("enabled", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.network.enabled = not Heimdall_Data.config.network.enabled - return Heimdall_Data.config.network.enabled - end - ) - enableButton:UpdateColor(Heimdall_Data.config.network.enabled) - networkConfigFrame:Add(enableButton, 1, 12) - - local members = CreateBasicBigEditBox( - "HeimdallNetworkConfigMembers", - networkConfigFrame.frame, - shared._L("members", Heimdall_Data.config.locale), - table.concat(Heimdall_Data.config.network.members, ","), - function(self) - local text = self:GetText() - Heimdall_Data.config.network.members = StringToArray(text, ",") - print("Members set to", table.concat(Heimdall_Data.config.network.members, ",")) - self:SetText(table.concat(Heimdall_Data.config.network.members, ",")) - end - ) - networkConfigFrame:Add(members, 5, 6) - - local updateInterval = CreateBasicSmallEditBox( - "HeimdallNetworkConfigUpdateInterval", - networkConfigFrame.frame, - shared._L("updateInterval", Heimdall_Data.config.locale), - tostring(Heimdall_Data.config.network.updateInterval), - function(self) - local text = self:GetText() - if string.match(text, "%d+") then - Heimdall_Data.config.network.updateInterval = tonumber(text) - print("Update interval set to", tostring(text)) - else - print("Invalid update interval", text) - self:SetText(tostring(Heimdall_Data.config.network.updateInterval)) + local enableButton = CreateBasicButton( + "HeimdallStinkyTrackerConfigEnableButton", + stinkyTrackerConfigFrame.frame, + shared._L("enabled", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.stinkyTracker.enabled = not Heimdall_Data.config.stinkyTracker.enabled + return Heimdall_Data.config.stinkyTracker.enabled end - end - ) - networkConfigFrame:Add(updateInterval, 2, 6) - end + ) + enableButton:UpdateColor(Heimdall_Data.config.stinkyTracker.enabled) + stinkyTrackerConfigFrame:Add(enableButton, 2, 6) - -- NetworkMessenger - do - local r, g, b, a = GetNextColor() - local networkMessengerConfigFrame = GridFrame.new("HeimdallNetworkMessengerConfig", UIParent, 12, 20) - networkMessengerConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) - configFrame:Add(networkMessengerConfigFrame, 5, 3) - - title = CreateFancyText( - "HeimdallNetworkMessengerConfigTitle", - networkMessengerConfigFrame.frame, - shared._L("networkMessenger", Heimdall_Data.config.locale), - { r, g, b, a } - ) - networkMessengerConfigFrame:Add(title, 1, 8) - - local debugButton = CreateBasicButton( - "HeimdallNetworkMessengerConfigDebugButton", - networkMessengerConfigFrame.frame, - shared._L("debug", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.networkMessenger.debug = not Heimdall_Data.config.networkMessenger.debug - return Heimdall_Data.config.networkMessenger.debug - end - ) - debugButton:UpdateColor(Heimdall_Data.config.networkMessenger.debug) - networkMessengerConfigFrame:Add(debugButton, 1, 4) - - local enableButton = CreateBasicButton( - "HeimdallNetworkMessengerConfigEnableButton", - networkMessengerConfigFrame.frame, - shared._L("enabled", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.networkMessenger.enabled = not Heimdall_Data.config.networkMessenger.enabled - return Heimdall_Data.config.networkMessenger.enabled - end - ) - enableButton:UpdateColor(Heimdall_Data.config.networkMessenger.enabled) - networkMessengerConfigFrame:Add(enableButton, 2, 6) - - local interval = CreateBasicSmallEditBox( - "HeimdallNetworkMessengerConfigInterval", - networkMessengerConfigFrame.frame, - shared._L("interval", Heimdall_Data.config.locale), - tostring(Heimdall_Data.config.networkMessenger.interval), - function(self) - local text = self:GetText() - if string.match(text, "^%d+%.?%d*$") then - Heimdall_Data.config.networkMessenger.interval = tonumber(text) - print("Interval set to", tostring(text)) - else - print("Invalid interval", text) - self:SetText(tostring(Heimdall_Data.config.networkMessenger.interval)) + local channels = CreateBasicSmallEditBox( + "HeimdallStinkyTrackerConfigChannels", + stinkyTrackerConfigFrame.frame, + shared._L("channels", Heimdall_Data.config.locale), + table.concat(Heimdall_Data.config.stinkyTracker.channels or {}, ","), + function(self) + local text = self:GetText() + Heimdall_Data.config.stinkyTracker.channels = StringToArray(text, ",") + print("Channels set to") + shared.dumpTable(Heimdall_Data.config.stinkyTracker.channels) end - end - ) - networkMessengerConfigFrame:Add(interval, 2, 6) - end + ) + stinkyTrackerConfigFrame:Add(channels, 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) + -- Emoter + do + local r, g, b, a = GetNextColor() + local emoterConfigFrame = GridFrame.new("HeimdallEmoterConfig", UIParent, 12, 20) + emoterConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) + configFrame:Add(emoterConfigFrame, 7, 3) - title = CreateFancyText( - "HeimdallAchievementSnifferConfigTitle", - achievementSnifferConfigFrame.frame, - shared._L("achievementSniffer", Heimdall_Data.config.locale), - { r, g, b, a } - ) - achievementSnifferConfigFrame:Add(title, 1, 8) + title = CreateFancyText( + "HeimdallEmoterConfigTitle", + emoterConfigFrame.frame, + shared._L("emoter", Heimdall_Data.config.locale), + { r, g, b, a } + ) + emoterConfigFrame:Add(title, 1, 8) + local debugButton = CreateBasicButton( + "HeimdallEmoterConfigDebugButton", + emoterConfigFrame.frame, + shared._L("debug", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.emoter.debug = not Heimdall_Data.config.emoter.debug + return Heimdall_Data.config.emoter.debug + end + ) + debugButton:UpdateColor(Heimdall_Data.config.emoter.debug) + emoterConfigFrame:Add(debugButton, 1, 4) - 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( + "HeimdallEmoterConfigEnableButton", + emoterConfigFrame.frame, + shared._L("enabled", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.emoter.enabled = not Heimdall_Data.config.emoter.enabled + return Heimdall_Data.config.emoter.enabled + end + ) + enableButton:UpdateColor(Heimdall_Data.config.emoter.enabled) + emoterConfigFrame:Add(enableButton, 1, 12) - 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 channels = CreateBasicSmallEditBox( + "HeimdallEmoterConfigChannels", + emoterConfigFrame.frame, + shared._L("channels", Heimdall_Data.config.locale), + table.concat(Heimdall_Data.config.emoter.channels or {}, ","), + function(self) + local text = self:GetText() + Heimdall_Data.config.emoter.channels = StringToArray(text, ",") + print("Channels set to") + shared.dumpTable(Heimdall_Data.config.emoter.channels) + end + ) + emoterConfigFrame:Add(channels, 2, 6) - --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 prefix = CreateBasicSmallEditBox( + "HeimdallEmoterConfigPrefix", + emoterConfigFrame.frame, + shared._L("prefix", Heimdall_Data.config.locale), + Heimdall_Data.config.emoter.prefix, + function(self) + local text = self:GetText() + if string.match(text, "%S+") then + Heimdall_Data.config.emoter.prefix = text + print("Prefix set to", tostring(text)) + else + print("Invalid prefix", tostring(text)) + self:SetText(Heimdall_Data.config.emoter.prefix) + end + end + ) + emoterConfigFrame:Add(prefix, 2, 6) + end - --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) + -- Echoer + do + local r, g, b, a = GetNextColor() + local echoerConfigFrame = GridFrame.new("HeimdallEchoerConfig", UIParent, 12, 20) + echoerConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) + configFrame:Add(echoerConfigFrame, 7, 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) + title = CreateFancyText( + "HeimdallEchoerConfigTitle", + echoerConfigFrame.frame, + shared._L("echoer", Heimdall_Data.config.locale), + { r, g, b, a } + ) + echoerConfigFrame:Add(title, 1, 8) + local debugButton = CreateBasicButton( + "HeimdallEchoerConfigDebugButton", + echoerConfigFrame.frame, + shared._L("debug", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.echoer.debug = not Heimdall_Data.config.echoer.debug + return Heimdall_Data.config.echoer.debug + end + ) + debugButton:UpdateColor(Heimdall_Data.config.echoer.debug) + echoerConfigFrame:Add(debugButton, 1, 4) - local rescan = CreateBasicButton( - "HeimdallAchievementSnifferConfigRescanButton", - achievementSnifferConfigFrame.frame, - shared._L("rescan", Heimdall_Data.config.locale), - function() - Heimdall_Data.config.achievementSniffer.rescan = not Heimdall_Data.config.achievementSniffer.rescan - return Heimdall_Data.config.achievementSniffer.rescan - end - ) - rescan:UpdateColor(Heimdall_Data.config.achievementSniffer.rescan) - achievementSnifferConfigFrame:Add(rescan, 2, 3) + local enableButton = CreateBasicButton( + "HeimdallEmoterConfigEnableButton", + echoerConfigFrame.frame, + shared._L("enabled", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.echoer.enabled = not Heimdall_Data.config.echoer.enabled + return Heimdall_Data.config.echoer.enabled + end + ) + enableButton:UpdateColor(Heimdall_Data.config.echoer.enabled) + echoerConfigFrame:Add(enableButton, 1, 12) - local scanInterval = CreateBasicSmallEditBox( - "HeimdallAchievementSnifferConfigScanInterval", - achievementSnifferConfigFrame.frame, - shared._L("scanInterval", Heimdall_Data.config.locale), - tostring(Heimdall_Data.config.achievementSniffer.scanInterval), - function(self) - local text = self:GetText() - Heimdall_Data.config.achievementSniffer.scanInterval = tonumber(text) - end - ) - achievementSnifferConfigFrame:Add(scanInterval, 2, 3) + local channels = CreateBasicSmallEditBox( + "HeimdallEmoterConfigChannels", + echoerConfigFrame.frame, + shared._L("channels", Heimdall_Data.config.locale), + table.concat(Heimdall_Data.config.echoer.channels or {}, ","), + function(self) + local text = self:GetText() + Heimdall_Data.config.echoer.channels = StringToArray(text, ",") + print("Channels set to") + shared.dumpTable(Heimdall_Data.config.echoer.channels) + end + ) + echoerConfigFrame:Add(channels, 2, 6) - --local iconScale = CreateBasicSmallEditBox("HeimdallAchievementSnifferConfigIconScale", - -- achievementSnifferConfigFrame.frame, shared._L("iconScale", Heimdall_Data.config.locale), - -- tostring(Heimdall_Data.config.achievementSniffer.iconScale), - -- function(self) - -- local text = self:GetText() - -- Heimdall_Data.config.achievementSniffer.iconScale = tonumber(text) - -- end) - --achievementSnifferConfigFrame:Add(iconScale, 2, 3) - end + local prefix = CreateBasicSmallEditBox( + "HeimdallEmoterConfigPrefix", + echoerConfigFrame.frame, + shared._L("prefix", Heimdall_Data.config.locale), + Heimdall_Data.config.echoer.prefix, + function(self) + local text = self:GetText() + if string.match(text, "%S+") then + Heimdall_Data.config.echoer.prefix = text + print("Prefix set to", tostring(text)) + else + print("Invalid prefix", tostring(text)) + self:SetText(Heimdall_Data.config.echoer.prefix) + end + end + ) + echoerConfigFrame:Add(prefix, 2, 6) + end - -- Addon prefix - do - local r, g, b, a = GetNextColor() - local addonPrefixConfigFrame = GridFrame.new("HeimdallAddonPrefixConfig", UIParent, 12, 20) - addonPrefixConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) - configFrame:Add(addonPrefixConfigFrame, 5, 1) + -- Commander + do + local r, g, b, a = GetNextColor() + local commanderConfigFrame = GridFrame.new("HeimdallCommanderConfig", UIParent, 12, 20) + commanderConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) + configFrame:Add(commanderConfigFrame, 10, 3) - title = CreateFancyText( - "HeimdallAddonPrefixConfigTitle", - addonPrefixConfigFrame.frame, - shared._L("addonPrefix", Heimdall_Data.config.locale), - { r, g, b, a } - ) - addonPrefixConfigFrame:Add(title, 1, 12) + title = CreateFancyText( + "HeimdallCommanderConfigTitle", + commanderConfigFrame.frame, + shared._L("commander", Heimdall_Data.config.locale), + { r, g, b, a } + ) + commanderConfigFrame:Add(title, 1, 8) + local debugButton = CreateBasicButton( + "HeimdallCommanderConfigDebugButton", + commanderConfigFrame.frame, + shared._L("debug", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.commander.debug = not Heimdall_Data.config.commander.debug + return Heimdall_Data.config.commander.debug + end + ) + debugButton:UpdateColor(Heimdall_Data.config.commander.debug) + commanderConfigFrame:Add(debugButton, 1, 4) - local addonPrefix = CreateBasicSmallEditBox( - "HeimdallAddonPrefixConfigAddonPrefix", - addonPrefixConfigFrame.frame, - shared._L("addonPrefix", Heimdall_Data.config.locale), - Heimdall_Data.config.addonPrefix, - function(self) - local text = self:GetText() - Heimdall_Data.config.addonPrefix = text - end - ) - addonPrefixConfigFrame:Add(addonPrefix, 2, 12) - end + local enableButton = CreateBasicButton( + "HeimdallCommanderConfigEnableButton", + commanderConfigFrame.frame, + shared._L("enabled", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.commander.enabled = not Heimdall_Data.config.commander.enabled + return Heimdall_Data.config.commander.enabled + end + ) + enableButton:UpdateColor(Heimdall_Data.config.commander.enabled) + commanderConfigFrame:Add(enableButton, 1, 12) - -- Whisper Notify - do - local r, g, b, a = GetNextColor() - local whisperNotifyConfigFrame = GridFrame.new("HeimdallWhisperNotifyConfig", UIParent, 12, 20) - whisperNotifyConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) - configFrame:Add(whisperNotifyConfigFrame, 14, 1) + local channels = CreateBasicSmallEditBox( + "HeimdallCommanderConfigChannels", + commanderConfigFrame.frame, + shared._L("channels", Heimdall_Data.config.locale), + table.concat(Heimdall_Data.config.commander.channels or {}, ","), + function(self) + local text = self:GetText() + Heimdall_Data.config.commander.channels = StringToArray(text, ",") + print("Channels set to") + shared.dumpTable(Heimdall_Data.config.commander.channels) + end + ) + commanderConfigFrame:Add(channels, 2, 6) - title = CreateFancyText( - "HeimdallWhisperNotifyConfigTitle", - whisperNotifyConfigFrame.frame, - shared._L("whisperNotify", Heimdall_Data.config.locale), - { r, g, b, a } - ) - whisperNotifyConfigFrame:Add(title, 1, 12) + local commander = CreateBasicSmallEditBox( + "HeimdallCommanderConfigCommander", + commanderConfigFrame.frame, + shared._L("commander", Heimdall_Data.config.locale), + Heimdall_Data.config.commander.commander, + function(self) + local text = self:GetText() + if string.match(text, "%S+") then + Heimdall_Data.config.commander.commander = text + print("Commander set to", tostring(text)) + else + print("Invalid commander", tostring(text)) + self:SetText(Heimdall_Data.config.commander.commander) + end + end + ) + commanderConfigFrame:Add(commander, 2, 6) - local whisperNotify = CreateBasicBigEditBox( - "HeimdallWhisperNotifyConfigWhisperNotify", - whisperNotifyConfigFrame.frame, - shared._L("whisperNotify", Heimdall_Data.config.locale), - table.concat(Heimdall_Data.config.whisperNotify, "\n"), - function(self) - local text = self:GetText() - Heimdall_Data.config.whisperNotify = StringToArray(text, "\n") - end - ) - whisperNotifyConfigFrame:Add(whisperNotify, 8, 12) - end + local commands = CreateBasicSmallEditBox( + "HeimdallCommanderConfigCommands", + commanderConfigFrame.frame, + shared._L("commands", Heimdall_Data.config.locale), + MapKeyToString(Heimdall_Data.config.commander.commands, ", "), + function(self) + local text = self:GetText() + Heimdall_Data.config.commander.commands = StringToMap(text, ",") + end + ) + commanderConfigFrame:Add(commands, 2, 12) + end - -- Stinkies - do - local r, g, b, a = GetNextColor() - local stinkiesConfigFrame = GridFrame.new("HeimdallStinkiesConfig", UIParent, 12, 20) - stinkiesConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) - configFrame:Add(stinkiesConfigFrame, 28, 6) - -- Why do 17 rows of content fit into a frame that is 14 rows? - -- I don't know, at this point I can't be fucked to fix it, the display is minimally functional + -- Macroer + do + local r, g, b, a = GetNextColor() + local macroerConfigFrame = GridFrame.new("HeimdallMacroerConfig", UIParent, 12, 20) + macroerConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) + configFrame:Add(macroerConfigFrame, 6, 3) - title = CreateFancyText( - "HeimdallStinkiesConfigTitle", - stinkiesConfigFrame.frame, - shared._L("stinkies", Heimdall_Data.config.locale), - { r, g, b, a } - ) - stinkiesConfigFrame:Add(title, 1, 12) + title = CreateFancyText( + "HeimdallMacroerConfigTitle", + macroerConfigFrame.frame, + shared._L("macroer", Heimdall_Data.config.locale), + { r, g, b, a } + ) + macroerConfigFrame:Add(title, 1, 8) + local debugButton = CreateBasicButton( + "HeimdallMacroerConfigDebugButton", + macroerConfigFrame.frame, + shared._L("debug", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.macroer.debug = not Heimdall_Data.config.macroer.debug + return Heimdall_Data.config.macroer.debug + end + ) + debugButton:UpdateColor(Heimdall_Data.config.macroer.debug) + macroerConfigFrame:Add(debugButton, 1, 4) - local stinkies = CreateBasicBigEditBox( - "HeimdallStinkiesConfigStinkies", - stinkiesConfigFrame.frame, - shared._L("stinkies", Heimdall_Data.config.locale), - MapKeyToString(Heimdall_Data.config.stinkies, ","), - function(self) - local text = self:GetText() - Heimdall_Data.config.stinkies = StringToMap(text, ",") - end - ) - stinkiesConfigFrame:Add(stinkies, 16, 12) - end + local enableButton = CreateBasicButton( + "HeimdallCommanderConfigEnableButton", + macroerConfigFrame.frame, + shared._L("enabled", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.macroer.enabled = not Heimdall_Data.config.macroer.enabled + return Heimdall_Data.config.macroer.enabled + end + ) + enableButton:UpdateColor(Heimdall_Data.config.macroer.enabled) + macroerConfigFrame:Add(enableButton, 1, 12) - -- Channel locale - do - local r, g, b, a = GetNextColor() - local channelLocaleConfigFrame = GridFrame.new("HeimdallChannelLocaleConfig", UIParent, 12, 20) - channelLocaleConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) - configFrame:Add(channelLocaleConfigFrame, 14, 1) + local priority = CreateBasicSmallEditBox( + "HeimdallMacroerConfigPriority", + macroerConfigFrame.frame, + shared._L("priority", Heimdall_Data.config.locale), + table.concat(Heimdall_Data.config.macroer.priority, ", "), + function(self) + local text = self:GetText() + Heimdall_Data.config.macroer.priority = StringToArray(text, ",") + end + ) + macroerConfigFrame:Add(priority, 2, 12) + end - title = CreateFancyText( - "HeimdallChannelLocaleConfigTitle", - channelLocaleConfigFrame.frame, - shared._L("channelLocale", Heimdall_Data.config.locale), - { r, g, b, a } - ) - channelLocaleConfigFrame:Add(title, 1, 12) + -- Combat Alerter + do + local r, g, b, a = GetNextColor() + local combatAlerterConfigFrame = GridFrame.new("HeimdallCombatAlerterConfig", UIParent, 12, 20) + combatAlerterConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) + configFrame:Add(combatAlerterConfigFrame, 5, 3) - local channelLocale = CreateBasicBigEditBox( - "HeimdallChannelLocaleConfigChannelLocale", - channelLocaleConfigFrame.frame, - shared._L("channelLocale", Heimdall_Data.config.locale), - MapToString(Heimdall_Data.config.channelLocale, ":", "\n"), - function(self) - local text = self:GetText() - Heimdall_Data.config.channelLocale = MapFromString(text, ":", "\n") - end - ) - channelLocaleConfigFrame:Add(channelLocale, 8, 12) - end + title = CreateFancyText( + "HeimdallCombatAlerterConfigTitle", + combatAlerterConfigFrame.frame, + shared._L("combatAlerter", Heimdall_Data.config.locale), + { r, g, b, a } + ) + combatAlerterConfigFrame:Add(title, 1, 8) + local debugButton = CreateBasicButton( + "HeimdallCombatAlerterConfigDebugButton", + combatAlerterConfigFrame.frame, + shared._L("debug", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.combatAlerter.debug = not Heimdall_Data.config.combatAlerter.debug + return Heimdall_Data.config.combatAlerter.debug + end + ) + debugButton:UpdateColor(Heimdall_Data.config.combatAlerter.debug) + combatAlerterConfigFrame:Add(debugButton, 1, 4) - configFrame.frame:Hide() - print("[Heimdall] Config loaded") -end + local enableButton = CreateBasicButton( + "HeimdallCombatAlerterConfigEnableButton", + combatAlerterConfigFrame.frame, + shared._L("enabled", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.combatAlerter.enabled = not Heimdall_Data.config.combatAlerter.enabled + return Heimdall_Data.config.combatAlerter.enabled + end + ) + enableButton:UpdateColor(Heimdall_Data.config.combatAlerter.enabled) + combatAlerterConfigFrame:Add(enableButton, 2, 6) + + local channels = CreateBasicSmallEditBox( + "HeimdallCombatAlerterConfigChannels", + combatAlerterConfigFrame.frame, + shared._L("channels", Heimdall_Data.config.locale), + table.concat(Heimdall_Data.config.combatAlerter.channels or {}, ","), + function(self) + local text = self:GetText() + Heimdall_Data.config.combatAlerter.channels = StringToArray(text, ",") + print("Channels set to") + shared.dumpTable(Heimdall_Data.config.combatAlerter.channels) + end + ) + combatAlerterConfigFrame:Add(channels, 2, 6) + end + + -- Sniffer + do + local r, g, b, a = GetNextColor() + local snifferConfigFrame = GridFrame.new("HeimdallSnifferConfig", UIParent, 12, 20) + snifferConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) + configFrame:Add(snifferConfigFrame, 8, 3) + + title = CreateFancyText( + "HeimdallSnifferConfigTitle", + snifferConfigFrame.frame, + shared._L("sniffer", Heimdall_Data.config.locale), + { r, g, b, a } + ) + snifferConfigFrame:Add(title, 1, 8) + local debugButton = CreateBasicButton( + "HeimdallSnifferConfigDebugButton", + snifferConfigFrame.frame, + shared._L("debug", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.sniffer.debug = not Heimdall_Data.config.sniffer.debug + return Heimdall_Data.config.sniffer.debug + end + ) + debugButton:UpdateColor(Heimdall_Data.config.sniffer.debug) + snifferConfigFrame:Add(debugButton, 1, 4) + + local enableButton = CreateBasicButton( + "HeimdallSnifferConfigEnableButton", + snifferConfigFrame.frame, + shared._L("enabled", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.sniffer.enabled = not Heimdall_Data.config.sniffer.enabled + return Heimdall_Data.config.sniffer.enabled + end + ) + enableButton:UpdateColor(Heimdall_Data.config.sniffer.enabled) + snifferConfigFrame:Add(enableButton, 2, 3) + + local stinkyButton = CreateBasicButton( + "HeimdallSnifferConfigStinkyButton", + snifferConfigFrame.frame, + shared._L("stinky", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.sniffer.stinky = not Heimdall_Data.config.sniffer.stinky + return Heimdall_Data.config.sniffer.stinky + end + ) + stinkyButton:UpdateColor(Heimdall_Data.config.sniffer.stinky) + snifferConfigFrame:Add(stinkyButton, 2, 3) + + local channels = CreateBasicSmallEditBox( + "HeimdallSnifferConfigChannels", + snifferConfigFrame.frame, + shared._L("channels", Heimdall_Data.config.locale), + table.concat(Heimdall_Data.config.sniffer.channels or {}, ","), + function(self) + local text = self:GetText() + Heimdall_Data.config.sniffer.channels = StringToArray(text, ",") + print("Channels set to") + shared.dumpTable(Heimdall_Data.config.sniffer.channels) + end + ) + snifferConfigFrame:Add(channels, 2, 6) + + local throttle = CreateBasicSmallEditBox( + "HeimdallSnifferConfigThrottle", + snifferConfigFrame.frame, + shared._L("throttle", Heimdall_Data.config.locale), + Heimdall_Data.config.sniffer.throttle, + function(self) + local text = self:GetText() + if string.match(text, "%d+") then + Heimdall_Data.config.sniffer.throttle = tonumber(text) + print("Throttle set to", tostring(text)) + else + print("Invalid throttle", tostring(text)) + self:SetText(Heimdall_Data.config.sniffer.throttle) + end + end + ) + snifferConfigFrame:Add(throttle, 2, 6) + + local zoneOverride = CreateBasicSmallEditBox( + "HeimdallSnifferConfigZoneOverride", + snifferConfigFrame.frame, + shared._L("zoneOverride", Heimdall_Data.config.locale), + Heimdall_Data.config.sniffer.zoneOverride, + function(self) + local text = self:GetText() + if string.match(text, "%S+") then + Heimdall_Data.config.sniffer.zoneOverride = text + print("Zone override set to", tostring(text)) + else + print("Invalid zone override", tostring(text)) + self:SetText(Heimdall_Data.config.sniffer.zoneOverride) + end + end + ) + snifferConfigFrame:Add(zoneOverride, 2, 6) + end + + -- BonkDetector + do + local r, g, b, a = GetNextColor() + local bonkDetectorConfigFrame = GridFrame.new("HeimdallBonkDetectorConfig", UIParent, 12, 20) + bonkDetectorConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) + configFrame:Add(bonkDetectorConfigFrame, 7, 3) + + title = CreateFancyText( + "HeimdallBonkDetectorConfigTitle", + bonkDetectorConfigFrame.frame, + shared._L("bonkDetector", Heimdall_Data.config.locale), + { r, g, b, a } + ) + bonkDetectorConfigFrame:Add(title, 1, 8) + + local debugButton = CreateBasicButton( + "HeimdallBonkDetectorConfigDebugButton", + bonkDetectorConfigFrame.frame, + shared._L("debug", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.bonkDetector.debug = not Heimdall_Data.config.bonkDetector.debug + return Heimdall_Data.config.bonkDetector.debug + end + ) + debugButton:UpdateColor(Heimdall_Data.config.bonkDetector.debug) + bonkDetectorConfigFrame:Add(debugButton, 1, 4) + + local enableButton = CreateBasicButton( + "HeimdallBonkDetectorConfigEnableButton", + bonkDetectorConfigFrame.frame, + shared._L("enabled", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.bonkDetector.enabled = not Heimdall_Data.config.bonkDetector.enabled + return Heimdall_Data.config.bonkDetector.enabled + end + ) + enableButton:UpdateColor(Heimdall_Data.config.bonkDetector.enabled) + bonkDetectorConfigFrame:Add(enableButton, 1, 12) + + local channels = CreateBasicSmallEditBox( + "HeimdallBonkDetectorConfigChannels", + bonkDetectorConfigFrame.frame, + shared._L("channels", Heimdall_Data.config.locale), + table.concat(Heimdall_Data.config.bonkDetector.channels or {}, ","), + function(self) + local text = self:GetText() + Heimdall_Data.config.bonkDetector.channels = StringToArray(text, ",") + print("Channels set to") + shared.dumpTable(Heimdall_Data.config.bonkDetector.channels) + end + ) + bonkDetectorConfigFrame:Add(channels, 2, 6) + + local throttle = CreateBasicSmallEditBox( + "HeimdallBonkDetectorConfigThrottle", + bonkDetectorConfigFrame.frame, + shared._L("throttle", Heimdall_Data.config.locale), + Heimdall_Data.config.bonkDetector.throttle, + function(self) + local text = self:GetText() + if string.match(text, "%d+") then + Heimdall_Data.config.bonkDetector.throttle = tonumber(text) + print("Throttle set to", tostring(text)) + else + print("Invalid throttle", tostring(text)) + self:SetText(Heimdall_Data.config.bonkDetector.throttle) + end + end + ) + bonkDetectorConfigFrame:Add(throttle, 2, 6) + end + + -- Minimap Tagger + do + local r, g, b, a = GetNextColor() + local minimapTaggerConfigFrame = GridFrame.new("HeimdallMinimapTaggerConfig", UIParent, 12, 20) + minimapTaggerConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) + configFrame:Add(minimapTaggerConfigFrame, 18, 6) + + title = CreateFancyText( + "HeimdallMinimapTaggerConfigTitle", + minimapTaggerConfigFrame.frame, + shared._L("minimapTagger", Heimdall_Data.config.locale), + { r, g, b, a } + ) + minimapTaggerConfigFrame:Add(title, 1, 8) + local debugButton = CreateBasicButton( + "HeimdallMinimapTaggerConfigDebugButton", + minimapTaggerConfigFrame.frame, + shared._L("debug", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.minimapTagger.debug = not Heimdall_Data.config.minimapTagger.debug + return Heimdall_Data.config.minimapTagger.debug + end + ) + debugButton:UpdateColor(Heimdall_Data.config.minimapTagger.debug) + minimapTaggerConfigFrame:Add(debugButton, 1, 4) + + local enableButton = CreateBasicButton( + "HeimdallMinimapTaggerConfigEnableButton", + minimapTaggerConfigFrame.frame, + shared._L("enabled", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.minimapTagger.enabled = not Heimdall_Data.config.minimapTagger.enabled + return Heimdall_Data.config.minimapTagger.enabled + end + ) + enableButton:UpdateColor(Heimdall_Data.config.minimapTagger.enabled) + minimapTaggerConfigFrame:Add(enableButton, 2, 6) + + local channels = CreateBasicSmallEditBox( + "HeimdallMinimapTaggerConfigChannels", + minimapTaggerConfigFrame.frame, + shared._L("channels", Heimdall_Data.config.locale), + table.concat(Heimdall_Data.config.minimapTagger.channels or {}, ","), + function(self) + local text = self:GetText() + Heimdall_Data.config.minimapTagger.channels = StringToArray(text, ",") + print("Channels set to") + shared.dumpTable(Heimdall_Data.config.minimapTagger.channels) + end + ) + minimapTaggerConfigFrame:Add(channels, 2, 3) + + scale = CreateBasicSmallEditBox( + "HeimdallMinimapTaggerConfigScale", + minimapTaggerConfigFrame.frame, + shared._L("scale", Heimdall_Data.config.locale), + Heimdall_Data.config.minimapTagger.scale, + function(self) + local text = self:GetText() + if string.match(text, "%d+") then + Heimdall_Data.config.minimapTagger.scale = tonumber(text) + print("Scale set to", tostring(text)) + end + end + ) + minimapTaggerConfigFrame:Add(scale, 2, 3) + + --region Tag + local tagSound = CreateBasicButton( + "HeimdallMinimapTaggerConfigTagSound", + minimapTaggerConfigFrame.frame, + shared._L("tagSound", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.minimapTagger.tagSound = not Heimdall_Data.config.minimapTagger.tagSound + return Heimdall_Data.config.minimapTagger.tagSound + end + ) + tagSound:UpdateColor(Heimdall_Data.config.minimapTagger.tagSound) + minimapTaggerConfigFrame:Add(tagSound, 2, 1) + + local tagTTL = CreateBasicSmallEditBox( + "HeimdallMinimapTaggerConfigTagTTL", + minimapTaggerConfigFrame.frame, + shared._L("ttl", Heimdall_Data.config.locale), + Heimdall_Data.config.minimapTagger.tagTTL, + function(self) + local text = self:GetText() + if string.match(text, "%d+") then + Heimdall_Data.config.minimapTagger.tagTTL = tonumber(text) + print("Tag TTL set to", tostring(text)) + else + print("Invalid tag TTL", tostring(text)) + self:SetText(Heimdall_Data.config.minimapTagger.tagTTL) + end + end + ) + minimapTaggerConfigFrame:Add(tagTTL, 2, 1) + + local tagSoundThrottle = CreateBasicSmallEditBox( + "HeimdallMinimapTaggerConfigTagSoundThrottle", + minimapTaggerConfigFrame.frame, + shared._L("soundThrottle", Heimdall_Data.config.locale), + Heimdall_Data.config.minimapTagger.tagSoundThrottle, + function(self) + local text = self:GetText() + if string.match(text, "%d+") then + Heimdall_Data.config.minimapTagger.tagSoundThrottle = tonumber(text) + print("Tag sound throttle set to", tostring(text)) + else + print("Invalid tag sound throttle", tostring(text)) + self:SetText(Heimdall_Data.config.minimapTagger.tagSoundThrottle) + end + end + ) + minimapTaggerConfigFrame:Add(tagSoundThrottle, 2, 2) + + local tagSoundFile = CreateBasicSmallEditBox( + "HeimdallMinimapTaggerConfigTagSoundFile", + minimapTaggerConfigFrame.frame, + shared._L("soundFile", Heimdall_Data.config.locale), + Heimdall_Data.config.minimapTagger.tagSoundFile, + function(self) + local text = self:GetText() + if string.match(text, "%S+") then + Heimdall_Data.config.minimapTagger.tagSoundFile = text + print("Tag sound file set to", tostring(text)) + else + print("Invalid tag sound file", tostring(text)) + self:SetText(Heimdall_Data.config.minimapTagger.tagSoundFile) + end + end + ) + minimapTaggerConfigFrame:Add(tagSoundFile, 2, 4) + + local tagTexture = CreateBasicSmallEditBox( + "HeimdallMinimapTaggerConfigTagTexture", + minimapTaggerConfigFrame.frame, + shared._L("textureFile", Heimdall_Data.config.locale), + Heimdall_Data.config.minimapTagger.tagTextureFile, + function(self) + local text = self:GetText() + if string.match(text, "%S+") then + Heimdall_Data.config.minimapTagger.tagTextureFile = text + print("Tag texture file set to", tostring(text)) + end + end + ) + minimapTaggerConfigFrame:Add(tagTexture, 2, 4) + --endregion + --region Alert + local alertSound = CreateBasicButton( + "HeimdallMinimapTaggerConfigAlertSound", + minimapTaggerConfigFrame.frame, + shared._L("alertSound", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.minimapTagger.alertSound = not Heimdall_Data.config.minimapTagger.alertSound + return Heimdall_Data.config.minimapTagger.alertSound + end + ) + alertSound:UpdateColor(Heimdall_Data.config.minimapTagger.alertSound) + minimapTaggerConfigFrame:Add(alertSound, 2, 1) + + local alertTTL = CreateBasicSmallEditBox( + "HeimdallMinimapTaggerConfigAlertTTL", + minimapTaggerConfigFrame.frame, + shared._L("ttl", Heimdall_Data.config.locale), + Heimdall_Data.config.minimapTagger.alertTTL, + function(self) + local text = self:GetText() + if string.match(text, "%d+") then + Heimdall_Data.config.minimapTagger.alertTTL = tonumber(text) + print("Alert TTL set to", tostring(text)) + end + end + ) + minimapTaggerConfigFrame:Add(alertTTL, 2, 1) + + local alertSoundThrottle = CreateBasicSmallEditBox( + "HeimdallMinimapTaggerConfigAlertSoundThrottle", + minimapTaggerConfigFrame.frame, + shared._L("soundThrottle", Heimdall_Data.config.locale), + Heimdall_Data.config.minimapTagger.alertSoundThrottle, + function(self) + local text = self:GetText() + if string.match(text, "%d+") then + Heimdall_Data.config.minimapTagger.alertSoundThrottle = tonumber(text) + print("Alert sound throttle set to", tostring(text)) + end + end + ) + minimapTaggerConfigFrame:Add(alertSoundThrottle, 2, 2) + + local alertSoundFile = CreateBasicSmallEditBox( + "HeimdallMinimapTaggerConfigAlertSoundFile", + minimapTaggerConfigFrame.frame, + shared._L("soundFile", Heimdall_Data.config.locale), + Heimdall_Data.config.minimapTagger.alertSoundFile, + function(self) + local text = self:GetText() + if string.match(text, "%S+") then + Heimdall_Data.config.minimapTagger.alertSoundFile = text + print("Alert sound file set to", tostring(text)) + end + end + ) + minimapTaggerConfigFrame:Add(alertSoundFile, 2, 4) + + local alertTexture = CreateBasicSmallEditBox( + "HeimdallMinimapTaggerConfigAlertTexture", + minimapTaggerConfigFrame.frame, + shared._L("textureFile", Heimdall_Data.config.locale), + Heimdall_Data.config.minimapTagger.alertTextureFile, + function(self) + local text = self:GetText() + if string.match(text, "%S+") then + Heimdall_Data.config.minimapTagger.alertTextureFile = text + print("Alert texture file set to", tostring(text)) + end + end + ) + minimapTaggerConfigFrame:Add(alertTexture, 2, 4) + --endregion + --region Combat + local combatSound = CreateBasicButton( + "HeimdallMinimapTaggerConfigCombatSound", + minimapTaggerConfigFrame.frame, + shared._L("combatSound", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.minimapTagger.combatSound = not Heimdall_Data.config.minimapTagger.combatSound + return Heimdall_Data.config.minimapTagger.combatSound + end + ) + combatSound:UpdateColor(Heimdall_Data.config.minimapTagger.combatSound) + minimapTaggerConfigFrame:Add(combatSound, 2, 1) + + local combatTTL = CreateBasicSmallEditBox( + "HeimdallMinimapTaggerConfigCombatTTL", + minimapTaggerConfigFrame.frame, + shared._L("ttl", Heimdall_Data.config.locale), + Heimdall_Data.config.minimapTagger.combatTTL, + function(self) + local text = self:GetText() + if string.match(text, "%d+") then + Heimdall_Data.config.minimapTagger.combatTTL = tonumber(text) + print("Combat TTL set to", tostring(text)) + end + end + ) + minimapTaggerConfigFrame:Add(combatTTL, 2, 1) + + local combatSoundThrottle = CreateBasicSmallEditBox( + "HeimdallMinimapTaggerConfigCombatSoundThrottle", + minimapTaggerConfigFrame.frame, + shared._L("soundThrottle", Heimdall_Data.config.locale), + Heimdall_Data.config.minimapTagger.combatSoundThrottle, + function(self) + local text = self:GetText() + if string.match(text, "%d+") then + Heimdall_Data.config.minimapTagger.combatSoundThrottle = tonumber(text) + print("Combat sound throttle set to", tostring(text)) + end + end + ) + minimapTaggerConfigFrame:Add(combatSoundThrottle, 2, 2) + + local combatSoundFile = CreateBasicSmallEditBox( + "HeimdallMinimapTaggerConfigCombatSoundFile", + minimapTaggerConfigFrame.frame, + shared._L("soundFile", Heimdall_Data.config.locale), + Heimdall_Data.config.minimapTagger.combatSoundFile, + function(self) + local text = self:GetText() + if string.match(text, "%S+") then + Heimdall_Data.config.minimapTagger.combatSoundFile = text + print("Combat sound file set to", tostring(text)) + end + end + ) + minimapTaggerConfigFrame:Add(combatSoundFile, 2, 4) + local combatTexture = CreateBasicSmallEditBox( + "HeimdallMinimapTaggerConfigCombatTexture", + minimapTaggerConfigFrame.frame, + shared._L("textureFile", Heimdall_Data.config.locale), + Heimdall_Data.config.minimapTagger.combatTextureFile, + function(self) + local text = self:GetText() + if string.match(text, "%S+") then + Heimdall_Data.config.minimapTagger.combatTextureFile = text + print("Combat texture file set to", tostring(text)) + end + end + ) + minimapTaggerConfigFrame:Add(combatTexture, 2, 4) + --endregion + --region Help + local helpSound = CreateBasicButton( + "HeimdallMinimapTaggerConfigHelpSound", + minimapTaggerConfigFrame.frame, + shared._L("helpSound", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.minimapTagger.helpSound = not Heimdall_Data.config.minimapTagger.helpSound + return Heimdall_Data.config.minimapTagger.helpSound + end + ) + helpSound:UpdateColor(Heimdall_Data.config.minimapTagger.helpSound) + minimapTaggerConfigFrame:Add(helpSound, 2, 1) + + local helpTTL = CreateBasicSmallEditBox( + "HeimdallMinimapTaggerConfigHelpTTL", + minimapTaggerConfigFrame.frame, + shared._L("ttl", Heimdall_Data.config.locale), + Heimdall_Data.config.minimapTagger.helpTTL, + function(self) + local text = self:GetText() + if string.match(text, "%d+") then + Heimdall_Data.config.minimapTagger.helpTTL = tonumber(text) + print("Help TTL set to", tostring(text)) + end + end + ) + minimapTaggerConfigFrame:Add(helpTTL, 2, 1) + + local helpSoundThrottle = CreateBasicSmallEditBox( + "HeimdallMinimapTaggerConfigHelpSoundThrottle", + minimapTaggerConfigFrame.frame, + shared._L("soundThrottle", Heimdall_Data.config.locale), + Heimdall_Data.config.minimapTagger.helpSoundThrottle, + function(self) + local text = self:GetText() + if string.match(text, "%d+") then + Heimdall_Data.config.minimapTagger.helpSoundThrottle = tonumber(text) + print("Help sound throttle set to", tostring(text)) + end + end + ) + minimapTaggerConfigFrame:Add(helpSoundThrottle, 2, 2) + + local helpSoundFile = CreateBasicSmallEditBox( + "HeimdallMinimapTaggerConfigHelpSoundFile", + minimapTaggerConfigFrame.frame, + shared._L("soundFile", Heimdall_Data.config.locale), + Heimdall_Data.config.minimapTagger.helpSoundFile, + function(self) + local text = self:GetText() + if string.match(text, "%S+") then + Heimdall_Data.config.minimapTagger.helpSoundFile = text + print("Help sound file set to", tostring(text)) + end + end + ) + minimapTaggerConfigFrame:Add(helpSoundFile, 2, 4) + local helpTexture = CreateBasicSmallEditBox( + "HeimdallMinimapTaggerConfigHelpTexture", + minimapTaggerConfigFrame.frame, + shared._L("textureFile", Heimdall_Data.config.locale), + Heimdall_Data.config.minimapTagger.helpTextureFile, + function(self) + local text = self:GetText() + if string.match(text, "%S+") then + Heimdall_Data.config.minimapTagger.helpTextureFile = text + print("Help texture file set to", tostring(text)) + end + end + ) + minimapTaggerConfigFrame:Add(helpTexture, 2, 4) + --endregion + end + + -- Noter + do + local r, g, b, a = GetNextColor() + local noterConfigFrame = GridFrame.new("HeimdallNoterConfig", UIParent, 12, 20) + noterConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) + configFrame:Add(noterConfigFrame, 7, 3) + + title = CreateFancyText( + "HeimdallNoterConfigTitle", + noterConfigFrame.frame, + shared._L("noter", Heimdall_Data.config.locale), + { r, g, b, a } + ) + noterConfigFrame:Add(title, 1, 8) + + local debugButton = CreateBasicButton( + "HeimdallNoterConfigDebugButton", + noterConfigFrame.frame, + shared._L("debug", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.noter.debug = not Heimdall_Data.config.noter.debug + return Heimdall_Data.config.noter.debug + end + ) + debugButton:UpdateColor(Heimdall_Data.config.noter.debug) + noterConfigFrame:Add(debugButton, 1, 4) + + local enableButton = CreateBasicButton( + "HeimdallNoterConfigEnableButton", + noterConfigFrame.frame, + shared._L("enabled", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.noter.enabled = not Heimdall_Data.config.noter.enabled + return Heimdall_Data.config.noter.enabled + end + ) + enableButton:UpdateColor(Heimdall_Data.config.noter.enabled) + noterConfigFrame:Add(enableButton, 1, 12) + + local channels = CreateBasicSmallEditBox( + "HeimdallNoterConfigChannels", + noterConfigFrame.frame, + shared._L("channels", Heimdall_Data.config.locale), + table.concat(Heimdall_Data.config.noter.channels or {}, ","), + function(self) + local text = self:GetText() + Heimdall_Data.config.noter.channels = StringToArray(text, ",") + print("Channels set to") + shared.dumpTable(Heimdall_Data.config.noter.channels) + end + ) + noterConfigFrame:Add(channels, 2, 6) + + local lastNotes = CreateBasicSmallEditBox( + "HeimdallNoterConfigLastNotes", + noterConfigFrame.frame, + shared._L("lastNotes", Heimdall_Data.config.locale), + tostring(Heimdall_Data.config.noter.lastNotes), + function(self) + local text = self:GetText() + local value = tonumber(text) + if value and value > 0 then + Heimdall_Data.config.noter.lastNotes = value + print("Last notes set to", value) + else + print("Invalid number of last notes", text) + self:SetText(tostring(Heimdall_Data.config.noter.lastNotes)) + end + end + ) + noterConfigFrame:Add(lastNotes, 2, 6) + end + + -- Network + do + local r, g, b, a = GetNextColor() + local networkConfigFrame = GridFrame.new("HeimdallNetworkConfig", UIParent, 12, 20) + networkConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) + configFrame:Add(networkConfigFrame, 11, 3) + + title = CreateFancyText( + "HeimdallNetworkConfigTitle", + networkConfigFrame.frame, + shared._L("network", Heimdall_Data.config.locale), + { r, g, b, a } + ) + networkConfigFrame:Add(title, 1, 8) + + local debugButton = CreateBasicButton( + "HeimdallNetworkConfigDebugButton", + networkConfigFrame.frame, + shared._L("debug", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.network.debug = not Heimdall_Data.config.network.debug + return Heimdall_Data.config.network.debug + end + ) + debugButton:UpdateColor(Heimdall_Data.config.network.debug) + networkConfigFrame:Add(debugButton, 1, 4) + + local enableButton = CreateBasicButton( + "HeimdallNetworkConfigEnableButton", + networkConfigFrame.frame, + shared._L("enabled", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.network.enabled = not Heimdall_Data.config.network.enabled + return Heimdall_Data.config.network.enabled + end + ) + enableButton:UpdateColor(Heimdall_Data.config.network.enabled) + networkConfigFrame:Add(enableButton, 1, 12) + + local members = CreateBasicBigEditBox( + "HeimdallNetworkConfigMembers", + networkConfigFrame.frame, + shared._L("members", Heimdall_Data.config.locale), + table.concat(Heimdall_Data.config.network.members, ","), + function(self) + local text = self:GetText() + Heimdall_Data.config.network.members = StringToArray(text, ",") + print("Members set to", table.concat(Heimdall_Data.config.network.members, ",")) + self:SetText(table.concat(Heimdall_Data.config.network.members, ",")) + end + ) + networkConfigFrame:Add(members, 5, 6) + + local updateInterval = CreateBasicSmallEditBox( + "HeimdallNetworkConfigUpdateInterval", + networkConfigFrame.frame, + shared._L("updateInterval", Heimdall_Data.config.locale), + tostring(Heimdall_Data.config.network.updateInterval), + function(self) + local text = self:GetText() + if string.match(text, "%d+") then + Heimdall_Data.config.network.updateInterval = tonumber(text) + print("Update interval set to", tostring(text)) + else + print("Invalid update interval", text) + self:SetText(tostring(Heimdall_Data.config.network.updateInterval)) + end + end + ) + networkConfigFrame:Add(updateInterval, 2, 6) + end + + -- NetworkMessenger + do + local r, g, b, a = GetNextColor() + local networkMessengerConfigFrame = GridFrame.new("HeimdallNetworkMessengerConfig", UIParent, 12, 20) + networkMessengerConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) + configFrame:Add(networkMessengerConfigFrame, 5, 3) + + title = CreateFancyText( + "HeimdallNetworkMessengerConfigTitle", + networkMessengerConfigFrame.frame, + shared._L("networkMessenger", Heimdall_Data.config.locale), + { r, g, b, a } + ) + networkMessengerConfigFrame:Add(title, 1, 8) + + local debugButton = CreateBasicButton( + "HeimdallNetworkMessengerConfigDebugButton", + networkMessengerConfigFrame.frame, + shared._L("debug", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.networkMessenger.debug = not Heimdall_Data.config.networkMessenger.debug + return Heimdall_Data.config.networkMessenger.debug + end + ) + debugButton:UpdateColor(Heimdall_Data.config.networkMessenger.debug) + networkMessengerConfigFrame:Add(debugButton, 1, 4) + + local enableButton = CreateBasicButton( + "HeimdallNetworkMessengerConfigEnableButton", + networkMessengerConfigFrame.frame, + shared._L("enabled", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.networkMessenger.enabled = not Heimdall_Data.config.networkMessenger.enabled + return Heimdall_Data.config.networkMessenger.enabled + end + ) + enableButton:UpdateColor(Heimdall_Data.config.networkMessenger.enabled) + networkMessengerConfigFrame:Add(enableButton, 2, 6) + + local interval = CreateBasicSmallEditBox( + "HeimdallNetworkMessengerConfigInterval", + networkMessengerConfigFrame.frame, + shared._L("interval", Heimdall_Data.config.locale), + tostring(Heimdall_Data.config.networkMessenger.interval), + function(self) + local text = self:GetText() + if string.match(text, "^%d+%.?%d*$") then + Heimdall_Data.config.networkMessenger.interval = tonumber(text) + print("Interval set to", tostring(text)) + else + print("Invalid interval", text) + self:SetText(tostring(Heimdall_Data.config.networkMessenger.interval)) + end + end + ) + 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) + + 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) + + local rescan = CreateBasicButton( + "HeimdallAchievementSnifferConfigRescanButton", + achievementSnifferConfigFrame.frame, + shared._L("rescan", Heimdall_Data.config.locale), + function() + Heimdall_Data.config.achievementSniffer.rescan = not Heimdall_Data.config.achievementSniffer.rescan + return Heimdall_Data.config.achievementSniffer.rescan + end + ) + rescan:UpdateColor(Heimdall_Data.config.achievementSniffer.rescan) + achievementSnifferConfigFrame:Add(rescan, 2, 3) + + local scanInterval = CreateBasicSmallEditBox( + "HeimdallAchievementSnifferConfigScanInterval", + achievementSnifferConfigFrame.frame, + shared._L("scanInterval", Heimdall_Data.config.locale), + tostring(Heimdall_Data.config.achievementSniffer.scanInterval), + function(self) + local text = self:GetText() + Heimdall_Data.config.achievementSniffer.scanInterval = tonumber(text) + end + ) + achievementSnifferConfigFrame:Add(scanInterval, 2, 3) + + --local iconScale = CreateBasicSmallEditBox("HeimdallAchievementSnifferConfigIconScale", + -- achievementSnifferConfigFrame.frame, shared._L("iconScale", Heimdall_Data.config.locale), + -- tostring(Heimdall_Data.config.achievementSniffer.iconScale), + -- function(self) + -- local text = self:GetText() + -- Heimdall_Data.config.achievementSniffer.iconScale = tonumber(text) + -- end) + --achievementSnifferConfigFrame:Add(iconScale, 2, 3) + end + + -- Addon prefix + do + local r, g, b, a = GetNextColor() + local addonPrefixConfigFrame = GridFrame.new("HeimdallAddonPrefixConfig", UIParent, 12, 20) + addonPrefixConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) + configFrame:Add(addonPrefixConfigFrame, 5, 1) + + title = CreateFancyText( + "HeimdallAddonPrefixConfigTitle", + addonPrefixConfigFrame.frame, + shared._L("addonPrefix", Heimdall_Data.config.locale), + { r, g, b, a } + ) + addonPrefixConfigFrame:Add(title, 1, 12) + + local addonPrefix = CreateBasicSmallEditBox( + "HeimdallAddonPrefixConfigAddonPrefix", + addonPrefixConfigFrame.frame, + shared._L("addonPrefix", Heimdall_Data.config.locale), + Heimdall_Data.config.addonPrefix, + function(self) + local text = self:GetText() + Heimdall_Data.config.addonPrefix = text + end + ) + addonPrefixConfigFrame:Add(addonPrefix, 2, 12) + end + + -- Whisper Notify + do + local r, g, b, a = GetNextColor() + local whisperNotifyConfigFrame = GridFrame.new("HeimdallWhisperNotifyConfig", UIParent, 12, 20) + whisperNotifyConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) + configFrame:Add(whisperNotifyConfigFrame, 14, 1) + + title = CreateFancyText( + "HeimdallWhisperNotifyConfigTitle", + whisperNotifyConfigFrame.frame, + shared._L("whisperNotify", Heimdall_Data.config.locale), + { r, g, b, a } + ) + whisperNotifyConfigFrame:Add(title, 1, 12) + + local whisperNotify = CreateBasicBigEditBox( + "HeimdallWhisperNotifyConfigWhisperNotify", + whisperNotifyConfigFrame.frame, + shared._L("whisperNotify", Heimdall_Data.config.locale), + table.concat(Heimdall_Data.config.whisperNotify, "\n"), + function(self) + local text = self:GetText() + Heimdall_Data.config.whisperNotify = StringToArray(text, "\n") + end + ) + whisperNotifyConfigFrame:Add(whisperNotify, 8, 12) + end + + -- Stinkies + do + local r, g, b, a = GetNextColor() + local stinkiesConfigFrame = GridFrame.new("HeimdallStinkiesConfig", UIParent, 12, 20) + stinkiesConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) + configFrame:Add(stinkiesConfigFrame, 28, 6) + -- Why do 17 rows of content fit into a frame that is 14 rows? + -- I don't know, at this point I can't be fucked to fix it, the display is minimally functional + + title = CreateFancyText( + "HeimdallStinkiesConfigTitle", + stinkiesConfigFrame.frame, + shared._L("stinkies", Heimdall_Data.config.locale), + { r, g, b, a } + ) + stinkiesConfigFrame:Add(title, 1, 12) + + local stinkies = CreateBasicBigEditBox( + "HeimdallStinkiesConfigStinkies", + stinkiesConfigFrame.frame, + shared._L("stinkies", Heimdall_Data.config.locale), + MapKeyToString(Heimdall_Data.config.stinkies, ","), + function(self) + local text = self:GetText() + Heimdall_Data.config.stinkies = StringToMap(text, ",") + end + ) + stinkiesConfigFrame:Add(stinkies, 16, 12) + end + + -- Channel locale + do + local r, g, b, a = GetNextColor() + local channelLocaleConfigFrame = GridFrame.new("HeimdallChannelLocaleConfig", UIParent, 12, 20) + channelLocaleConfigFrame.frame:SetBackdropColor(r, g, b, 0.3) + configFrame:Add(channelLocaleConfigFrame, 14, 1) + + title = CreateFancyText( + "HeimdallChannelLocaleConfigTitle", + channelLocaleConfigFrame.frame, + shared._L("channelLocale", Heimdall_Data.config.locale), + { r, g, b, a } + ) + channelLocaleConfigFrame:Add(title, 1, 12) + + local channelLocale = CreateBasicBigEditBox( + "HeimdallChannelLocaleConfigChannelLocale", + channelLocaleConfigFrame.frame, + shared._L("channelLocale", Heimdall_Data.config.locale), + MapToString(Heimdall_Data.config.channelLocale, ":", "\n"), + function(self) + local text = self:GetText() + Heimdall_Data.config.channelLocale = MapFromString(text, ":", "\n") + end + ) + channelLocaleConfigFrame:Add(channelLocale, 8, 12) + end + + configFrame.frame:Hide() + print("[Heimdall] Config loaded") + end, +} SlashCmdList["HEIMDALL_CONFIG"] = function() configFrame.frame:Show() end SLASH_HEIMDALL_CONFIG1 = "/heimdall_config"