Files
pfUI/modules/chat.lua
T
2017-05-07 12:59:58 +02:00

736 lines
31 KiB
Lua

pfUI:RegisterModule("chat", function ()
pfUI.firstrun:AddStep("chat_right", function() pfUI.chat.SetupRightChat(true) end, function() pfUI.chat.SetupRightChat(false) end, "|cff33ffccChat: \"Loot & Spam\"|r\n\n"..
"Do you want me to create and manage a specific Chatframe called \"Loot & Spam\"?\n"..
"This chat will display world channels, loot information and miscellaneous messages,\n" ..
"that would otherwise clutter your main chatframe.")
pfUI.firstrun:AddStep("chat_position", function() pfUI.chat.SetupPositions() end, nil, "|cff33ffccChat: \"Layout\"|r\n\n" ..
"Do you want me to adjust the layout of your chatframes?\n" ..
"This would make sure, that every window is placed on its dedicated position.")
pfUI.firstrun:AddStep("chat_channels", function() pfUI.chat.SetupChannels() end, nil, "|cff33ffccChat: \"Channels\"|r\n\n"..
"Do you want me to setup the chat channels of your chatframes?\n"..
"This would set important or personal messages to the left chat\n" ..
"and world channels and lootinformation to the right chat.")
local default_border = C.appearance.border.default
if C.appearance.border.chat ~= "-1" then
default_border = C.appearance.border.chat
end
pfUI.chat = CreateFrame("Frame",nil,UIParent)
pfUI.chat.left = CreateFrame("Frame", "pfChatLeft", UIParent)
pfUI.chat.left:SetFrameStrata("BACKGROUND")
pfUI.chat.left:SetWidth(C.chat.left.width)
pfUI.chat.left:SetHeight(C.chat.left.height)
pfUI.chat.left:SetPoint("BOTTOMLEFT", 5,5)
pfUI.chat.left:SetScript("OnShow", function() pfUI.chat:RefreshChat() end)
UpdateMovable(pfUI.chat.left)
CreateBackdrop(pfUI.chat.left, default_border, nil, .8)
if C.chat.global.custombg == "1" then
local r, g, b, a = strsplit(",", C.chat.global.background)
pfUI.chat.left.backdrop:SetBackdropColor(tonumber(r), tonumber(g), tonumber(b), tonumber(a))
local r, g, b, a = strsplit(",", C.chat.global.border)
pfUI.chat.left.backdrop:SetBackdropBorderColor(tonumber(r), tonumber(g), tonumber(b), tonumber(a))
end
pfUI.chat.left.panelTop = CreateFrame("Frame", "leftChatPanelTop", pfUI.chat.left)
pfUI.chat.left.panelTop:ClearAllPoints()
pfUI.chat.left.panelTop:SetHeight(C.global.font_size+default_border*2)
pfUI.chat.left.panelTop:SetPoint("TOPLEFT", pfUI.chat.left, "TOPLEFT", default_border, -default_border)
pfUI.chat.left.panelTop:SetPoint("TOPRIGHT", pfUI.chat.left, "TOPRIGHT", -default_border, -default_border)
if C.chat.global.tabdock == "1" then
CreateBackdrop(pfUI.chat.left.panelTop, default_border, nil, .8)
end
-- url copy dialog
function pfUI.chat:FormatLink(link)
return " |cffccccff|Hurl:" .. link .. "|h[" .. link .. "]|h|r "
end
pfUI.chat.urlcopy = CreateFrame("Frame", "pfURLCopy", UIParent)
pfUI.chat.urlcopy:Hide()
pfUI.chat.urlcopy:SetWidth(270)
pfUI.chat.urlcopy:SetHeight(65)
pfUI.chat.urlcopy:SetPoint("CENTER", 0, 0)
CreateBackdrop(pfUI.chat.urlcopy, nil, nil, 0.8)
pfUI.chat.urlcopy:SetMovable(true)
pfUI.chat.urlcopy:EnableMouse(true)
pfUI.chat.urlcopy:SetScript("OnMouseDown",function()
this:StartMoving()
end)
pfUI.chat.urlcopy:SetScript("OnMouseUp",function()
this:StopMovingOrSizing()
end)
pfUI.chat.urlcopy:SetScript("OnShow", function()
this.text:HighlightText()
end)
pfUI.chat.urlcopy.text = CreateFrame("EditBox", "pfURLCopyEditBox", pfUI.chat.urlcopy)
pfUI.chat.urlcopy.text:SetTextColor(.2,1,.8,1)
pfUI.chat.urlcopy.text:SetJustifyH("CENTER")
pfUI.chat.urlcopy.text:SetWidth(250)
pfUI.chat.urlcopy.text:SetHeight(20)
pfUI.chat.urlcopy.text:SetPoint("TOP", pfUI.chat.urlcopy, "TOP", 0, -10)
pfUI.chat.urlcopy.text:SetFontObject(GameFontNormal)
CreateBackdrop(pfUI.chat.urlcopy.text)
pfUI.chat.urlcopy.text:SetScript("OnEscapePressed", function(self)
pfUI.chat.urlcopy:Hide()
end)
pfUI.chat.urlcopy.text:SetScript("OnEditFocusLost", function(self)
pfUI.chat.urlcopy:Hide()
end)
pfUI.chat.urlcopy.close = CreateFrame("Button", "pfURLCopyClose", pfUI.chat.urlcopy, "UIPanelButtonTemplate")
pfUI.api.SkinButton(pfUI.chat.urlcopy.close)
pfUI.chat.urlcopy.close:SetWidth(70)
pfUI.chat.urlcopy.close:SetHeight(18)
pfUI.chat.urlcopy.close:SetPoint("BOTTOMRIGHT", pfUI.chat.urlcopy, "BOTTOMRIGHT", -10, 10)
pfUI.chat.urlcopy.close:SetText("Close")
pfUI.chat.urlcopy.close:SetScript("OnClick", function()
pfUI.chat.urlcopy:Hide()
end)
pfUI.chat.urlcopy.SetItemRef = SetItemRef
function _G.SetItemRef(link, text, button)
if (strsub(link, 1, 3) == "url") then
if string.len(link) > 4 and string.sub(link,1,4) == "url:" then
pfUI.chat.urlcopy.text:SetText(string.sub(link,5, string.len(link)))
pfUI.chat.urlcopy:Show()
end
return
end
pfUI.chat.urlcopy.SetItemRef(link, text, button)
end
-- whisper forwarding
pfUI.chat.left.panelTop.proxy = CreateFrame("Button", "leftChatWhisperProxy", pfUI.chat.left.panelTop)
pfUI.chat.left.panelTop.proxy:RegisterEvent("CHAT_MSG_WHISPER")
pfUI.chat.left.panelTop.proxy:SetPoint("TOPRIGHT", pfUI.chat.left, "TOPRIGHT", -20, -6)
pfUI.chat.left.panelTop.proxy:SetWidth(12)
pfUI.chat.left.panelTop.proxy:SetHeight(12)
pfUI.chat.left.panelTop.proxy:SetNormalTexture("Interface\\AddOns\\pfUI\\img\\proxy")
pfUI.chat.left.panelTop.proxy:SetAlpha(0.25)
for i,v in ipairs({pfUI.chat.left.panelTop.proxy:GetRegions()}) do
if v.SetVertexColor then v:SetVertexColor(1,1,1,1) end
end
pfUI.chat.left.panelTop.proxy.enabled = false
pfUI.chat.left.panelTop.proxy.forwardto = ""
function pfUI.chat.left.panelTop.proxy.toggle()
if pfUI.chat.left.panelTop.proxy.enabled == true then
-- redirect inactive
pfUI.chat.left.panelTop.proxy.enabled = false
pfUI.chat.left.panelTop.proxy:SetAlpha(0.25)
for i,v in ipairs({pfUI.chat.left.panelTop.proxy:GetRegions()}) do
if v.SetVertexColor then v:SetVertexColor(1,1,1,1) end
end
DEFAULT_CHAT_FRAME:AddMessage("Forwarding to |cff33ffcc" .. pfUI.chat.left.panelTop.proxy.forwardto .. "|r has been disabled")
elseif pfUI.chat.left.panelTop.proxy.forwardto ~= "" then
-- redirect active
pfUI.chat.left.panelTop.proxy.enabled = true
pfUI.chat.left.panelTop.proxy:SetAlpha(1)
for i,v in ipairs({pfUI.chat.left.panelTop.proxy:GetRegions()}) do
if v.SetVertexColor then v:SetVertexColor(1,.25,.25,1) end
end
DEFAULT_CHAT_FRAME:AddMessage("All messages will be forwarded to |cff33ffcc" .. pfUI.chat.left.panelTop.proxy.forwardto)
end
end
pfUI.chat.left.panelTop.proxy:RegisterForClicks("LeftButtonUp", "RightButtonUp")
pfUI.chat.left.panelTop.proxy:SetScript("OnClick", function()
if arg1 == "RightButton" then
if pfUI.chat.left.panelTop.proxyName:IsShown() then
pfUI.chat.left.panelTop.proxyName:Hide()
else
pfUI.chat.left.panelTop.proxyName:Show()
end
else
pfUI.chat.left.panelTop.proxy.toggle()
end
end)
pfUI.chat.left.panelTop.proxy:SetScript("OnEvent", function()
local forwardto = pfUI.chat.left.panelTop.proxy.forwardto
if pfUI.chat.left.panelTop.proxy.enabled == false then return end
if arg2 ~= UnitName("player") and arg2 ~= forwardto and forwardto ~= UnitName("player") then
SendChatMessage("[" .. arg2 .. "]: " .. arg1, "WHISPER", nil, forwardto)
end
if arg2 == forwardto then
local isForward, _, name, message = string.find(arg1, "(.*): (.*)")
if isForward then
SendChatMessage(message, "WHISPER", nil, name)
SendChatMessage("-> " .. name, "WHISPER", nil, forwardto)
end
end
end)
pfUI.chat.left.panelTop.proxyName = CreateFrame("Frame", "leftChatWhisperProxyName")
pfUI.chat.left.panelTop.proxyName:SetPoint("CENTER", 0, 0)
pfUI.chat.left.panelTop.proxyName:SetHeight(100)
pfUI.chat.left.panelTop.proxyName:SetWidth(200)
CreateBackdrop(pfUI.chat.left.panelTop.proxyName, default_border)
pfUI.chat.left.panelTop.proxyName:SetScript("OnShow", function()
pfUI.chat.left.panelTop.proxyName.input:SetText(pfUI.chat.left.panelTop.proxy.forwardto)
end)
pfUI.chat.left.panelTop.proxyName.caption = pfUI.chat.left.panelTop.proxyName:CreateFontString("Status", "LOW", "GameFontNormal")
pfUI.chat.left.panelTop.proxyName.caption:SetFont(pfUI.font_default, C.global.font_size + 2, "OUTLINE")
pfUI.chat.left.panelTop.proxyName.caption:SetPoint("TOP", 0, -20)
pfUI.chat.left.panelTop.proxyName.caption:SetFontObject(GameFontWhite)
pfUI.chat.left.panelTop.proxyName.caption:SetJustifyH("CENTER")
pfUI.chat.left.panelTop.proxyName.caption:SetText("Forward all whispers to:")
pfUI.chat.left.panelTop.proxyName.input = CreateFrame("EditBox", nil, pfUI.chat.left.panelTop.proxyName)
pfUI.chat.left.panelTop.proxyName.input:SetTextColor(.2,1.1,1)
pfUI.chat.left.panelTop.proxyName.input:SetJustifyH("CENTER")
CreateBackdrop(pfUI.chat.left.panelTop.proxyName.input, default_border)
pfUI.chat.left.panelTop.proxyName.input:SetPoint("TOPLEFT" , pfUI.chat.left.panelTop.proxyName, "TOPLEFT", 20, -40)
pfUI.chat.left.panelTop.proxyName.input:SetPoint("BOTTOMRIGHT" , pfUI.chat.left.panelTop.proxyName, "BOTTOMRIGHT", -20, 40)
pfUI.chat.left.panelTop.proxyName.input:SetFontObject(GameFontWhite)
pfUI.chat.left.panelTop.proxyName.input:SetAutoFocus(false)
pfUI.chat.left.panelTop.proxyName.input:SetText(pfUI.chat.left.panelTop.proxy.forwardto)
pfUI.chat.left.panelTop.proxyName.input:SetScript("OnEscapePressed", function(self)
pfUI.chat.left.panelTop.proxyName:Hide()
end)
pfUI.chat.left.panelTop.proxyName.okay = CreateFrame("Button", nil, pfUI.chat.left.panelTop.proxyName)
pfUI.chat.left.panelTop.proxyName.okay:SetWidth(80)
pfUI.chat.left.panelTop.proxyName.okay:SetHeight(20)
pfUI.chat.left.panelTop.proxyName.okay:SetPoint("BOTTOMRIGHT", -10, 10)
CreateBackdrop(pfUI.chat.left.panelTop.proxyName.okay, default_border)
pfUI.chat.left.panelTop.proxyName.okay.text = pfUI.chat.left.panelTop.proxyName.okay:CreateFontString("Status", "LOW", "GameFontNormal")
pfUI.chat.left.panelTop.proxyName.okay.text:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
pfUI.chat.left.panelTop.proxyName.okay.text:ClearAllPoints()
pfUI.chat.left.panelTop.proxyName.okay.text:SetAllPoints(pfUI.chat.left.panelTop.proxyName.okay)
pfUI.chat.left.panelTop.proxyName.okay.text:SetPoint("CENTER", 0, 0)
pfUI.chat.left.panelTop.proxyName.okay.text:SetFontObject(GameFontWhite)
pfUI.chat.left.panelTop.proxyName.okay.text:SetText("Save")
pfUI.chat.left.panelTop.proxyName.okay:SetScript("OnClick", function()
pfUI.chat.left.panelTop.proxy.forwardto = pfUI.chat.left.panelTop.proxyName.input:GetText()
if pfUI.chat.left.panelTop.proxy.enabled == true then
DEFAULT_CHAT_FRAME:AddMessage("All messages will now be forwarded to |cff33ffcc" .. pfUI.chat.left.panelTop.proxy.forwardto)
end
pfUI.chat.left.panelTop.proxyName:Hide()
end)
pfUI.chat.left.panelTop.proxyName.abort = CreateFrame("Button", nil, pfUI.chat.left.panelTop.proxyName)
pfUI.chat.left.panelTop.proxyName.abort:SetWidth(80)
pfUI.chat.left.panelTop.proxyName.abort:SetHeight(20)
pfUI.chat.left.panelTop.proxyName.abort:SetPoint("BOTTOMLEFT", 10, 10)
CreateBackdrop(pfUI.chat.left.panelTop.proxyName.abort, default_border)
pfUI.chat.left.panelTop.proxyName.abort.text = pfUI.chat.left.panelTop.proxyName.abort:CreateFontString("Status", "LOW", "GameFontNormal")
pfUI.chat.left.panelTop.proxyName.abort.text:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
pfUI.chat.left.panelTop.proxyName.abort.text:ClearAllPoints()
pfUI.chat.left.panelTop.proxyName.abort.text:SetAllPoints(pfUI.chat.left.panelTop.proxyName.abort)
pfUI.chat.left.panelTop.proxyName.abort.text:SetPoint("CENTER", 0, 0)
pfUI.chat.left.panelTop.proxyName.abort.text:SetFontObject(GameFontWhite)
pfUI.chat.left.panelTop.proxyName.abort.text:SetText("Abort")
pfUI.chat.left.panelTop.proxyName.abort:SetScript("OnClick", function()
pfUI.chat.left.panelTop.proxyName:Hide()
end)
pfUI.chat.left.panelTop.proxyName:Hide()
pfUI.chat.right = CreateFrame("Frame", "pfChatRight", UIParent)
pfUI.chat.right:SetFrameStrata("BACKGROUND")
pfUI.chat.right:SetWidth(C.chat.right.width)
pfUI.chat.right:SetHeight(C.chat.right.height)
pfUI.chat.right:SetPoint("BOTTOMRIGHT", -5,5)
pfUI.chat.right:SetScript("OnShow", function() pfUI.chat:RefreshChat() end)
UpdateMovable(pfUI.chat.right)
CreateBackdrop(pfUI.chat.right, default_border, nil, .8)
if C.chat.global.custombg == "1" then
local r, g, b, a = strsplit(",", C.chat.global.background)
pfUI.chat.right.backdrop:SetBackdropColor(tonumber(r), tonumber(g), tonumber(b), tonumber(a))
local r, g, b, a = strsplit(",", C.chat.global.border)
pfUI.chat.right.backdrop:SetBackdropBorderColor(tonumber(r), tonumber(g), tonumber(b), tonumber(a))
end
pfUI.chat.right.panelTop = CreateFrame("Frame", "rightChatPanelTop", pfUI.chat.right)
pfUI.chat.right.panelTop:ClearAllPoints()
pfUI.chat.right.panelTop:SetHeight(C.global.font_size+default_border*2)
pfUI.chat.right.panelTop:SetPoint("TOPLEFT", pfUI.chat.right, "TOPLEFT", default_border, -default_border)
pfUI.chat.right.panelTop:SetPoint("TOPRIGHT", pfUI.chat.right, "TOPRIGHT", -default_border, -default_border)
if C.chat.global.tabdock == "1" then
CreateBackdrop(pfUI.chat.right.panelTop, default_border, nil, .8)
end
pfUI.chat:RegisterEvent("PLAYER_ENTERING_WORLD")
pfUI.chat:RegisterEvent("UI_SCALE_CHANGED")
pfUI.chat:RegisterEvent("FRIENDLIST_UPDATE")
pfUI.chat:RegisterEvent("GUILD_ROSTER_UPDATE")
pfUI.chat:RegisterEvent("RAID_ROSTER_UPDATE")
pfUI.chat:RegisterEvent("PARTY_MEMBERS_CHANGED")
pfUI.chat:RegisterEvent("PLAYER_TARGET_CHANGED")
pfUI.chat:RegisterEvent("WHO_LIST_UPDATE")
pfUI.chat:RegisterEvent("CHAT_MSG_SYSTEM")
function pfUI.chat:RefreshChat()
local panelheight = C.global.font_size+default_border*5
if C.chat.global.sticky == "1" then
ChatTypeInfo.WHISPER.sticky = 1
ChatTypeInfo.OFFICER.sticky = 1
ChatTypeInfo.RAID_WARNING.sticky = 1
ChatTypeInfo.CHANNEL.sticky = 1
end
for i,v in ipairs({ChatFrameMenuButton:GetRegions()}) do
v:SetAllPoints(ChatFrameMenuButton)
local _, class = UnitClass("player")
v:SetTexture(.5,.5,.5, 1)
v:SetVertexColor(RAID_CLASS_COLORS[class].r + .3 * .5, RAID_CLASS_COLORS[class].g +.3 * .5, RAID_CLASS_COLORS[class].b +.3 * .5,1)
end
for i=1, NUM_CHAT_WINDOWS do
local frame = _G["ChatFrame"..i]
local tab = _G["ChatFrame"..i.."Tab"]
if C.chat.global.fadeout == "1" then
frame:SetFading(true)
frame:SetTimeVisible(tonumber(C.chat.global.fadetime))
else
frame:SetFading(false)
end
if i == 3 and C.chat.right.enable == "1" then
tab:SetParent(pfUI.chat.right.panelTop)
frame:SetParent(pfUI.chat.right)
frame:ClearAllPoints()
frame:SetPoint("TOPLEFT", pfUI.chat.right ,"TOPLEFT", default_border, -panelheight)
frame:SetPoint("BOTTOMRIGHT", pfUI.chat.right ,"BOTTOMRIGHT", -default_border, panelheight)
frame:Show()
else
tab:SetParent(pfUI.chat.left.panelTop)
frame:SetParent(pfUI.chat.left)
frame:ClearAllPoints()
frame:SetPoint("TOPLEFT", pfUI.chat.left ,"TOPLEFT", default_border, -panelheight)
frame:SetPoint("BOTTOMRIGHT", pfUI.chat.left ,"BOTTOMRIGHT", -default_border, panelheight)
end
-- hide textures
for j,v in ipairs({tab:GetRegions()}) do
if j==5 then v:SetTexture(0,0,0,0) end
v:SetHeight(C.global.font_size+default_border*2)
end
_G["ChatFrame" .. i .. "ResizeBottom"]:Hide()
_G["ChatFrame" .. i .. "TabText"]:SetJustifyV("CENTER")
_G["ChatFrame" .. i .. "TabText"]:SetHeight(C.global.font_size+default_border*2)
_G["ChatFrame" .. i .. "TabText"]:SetPoint("BOTTOM", 0, default_border)
_G["ChatFrame" .. i .. "TabLeft"]:SetAlpha(0)
_G["ChatFrame" .. i .. "TabMiddle"]:SetAlpha(0)
_G["ChatFrame" .. i .. "TabRight"]:SetAlpha(0)
_G["ChatFrame" .. i .. "TabFlash"]:SetAlpha(0)
local _, class = UnitClass("player")
_G["ChatFrame" .. i .. "TabText"]:SetTextColor(RAID_CLASS_COLORS[class].r + .3 * .5, RAID_CLASS_COLORS[class].g + .3 * .5, RAID_CLASS_COLORS[class].b + .3 * .5, 1)
_G["ChatFrame" .. i .. "TabText"]:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
if _G["ChatFrame" .. i].isDocked or _G["ChatFrame" .. i]:IsVisible() then
_G["ChatFrame" .. i .. "Tab"]:Show()
end
frame:EnableMouseWheel(true)
frame:SetScript("OnMouseWheel", function()
if (arg1 > 0) then
if IsShiftKeyDown() then
frame:ScrollToTop()
else
frame:ScrollUp()
end
elseif (arg1 < 0) then
if IsShiftKeyDown() then
frame:ScrollToBottom()
else
frame:ScrollDown()
end
end
end)
end
end
function pfUI.chat.SetupRightChat(state)
if state then
C.chat.right.enable = "1"
pfUI.chat.right:Show()
else
C.chat.right.enable = "0"
pfUI.chat.right:Hide()
end
end
function pfUI.chat.SetupPositions()
-- close all chat windows
for i=1, NUM_CHAT_WINDOWS do
FCF_Close(_G["ChatFrame"..i])
FCF_DockUpdate()
end
-- Main Window
ChatFrame1:ClearAllPoints()
ChatFrame1:SetPoint("TOPLEFT", pfUI.chat.left ,"TOPLEFT", 5, -25)
ChatFrame1:SetPoint("BOTTOMRIGHT", pfUI.chat.left ,"BOTTOMRIGHT", -5, 25)
FCF_SetLocked(ChatFrame1, 1)
FCF_SetWindowName(ChatFrame1, GENERAL)
FCF_SetWindowColor(ChatFrame1, 0, 0, 0)
FCF_SetWindowAlpha(ChatFrame1, 0)
FCF_SetChatWindowFontSize(ChatFrame1, 12)
ChatFrame1:SetUserPlaced(1)
-- Combat Log
FCF_SetLocked(ChatFrame2, 1)
FCF_SetWindowName(ChatFrame2, COMBAT_LOG)
FCF_SetWindowColor(ChatFrame2, 0, 0, 0)
FCF_SetWindowAlpha(ChatFrame2, 0)
FCF_SetChatWindowFontSize(ChatFrame2, 12)
ChatFrame2:SetUserPlaced(1)
-- Loot & Spam
if C.chat.right.enable == "1" then
-- set position of Loot & Spam
FCF_SetLocked(ChatFrame3, 1)
FCF_SetWindowName(ChatFrame3, "Loot & Spam")
FCF_SetWindowColor(ChatFrame3, 0, 0, 0)
FCF_SetWindowAlpha(ChatFrame3, 0)
FCF_SetChatWindowFontSize(ChatFrame3, 12)
FCF_UnDockFrame(ChatFrame3)
FCF_SetTabPosition(ChatFrame3, 0)
ChatFrame3:ClearAllPoints()
ChatFrame3:SetPoint("TOPLEFT", pfUI.chat.right ,"TOPLEFT", 5, -25)
ChatFrame3:SetPoint("BOTTOMRIGHT", pfUI.chat.right ,"BOTTOMRIGHT", -5, 25)
ChatFrame3:SetUserPlaced(1)
end
FCF_DockUpdate()
pfUI.chat:RefreshChat()
end
function pfUI.chat.SetupChannels()
ChatFrame_RemoveAllMessageGroups(ChatFrame1)
ChatFrame_RemoveAllMessageGroups(ChatFrame2)
ChatFrame_RemoveAllMessageGroups(ChatFrame3)
ChatFrame_RemoveAllChannels(ChatFrame1)
ChatFrame_RemoveAllChannels(ChatFrame2)
ChatFrame_RemoveAllChannels(ChatFrame3)
local normalg = {"SAY", "EMOTE", "YELL", "GUILD", "OFFICER", "GUILD_ACHIEVEMENT", "WHISPER",
"MONSTER_SAY", "MONSTER_EMOTE", "MONSTER_YELL", "MONSTER_WHISPER", "MONSTER_BOSS_EMOTE", "MONSTER_BOSS_WHISPER",
"PARTY", "PARTY_LEADER", "RAID", "RAID_LEADER", "RAID_WARNING", "BATTLEGROUND", "BATTLEGROUND_LEADER",
"BG_HORDE", "BG_ALLIANCE", "BG_NEUTRAL", "SYSTEM", "ERRORS", "AFK", "DND", "IGNORED", "BN_WHISPER", "BN_CONVERSATION"}
for _,group in pairs(normalg) do
ChatFrame_AddMessageGroup(ChatFrame1, group)
end
ChatFrame_ActivateCombatMessages(ChatFrame2)
if C.chat.right.enable == "1" then
local spamg = { "COMBAT_XP_GAIN", "COMBAT_HONOR_GAIN", "COMBAT_FACTION_CHANGE", "SKILL", "LOOT", "MONEY" }
for _,group in pairs(spamg) do
ChatFrame_AddMessageGroup(ChatFrame3, group)
end
for _, chan in pairs({EnumerateServerChannels()}) do
ChatFrame_AddChannel(ChatFrame3, chan)
ChatFrame_RemoveChannel(ChatFrame1, chan)
end
JoinChannelByName("World")
ChatFrame_AddChannel(ChatFrame3, "World")
end
pfUI.chat:RefreshChat()
end
pfUI.chat:SetScript("OnEvent", function()
if event == "PLAYER_ENTERING_WORLD" or event == "UI_SCALE_CHANGED" then
pfUI.chat:RefreshChat()
if C.chat.right.enable == "0" and C.chat.right.alwaysshow == "0" then
pfUI.chat.right:Hide()
end
elseif event == "FRIENDLIST_UPDATE" or event == "PLAYER_ENTERING_WORLD" then
local Name, Class, Level
for i = 1, GetNumFriends() do
Name, Level, Class = GetFriendInfo(i)
if L["class"] and L["class"][Class] then
Class = L["class"][Class]
end
if Name and Level and Class and pfUI_playerDB then
pfUI_playerDB[Name] = { class = Class, level = Level }
end
end
elseif event == "GUILD_ROSTER_UPDATE" or event == "PLAYER_ENTERING_WORLD" then
local Name, Class, Level
for i = 1, GetNumGuildMembers() do
Name, _, _, Level, Class = GetGuildRosterInfo(i)
if L["class"] and L["class"][Class] then
Class = L["class"][Class]
end
if Name and Level and Class and pfUI_playerDB then
pfUI_playerDB[Name] = { class = Class, level = Level }
end
end
elseif event == "RAID_ROSTER_UPDATE" or event == "PLAYER_ENTERING_WORLD" then
local Name, Class, SubGroup, Level
for i = 1, GetNumRaidMembers() do
Name, _, SubGroup, Level, Class = GetRaidRosterInfo(i)
if L["class"] and L["class"].Class then
Class = L["class"][Class]
end
if Name and Level and Class and pfUI_playerDB then
pfUI_playerDB[Name] = { class = Class, level = Level }
end
end
elseif event == "PARTY_MEMBERS_CHANGED" or event == "PLAYER_ENTERING_WORLD" then
local Name, Class, Level, Unit
for i = 1, GetNumPartyMembers() do
Unit = "party" .. i
_, Class = UnitClass(Unit)
Name = UnitName(Unit)
Level = UnitLevel(Unit)
if Name and Level and Class and pfUI_playerDB then
pfUI_playerDB[Name] = { class = Class, level = Level }
end
end
elseif event == "PLAYER_TARGET_CHANGED" then
local Name, Class, Level
if not UnitIsPlayer("target") or not UnitIsFriend("player", "target") then
return
end
_, Class = UnitClass("target")
Level = UnitLevel("target")
Name = UnitName("target")
if Name and Level and Class and pfUI_playerDB then
pfUI_playerDB[Name] = { class = Class, level = Level }
end
elseif event == "WHO_LIST_UPDATE" or event == "CHAT_MSG_SYSTEM" then
local Name, Class, Level
for i = 1, GetNumWhoResults() do
Name, _, Level, _, Class, _ = GetWhoInfo(i)
if L["class"] and L["class"][Class] then
Class = L["class"][Class]
end
if Name and Level and Class and pfUI_playerDB then
pfUI_playerDB[Name] = { class = Class, level = Level }
end
end
end
end)
for i=1, NUM_CHAT_WINDOWS do
_G["ChatFrame" .. i .. "UpButton"]:Hide()
_G["ChatFrame" .. i .. "UpButton"].Show = function() return end
_G["ChatFrame" .. i .. "DownButton"]:Hide()
_G["ChatFrame" .. i .. "DownButton"].Show = function() return end
_G["ChatFrame" .. i .. "BottomButton"]:Hide()
_G["ChatFrame" .. i .. "BottomButton"].Show = function() return end
end
-- orig. function but removed flashing
function _G.FCF_OnUpdate(elapsed)
-- Need to draw the dock regions for a frame to define their rects
if ( not ChatFrame1.init ) then
for i=1, NUM_CHAT_WINDOWS do
_G["ChatFrame"..i.."TabDockRegion"]:Show()
FCF_UpdateButtonSide(_G["ChatFrame"..i])
end
ChatFrame1.init = 1
return
elseif ( ChatFrame1.init == 1 ) then
for i=1, NUM_CHAT_WINDOWS do
_G["ChatFrame"..i.."TabDockRegion"]:Hide()
end
ChatFrame1.init = 2
end
-- Detect if mouse is over any chat frames and if so show their tabs, if not hide them
local chatFrame, chatTab
if ( MOVING_CHATFRAME ) then
-- Set buttons to the left or right side of the frame
-- If the the side of the buttons changes and the frame is the default frame, then set every docked frames buttons to the same side
local updateAllButtons = nil
if (FCF_UpdateButtonSide(MOVING_CHATFRAME) and MOVING_CHATFRAME == DEFAULT_CHAT_FRAME ) then
updateAllButtons = 1
end
local dockRegion
for index, value in DOCKED_CHAT_FRAMES do
if ( updateAllButtons ) then
FCF_UpdateButtonSide(value)
end
dockRegion = _G[value:GetName().."TabDockRegion"]
if ( MouseIsOver(dockRegion) and MOVING_CHATFRAME ~= DEFAULT_CHAT_FRAME ) then
dockRegion:Show()
else
dockRegion:Hide()
end
end
end
-- If the default chat frame is resizing, then resize the dock
if ( DEFAULT_CHAT_FRAME.resizing ) then
FCF_DockUpdate()
end
end
ChatFrameMenuButton:SetNormalTexture("foo")
ChatFrameMenuButton:ClearAllPoints()
ChatFrameMenuButton:SetParent(pfUI.chat.left.panelTop)
ChatFrameMenuButton:SetPoint("TOPRIGHT",-6,-6)
ChatFrameMenuButton:SetHeight(6)
ChatFrameMenuButton:SetWidth(6)
pfUI.chat.editbox = CreateFrame("Frame", "pfChatInputBox", UIParent)
if C.chat.text.input_height == "0" then
pfUI.chat.editbox:SetHeight(22)
else
pfUI.chat.editbox:SetHeight(C.chat.text.input_height)
end
-- to make sure SHOW_MULTI_ACTIONBAR_1 is set to the real value, we need to wait.
local pfChatArrangeFrame = CreateFrame("Frame", "pfChatArrange", UIParent)
pfChatArrangeFrame:RegisterEvent("CVAR_UPDATE")
pfChatArrangeFrame:RegisterEvent("PLAYER_ENTERING_WORLD")
pfChatArrangeFrame:SetScript("OnEvent", function()
pfUI.chat.editbox:ClearAllPoints()
local anchor = pfUI.chat.left
if pfUI.bars and SHOW_MULTI_ACTIONBAR_1 then
anchor = pfUI.bars.bottomleft
elseif pfUI.bars and pfUI.bars.actionmain:IsShown() then
anchor = pfUI.bars.actionmain
end
pfUI.chat.editbox:SetPoint("BOTTOMLEFT", anchor, "TOPLEFT", 0, default_border*3)
pfUI.chat.editbox:SetPoint("BOTTOMRIGHT", anchor, "TOPRIGHT", 0, default_border*3)
UpdateMovable(pfUI.chat.editbox)
end)
if C.chat.text.input_width == "0" then
pfUI.chat.editbox:SetWidth(default_border*3 + C.bars.icon_size * 12 + default_border * 12) -- actionbar size
else
pfUI.chat.editbox:SetWidth(C.chat.text.input_width)
end
ChatFrameEditBox:SetParent(pfUI.chat.editbox)
ChatFrameEditBox:SetAllPoints(pfUI.chat.editbox)
CreateBackdrop(ChatFrameEditBox, default_border)
for i,v in ipairs({ChatFrameEditBox:GetRegions()}) do
if i==6 or i==7 or i==8 then v:Hide() end
if v.SetFont then
v:SetFont(pfUI.font_default, C.global.font_size + 1, "OUTLINE")
end
end
ChatFrameEditBox:SetAltArrowKeyMode(false)
local default = " " .. "%s" .. "|r:" .. "\32"
_G.CHAT_CHANNEL_GET = "%s" .. "|r:" .. "\32"
_G.CHAT_GUILD_GET = '[G]' .. default
_G.CHAT_OFFICER_GET = '[O]'.. default
_G.CHAT_PARTY_GET = '[P]' .. default
_G.CHAT_RAID_GET = '[R]' .. default
_G.CHAT_RAID_LEADER_GET = '[RL]' .. default
_G.CHAT_RAID_WARNING_GET = '[RW]' .. default
_G.CHAT_BATTLEGROUND_GET = '[BG]' .. default
_G.CHAT_BATTLEGROUND_LEADER_GET = '[BL]' .. default
_G.CHAT_SAY_GET = '[S]' .. default
local cr, cg, cb, ca = strsplit(",", C.chat.global.whisper)
cr, cg, cb = tonumber(cr), tonumber(cg), tonumber(cb)
local wcol = string.format("%02x%02x%02x",cr * 255,cg * 255, cb * 255)
if C.chat.global.whispermod == "1" then
_G.CHAT_WHISPER_GET = '|cff' .. wcol .. '[W]' .. default
_G.CHAT_WHISPER_INFORM_GET = '[W]' .. default
end
CHAT_YELL_GET = '[Y]' .. default
for i=1,NUM_CHAT_WINDOWS do
if not _G["ChatFrame"..i].HookAddMessage then
_G["ChatFrame"..i].HookAddMessage = _G["ChatFrame"..i].AddMessage
end
_G["ChatFrame"..i].AddMessage = function (frame, text, ...)
if text then
if C.chat.text.detecturl == "1" then
text = string.gsub (text, " www%.([_A-Za-z0-9-]+)%.(%S+)%s?", pfUI.chat:FormatLink("www.%1.%2"))
text = string.gsub (text, " (%a+)://(%S+)%s?", pfUI.chat:FormatLink("%1://%2"))
text = string.gsub (text, " ([_A-Za-z0-9-%.]+)@([_A-Za-z0-9-]+)(%.+)([_A-Za-z0-9-%.]+)%s?", pfUI.chat:FormatLink("%1@%2%3%4"))
text = string.gsub (text, " (%d%d?%d?)%.(%d%d?%d?)%.(%d%d?%d?)%.(%d%d?%d?):(%d%d?%d?%d?%d?)%s?", pfUI.chat:FormatLink("%1.%2.%3.%4:%5"))
text = string.gsub (text, " (%d%d?%d?)%.(%d%d?%d?)%.(%d%d?%d?)%.(%d%d?%d?)%s?", pfUI.chat:FormatLink("%1.%2.%3.%4"))
text = string.gsub (text, " ([_A-Za-z0-9-]+)%.([_A-Za-z0-9-]+)%.(%S+)%s?", pfUI.chat:FormatLink("%1.%2.%3"))
text = string.gsub (text, " ([_A-Za-z0-9-]+)%.([_A-Za-z0-9-]+)%.(%S+)%:([_0-9-]+)%s?", pfUI.chat:FormatLink("%1.%2.%3:%4"))
end
if C.chat.text.classcolor == "1" then
local Name = string.gsub(text, ".*|Hplayer:(.-)|h.*", "%1")
if pfUI_playerDB[Name] and pfUI_playerDB[Name].class ~= nil then
local Class = pfUI_playerDB[Name].class
if RAID_CLASS_COLORS[Class] ~= nil then
local Color = string.format("%02x%02x%02x",
RAID_CLASS_COLORS[Class].r * 255,
RAID_CLASS_COLORS[Class].g * 255,
RAID_CLASS_COLORS[Class].b * 255)
Name = "|cff" .. Color .. Name .. "|r"
end
end
text = string.gsub(text, "|Hplayer:(.-)|h%[.-%]|h(.-:-)", "[|Hplayer:%1|h" .. Name .. "|h]" .. "%2")
end
local pattern = "%]%s+(.*|Hplayer)"
local channel = string.gsub(text, ".*%[(.-)" .. pattern ..".+", "%1")
if string.find(channel, "%d+%. ") then
channel = string.gsub(channel, "(%d+)%..*", "channel%1")
channel = string.gsub(channel, "channel", "")
pattern = "%[%d+%..-" .. pattern
text = string.gsub(text, pattern, "["..channel.."] ".."%1")
end
-- show timestamp in chat
if C.chat.text.time == "1" then
local left = string.sub(C.chat.text.timebracket, 1, 1)
local right = string.sub(C.chat.text.timebracket, 2, 2)
local r,g,b,a = strsplit(",", C.chat.text.timecolor)
local chex = string.format("%02x%02x%02x%02x", a*255, r*255, g*255, b*255)
text = "|c" .. chex .. left .. date(C.chat.text.timeformat) .. right .. "|r " .. text
end
if C.chat.global.whispermod == "1" then
-- patch incoming whisper string to match the colors
if string.find(text, '|cff'..wcol, 1) == 1 then
text = string.gsub(text, "|r", "|cff" .. wcol)
end
end
_G["ChatFrame"..i].HookAddMessage(frame, text, unpack(arg))
end
end
end
end)