You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

78 lines
2.4 KiB

local AS = unpack(AddOnSkins)
local pairs, select = pairs, select
local wipe = wipe
local Ambiguate = Ambiguate
local C_ChatBubbles_GetAllChatBubbles = C_ChatBubbles.GetAllChatBubbles
local CreateFrame = CreateFrame
local GetPlayerInfoByGUID = GetPlayerInfoByGUID
function AS:Blizzard_ChatBubbles()
local messageToGUID, messageToSender = {}, {}
local EventFrame = CreateFrame('Frame')
EventFrame:RegisterEvent("CHAT_MSG_SAY")
EventFrame:RegisterEvent("CHAT_MSG_YELL")
EventFrame:RegisterEvent("CHAT_MSG_MONSTER_SAY")
EventFrame:RegisterEvent("CHAT_MSG_MONSTER_YELL")
EventFrame:RegisterEvent("PLAYER_ENTERING_WORLD")
EventFrame:SetScript("OnEvent", function(self, event, msg, sender, _, _, _, _, _, _, _, _, _, guid)
if event == 'PLAYER_ENTERING_WORLD' then
wipe(messageToGUID)
wipe(messageToSender)
else
messageToGUID[msg] = guid
messageToSender[msg] = Ambiguate(sender, "none")
end
end)
local function ChatBubbleName(frame)
local chatBubble = frame:GetChildren()
if chatBubble and not chatBubble:IsForbidden() then
local r, g, b = chatBubble.String:GetTextColor()
frame:SetBackdropBorderColor(r, g, b, .8)
local text = chatBubble.String:GetText()
if chatBubble.name then
chatBubble.name:SetText('')
local guid, class = messageToGUID[text]
if guid ~= nil and guid ~= "" then
class = select(2, GetPlayerInfoByGUID(guid))
end
if messageToSender[text] then
local color = AS:GetClassColor(class)
chatBubble.name:SetFormattedText("|c%s%s|r", color.colorStr, messageToSender[text])
end
end
end
end
local function SkinChatBubble(frame)
local chatBubble = frame:GetChildren()
if chatBubble and not chatBubble:IsForbidden() then
chatBubble:ClearBackdrop()
AS:SkinFrame(frame)
chatBubble.Tail:SetTexture('')
chatBubble.name = chatBubble:CreateFontString(nil, "BORDER")
chatBubble.name:SetPoint("TOPLEFT", 5, 5)
chatBubble.name:SetPoint("BOTTOMRIGHT", chatBubble, "TOPRIGHT", -5, -5)
chatBubble.name:SetJustifyH("LEFT")
chatBubble.name:SetFont(AS.Font, 14, 'OUTLINE')
frame:HookScript("OnShow", ChatBubbleName)
ChatBubbleName(frame)
frame.isSkinned = true
end
end
AS:ScheduleRepeatingTimer(function()
for _, chatBubble in pairs(C_ChatBubbles_GetAllChatBubbles()) do
if not chatBubble.isSkinned then
SkinChatBubble(chatBubble)
end
end
end, .1)
end
AS:RegisterSkin('Blizzard_ChatBubbles', AS.Blizzard_ChatBubbles)