assert(BigWigs, "BigWigs not found!") ------------------------------ -- Are you local? -- ------------------------------ local L = AceLibrary("AceLocale-2.2"):new("BigWigsMessages") local paint = AceLibrary("PaintChips-2.0") ---------------------------- -- Localization -- ---------------------------- L:RegisterTranslations("enUS", function() return { ["Messages"] = true, ["msg"] = true, ["anchor"] = true, ["rw"] = true, ["color"] = true, ["scale"] = true, ["Options for the message frame."] = true, ["Anchor"] = true, ["Show the message anchor frame."] = true, ["Use RaidWarning"] = true, ["Toggle sending messages to the RaidWarnings frame."] = true, ["Use colors"] = true, ["Toggles white only messages ignoring coloring."] = true, ["Message frame scale"] = true, ["Message frame"] = true, ["Show anchor"] = true, ["Send messages to RaidWarning frame"] = true, ["Set the message frame scale."] = true, ["Colorize messages"] = true, ["Scale"] = true, ["|cffff0000Co|cffff00fflo|cff00ff00r|r"] = true, ["White"] = true, ["BigWigs frame"] = true, ["RaidWarning frame"] = true, ["Scale is set to %s"] = true, ["Messages are now sent to the %2$s"] = true, ["Messages are currently sent to the %2$s"] = true, ["display"] = true, ["Display"] = true, ["Set where messages are displayed."] = true, ["Display is now set to %2$s"] = true, ["Display is currently set to %2$s"] = true, ["Mik's Scrolling Battle Text"] = true, ["Scrolling Combat Text"] = true, ["Floating Combat Text"] = true, ["Test"] = true, ["Close"] = true, } end) L:RegisterTranslations("koKR", function() return { ["Messages"] = "메세지", -- ["msg"] = "메시지", -- ["anchor"] = "위치", -- ["rw"] = "공대경고", -- ["color"] = "색상", -- ["scale"] = "크기", ["Options for the message frame."] = "메시지 창 옵션.", ["Anchor"] = "위치", ["Show the message anchor frame."] = "메시지 위치 조정 프레임 보이기.", ["Use RaidWarning"] = "공격대 경고 사용", ["Toggle sending messages to the RaidWarnings frame."] = "공대경고 창으로 메시지 보내기.", ["Use colors"] = "색상 사용", ["Toggles white only messages ignoring coloring."] = "메시지를 하얀 색으로 변경.", ["Message frame scale"] = "메세지 창 크기", ["Message frame"] = "메시지 창", ["Show anchor"] = "앵커 보이기", ["Send messages to RaidWarning frame"] = "공대경고 창으로 메시지 보내기", ["Set the message frame scale."] = "메세지 창 크기 설정", ["Colorize messages"] = "컬러 메시지", ["Scale"] = "크기", ["|cffff0000Co|cffff00fflo|cff00ff00r|r"] = "|cffff0000색|cffff00ff상|r", ["White"] = "화이트", ["BigWigs frame"] = "BigWigs 창", ["RaidWarning frame"] = "공격대경고 창", -- ["Scale is set to %s"] = true, -- ["Messages are now sent to the %2$s"] = true, -- ["Messages are currently sent to the %2$s"] = true, ["display"] = "디스플레이", ["Display"] = "디스플레이", ["Set where messages are displayed."] = "메세지 디스플레이 설정", ["Display is now set to %2$s"] = "디스플레이를 %2$s 로 설정 하였습니다.", ["Display is currently set to %2$s"] = "디스플레이 현재 설정 : %2$s", ["Mik's Scrolling Battle Text"] = "MSBT", ["Scrolling Combat Text"] = "SCT", ["Floating Combat Text"] = "FCT", } end) L:RegisterTranslations("zhCN", function() return { ["Messages"] = "信息", ["msg"] = "信息", ["anchor"] = "锚点", ["rw"] = "团队警报", ["color"] = "颜色", ["scale"] = "大小", ["Options for the message frame."] = "信息框体设置。", ["Anchor"] = "锚点", ["Show the message anchor frame."] = "显示信息框体锚点。", ["Use RaidWarning"] = "使用团队警告", ["Toggle sending messages to the RaidWarnings frame."] = "切换是否通过团队警告框体发送信息。", ["Use colors"] = "发送彩色信息", ["Toggles white only messages ignoring coloring."] = "切换是否只发送单色信息。", ["Message frame scale"] = "信息框体缩放", ["Message frame"] = "信息框体", ["Show anchor"] = "显示锚点", ["Send messages to RaidWarning frame"] = "通过团队警告框体发送信息", ["Set the message frame scale."] = "设置信息框体缩放比例", ["Colorize messages"] = "彩色信息", ["Scale"] = "缩放", ["|cffff0000Co|cffff00fflo|cff00ff00r|r"] = "|cffff0000颜|cffff00ff色|r", ["White"] = "白色", ["BigWigs frame"] = "BigWigs框体", ["RaidWarning frame"] = "团队警告框体", ["Scale is set to %s"] = "缩放比例设置为%s", ["Messages are now sent to the %2$s"] = "信息设置为发送到%2$s", ["Messages are currently sent to the %2$s"] = "信息当前设置为发送到%2$s", ["display"] = "显示", ["Display"] = "显示", ["Set where messages are displayed."] = "选择信息显示的位置", ["Display is now set to %2$s"] = "显示设置到%2$s", ["Display is currently set to %2$s"] = "显示目前设置到%2$s", ["Mik's Scrolling Battle Text"] = "Mik's滚动战斗信息", ["Scrolling Combat Text"] = "滚动战斗信息", ["Floating Combat Text"] = "浮动战斗信息", ["Test"] = "测试", ["Close"] = "关闭", } end) L:RegisterTranslations("zhTW", function() return { ["Messages"] = "訊息", ["msg"] = "訊息", ["anchor"] = "錨點", ["rw"] = "團隊警報", ["color"] = "顏色", ["scale"] = "大小", ["Options for the message frame."] = "訊息框架設置。", ["Anchor"] = "錨點", ["Show the message anchor frame."] = "顯示訊息訊息框架錨點。", ["Use RaidWarning"] = "使用團隊警告", ["Toggle sending messages to the RaidWarnings frame."] = "切換是否通過團隊警告框架發送訊息。", ["Use colors"] = "發送彩色訊息", ["Toggles white only messages ignoring coloring."] = "切換是否只發送單色訊息。", ["Message frame scale"] = "訊息框架縮放", ["Message frame"] = "訊息框架", ["Show anchor"] = "顯示錨點", ["Send messages to RaidWarning frame"] = "通過團隊警告框架發送訊息", ["Set the message frame scale."] = "設置訊息框架縮放比例", ["Colorize messages"] = "彩色訊息", ["Scale"] = "縮放", ["|cffff0000Co|cffff00fflo|cff00ff00r|r"] = "|cffff0000顏|cffff00ff色|r", ["White"] = "白色", ["BigWigs frame"] = "BigWigs框架", ["RaidWarning frame"] = "團隊警告框架", ["Scale is set to %s"] = "縮放比例設置為%s", ["Messages are now sent to the %2$s"] = "目前訊息設定為發送到%2$s", ["Messages are currently sent to the %2$s"] = "目前訊息設定為發送到%2$s", ["display"] = "顯示", ["Display"] = "顯示", ["Set where messages are displayed."] = "選擇訊息顯示的位置", ["Display is now set to %2$s"] = "顯示設置到%2$s", ["Display is currently set to %2$s"] = "顯示目前設置到%2$s", ["Mik's Scrolling Battle Text"] = "Mik's滾動戰鬥訊息", ["Scrolling Combat Text"] = "滾動戰鬥訊息", ["Floating Combat Text"] = "浮動戰鬥訊息", ["Test"] = "測試", ["Close"] = "關閉", } end) L:RegisterTranslations("deDE", function() return { ["Messages"] = "Nachrichten", ["msg"] = "msg", ["anchor"] = "verankerung", ["rw"] = "rw", ["color"] = "farbe", ["scale"] = "skalierung", ["Options for the message frame."] = "Optionen f\195\188r das Nachrichtenfenster.", ["Anchor"] = "Verankerung", ["Show the message anchor frame."] = "Verankerung des Nachrichtenfensters anzeigen.", ["Use RaidWarning"] = "RaidWarning benutzen", ["Toggle sending messages to the RaidWarnings frame."] = "Nachrichten \195\188ber RaidWarning senden.", ["Use colors"] = "Farben benutzen", ["Toggles white only messages ignoring coloring."] = "Nachrichten farbig/wei\195\159 anzeigen.", ["Message frame scale"] = "Nachrichtenfenster Skalierung", ["Message frame"] = "Nachrichtenfenster", ["Show anchor"] = "Verankerung anzeigen", ["Send messages to RaidWarning frame"] = "Nachrichten \195\188ber RaidWarning senden.", ["Set the message frame scale."] = "Skalierung des Nachrichtenfensters w\195\164hlen.", ["Colorize messages"] = "Farbige Nachrichten", ["Scale"] = "Skalierung", ["|cffff0000Co|cffff00fflo|cff00ff00r|r"] = "|cffff0000Fa|cffff00ffr|cff00ff00be|r", ["White"] = "Wei\195\159", ["BigWigs frame"] = "BigWigs", ["RaidWarning frame"] = "RaidWarning", ["Scale is set to %s"] = "Skalierung jetzt: %s", ["Messages are now sent to the %2$s"] = "Nachrichten werden nun gesendet an: %2$s", ["Messages are currently sent to the %2$s"] = "Nachrichten werden zur Zeit gesendet an: %2$s", ["display"] = "anzeige", ["Display"] = "Anzeige", ["Set where messages are displayed."] = "W\195\164hle, wo Nachrichten angezeigt werden sollen.", ["Display is now set to %2$s"] = "Anzeige nun \195\188ber: %2$s", ["Display is currently set to %2$s"] = "Anzeige zur Zeit \195\188ber: %2$s", ["Mik's Scrolling Battle Text"] = "MSBT", ["Scrolling Combat Text"] = "SCT", ["Floating Combat Text"] = "FCT", ["Test"] = "Test", ["Close"] = "Schlie\195\159en", } end) L:RegisterTranslations("frFR", function() return { ["Messages"] = "Messages", ["Options for the message frame."] = "Options concernant le cadre des messages.", ["Anchor"] = "Ancre", ["Show the message anchor frame."] = "Affiche l'ancre du cadre des messages.", ["Use RaidWarning"] = "Utiliser le cadre de l'Avertissement Raid", ["Toggle sending messages to the RaidWarnings frame."] = "Affiche ou non les messages dans le cadre des Avertissements Raid.", ["Use colors"] = "Utiliser des couleurs", ["Toggles white only messages ignoring coloring."] = "Utilise ou non des couleurs dans les messages à la place du blanc unique.", ["Message frame scale"] = "Taille du cadre des messages", ["Message frame"] = "Cadre des messages", ["Show anchor"] = "Afficher l'ancre", ["Send messages to RaidWarning frame"] = "Envoyer les messages dans le cadre des Avertissements Raid", ["Set the message frame scale."] = "Détermine la taille du cadre des messages.", ["Colorize messages"] = "Colorer les messages", ["Scale"] = "Taille", ["|cffff0000Co|cffff00fflo|cff00ff00r|r"] = "|cffff0000Co|cffff00ffule|cff00ff00ur|r", ["White"] = "Blanc", ["BigWigs frame"] = "Cadre de BigWigs", ["RaidWarning frame"] = "Cadre des Avertissements Raid", ["Scale is set to %s"] = "La taille est désormais définie à %s", ["Messages are now sent to the %2$s"] = "Les messages sont désormais affichés dans le %2$s", ["Messages are currently sent to the %2$s"] = "Les messages sont actuellement affichés dans le %2$s", ["Display"] = "Affichage", ["Set where messages are displayed."] = "Détermine où les messages sont affichés.", ["Display is now set to %2$s"] = "L'affichage est désormais défini au %2$s", ["Display is currently set to %2$s"] = "L'affichage est actuellement défini au %2$s", ["Mik's Scrolling Battle Text"] = "Scrolling Battle Text de Mik", --["Scrolling Combat Text"] = "Scrolling Combat Text", ["Floating Combat Text"] = "Message de combat flottant", --["Test"] = "Test", ["Close"] = "Fermer", } end) ---------------------------------- -- Module Declaration -- ---------------------------------- BigWigsMessages = BigWigs:NewModule(L["Messages"]) BigWigsMessages.defaultDB = { display = L["RaidWarning frame"], usecolors = true, scale = 1.0, } BigWigsMessages.consoleCmd = L["msg"] BigWigsMessages.consoleOptions = { type = "group", name = L["Messages"], desc = L["Options for the message frame."], args = { [L["anchor"]] = { type = "execute", name = L["Anchor"], desc = L["Show the message anchor frame."], func = function() BigWigsMessages:BigWigs_ShowAnchors() end, disabled = function() return (BigWigsMessages.db.profile.display ~= L["BigWigs frame"]) end, }, [L["color"]] = { type = "toggle", name = L["Use colors"], desc = L["Toggles white only messages ignoring coloring."], get = function() return BigWigsMessages.db.profile.usecolors end, set = function(v) BigWigsMessages.db.profile.usecolors = v end, map = {[true] = L["|cffff0000Co|cffff00fflo|cff00ff00r|r"], [false] = L["White"]}, }, [L["scale"]] = { type = "range", name = L["Message frame scale"], desc = L["Set the message frame scale."], min = 0.2, max = 2.0, step = 0.1, get = function() return BigWigsMessages.db.profile.scale end, set = function(v) BigWigsMessages.db.profile.scale = v if BigWigsMessages.msgframe then BigWigsMessages.msgframe:SetScale(v) end end, disabled = function() return (BigWigsMessages.db.profile.display ~= L["BigWigs frame"]) end, }, [L["display"]] = { type = "text", name = L["Display"], desc = L["Set where messages are displayed."], get = function() return BigWigsMessages.db.profile.display end, validate = {L["BigWigs frame"], L["RaidWarning frame"]}, set = function(v) BigWigsMessages.db.profile.display = v end, message = L["Display is now set to %2$s"], current = L["Display is currently set to %2$s"], } }, } ------------------------------ -- Optional Dependancies -- ------------------------------ if MikSBT then table.insert(BigWigsMessages.consoleOptions.args[L["display"]].validate, L["Mik's Scrolling Battle Text"]) end if SCT_Display_Message or ( SCT and SCT.DisplayMessage ) then table.insert(BigWigsMessages.consoleOptions.args[L["display"]].validate, L["Scrolling Combat Text"]) end if CombatText_AddMessage then table.insert(BigWigsMessages.consoleOptions.args[L["display"]].validate, L["Floating Combat Text"]) end ------------------------------ -- Initialization -- ------------------------------ function BigWigsMessages:OnRegister() self:SetupFrames() self:CreateMsgFrame() end function BigWigsMessages:OnEnable() self:RegisterEvent("BigWigs_Message") self:RegisterEvent("BigWigs_ShowAnchors") self:RegisterEvent("BigWigs_HideAnchors") end function BigWigsMessages:CreateMsgFrame() self.msgframe = CreateFrame("MessageFrame") self.msgframe:SetWidth(512) self.msgframe:SetHeight(80) self.msgframe:SetPoint("TOP", self.frames.anchor, "BOTTOM", 0, 0) self.msgframe:SetScale(self.db.profile.scale or 1) self.msgframe:SetInsertMode("TOP") self.msgframe:SetFrameStrata("HIGH") self.msgframe:SetToplevel(true) self.msgframe:SetFontObject(GameFontNormalLarge) self.msgframe:Show() end ------------------------------ -- Event Handlers -- ------------------------------ function BigWigsMessages:BigWigs_ShowAnchors() self.frames.anchor:Show() end function BigWigsMessages:BigWigs_HideAnchors() self.frames.anchor:Hide() end function BigWigsMessages:BigWigs_Message(text, color, noraidsay, sound, broadcastonly) if not text then return end if broadcastonly then return end local r, g, b if color ~= nil and type(color) == "table" and type(color.r) == "number" and type(color.g) == "number" and type(color.b) == "number" then r, g, b = color.r, color.g, color.b else if self.db.profile.usecolors and type(BigWigsColors) == "table" and type(BigWigsColors.MsgColor) == "function" then color = BigWigsColors:MsgColor(color) end _, r, g, b = paint:GetRGBPercent(color or "white") end if self.db.profile.display == L["RaidWarning frame"] then RaidWarningFrame:AddMessage(text, r, g, b, 1, UIERRORS_HOLD_TIME) elseif MikSBT and self.db.profile.display == L["Mik's Scrolling Battle Text"] then MikSBT.DisplayMessage(text, MikSBT.DISPLAYTYPE_NOTIFICATION, false, r * 255, g * 255, b * 255) elseif SCT_Display_Message and self.db.profile.display == L["Scrolling Combat Text"] then -- SCT 4.x local colorStruct = {} colorStruct.r, colorStruct.g, colorStruct.b = r, g, b SCT_Display_Message( text, colorStruct ) elseif SCT and SCT_MSG_FRAME and self.db.profile.display == L["Scrolling Combat Text"] then -- SCT 5.x SCT_MSG_FRAME:AddMessage( text, r, g, b, 1 ) elseif CombatText_AddMessage and self.db.profile.display == L["Floating Combat Text"] then -- Blizzards FCT CombatText_AddMessage(text, COMBAT_TEXT_SCROLL_FUNCTION, r, g, b, "sticky", nil) else -- Default BigWigs Frame fallback self.msgframe:AddMessage(text, r, g, b, 1, UIERRORS_HOLD_TIME) end end ------------------------------ -- Create the Anchor -- ------------------------------ function BigWigsMessages:SetupFrames() local f, t f, _, _ = GameFontNormal:GetFont() self.frames = {} self.frames.anchor = CreateFrame("Frame", "BigWigsMessageAnchor", UIParent) self.frames.anchor.owner = self self.frames.anchor:Hide() self.frames.anchor:SetWidth(175) self.frames.anchor:SetHeight(75) self.frames.anchor:SetBackdrop({ bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background", tile = true, tileSize = 16, edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", edgeSize = 16, insets = {left = 4, right = 4, top = 4, bottom = 4}, }) self.frames.anchor:SetBackdropBorderColor(.5, .5, .5) self.frames.anchor:SetBackdropColor(0,0,0) self.frames.anchor:ClearAllPoints() self.frames.anchor:SetPoint("CENTER", UIParent, "CENTER", 0, 100) self.frames.anchor:EnableMouse(true) self.frames.anchor:RegisterForDrag("LeftButton") self.frames.anchor:SetMovable(true) self.frames.anchor:SetScript("OnDragStart", function() this:StartMoving() end) self.frames.anchor:SetScript("OnDragStop", function() this:StopMovingOrSizing() this.owner:SavePosition() end) self.frames.cfade = self.frames.anchor:CreateTexture(nil, "BORDER") self.frames.cfade:SetWidth(169) self.frames.cfade:SetHeight(25) self.frames.cfade:SetTexture("Interface\\ChatFrame\\ChatFrameBackground") self.frames.cfade:SetPoint("TOP", self.frames.anchor, "TOP", 0, -4) self.frames.cfade:SetBlendMode("ADD") self.frames.cfade:SetGradientAlpha("VERTICAL", .1, .1, .1, 0, .25, .25, .25, 1) self.frames.anchor.Fade = self.frames.fade self.frames.cheader = self.frames.anchor:CreateFontString(nil,"OVERLAY") self.frames.cheader:SetFont(f, 14) self.frames.cheader:SetWidth(150) self.frames.cheader:SetText(L["Messages"]) self.frames.cheader:SetTextColor(1, .8, 0) self.frames.cheader:ClearAllPoints() self.frames.cheader:SetPoint("TOP", self.frames.anchor, "TOP", 0, -10) self.frames.leftbutton = CreateFrame("Button", nil, self.frames.anchor) self.frames.leftbutton.owner = self self.frames.leftbutton:SetWidth(40) self.frames.leftbutton:SetHeight(25) self.frames.leftbutton:SetPoint("RIGHT", self.frames.anchor, "CENTER", -10, -15) self.frames.leftbutton:SetScript( "OnClick", function() self:TriggerEvent("BigWigs_Test") end ) t = self.frames.leftbutton:CreateTexture() t:SetWidth(50) t:SetHeight(32) t:SetPoint("CENTER", self.frames.leftbutton, "CENTER") t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Up") t:SetTexCoord(0, 0.625, 0, 0.6875) self.frames.leftbutton:SetNormalTexture(t) t = self.frames.leftbutton:CreateTexture(nil, "BACKGROUND") t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Down") t:SetTexCoord(0, 0.625, 0, 0.6875) t:SetAllPoints(self.frames.leftbutton) self.frames.leftbutton:SetPushedTexture(t) t = self.frames.leftbutton:CreateTexture() t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Highlight") t:SetTexCoord(0, 0.625, 0, 0.6875) t:SetAllPoints(self.frames.leftbutton) t:SetBlendMode("ADD") self.frames.leftbutton:SetHighlightTexture(t) self.frames.leftbuttontext = self.frames.leftbutton:CreateFontString(nil,"OVERLAY") self.frames.leftbuttontext:SetFontObject(GameFontHighlight) self.frames.leftbuttontext:SetText(L["Test"]) self.frames.leftbuttontext:SetAllPoints(self.frames.leftbutton) self.frames.rightbutton = CreateFrame("Button", nil, self.frames.anchor) self.frames.rightbutton.owner = self self.frames.rightbutton:SetWidth(40) self.frames.rightbutton:SetHeight(25) self.frames.rightbutton:SetPoint("LEFT", self.frames.anchor, "CENTER", 10, -15) self.frames.rightbutton:SetScript( "OnClick", function() self:BigWigs_HideAnchors() end ) t = self.frames.rightbutton:CreateTexture() t:SetWidth(50) t:SetHeight(32) t:SetPoint("CENTER", self.frames.rightbutton, "CENTER") t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Up") t:SetTexCoord(0, 0.625, 0, 0.6875) self.frames.rightbutton:SetNormalTexture(t) t = self.frames.rightbutton:CreateTexture(nil, "BACKGROUND") t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Down") t:SetTexCoord(0, 0.625, 0, 0.6875) t:SetAllPoints(self.frames.rightbutton) self.frames.rightbutton:SetPushedTexture(t) t = self.frames.rightbutton:CreateTexture() t:SetTexture("Interface\\Buttons\\UI-Panel-Button-Highlight") t:SetTexCoord(0, 0.625, 0, 0.6875) t:SetAllPoints(self.frames.rightbutton) t:SetBlendMode("ADD") self.frames.rightbutton:SetHighlightTexture(t) self.frames.rightbuttontext = self.frames.rightbutton:CreateFontString(nil,"OVERLAY") self.frames.rightbuttontext:SetFontObject(GameFontHighlight) self.frames.rightbuttontext:SetText(L["Close"]) self.frames.rightbuttontext:SetAllPoints(self.frames.rightbutton) self:RestorePosition() end function BigWigsMessages:SavePosition() local f = self.frames.anchor local s = f:GetEffectiveScale() self.db.profile.posx = f:GetLeft() * s self.db.profile.posy = f:GetTop() * s end function BigWigsMessages:RestorePosition() local x = self.db.profile.posx local y = self.db.profile.posy if not x or not y then return end local f = self.frames.anchor local s = f:GetEffectiveScale() f:ClearAllPoints() f:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", x / s, y / s) end