local A, L = ... -- 表情选择器框架 local EmoteTableFrame = CreateFrame("Frame", "EmoteTableFrame", UIParent, BackdropTemplateMixin and "BackdropTemplate" or nil) EmoteTableFrame:SetMovable(true) EmoteTableFrame:RegisterForDrag("LeftButton") EmoteTableFrame:SetScript("OnDragStart", EmoteTableFrame.StartMoving) EmoteTableFrame:SetScript("OnDragStop", EmoteTableFrame.StopMovingOrSizing) EmoteTableFrame:EnableMouse(true) EmoteTableFrame:SetWidth((L.C.emote.listsize + 6) * 12 + 10) EmoteTableFrame:SetHeight((L.C.emote.listsize + 6) * 5 + 10) EmoteTableFrame:SetPoint("BOTTOM", ChatFrame1EditBox, L.C.emote.offsetx, L.C.emote.offsety) EmoteTableFrame:SetBackdrop({ bgFile = "Interface\\Buttons\\WHITE8x8", edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", tile = true, tileSize = 16, edgeSize = 16, insets = {left = 3, right = 3, top = 3, bottom = 3} }) EmoteTableFrame:SetBackdropColor(0.05, 0.05, 0.05, 0.8) EmoteTableFrame:SetBackdropBorderColor(0.3, 0.3, 0.3) -- 表情选择框出现位置 默认30,30 EmoteTableFrame:Hide() EmoteTableFrame:SetFrameStrata("DIALOG") -- 表情解析规则 local fmtstring = format("\124T%%s:%d\124t", max(floor(select(2, SELECTED_CHAT_FRAME:GetFont())), L.C.emote.iconsize)) -- 自定义表情开始的序号 local customEmoteStartIndex = 9 local emotes = { --原版暴雪提供的8个图标 {"{rt1}", [=[Interface\TargetingFrame\UI-RaidTargetingIcon_1]=]}, {"{rt2}", [=[Interface\TargetingFrame\UI-RaidTargetingIcon_2]=]}, {"{rt3}", [=[Interface\TargetingFrame\UI-RaidTargetingIcon_3]=]}, {"{rt4}", [=[Interface\TargetingFrame\UI-RaidTargetingIcon_4]=]}, {"{rt5}", [=[Interface\TargetingFrame\UI-RaidTargetingIcon_5]=]}, {"{rt6}", [=[Interface\TargetingFrame\UI-RaidTargetingIcon_6]=]}, {"{rt7}", [=[Interface\TargetingFrame\UI-RaidTargetingIcon_7]=]}, {"{rt8}", [=[Interface\TargetingFrame\UI-RaidTargetingIcon_8]=]}, --自定义表情 {"{天使}", [=[Interface\Addons\rChat\emotions\Angel]=]}, {"{生气}", [=[Interface\Addons\rChat\emotions\Angry]=]}, {"{大笑}", [=[Interface\Addons\rChat\emotions\Biglaugh]=]}, {"{鼓掌}", [=[Interface\Addons\rChat\emotions\Clap]=]}, {"{酷}", [=[Interface\Addons\rChat\emotions\Cool]=]}, {"{哭}", [=[Interface\Addons\rChat\emotions\Cry]=]}, {"{可爱}", [=[Interface\Addons\rChat\emotions\Cutie]=]}, {"{鄙视}", [=[Interface\Addons\rChat\emotions\Despise]=]}, {"{美梦}", [=[Interface\Addons\rChat\emotions\Dreamsmile]=]}, {"{尴尬}", [=[Interface\Addons\rChat\emotions\Embarrass]=]}, {"{邪恶}", [=[Interface\Addons\rChat\emotions\Evil]=]}, {"{兴奋}", [=[Interface\Addons\rChat\emotions\Excited]=]}, {"{晕}", [=[Interface\Addons\rChat\emotions\Faint]=]}, {"{打架}", [=[Interface\Addons\rChat\emotions\Fight]=]}, {"{流感}", [=[Interface\Addons\rChat\emotions\Flu]=]}, {"{呆}", [=[Interface\Addons\rChat\emotions\Freeze]=]}, {"{皱眉}", [=[Interface\Addons\rChat\emotions\Frown]=]}, {"{致敬}", [=[Interface\Addons\rChat\emotions\Greet]=]}, {"{鬼脸}", [=[Interface\Addons\rChat\emotions\Grimace]=]}, {"{龇牙}", [=[Interface\Addons\rChat\emotions\Growl]=]}, {"{开心}", [=[Interface\Addons\rChat\emotions\Happy]=]}, {"{心}", [=[Interface\Addons\rChat\emotions\Heart]=]}, {"{恐惧}", [=[Interface\Addons\rChat\emotions\Horror]=]}, {"{生病}", [=[Interface\Addons\rChat\emotions\Ill]=]}, {"{无辜}", [=[Interface\Addons\rChat\emotions\Innocent]=]}, {"{功夫}", [=[Interface\Addons\rChat\emotions\Kongfu]=]}, {"{花痴}", [=[Interface\Addons\rChat\emotions\Love]=]}, {"{邮件}", [=[Interface\Addons\rChat\emotions\Mail]=]}, {"{化妆}", [=[Interface\Addons\rChat\emotions\Makeup]=]}, -- {"{马里奥}", [=[Interface\Addons\rChat\emotions\Mario]=]}, {"{沉思}", [=[Interface\Addons\rChat\emotions\Meditate]=]}, {"{可怜}", [=[Interface\Addons\rChat\emotions\Miserable]=]}, {"{好}", [=[Interface\Addons\rChat\emotions\Okay]=]}, {"{漂亮}", [=[Interface\Addons\rChat\emotions\Pretty]=]}, {"{吐}", [=[Interface\Addons\rChat\emotions\Puke]=]}, {"{握手}", [=[Interface\Addons\rChat\emotions\Shake]=]}, {"{喊}", [=[Interface\Addons\rChat\emotions\Shout]=]}, {"{闭嘴}", [=[Interface\Addons\rChat\emotions\Shuuuu]=]}, {"{害羞}", [=[Interface\Addons\rChat\emotions\Shy]=]}, {"{睡觉}", [=[Interface\Addons\rChat\emotions\Sleep]=]}, {"{微笑}", [=[Interface\Addons\rChat\emotions\Smile]=]}, {"{吃惊}", [=[Interface\Addons\rChat\emotions\Suprise]=]}, {"{失败}", [=[Interface\Addons\rChat\emotions\Surrender]=]}, {"{流汗}", [=[Interface\Addons\rChat\emotions\Sweat]=]}, {"{流泪}", [=[Interface\Addons\rChat\emotions\Tear]=]}, {"{悲剧}", [=[Interface\Addons\rChat\emotions\Tears]=]}, {"{想}", [=[Interface\Addons\rChat\emotions\Think]=]}, {"{偷笑}", [=[Interface\Addons\rChat\emotions\Titter]=]}, {"{猥琐}", [=[Interface\Addons\rChat\emotions\Ugly]=]}, {"{胜利}", [=[Interface\Addons\rChat\emotions\Victory]=]}, {"{雷锋}", [=[Interface\Addons\rChat\emotions\Volunteer]=]}, {"{委屈}", [=[Interface\Addons\rChat\emotions\Wronged]=]} } local function ChatEmoteFilter(self, event, msg, ...) for i = customEmoteStartIndex, #emotes do if msg:find(emotes[i][1]) then msg = msg:gsub(emotes[i][1], format(fmtstring, emotes[i][2]), 1) end end return false, msg, ... end local function EmoteIconMouseUp(frame, button) if (button == "LeftButton") then local chatFrame = GetCVar("chatStyle") == "im" and SELECTED_CHAT_FRAME or DEFAULT_CHAT_FRAME local eb = chatFrame and chatFrame.editBox if (eb) then eb:Insert(frame.text) eb:Show(); eb:SetFocus() end end rChat:ToggleEmoteTable() end function rChat:ToggleEmoteTable() if (EmoteTableFrame:IsShown()) then EmoteTableFrame:Hide() else EmoteTableFrame:Show() end end local icon, row, col row = 1 col = 1 for i = 1, #emotes do text = emotes[i][1] texture = emotes[i][2] icon = CreateFrame("Frame", format("IconButton%d", i), EmoteTableFrame) icon:SetWidth(L.C.emote.listsize + 6) icon:SetHeight(L.C.emote.listsize + 6) icon.text = text icon.texture = icon:CreateTexture(nil, "ARTWORK") icon.texture:SetTexture(texture) icon.texture:SetAllPoints(icon) icon:Show() icon:SetPoint( "TOPLEFT", 5 + (col - 1) * (L.C.emote.listsize + 6), -5 - (row - 1) * (L.C.emote.listsize + 6) ) icon:SetScript("OnMouseUp", EmoteIconMouseUp) icon:EnableMouse(true) col = col + 1 if (col > 12) then row = row + 1 col = 1 end end ChatFrame_AddMessageEventFilter("CHAT_MSG_CHANNEL", ChatEmoteFilter)-- 公共频道 ChatFrame_AddMessageEventFilter("CHAT_MSG_SAY", ChatEmoteFilter)-- 说 ChatFrame_AddMessageEventFilter("CHAT_MSG_YELL", ChatEmoteFilter)-- 大喊 ChatFrame_AddMessageEventFilter("CHAT_MSG_RAID", ChatEmoteFilter)-- 团队 ChatFrame_AddMessageEventFilter("CHAT_MSG_RAID_LEADER", ChatEmoteFilter)-- 团队领袖 ChatFrame_AddMessageEventFilter("CHAT_MSG_PARTY", ChatEmoteFilter)-- 队伍 ChatFrame_AddMessageEventFilter("CHAT_MSG_PARTY_LEADER", ChatEmoteFilter)-- 队伍领袖 ChatFrame_AddMessageEventFilter("CHAT_MSG_GUILD", ChatEmoteFilter)-- 公会 ChatFrame_AddMessageEventFilter("CHAT_MSG_AFK", ChatEmoteFilter)-- AFK玩家自动回复 ChatFrame_AddMessageEventFilter("CHAT_MSG_DND", ChatEmoteFilter)-- 切勿打扰自动回复 -- 副本和副本领袖 ChatFrame_AddMessageEventFilter("CHAT_MSG_INSTANCE_CHAT", ChatEmoteFilter) ChatFrame_AddMessageEventFilter("CHAT_MSG_INSTANCE_CHAT_LEADER", ChatEmoteFilter) -- 解析战网私聊 ChatFrame_AddMessageEventFilter("CHAT_MSG_WHISPER", ChatEmoteFilter) ChatFrame_AddMessageEventFilter("CHAT_MSG_WHISPER_INFORM", ChatEmoteFilter) ChatFrame_AddMessageEventFilter("CHAT_MSG_BN_WHISPER", ChatEmoteFilter) ChatFrame_AddMessageEventFilter("CHAT_MSG_BN_WHISPER_INFORM", ChatEmoteFilter) -- 解析社区聊天内容 ChatFrame_AddMessageEventFilter("CHAT_MSG_COMMUNITIES_CHANNEL", ChatEmoteFilter)