diff --git a/MainCharacterTag.lua b/MainCharacterTag.lua deleted file mode 100644 index 087d14e..0000000 --- a/MainCharacterTag.lua +++ /dev/null @@ -1,178 +0,0 @@ --- MainCharacterTag --- Prefixes guild and guild officer chat with your main character's name. --- Compatible with WoW 1.12.1 - -MainCharacterTagDB = MainCharacterTagDB or {} - -local function GetMainName() - return MainCharacterTagDB.mainName or "" -end - -local function SetMainName(name) - name = string.gsub(name, "^%s*(.-)%s*$", "%1") - MainCharacterTagDB.mainName = name -end - -local function IsCurrentCharMain() - local currentChar = UnitName("player") - local mainName = GetMainName() - return mainName == "" or currentChar == mainName -end - --- ============================================================ --- Hook SendChatMessage to prepend the main name --- Only active after the player is fully in the world --- ============================================================ -local origSendChatMessage = SendChatMessage -local playerReady = false - -function SendChatMessage(msg, chatType, language, channel) - if playerReady and msg and msg ~= "" and chatType then - -- ignore macro directives - if string.sub(msg, 1, 1) == "#" then - return origSendChatMessage(msg, chatType, language, channel) - end - local upperType = string.upper(chatType) - if (upperType == "GUILD" or upperType == "OFFICER") then - local mainName = GetMainName() - if mainName ~= "" and not IsCurrentCharMain() then - msg = "(" .. mainName .. "): " .. msg - end - end - end - origSendChatMessage(msg, chatType, language, channel) -end - --- ============================================================ --- Options Frame (vanilla-compatible, no XML templates) --- ============================================================ -local optionsFrame = CreateFrame("Frame", "MainCharacterTagOptions", UIParent) -optionsFrame:SetWidth(360) -optionsFrame:SetHeight(200) -optionsFrame:SetPoint("CENTER", UIParent, "CENTER") -optionsFrame:SetBackdrop({ - bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background", - edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", - tile = true, tileSize = 32, edgeSize = 32, - insets = { left = 11, right = 12, top = 12, bottom = 11 }, -}) -optionsFrame:SetMovable(true) -optionsFrame:EnableMouse(true) -optionsFrame:RegisterForDrag("LeftButton") -optionsFrame:SetScript("OnDragStart", function() optionsFrame:StartMoving() end) -optionsFrame:SetScript("OnDragStop", function() optionsFrame:StopMovingOrSizing() end) -optionsFrame:Hide() - --- Title bar text -local titleText = optionsFrame:CreateFontString(nil, "OVERLAY", "GameFontNormal") -titleText:SetPoint("TOP", optionsFrame, "TOP", 0, -16) -titleText:SetText("MainCharacterTag — Options") - --- Description -local descText = optionsFrame:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall") -descText:SetPoint("TOPLEFT", optionsFrame, "TOPLEFT", 20, -42) -descText:SetWidth(320) -descText:SetJustifyH("LEFT") -descText:SetText("Set your main character's name. Guild and officer chat\nsent from alts will be prefixed with that name.") - --- Current character label -local currentLabel = optionsFrame:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall") -currentLabel:SetPoint("TOPLEFT", optionsFrame, "TOPLEFT", 20, -82) - --- Name input label -local nameLabel = optionsFrame:CreateFontString(nil, "OVERLAY", "GameFontNormal") -nameLabel:SetPoint("TOPLEFT", optionsFrame, "TOPLEFT", 20, -108) -nameLabel:SetText("Main Name:") - --- EditBox -local nameInput = CreateFrame("EditBox", "MainCharacterTagInput", optionsFrame) -nameInput:SetPoint("TOPLEFT", optionsFrame, "TOPLEFT", 100, -104) -nameInput:SetWidth(230) -nameInput:SetHeight(20) -nameInput:SetAutoFocus(false) -nameInput:SetMaxLetters(64) -nameInput:SetFontObject(GameFontHighlight) -nameInput:SetBackdrop({ - bgFile = "Interface\\ChatFrame\\ChatFrameBackground", - edgeFile = "Interface\\ChatFrame\\ChatFrameBackground", - tile = true, tileSize = 5, edgeSize = 1, - insets = { left = 3, right = 3, top = 3, bottom = 3 }, -}) -nameInput:SetBackdropColor(0, 0, 0, 0.8) -nameInput:SetBackdropBorderColor(0.4, 0.4, 0.4, 0.8) -nameInput:SetScript("OnEnterPressed", function() nameInput:ClearFocus() end) -nameInput:SetScript("OnEscapePressed", function() nameInput:ClearFocus() end) - --- Status text centered above buttons -local statusLabel = optionsFrame:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall") -statusLabel:SetPoint("BOTTOM", optionsFrame, "BOTTOM", 0, 50) -statusLabel:SetJustifyH("CENTER") - --- Save button (centered pair) -local saveBtn = CreateFrame("Button", nil, optionsFrame, "GameMenuButtonTemplate") -saveBtn:SetWidth(90) -saveBtn:SetHeight(24) -saveBtn:SetPoint("BOTTOM", optionsFrame, "BOTTOM", -50, 18) -saveBtn:SetText("Save") -saveBtn:SetScript("OnClick", function() - local name = nameInput:GetText() - SetMainName(name) - if name == "" then - DEFAULT_CHAT_FRAME:AddMessage("|cff00ff96MainCharacterTag:|r Main name cleared. Prefix disabled.") - else - DEFAULT_CHAT_FRAME:AddMessage("|cff00ff96MainCharacterTag:|r Main set to |cffffd700" .. name .. "|r") - end - optionsFrame:Hide() -end) - --- Cancel button -local cancelBtn = CreateFrame("Button", nil, optionsFrame, "GameMenuButtonTemplate") -cancelBtn:SetWidth(90) -cancelBtn:SetHeight(24) -cancelBtn:SetPoint("BOTTOM", optionsFrame, "BOTTOM", 50, 18) -cancelBtn:SetText("Cancel") -cancelBtn:SetScript("OnClick", function() - optionsFrame:Hide() -end) - --- Refresh frame contents on show -optionsFrame:SetScript("OnShow", function() - nameInput:SetText(GetMainName()) - currentLabel:SetText("Logged in as: |cffffd700" .. (UnitName("player") or "Unknown") .. "|r") - local main = GetMainName() - if main == "" then - statusLabel:SetText("|cffaaaaaa(No main set — prefix disabled)|r") - elseif IsCurrentCharMain() then - statusLabel:SetText("|cff00ff96You are on your main.|r") - else - statusLabel:SetText("|cffffff00Alt detected — prefix active.|r") - end -end) - --- ============================================================ --- Slash commands --- ============================================================ -SLASH_MAINCHARACTERTAG1 = "/mct" -SLASH_MAINCHARACTERTAG2 = "/mainchartag" -SlashCmdList["MAINCHARACTERTAG"] = function(msg) - if optionsFrame:IsShown() then - optionsFrame:Hide() - else - optionsFrame:Show() - end -end - --- ============================================================ --- Addon loaded event (vanilla style) --- ============================================================ -local eventFrame = CreateFrame("Frame") -eventFrame:RegisterEvent("VARIABLES_LOADED") -eventFrame:RegisterEvent("PLAYER_ENTERING_WORLD") -eventFrame:SetScript("OnEvent", function() - if event == "VARIABLES_LOADED" then - MainCharacterTagDB = MainCharacterTagDB or {} - DEFAULT_CHAT_FRAME:AddMessage("|cff00ff96MainCharacterTag|r loaded. Type |cffffd700/mct|r to open options.") - elseif event == "PLAYER_ENTERING_WORLD" then - playerReady = true - end -end)