From 55e82cf10081f57402c21d02fcc37b838931163a Mon Sep 17 00:00:00 2001 From: Narcasung Date: Tue, 7 Jul 2026 19:03:58 +0200 Subject: [PATCH] Initial commit: HideCoA addon --- HideCoA.lua | 127 ++++++++++++++++++++++++++++++++++++++++++++++++++++ HideCoA.toc | 9 ++++ Options.lua | 127 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 263 insertions(+) create mode 100644 HideCoA.lua create mode 100644 HideCoA.toc create mode 100644 Options.lua diff --git a/HideCoA.lua b/HideCoA.lua new file mode 100644 index 0000000..6fd8c36 --- /dev/null +++ b/HideCoA.lua @@ -0,0 +1,127 @@ +HideCoA = {} + +local f = CreateFrame("Frame") + +HideCoA.CUSTOM_CLASSES = { + "NECROMANCER", + "PYROMANCER", + "CULTIST", + "STARCALLER", + "SUNCLERIC", + "TINKER", + "SPIRITMAGE", + "WILDWALKER", + "REAPER", + "PROPHET", + "CHRONOMANCER", + "SONOFARUGAL", + "GUARDIAN", + "STORMBRINGER", + "DEMONHUNTER", + "BARBARIAN", + "WITCHDOCTOR", + "WITCHHUNTER", + "FLESHWARDEN", + "MONK", + "RANGER", +} + +HideCoA.FRAMES = { + "CoAResourceSegmentBar", + "CoAResourceOrb", + "CoAResourceBar", +} + +local function ShouldHideForClass(playerClass, frameName) + + local classSettings = HideCoADB.classSettings[playerClass] + + if not classSettings or classSettings[frameName] == nil then + return true + end + + return classSettings[frameName] + +end + +local hookedFrames = {} + +local function ApplySetting() + + local _, playerClass = UnitClass("player") + + for _, frameName in ipairs(HideCoA.FRAMES) do + + local frame = _G[frameName] + + if frame then + + if not hookedFrames[frameName] then + + frame:HookScript("OnShow", function(self) + local _, currentClass = UnitClass("player") + if ShouldHideForClass(currentClass, frameName) then + self:Hide() + end + end) + + hookedFrames[frameName] = true + + end + + local hide = ShouldHideForClass(playerClass, frameName) + + if hide then + frame:Hide() + else + frame:Show() + end + + if frame.EnableMouse then + frame:EnableMouse(not hide) + end + + end + + end + +end + +HideCoA.ApplySetting = ApplySetting + +f:RegisterEvent("ADDON_LOADED") +f:RegisterEvent("PLAYER_LOGIN") + +f:SetScript("OnEvent", function(self, event, arg1) + + if event == "ADDON_LOADED" and arg1 == "HideCoA" then + + if not HideCoADB then + HideCoADB = {} + end + + if not HideCoADB.classSettings then + HideCoADB.classSettings = {} + end + + for _, class in ipairs(HideCoA.CUSTOM_CLASSES) do + + if type(HideCoADB.classSettings[class]) ~= "table" then + HideCoADB.classSettings[class] = {} + end + + for _, frameName in ipairs(HideCoA.FRAMES) do + if HideCoADB.classSettings[class][frameName] == nil then + HideCoADB.classSettings[class][frameName] = true + end + end + + end + + elseif event == "PLAYER_LOGIN" then + + ApplySetting() + + end + +end) \ No newline at end of file diff --git a/HideCoA.toc b/HideCoA.toc new file mode 100644 index 0000000..bcbbd75 --- /dev/null +++ b/HideCoA.toc @@ -0,0 +1,9 @@ +## Interface: 30300 +## Title: Hide CoA Class UI +## Notes: Hides the Conquest of Azeroth class frame. +## Author: Narcasung +## Version: 1.0 +## SavedVariables: HideCoADB + +HideCoA.lua +Options.lua \ No newline at end of file diff --git a/Options.lua b/Options.lua new file mode 100644 index 0000000..bca4502 --- /dev/null +++ b/Options.lua @@ -0,0 +1,127 @@ +local panel = CreateFrame("Frame") +panel.name = "HideCoAUI" + +local title = panel:CreateFontString(nil, "ARTWORK", "GameFontNormalLarge") +title:SetPoint("TOPLEFT", 16, -16) +title:SetText("HideCoAUI") + +local subtitle = panel:CreateFontString(nil, "ARTWORK", "GameFontNormalSmall") +subtitle:SetPoint("TOPLEFT", title, "BOTTOMLEFT", 0, -8) +subtitle:SetText("Select a class, then toggle the checkboxes to hide its class resource:") + +local sidebar = CreateFrame("Frame", nil, panel) +sidebar:SetPoint("TOPLEFT", subtitle, "BOTTOMLEFT", 0, -12) +sidebar:SetPoint("BOTTOMLEFT", panel, "BOTTOMLEFT", 16, 16) +sidebar:SetWidth(150) + +local content = CreateFrame("Frame", nil, panel) +content:SetPoint("TOPLEFT", sidebar, "TOPRIGHT", 16, 0) +content:SetPoint("BOTTOMRIGHT", panel, "BOTTOMRIGHT", -16, 16) + +local classTitle = content:CreateFontString(nil, "ARTWORK", "GameFontNormalLarge") +classTitle:SetPoint("TOPLEFT", content, "TOPLEFT", 0, 0) + +local titleFont, titleSize = classTitle:GetFont() +classTitle:SetFont(titleFont, titleSize + 4, "OUTLINE") + +local checks = {} +local selectedClass = nil + +local previousAnchor = classTitle +local previousSpacing = -12 + +for _, frameName in ipairs(HideCoA.FRAMES) do + + local check = CreateFrame("CheckButton", "HideCoAClassCheck" .. frameName, content, "InterfaceOptionsCheckButtonTemplate") + check:SetPoint("TOPLEFT", previousAnchor, "BOTTOMLEFT", 0, previousSpacing) + _G[check:GetName() .. "Text"]:SetText("Hide " .. frameName) + + check.frameName = frameName + + check:SetScript("OnClick", function(self) + + if not selectedClass then + return + end + + HideCoADB.classSettings[selectedClass][self.frameName] = self:GetChecked() and true or false + HideCoA.ApplySetting() + + end) + + checks[frameName] = check + previousAnchor = check + previousSpacing = -8 + +end + +local TAB_HEIGHT = 18 + +local tabButtons = {} + +local function SelectClass(class) + + selectedClass = class + + local displayName = (LOCALIZED_CLASS_NAMES_MALE and LOCALIZED_CLASS_NAMES_MALE[class]) or class + classTitle:SetText(displayName) + + local color = RAID_CLASS_COLORS and RAID_CLASS_COLORS[class] + if color then + classTitle:SetTextColor(color.r, color.g, color.b) + else + classTitle:SetTextColor(1, 1, 1) + end + + for _, frameName in ipairs(HideCoA.FRAMES) do + checks[frameName]:SetChecked(HideCoADB.classSettings[class][frameName]) + end + + for tabClass, button in pairs(tabButtons) do + if tabClass == class then + button.selectedTexture:Show() + else + button.selectedTexture:Hide() + end + end + +end + +for index, class in ipairs(HideCoA.CUSTOM_CLASSES) do + + local button = CreateFrame("Button", "HideCoAClassTab" .. class, sidebar) + button:SetHeight(TAB_HEIGHT) + button:SetPoint("TOPLEFT", sidebar, "TOPLEFT", 0, -(index - 1) * TAB_HEIGHT) + button:SetPoint("RIGHT", sidebar, "RIGHT", 0, 0) + + local selectedTexture = button:CreateTexture(nil, "BACKGROUND") + selectedTexture:SetAllPoints() + selectedTexture:SetTexture(1, 1, 1, 0.2) + selectedTexture:Hide() + button.selectedTexture = selectedTexture + + button:SetHighlightTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight", "ADD") + + local displayName = (LOCALIZED_CLASS_NAMES_MALE and LOCALIZED_CLASS_NAMES_MALE[class]) or class + local text = button:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall") + text:SetPoint("LEFT", 4, 0) + text:SetText(displayName) + + local color = RAID_CLASS_COLORS and RAID_CLASS_COLORS[class] + if color then + text:SetTextColor(color.r, color.g, color.b) + end + + button:SetScript("OnClick", function() + SelectClass(class) + end) + + tabButtons[class] = button + +end + +panel:SetScript("OnShow", function() + SelectClass(selectedClass or HideCoA.CUSTOM_CLASSES[1]) +end) + +InterfaceOptions_AddCategory(panel)