Add files via upload

This commit is contained in:
totalllyswede
2026-05-04 04:43:50 -07:00
committed by GitHub
parent d6cbce8e37
commit 3b6e0efb8a
2 changed files with 186 additions and 0 deletions
+178
View File
@@ -0,0 +1,178 @@
-- 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)
+8
View File
@@ -0,0 +1,8 @@
## Interface: 11200
## Title: MainCharacterTag
## Notes: Prefixes guild chat messages with your main character's name so guildies know who you are.
## Version: 1.1
## Author: Olzon
## SavedVariables: MainCharacterTagDB
MainCharacterTag_OC.lua