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
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)
|
|
|