From 20cfc60d708737954f687d0c8d1859b0af2f2d91 Mon Sep 17 00:00:00 2001 From: Darthpred Date: Thu, 3 Oct 2013 13:31:58 +0400 Subject: [PATCH] Some massive shit: - Replaced Elv's message handler - Added some local tables for it to work - Removed our icon table, moved our toons to special chat icons Elv's shit uses - Made SLE:GetChatIcon(sender) to get icons instead of making loops in evry check - SLE:CheckFlag no longer exists - SLE filter removed --- ElvUI_SLE/modules/chat/chat.lua | 609 ++++++++++++++++++++++++++++++--------- 1 file changed, 466 insertions(+), 143 deletions(-) diff --git a/ElvUI_SLE/modules/chat/chat.lua b/ElvUI_SLE/modules/chat/chat.lua index 8b4c263..44599dc 100755 --- a/ElvUI_SLE/modules/chat/chat.lua +++ b/ElvUI_SLE/modules/chat/chat.lua @@ -4,6 +4,7 @@ local SLE = E:GetModule('SLE'); local LSM = LibStub("LibSharedMedia-3.0") local CreatedFrames = 0; local lfgRoles = {}; +local chatFilters = {}; local lfgChannels = { "PARTY_LEADER", "PARTY", @@ -13,166 +14,527 @@ local lfgChannels = { "INSTANCE_CHAT_LEADER", } +local len, gsub, find, sub, gmatch, format, random = string.len, string.gsub, string.find, string.sub, string.gmatch, string.format, math.random local tinsert, tremove, tsort, twipe, tconcat = table.insert, table.remove, table.sort, table.wipe, table.concat ---Textures for chat-- -do ---Normal LFG textures -CHAT_FLAG_TANK = "|TInterface\\AddOns\\ElvUI\\media\\textures\\tank.tga:15:15:0:0:64:64:2:56:2:56|t" -CHAT_FLAG_HEALER = "|TInterface\\AddOns\\ElvUI\\media\\textures\\healer.tga:15:15:0:0:64:64:2:56:2:56|t" -CHAT_FLAG_DAMAGER = "|TInterface\\AddOns\\ElvUI\\media\\textures\\dps.tga:15:15|t" ---Adapt -CHAT_FLAG_SLEADAPT = "|TInterface\\AddOns\\ElvUI_SLE\\media\\textures\\adapt.tga:0:2|t" -CHAT_FLAG_SLEADAPTTANK = CHAT_FLAG_TANK..CHAT_FLAG_SLEADAPT -CHAT_FLAG_SLEADAPTHEALER = CHAT_FLAG_HEALER..CHAT_FLAG_SLEADAPT -CHAT_FLAG_SLEADAPTDAMAGER = CHAT_FLAG_DAMAGER..CHAT_FLAG_SLEADAPT ---Authors ---Repooc -CHAT_FLAG_SLEAUTHOR = "|TInterface\\AddOns\\ElvUI_SLE\\media\\textures\\SLE_Chat_Logo.tga:0:2|t" -CHAT_FLAG_SLEAUTHORTANK = CHAT_FLAG_TANK..CHAT_FLAG_SLEAUTHOR -CHAT_FLAG_SLEAUTHORHEALER = CHAT_FLAG_HEALER..CHAT_FLAG_SLEAUTHOR -CHAT_FLAG_SLEAUTHORDAMAGER = CHAT_FLAG_DAMAGER..CHAT_FLAG_SLEAUTHOR ---Darth -CHAT_FLAG_SLEAUTHORD = "|TInterface\\AddOns\\ElvUI_SLE\\media\\textures\\SLE_Chat_LogoD.tga:0:2|t" -CHAT_FLAG_SLEAUTHORDTANK = CHAT_FLAG_TANK..CHAT_FLAG_SLEAUTHORD -CHAT_FLAG_SLEAUTHORDHEALER = CHAT_FLAG_HEALER..CHAT_FLAG_SLEAUTHORD -CHAT_FLAG_SLEAUTHORDDAMAGER = CHAT_FLAG_DAMAGER..CHAT_FLAG_SLEAUTHORD ---Roleplayers -CHAT_FLAG_SLERPG = "|TInterface\\AddOns\\ElvUI_SLE\\media\\textures\\Chat_RPG:13:35|t" -CHAT_FLAG_SLERPGTANK = CHAT_FLAG_TANK..CHAT_FLAG_SLERPG -CHAT_FLAG_SLERPGHEALER = CHAT_FLAG_HEALER..CHAT_FLAG_SLERPG -CHAT_FLAG_SLERPGDAMAGER = CHAT_FLAG_DAMAGER..CHAT_FLAG_SLERPG ---Friends -CHAT_FLAG_SLEFRIEND = "|TInterface\\AddOns\\ElvUI_SLE\\media\\textures\\Chat_Friend:13:13|t" -CHAT_FLAG_SLEFRIENDTANK = CHAT_FLAG_TANK..CHAT_FLAG_SLEFRIEND -CHAT_FLAG_SLEFRIENDHEALER = CHAT_FLAG_HEALER..CHAT_FLAG_SLEFRIEND -CHAT_FLAG_SLEFRIENDDAMAGER = CHAT_FLAG_DAMAGER..CHAT_FLAG_SLEFRIEND ---Testers -CHAT_FLAG_SLETEST = "|TInterface\\AddOns\\ElvUI_SLE\\media\\textures\\Chat_Test:13:13|t" -CHAT_FLAG_SLETESTTANK = CHAT_FLAG_TANK..CHAT_FLAG_SLETEST -CHAT_FLAG_SLETESTHEALER = CHAT_FLAG_HEALER..CHAT_FLAG_SLETEST -CHAT_FLAG_SLETESTDAMAGER = CHAT_FLAG_DAMAGER..CHAT_FLAG_SLETEST -end +--Role icons, needed by rolecheck +local rolePaths = { + TANK = [[|TInterface\AddOns\ElvUI\media\textures\tank.tga:15:15:0:0:64:64:2:56:2:56|t]], + HEALER = [[|TInterface\AddOns\ElvUI\media\textures\healer.tga:15:15:0:0:64:64:2:56:2:56|t]], + DAMAGER = [[|TInterface\AddOns\ElvUI\media\textures\dps.tga:15:15|t]] +} ---Toon table -local IconTable = { +--Chat icon paths +local elvui = "|TInterface\\AddOns\\ElvUI\\media\\textures\\ElvUI_Chat_Logo:13:22|t" +local affinity = "|TInterface\\AddOns\\ElvUI\\media\\textures\\Bathrobe_Chat_Logo.blp:15:15|t" +local adapt = "|TInterface\\AddOns\\ElvUI_SLE\\media\\textures\\adapt.tga:0:2|t" +local repooc = "|TInterface\\AddOns\\ElvUI_SLE\\media\\textures\\SLE_Chat_Logo.tga:0:2|t" +local darth = "|TInterface\\AddOns\\ElvUI_SLE\\media\\textures\\SLE_Chat_LogoD.tga:0:2|t" +local friend = "|TInterface\\AddOns\\ElvUI_SLE\\media\\textures\\Chat_Friend:13:13|t" +local test = "|TInterface\\AddOns\\ElvUI_SLE\\media\\textures\\Chat_Test:13:13|t" +local rpg = "|TInterface\\AddOns\\ElvUI_SLE\\media\\textures\\Chat_RPG:13:35|t" + +local specialChatIcons = { + ["Spirestone"] = { + ["Elvz"] = elvui + }, ["Illidan"] = { + --Original Stuff + ["Affinichi"] = affinity, + ["Uplift"] = affinity, + ["Affinitii"] = affinity, + ["Affinity"] = affinity, --Darth's toon - ["Darthpred"] = "SLEAUTHORD", + ["Darthpred"] = darth, --Repooc's Toon - ["Repøøc"] = "SLEAUTHOR", - ["Repooc"] = "SLEAUTHOR" + ["Repøøc"] = repooc, + ["Repooc"] = repooc }, ["СвежевательДуш"] = { --Darth's toons - ["Дартпредатор"] = "SLEAUTHORD", - ["Алея"] = "SLEAUTHORD", - ["Ваззули"] = "SLEAUTHORD", - ["Сиаранна"] = "SLEAUTHORD", - ["Джатон"] = "SLEAUTHORD", - ["Фикстер"] = "SLEAUTHORD", - ["Киландра"] = "SLEAUTHORD", - ["Нарджо"] = "SLEAUTHORD", - ["Верзук"] = "SLEAUTHORD", - ["Крениг"] = "SLEAUTHORD", - ["Мейжи"] = "SLEAUTHORD", - ["Большойгном"] = "SLETEST", --Testing toon - ["Фергесон"] = "SLEFRIEND" + ["Дартпредатор"] = darth, + ["Алея"] = darth, + ["Ваззули"] = darth, + ["Сиаранна"] = darth, + ["Джатон"] = darth, + ["Фикстер"] = darth, + ["Киландра"] = darth, + ["Нарджо"] = darth, + ["Верзук"] = darth, + ["Крениг"] = darth, + ["Мейжи"] = darth, + ["Большойгном"] = test, --Testing toon + ["Фергесон"] = friend }, ["ВечнаяПесня"] = { --Darth's toons - ["Дартпредатор"] = "SLEAUTHORD", - ["Алея"] = "SLEAUTHORD", - ["Ваззули"] = "SLEAUTHORD", - ["Сиаранна"] = "SLEAUTHORD", - ["Джатон"] = "SLEAUTHORD", - ["Фикстер"] = "SLEAUTHORD", - ["Киландра"] = "SLEAUTHORD", - ["Нарджо"] = "SLEAUTHORD", - ["Верзук"] = "SLEAUTHORD", - ["Крениг"] = "SLEAUTHORD", - ["Мейжи"] = "SLEAUTHORD", + ["Дартпредатор"] = darth, + ["Алея"] = darth, + ["Ваззули"] = darth, + ["Сиаранна"] = darth, + ["Джатон"] = darth, + ["Фикстер"] = darth, + ["Киландра"] = darth, + ["Нарджо"] = darth, + ["Верзук"] = darth, + ["Крениг"] = darth, + ["Мейжи"] = darth, --Darth's friends - ["Леани"] = "SLEFRIEND", + ["Леани"] = friend, --Da tester lol - ["Харореанн"] = "SLETEST" + ["Харореанн"] = test }, ["Ревущийфьорд"] = { - ["Рыжая"] = "SLEFRIEND", - ["Рыжа"] = "SLEFRIEND", + ["Рыжая"] = friend, + ["Рыжа"] = friend, --Some people - ["Брэгар"] = "SLETEST" + ["Брэгар"] = test }, ["Азурегос"] = { - ["Брэгари"] = "SLETEST" + ["Брэгари"] = test }, ["Korialstrasz"] = { - ["Cursewordz"] = "SLEAUTHOR" + ["Cursewordz"] = repooc }, ["Spirestone"] = { - ["Sifupooc"] = "SLEAUTHOR", - ["Dapooc"] = "SLEAUTHOR", - ["Lapooc"] = "SLEAUTHOR", - ["Warpooc"] = "SLEAUTHOR", - ["Repooc"] = "SLEAUTHOR", + ["Sifupooc"] = repooc, + ["Dapooc"] = repooc, + ["Lapooc"] = repooc, + ["Warpooc"] = repooc, + ["Repooc"] = repooc, --Adapt Roster - ["Mobius"] = "SLEADAPT", - ["Urgfelstorm"] = "SLEADAPT", - ["Kilashandra"] = "SLEADAPT", - ["Electrro"] = "SLEADAPT", - ["Afterthot"] = "SLEADAPT", - ["Lavathing"] = "SLEADAPT", - ["Finkle"] = "SLEADAPT" + ["Mobius"] = adapt, + ["Urgfelstorm"] = adapt, + ["Kilashandra"] = adapt, + ["Electrro"] = adapt, + ["Afterthot"] = adapt, + ["Lavathing"] = adapt, + ["Finkle"] = adapt }, ["Andorhal"] = { - ["Dapooc"] = "SLEAUTHOR", - ["Rovert"] = "SLEAUTHOR", - ["Sliceoflife"] = "SLEAUTHOR" + ["Dapooc"] = repooc, + ["Rovert"] = repooc, + ["Sliceoflife"] = repooc }, } +function CH:ChatFrame_MessageEventHandler(event, ...) + if ( strsub(event, 1, 8) == "CHAT_MSG" ) then + local arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14 = ...; + local type = strsub(event, 10); + local info = ChatTypeInfo[type]; + + local filter = false; + if ( chatFilters[event] ) then + local newarg1, newarg2, newarg3, newarg4, newarg5, newarg6, newarg7, newarg8, newarg9, newarg10, newarg11, newarg12, newarg13, newarg14; + for _, filterFunc in next, chatFilters[event] do + filter, newarg1, newarg2, newarg3, newarg4, newarg5, newarg6, newarg7, newarg8, newarg9, newarg10, newarg11, newarg12, newarg13, newarg14 = filterFunc(self, event, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); + if ( filter ) then + return true; + elseif ( newarg1 ) then + arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14 = newarg1, newarg2, newarg3, newarg4, newarg5, newarg6, newarg7, newarg8, newarg9, newarg10, newarg11, newarg12, newarg13, newarg14; + end + end + end + + arg2 = E.NameReplacements[arg2] or arg2 + local coloredName = GetColoredName(event, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); + + local channelLength = strlen(arg4); + local infoType = type; + if ( (strsub(type, 1, 7) == "CHANNEL") and (type ~= "CHANNEL_LIST") and ((arg1 ~= "INVITE") or (type ~= "CHANNEL_NOTICE_USER")) ) then + if ( arg1 == "WRONG_PASSWORD" ) then + local staticPopup = _G[StaticPopup_Visible("CHAT_CHANNEL_PASSWORD") or ""]; + if ( staticPopup and strupper(staticPopup.data) == strupper(arg9) ) then + -- Don't display invalid password messages if we're going to prompt for a password (bug 102312) + return; + end + end + + local found = 0; + for index, value in pairs(self.channelList) do + if ( channelLength > strlen(value) ) then + -- arg9 is the channel name without the number in front... + if ( ((arg7 > 0) and (self.zoneChannelList[index] == arg7)) or (strupper(value) == strupper(arg9)) ) then + found = 1; + infoType = "CHANNEL"..arg8; + info = ChatTypeInfo[infoType]; + if ( (type == "CHANNEL_NOTICE") and (arg1 == "YOU_LEFT") ) then + self.channelList[index] = nil; + self.zoneChannelList[index] = nil; + end + break; + end + end + end + if ( (found == 0) or not info ) then + return true; + end + end + + local chatGroup = Chat_GetChatCategory(type); + local chatTarget; + if ( chatGroup == "CHANNEL" or chatGroup == "BN_CONVERSATION" ) then + chatTarget = tostring(arg8); + elseif ( chatGroup == "WHISPER" or chatGroup == "BN_WHISPER" ) then + if(not(strsub(arg2, 1, 2) == "|K")) then + chatTarget = strupper(arg2); + else + chatTarget = arg2; + end + end + + if ( FCFManager_ShouldSuppressMessage(self, chatGroup, chatTarget) ) then + return true; + end + + if ( chatGroup == "WHISPER" or chatGroup == "BN_WHISPER" ) then + if ( self.privateMessageList and not self.privateMessageList[strlower(arg2)] ) then + return true; + elseif ( self.excludePrivateMessageList and self.excludePrivateMessageList[strlower(arg2)] + and ( (chatGroup == "WHISPER" and GetCVar("whisperMode") ~= "popout_and_inline") or (chatGroup == "BN_WHISPER" and GetCVar("bnWhisperMode") ~= "popout_and_inline") ) ) then + return true; + end + elseif ( chatGroup == "BN_CONVERSATION" ) then + if ( self.bnConversationList and not self.bnConversationList[arg8] ) then + return true; + elseif ( self.excludeBNConversationList and self.excludeBNConversationList[arg8] and GetCVar("conversationMode") ~= "popout_and_inline") then + return true; + end + end + + if (self.privateMessageList) then + -- Dedicated BN whisper windows need online/offline messages for only that player + if ( (chatGroup == "BN_INLINE_TOAST_ALERT" or chatGroup == "BN_WHISPER_PLAYER_OFFLINE") and not self.privateMessageList[strlower(arg2)] ) then + return true; + end + + -- HACK to put certain system messages into dedicated whisper windows + if ( chatGroup == "SYSTEM") then + local matchFound = false; + local message = strlower(arg1); + for playerName, _ in pairs(self.privateMessageList) do + local playerNotFoundMsg = strlower(format(ERR_CHAT_PLAYER_NOT_FOUND_S, playerName)); + local charOnlineMsg = strlower(format(ERR_FRIEND_ONLINE_SS, playerName, playerName)); + local charOfflineMsg = strlower(format(ERR_FRIEND_OFFLINE_S, playerName)); + if ( message == playerNotFoundMsg or message == charOnlineMsg or message == charOfflineMsg) then + matchFound = true; + break; + end + end + + if (not matchFound) then + return true; + end + end + end + + if ( type == "SYSTEM" or type == "SKILL" or type == "LOOT" or type == "CURRENCY" or type == "MONEY" or + type == "OPENING" or type == "TRADESKILLS" or type == "PET_INFO" or type == "TARGETICONS" or type == "BN_WHISPER_PLAYER_OFFLINE") then + self:AddMessage(CH:ConcatenateTimeStamp(arg1), info.r, info.g, info.b, info.id); + elseif ( strsub(type,1,7) == "COMBAT_" ) then + self:AddMessage(CH:ConcatenateTimeStamp(arg1), info.r, info.g, info.b, info.id); + elseif ( strsub(type,1,6) == "SPELL_" ) then + self:AddMessage(CH:ConcatenateTimeStamp(arg1), info.r, info.g, info.b, info.id); + elseif ( strsub(type,1,10) == "BG_SYSTEM_" ) then + self:AddMessage(CH:ConcatenateTimeStamp(arg1), info.r, info.g, info.b, info.id); + elseif ( strsub(type,1,11) == "ACHIEVEMENT" ) then + self:AddMessage(format(CH:ConcatenateTimeStamp(arg1), "|Hplayer:"..arg2.."|h".."["..coloredName.."]".."|h"), info.r, info.g, info.b, info.id); + elseif ( strsub(type,1,18) == "GUILD_ACHIEVEMENT" ) then + self:AddMessage(format(CH:ConcatenateTimeStamp(arg1), "|Hplayer:"..arg2.."|h".."["..coloredName.."]".."|h"), info.r, info.g, info.b, info.id); + elseif ( type == "IGNORED" ) then + self:AddMessage(format(CH:ConcatenateTimeStamp(CHAT_IGNORED), arg2), info.r, info.g, info.b, info.id); + elseif ( type == "FILTERED" ) then + self:AddMessage(format(CH:ConcatenateTimeStamp(CHAT_FILTERED), arg2), info.r, info.g, info.b, info.id); + elseif ( type == "RESTRICTED" ) then + self:AddMessage(CH:ConcatenateTimeStamp(CHAT_RESTRICTED), info.r, info.g, info.b, info.id); + elseif ( type == "CHANNEL_LIST") then + if(channelLength > 0) then + self:AddMessage(format(CH:ConcatenateTimeStamp(_G["CHAT_"..type.."_GET"]..arg1), tonumber(arg8), arg4), info.r, info.g, info.b, info.id); + else + self:AddMessage(CH:ConcatenateTimeStamp(arg1), info.r, info.g, info.b, info.id); + end + elseif (type == "CHANNEL_NOTICE_USER") then + local globalstring = _G["CHAT_"..arg1.."_NOTICE_BN"]; + if ( not globalstring ) then + globalstring = _G["CHAT_"..arg1.."_NOTICE"]; + end + + globalString = CH:ConcatenateTimeStamp(globalstring); + + if(strlen(arg5) > 0) then + -- TWO users in this notice (E.G. x kicked y) + self:AddMessage(format(globalstring, arg8, arg4, arg2, arg5), info.r, info.g, info.b, info.id); + elseif ( arg1 == "INVITE" ) then + self:AddMessage(format(globalstring, arg4, arg2), info.r, info.g, info.b, info.id); + else + self:AddMessage(format(globalstring, arg8, arg4, arg2), info.r, info.g, info.b, info.id); + end + elseif (type == "CHANNEL_NOTICE") then + local globalstring = _G["CHAT_"..arg1.."_NOTICE_BN"]; + if ( not globalstring ) then + globalstring = _G["CHAT_"..arg1.."_NOTICE"]; + end + if ( arg10 > 0 ) then + arg4 = arg4.." "..arg10; + end + + globalString = CH:ConcatenateTimeStamp(globalstring); + + local accessID = ChatHistory_GetAccessID(Chat_GetChatCategory(type), arg8); + local typeID = ChatHistory_GetAccessID(infoType, arg8, arg12); + self:AddMessage(format(globalstring, arg8, arg4), info.r, info.g, info.b, info.id, false, accessID, typeID); + elseif ( type == "BN_CONVERSATION_NOTICE" ) then + local channelLink = format(CHAT_BN_CONVERSATION_GET_LINK, arg8, MAX_WOW_CHAT_CHANNELS + arg8); + local playerLink = format("|HBNplayer:%s:%s:%s:%s:%s|h[%s]|h", arg2, arg13, arg11, Chat_GetChatCategory(type), arg8, arg2); + local message = format(_G["CHAT_CONVERSATION_"..arg1.."_NOTICE"], channelLink, playerLink) + + local accessID = ChatHistory_GetAccessID(Chat_GetChatCategory(type), arg8); + local typeID = ChatHistory_GetAccessID(infoType, arg8, arg12); + self:AddMessage(CH:ConcatenateTimeStamp(message), info.r, info.g, info.b, info.id, false, accessID, typeID); + elseif ( type == "BN_CONVERSATION_LIST" ) then + local channelLink = format(CHAT_BN_CONVERSATION_GET_LINK, arg8, MAX_WOW_CHAT_CHANNELS + arg8); + local message = format(CHAT_BN_CONVERSATION_LIST, channelLink, arg1); + self:AddMessage(CH:ConcatenateTimeStamp(message), info.r, info.g, info.b, info.id, false, accessID, typeID); + elseif ( type == "BN_INLINE_TOAST_ALERT" ) then + if ( arg1 == "FRIEND_OFFLINE" and not BNet_ShouldProcessOfflineEvents() ) then + return true; + end + local globalstring = _G["BN_INLINE_TOAST_"..arg1]; + local message; + if ( arg1 == "FRIEND_REQUEST" ) then + message = globalstring; + elseif ( arg1 == "FRIEND_PENDING" ) then + message = format(BN_INLINE_TOAST_FRIEND_PENDING, BNGetNumFriendInvites()); + elseif ( arg1 == "FRIEND_REMOVED" or arg1 == "BATTLETAG_FRIEND_REMOVED" ) then + message = format(globalstring, arg2); + elseif ( arg1 == "FRIEND_ONLINE" or arg1 == "FRIEND_OFFLINE") then + local hasFocus, toonName, client, realmName, realmID, faction, race, class, guild, zoneName, level, gameText = BNGetToonInfo(arg13); + if (toonName and toonName ~= "" and client and client ~= "") then + local toonNameText = BNet_GetClientEmbeddedTexture(client, 14)..toonName; + local playerLink = format("|HBNplayer:%s:%s:%s:%s:%s|h[%s] (%s)|h", arg2, arg13, arg11, Chat_GetChatCategory(type), 0, arg2, toonNameText); + message = format(globalstring, playerLink); + else + local playerLink = format("|HBNplayer:%s:%s:%s:%s:%s|h[%s]|h", arg2, arg13, arg11, Chat_GetChatCategory(type), 0, arg2); + message = format(globalstring, playerLink); + end + else + local playerLink = format("|HBNplayer:%s:%s:%s:%s:%s|h[%s]|h", arg2, arg13, arg11, Chat_GetChatCategory(type), 0, arg2); + message = format(globalstring, playerLink); + end + self:AddMessage(CH:ConcatenateTimeStamp(message), info.r, info.g, info.b, info.id); + elseif ( type == "BN_INLINE_TOAST_BROADCAST" ) then + if ( arg1 ~= "" ) then + arg1 = RemoveExtraSpaces(arg1); + local playerLink = format("|HBNplayer:%s:%s:%s:%s:%s|h[%s]|h", arg2, arg13, arg11, Chat_GetChatCategory(type), 0, arg2); + self:AddMessage(format(CH:ConcatenateTimeStamp(BN_INLINE_TOAST_BROADCAST), playerLink, arg1), info.r, info.g, info.b, info.id); + end + elseif ( type == "BN_INLINE_TOAST_BROADCAST_INFORM" ) then + if ( arg1 ~= "" ) then + arg1 = RemoveExtraSpaces(arg1); + self:AddMessage(CH:ConcatenateTimeStamp(BN_INLINE_TOAST_BROADCAST_INFORM), info.r, info.g, info.b, info.id); + end + elseif ( type == "BN_INLINE_TOAST_CONVERSATION" ) then + self:AddMessage(format(CH:ConcatenateTimeStamp(BN_INLINE_TOAST_CONVERSATION), arg1), info.r, info.g, info.b, info.id); + else + local body; + + local _, fontHeight = FCF_GetChatWindowInfo(self:GetID()); + + if ( fontHeight == 0 ) then + --fontHeight will be 0 if it's still at the default (14) + fontHeight = 14; + end + + -- Add AFK/DND flags + local pflag = ""; + if(strlen(arg6) > 0) then + if ( arg6 == "GM" ) then + --If it was a whisper, dispatch it to the GMChat addon. + if ( type == "WHISPER" ) then + return; + end + --Add Blizzard Icon, this was sent by a GM + pflag = "|TInterface\\ChatFrame\\UI-ChatIcon-Blizz:12:20:0:0:32:16:4:28:0:16|t "; + elseif ( arg6 == "DEV" ) then + --Add Blizzard Icon, this was sent by a Dev + pflag = "|TInterface\\ChatFrame\\UI-ChatIcon-Blizz:12:20:0:0:32:16:4:28:0:16|t "; + elseif ( arg6 == "DND" or arg6 == "AFK") then + pflag = SLE:GetChatIcon(arg2).._G["CHAT_FLAG_"..arg6] + else + pflag = _G["CHAT_FLAG_"..arg6]; + end + else + pflag = SLE:GetChatIcon(arg2) + end + if(lfgRoles[arg2] and SLE:SimpleTable(lfgChannels, type)) then + pflag = lfgRoles[arg2]..pflag + end + if ( type == "WHISPER_INFORM" and GMChatFrame_IsGM and GMChatFrame_IsGM(arg2) ) then + return; + end + + local showLink = 1; + if ( strsub(type, 1, 7) == "MONSTER" or strsub(type, 1, 9) == "RAID_BOSS") then + showLink = nil; + else + arg1 = gsub(arg1, "%%", "%%%%"); + end + + -- Search for icon links and replace them with texture links. + for tag in gmatch(arg1, "%b{}") do + local term = strlower(gsub(tag, "[{}]", "")); + if ( ICON_TAG_LIST[term] and ICON_LIST[ICON_TAG_LIST[term]] ) then + arg1 = gsub(arg1, tag, ICON_LIST[ICON_TAG_LIST[term]] .. "0|t"); + elseif ( GROUP_TAG_LIST[term] ) then + local groupIndex = GROUP_TAG_LIST[term]; + local groupList = "["; + for i=1, GetNumGroupMembers() do + local name, rank, subgroup, level, class, classFileName = GetRaidRosterInfo(i); + if ( name and subgroup == groupIndex ) then + local classColorTable = RAID_CLASS_COLORS[classFileName]; + if ( classColorTable ) then + name = format("\124cff%.2x%.2x%.2x%s\124r", classColorTable.r*255, classColorTable.g*255, classColorTable.b*255, name); + end + groupList = groupList..(groupList == "[" and "" or PLAYER_LIST_DELIMITER)..name; + end + end + groupList = groupList.."]"; + arg1 = gsub(arg1, tag, groupList); + end + end + + --Remove groups of many spaces + arg1 = RemoveExtraSpaces(arg1); + + local playerLink; + + if ( type ~= "BN_WHISPER" and type ~= "BN_WHISPER_INFORM" and type ~= "BN_CONVERSATION" ) then + playerLink = "|Hplayer:"..arg2..":"..arg11..":"..chatGroup..(chatTarget and ":"..chatTarget or "").."|h"; + else + coloredName = GetBNFriendColor(arg2, arg13) + playerLink = "|HBNplayer:"..arg2..":"..arg13..":"..arg11..":"..chatGroup..(chatTarget and ":"..chatTarget or "").."|h"; + end + + local message = arg1; + if ( arg14 ) then --isMobile + message = ChatFrame_GetMobileEmbeddedTexture(info.r, info.g, info.b)..message; + end + + if ( (strlen(arg3) > 0) and (arg3 ~= self.defaultLanguage) ) then + local languageHeader = "["..arg3.."] "; + if ( showLink and (strlen(arg2) > 0) ) then + body = format(_G["CHAT_"..type.."_GET"]..languageHeader..message, pflag..playerLink.."["..coloredName.."]".."|h"); + else + body = format(_G["CHAT_"..type.."_GET"]..languageHeader..message, pflag..arg2); + end + else + if ( not showLink or strlen(arg2) == 0 ) then + if ( type == "TEXT_EMOTE" ) then + body = message; + else + body = format(_G["CHAT_"..type.."_GET"]..message, pflag..arg2, arg2); + end + else + if ( type == "EMOTE" ) then + body = format(_G["CHAT_"..type.."_GET"]..message, pflag..playerLink..coloredName.."|h"); + elseif ( type == "TEXT_EMOTE") then + body = gsub(message, arg2, pflag..playerLink..coloredName.."|h", 1); + else + body = format(_G["CHAT_"..type.."_GET"]..message, pflag..playerLink.."["..coloredName.."]".."|h"); + end + end + end + + -- Add Channel + arg4 = gsub(arg4, "%s%-%s.*", ""); + if( chatGroup == "BN_CONVERSATION" ) then + body = format(CHAT_BN_CONVERSATION_GET_LINK, MAX_WOW_CHAT_CHANNELS + arg8, MAX_WOW_CHAT_CHANNELS + arg8)..body; + elseif(channelLength > 0) then + body = "|Hchannel:channel:"..arg8.."|h["..arg4.."]|h "..body; + end + + local accessID = ChatHistory_GetAccessID(chatGroup, chatTarget); + local typeID = ChatHistory_GetAccessID(infoType, chatTarget, arg12 == "" and arg13 or arg12); + if CH.db.shortChannels then + body = body:gsub("|Hchannel:(.-)|h%[(.-)%]|h", CH.ShortChannel) + body = body:gsub('CHANNEL:', '') + body = body:gsub("^(.-|h) "..L['whispers'], "%1") + body = body:gsub("^(.-|h) "..L['says'], "%1") + body = body:gsub("^(.-|h) "..L['yells'], "%1") + body = body:gsub("<"..AFK..">", "[|cffFF0000"..L['AFK'].."|r] ") + body = body:gsub("<"..DND..">", "[|cffE7E716"..L['DND'].."|r] ") + body = body:gsub("%[BN_CONVERSATION:", '%['.."") + body = body:gsub("^%["..RAID_WARNING.."%]", '['..L['RW']..']') + end + self:AddMessage(CH:ConcatenateTimeStamp(body), info.r, info.g, info.b, info.id, false, accessID, typeID); + end + + if ( type == "WHISPER" or type == "BN_WHISPER" ) then + --BN_WHISPER FIXME + ChatEdit_SetLastTellTarget(arg2, type); + if ( self.tellTimer and (GetTime() > self.tellTimer) ) then + PlaySound("TellMessage"); + end + self.tellTimer = GetTime() + CHAT_TELL_ALERT_TIME; + --FCF_FlashTab(self); + end + + if ( not self:IsShown() ) then + if ( (self == DEFAULT_CHAT_FRAME and info.flashTabOnGeneral) or (self ~= DEFAULT_CHAT_FRAME and info.flashTab) ) then + if ( not CHAT_OPTIONS.HIDE_FRAME_ALERTS or type == "WHISPER" or type == "BN_WHISPER" ) then --BN_WHISPER FIXME + if (not (type == "BN_CONVERSATION" and BNIsSelf(arg13))) then + if (not FCFManager_ShouldSuppressMessageFlash(self, chatGroup, chatTarget) ) then + --FCF_StartAlertFlash(self); THIS TAINTS<<<<<<< + _G[self:GetName().."Tab"].glow:Show() + _G[self:GetName().."Tab"]:SetScript("OnUpdate", CH.ChatTab_OnUpdate) + end + end + end + end + end + + return true; + end +end + function CH:CheckLFGRoles() local isInGroup, isInRaid = IsInGroup(), IsInRaid() local unit = isInRaid and "raid" or "party" - + twipe(lfgRoles) if(not isInGroup or not self.db.lfgIcons) then return end + local role = UnitGroupRolesAssigned("player") if(role) then - lfgRoles[E.myname] = role + lfgRoles[E.myname] = rolePaths[role] end + for i=1, GetNumGroupMembers() do if(UnitExists(unit..i) and not UnitIsUnit(unit..i, "player")) then role = UnitGroupRolesAssigned(unit..i) local name = GetUnitName(unit..i, true) if(role and name) then - lfgRoles[name] = role + lfgRoles[name] = rolePaths[role] end end end end -function SLE:CheckFlag(sender, checkFlag) +function SLE:GetChatIcon(sender) local senderName, senderRealm - if sender then senderName, senderRealm = string.split('-', sender) else senderName = E.myname end - senderRealm = senderRealm or E.myrealm senderRealm = senderRealm:gsub(' ', '') - if IconTable[senderRealm] and IconTable[senderRealm][senderName] then - if checkFlag then - return IconTable[senderRealm][senderName] == checkFlag - else - return IconTable[senderRealm][senderName] - end + if specialChatIcons[senderRealm] and specialChatIcons[senderRealm][senderName] then + return specialChatIcons[senderRealm][senderName] end - - return false + return "" end function CH:ChatEdit_AddHistory(editBox, line) @@ -314,43 +676,4 @@ function CH:PositionChat(override) end self.initialMove = true; -end -local function SLEfilter(self, event, message, author, arg3, arg4, arg5, arg6, ...) - local returnTex = arg6 - if returnTex == nil then returnTex = "" end - local type = strsub(event, 10); - if(strlen(arg6) > 0) then - return false, message, author, arg3, arg4, arg5, returnTex, ... - elseif SLE:CheckFlag(author) then - if(returnTex == "" and lfgRoles[author] and SLE:SimpleTable(lfgChannels, type)) then - returnTex = SLE:CheckFlag(author)..lfgRoles[author] - else - returnTex = SLE:CheckFlag(author) - end - return false, message, author, arg3, arg4, arg5, returnTex, ... - elseif not SLE:CheckFlag(author) then - if(returnTex == "" and lfgRoles[author] and SLE:SimpleTable(lfgChannels, type)) then - returnTex = lfgRoles[author] - end - return false, message, author, arg3, arg4, arg5, returnTex, ... - end -end - ---Applying filter -ChatFrame_AddMessageEventFilter("CHAT_MSG_CHANNEL", SLEfilter) -ChatFrame_AddMessageEventFilter("CHAT_MSG_YELL", SLEfilter) -ChatFrame_AddMessageEventFilter("CHAT_MSG_SAY", SLEfilter) -ChatFrame_AddMessageEventFilter("CHAT_MSG_WHISPER_INFORM", SLEfilter) -ChatFrame_AddMessageEventFilter("CHAT_MSG_WHISPER", SLEfilter) -ChatFrame_AddMessageEventFilter("CHAT_MSG_GUILD", SLEfilter) -ChatFrame_AddMessageEventFilter("CHAT_MSG_OFFICER", SLEfilter) -ChatFrame_AddMessageEventFilter("CHAT_MSG_PARTY", SLEfilter) -ChatFrame_AddMessageEventFilter("CHAT_MSG_PARTY_LEADER", SLEfilter) -ChatFrame_AddMessageEventFilter("CHAT_MSG_RAID", SLEfilter) -ChatFrame_AddMessageEventFilter("CHAT_MSG_RAID_LEADER", SLEfilter) -ChatFrame_AddMessageEventFilter("CHAT_MSG_INSTANCE_CHAT", SLEfilter) -ChatFrame_AddMessageEventFilter("CHAT_MSG_INSTANCE_CHAT_LEADER", SLEfilter) -ChatFrame_AddMessageEventFilter("CHAT_MSG_BN_CONVERSATION", SLEfilter) -ChatFrame_AddMessageEventFilter("CHAT_MSG_BN_WHISPER", SLEfilter) -ChatFrame_AddMessageEventFilter("CHAT_MSG_BN_WHISPER_INFORM", SLEfilter) -ChatFrame_AddMessageEventFilter("CHAT_MSG_BN_INLINE_TOAST_BROADCAST", SLEfilter) \ No newline at end of file +end \ No newline at end of file -- 1.7.9.5