Guest User

X4D_Chat.lua

a guest
Jun 29th, 2014
533
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 33.16 KB | None | 0 0
  1. X4D_Chat = {}
  2.  
  3. local X4D_LibAntiSpam = nil
  4. local X4D_Loot = nil
  5. local X4D_XP = nil
  6. local X4D_Bank = nil
  7. local X4D_Mail = nil
  8.  
  9. X4D_Chat.NAME = 'X4D_Chat'
  10. X4D_Chat.VERSION = '1.23a'
  11.  
  12. X4D_Chat.Settings = {}
  13. X4D_Chat.Settings.SavedVars = {}
  14. X4D_Chat.Settings.Defaults = {
  15.     GuildCharNames = true,
  16.     GuildPlayerNames = false,
  17.     UseGuildAbbr = true,
  18.     GuildAbbr = {
  19.         [1] = '',
  20.         [2] = '',
  21.         [3] = '',
  22.         [4] = '',
  23.         [5] = '',
  24.     },
  25.     UseGuildNum = false,
  26.     TimestampOption = '24 Hour Format',
  27.     RemoveSeconds = false,
  28.     StripColors = false,
  29.     StripExcess = true,
  30.     PreventChatFade = true,
  31.     DisableFriendStatus = false,
  32. }
  33.  
  34. X4D_Chat.ChannelCategory = {
  35.     [CHAT_CHANNEL_SAY] = GetChannelCategoryFromChannel(CHAT_CHANNEL_SAY),
  36.     [CHAT_CHANNEL_YELL] = GetChannelCategoryFromChannel(CHAT_CHANNEL_YELL),
  37.     [CHAT_CHANNEL_ZONE] = GetChannelCategoryFromChannel(CHAT_CHANNEL_ZONE),
  38.     [CHAT_CHANNEL_ZONE_LANGUAGE_1] = GetChannelCategoryFromChannel(CHAT_CHANNEL_ZONE_LANGUAGE_1),
  39.     [CHAT_CHANNEL_ZONE_LANGUAGE_2] = GetChannelCategoryFromChannel(CHAT_CHANNEL_ZONE_LANGUAGE_2),
  40.     [CHAT_CHANNEL_ZONE_LANGUAGE_3] = GetChannelCategoryFromChannel(CHAT_CHANNEL_ZONE_LANGUAGE_3),
  41.     [CHAT_CHANNEL_WHISPER] = GetChannelCategoryFromChannel(CHAT_CHANNEL_WHISPER),
  42.     [CHAT_CHANNEL_WHISPER_SENT] = GetChannelCategoryFromChannel(CHAT_CHANNEL_WHISPER_SENT),
  43.     [CHAT_CHANNEL_PARTY] = GetChannelCategoryFromChannel(CHAT_CHANNEL_PARTY),
  44.     [CHAT_CHANNEL_EMOTE] = GetChannelCategoryFromChannel(CHAT_CHANNEL_EMOTE),
  45.     [CHAT_CHANNEL_SYSTEM] = GetChannelCategoryFromChannel(CHAT_CHANNEL_SYSTEM),
  46.     [CHAT_CHANNEL_GUILD_1] = GetChannelCategoryFromChannel(CHAT_CHANNEL_GUILD_1),
  47.     [CHAT_CHANNEL_GUILD_2] = GetChannelCategoryFromChannel(CHAT_CHANNEL_GUILD_2),
  48.     [CHAT_CHANNEL_GUILD_3] = GetChannelCategoryFromChannel(CHAT_CHANNEL_GUILD_3),
  49.     [CHAT_CHANNEL_GUILD_4] = GetChannelCategoryFromChannel(CHAT_CHANNEL_GUILD_4),
  50.     [CHAT_CHANNEL_GUILD_5] = GetChannelCategoryFromChannel(CHAT_CHANNEL_GUILD_5),
  51.     [CHAT_CHANNEL_OFFICER_1] = GetChannelCategoryFromChannel(CHAT_CHANNEL_OFFICER_1),
  52.     [CHAT_CHANNEL_OFFICER_2] = GetChannelCategoryFromChannel(CHAT_CHANNEL_OFFICER_2),
  53.     [CHAT_CHANNEL_OFFICER_3] = GetChannelCategoryFromChannel(CHAT_CHANNEL_OFFICER_3),
  54.     [CHAT_CHANNEL_OFFICER_4] = GetChannelCategoryFromChannel(CHAT_CHANNEL_OFFICER_4),
  55.     [CHAT_CHANNEL_OFFICER_5] = GetChannelCategoryFromChannel(CHAT_CHANNEL_OFFICER_5),
  56.     [CHAT_CHANNEL_MONSTER_SAY] = GetChannelCategoryFromChannel(CHAT_CHANNEL_MONSTER_SAY),
  57.     [CHAT_CHANNEL_MONSTER_YELL] = GetChannelCategoryFromChannel(CHAT_CHANNEL_MONSTER_YELL),
  58.     [CHAT_CHANNEL_MONSTER_WHISPER] = GetChannelCategoryFromChannel(CHAT_CHANNEL_MONSTER_WHISPER),
  59.     [CHAT_CHANNEL_MONSTER_EMOTE] = GetChannelCategoryFromChannel(CHAT_CHANNEL_MONSTER_EMOTE),
  60.     [CHAT_CHANNEL_USER_CHANNEL_1] = GetChannelCategoryFromChannel(CHAT_CATEGORY_PARTY),
  61.     [CHAT_CHANNEL_USER_CHANNEL_2] = GetChannelCategoryFromChannel(CHAT_CATEGORY_PARTY),
  62.     [CHAT_CHANNEL_USER_CHANNEL_3] = GetChannelCategoryFromChannel(CHAT_CATEGORY_PARTY),
  63.     [CHAT_CHANNEL_USER_CHANNEL_4] = GetChannelCategoryFromChannel(CHAT_CATEGORY_PARTY),
  64.     [CHAT_CHANNEL_USER_CHANNEL_5] = GetChannelCategoryFromChannel(CHAT_CATEGORY_PARTY),
  65.     [CHAT_CHANNEL_USER_CHANNEL_6] = GetChannelCategoryFromChannel(CHAT_CATEGORY_PARTY),
  66.     [CHAT_CHANNEL_USER_CHANNEL_7] = GetChannelCategoryFromChannel(CHAT_CATEGORY_PARTY),
  67.     [CHAT_CHANNEL_USER_CHANNEL_8] = GetChannelCategoryFromChannel(CHAT_CATEGORY_PARTY),
  68.     [CHAT_CHANNEL_USER_CHANNEL_9] = GetChannelCategoryFromChannel(CHAT_CATEGORY_PARTY),
  69. }
  70.  
  71. X4D_Chat.Guilds = {
  72.     [CHAT_CATEGORY_GUILD_1] = nil,
  73.     [CHAT_CATEGORY_GUILD_2] = nil,
  74.     [CHAT_CATEGORY_GUILD_3] = nil,
  75.     [CHAT_CATEGORY_GUILD_4] = nil,
  76.     [CHAT_CATEGORY_GUILD_5] = nil,
  77.     [CHAT_CATEGORY_OFFICER_1] = nil,
  78.     [CHAT_CATEGORY_OFFICER_2] = nil,
  79.     [CHAT_CATEGORY_OFFICER_3] = nil,
  80.     [CHAT_CATEGORY_OFFICER_4] = nil,
  81.     [CHAT_CATEGORY_OFFICER_5] = nil,
  82. }
  83.  
  84. X4D_Chat.Colors = {
  85.     SYSTEM = '|cFFFF00',
  86. }
  87.  
  88. local function GetTimestampPrefix(color)
  89.     if (X4D_Chat.Settings.SavedVars.TimestampOption == nil) then
  90.         X4D_Chat.Settings.SavedVars.TimestampOption = X4D_Chat.Settings.Defaults.TimestampOption
  91.     elseif (X4D_Chat.Settings.SavedVars.TimestampOption == 'Disabled') then
  92.         return color
  93.     end
  94.  
  95.     local timeString = GetTimeString()
  96.  
  97.     if (X4D_Chat.Settings.SavedVars.TimestampOption == '12 Hour Format') then
  98.         local hour = timeString:gmatch('(%d%d).%d%d.%d%d')()
  99.         if (tonumber(hour) > 12) then
  100.             hour = tostring(tonumber(hour) - 12)
  101.             if (hour:len() == 1) then
  102.                 hour = '0' .. hour
  103.             end
  104.             if (X4D_Chat.Settings.SavedVars.RemoveSeconds) then
  105.                 timeString = timeString:gsub('%d%d.(%d%d).%d%d', hour .. ':%1 PM')
  106.             else
  107.                 timeString = timeString:gsub('%d%d.(%d%d).(%d%d)', hour .. ':%1:%2 PM')
  108.             end
  109.         else
  110.             if (hour == "00") then
  111.                 hour = "12"
  112.             end
  113.             if (X4D_Chat.Settings.SavedVars.RemoveSeconds) then
  114.                 timeString = timeString:gsub('%d%d.(%d%d).%d%d', hour .. ':%1 AM')
  115.             else
  116.                 timeString = timeString:gsub('%d%d.(%d%d).(%d%d)', hour .. ':%1:%2 AM')
  117.             end
  118.         end
  119.     elseif (X4D_Chat.Settings.SavedVars.RemoveSeconds) then
  120.         timeString = timeString:gsub('(%d%d).(%d%d).%d%d', '%1:%2')
  121.     end
  122.  
  123.     local highlightColor = X4D_Chat.DeriveHighlightColorCode(color)
  124.     return color .. '[' .. highlightColor .. timeString .. color .. '] '
  125. end
  126.  
  127. function X4D_Chat.OnChatMessageReceived(messageType, fromName, text)
  128.     if (X4D_LibAntiSpam) then
  129.         local isSpam, isFlood = false, false
  130.         if (X4D_LibAntiSpam.Check) then
  131.             isSpam, isFlood = X4D_LibAntiSpam:Check(text, fromName)
  132.         elseif (X4D_LibAntiSpam.IsSpam) then
  133.             isSpam, isFlood = X4D_LibAntiSpam:IsSpam(text, fromName)
  134.         end
  135.         if (isSpam or isFlood) then
  136.             return
  137.         end
  138.     end
  139.  
  140.     local ChannelInfo = ZO_ChatSystem_GetChannelInfo()
  141.     local channelInfo = ChannelInfo[messageType]
  142.     local result = nil
  143.     text = X4D_Chat.StripColors(text)
  144.     if (channelInfo and channelInfo.format) then
  145.         local category = X4D_Chat.GetChatCategory(channelInfo)
  146.         local channelLink = X4D_Chat.CreateChannelLink(channelInfo, category)
  147.         local fromLink = X4D_Chat.CreateCharacterLink(fromName, channelInfo)
  148.         if (channelLink) then
  149.             result = zo_strformat(channelInfo.format, channelLink, fromLink, text)
  150.         else
  151.             result = zo_strformat(channelInfo.format, fromLink, text)
  152.             if (X4D_Chat.Settings.SavedVars.StripExcess) then
  153.                 result = result:gsub('%]%|h%s?.-%:', ']|h:', 1)
  154.             end
  155.         end
  156.         local r, g, b = GetChatCategoryColor(category)
  157.         local chatColor = X4D_Chat.CreateColorCode(r, g, b)
  158.         return GetTimestampPrefix(chatColor) .. result, channelInfo.saveTarget
  159.     end
  160. end
  161.  
  162. function X4D_Chat.GetChatCategory(channelInfo)
  163.     local category = X4D_Chat.ChannelCategory[channelInfo.id]
  164.     if (category ~= nil) then
  165.         return category
  166.     end
  167.     return CHAT_CATEGORY_ZONE
  168. end
  169.  
  170. function X4D_Chat.CreateColorCode(r, g, b)
  171.     return '|c' .. DEC2HEX(r * 255) .. DEC2HEX(g * 255) .. DEC2HEX(b * 255)
  172. end
  173.  
  174. function X4D_Chat.ParseColorCode(color)
  175.     return HEX2DEC(color, 3)/256, HEX2DEC(color, 5)/256, HEX2DEC(color, 7)/256, 1
  176. end
  177.  
  178. function X4D_Chat.DeriveHighlightColorCode(color)
  179.     local r, g, b, a = X4D_Chat.ParseColorCode(color)
  180.     r = r * 1.5
  181.     if (r > 1) then
  182.         r = 1
  183.     end
  184.     g = g * 1.5
  185.     if (g > 1) then
  186.         g = 1
  187.     end
  188.     b = b * 1.5
  189.     if (b > 1) then
  190.         b = 1
  191.     end
  192.     return X4D_Chat.CreateColorCode(r, g, b)
  193. end
  194.  
  195. function X4D_Chat.CreateChannelLink(channelInfo, category)
  196.     if (category == CHAT_CATEGORY_OFFICER_1) then
  197.         category = CHAT_CATEGORY_GUILD_1
  198.     elseif (category == CHAT_CATEGORY_OFFICER_2) then
  199.         category = CHAT_CATEGORY_GUILD_2
  200.     elseif (category == CHAT_CATEGORY_OFFICER_3) then
  201.         category = CHAT_CATEGORY_GUILD_3
  202.     elseif (category == CHAT_CATEGORY_OFFICER_4) then
  203.         category = CHAT_CATEGORY_GUILD_4
  204.     elseif (category == CHAT_CATEGORY_OFFICER_5) then
  205.         category = CHAT_CATEGORY_GUILD_5
  206.     end
  207.     if (channelInfo.channelLinkable) then
  208.         local channelName = GetChannelName(channelInfo.id)
  209.         local result = ZO_LinkHandler_CreateChannelLink(channelName)
  210.         local guild = nil
  211.         local guildNum = nil
  212.         if (category) then
  213.             if (not X4D_Chat.Guilds[category] or X4D_Chat.Guilds[category].Time <= (GetGameTimeMilliseconds() - 5000)) then
  214.                 local guildId = nil
  215.                 if (category == CHAT_CATEGORY_GUILD_1) then
  216.                     guildId = GetGuildId(1)
  217.                     guildNum = 1
  218.                 elseif (category == CHAT_CATEGORY_GUILD_2) then
  219.                     guildId = GetGuildId(2)
  220.                     guildNum = 2
  221.                 elseif (category == CHAT_CATEGORY_GUILD_3) then
  222.                     guildId = GetGuildId(3)
  223.                     guildNum = 3
  224.                 elseif (category == CHAT_CATEGORY_GUILD_4) then
  225.                     guildId = GetGuildId(4)
  226.                     guildNum = 4
  227.                 elseif (category == CHAT_CATEGORY_GUILD_5) then
  228.                     guildId = GetGuildId(5)
  229.                     guildNum = 5
  230.                 end
  231.                 X4D_Chat.Guilds[category] = {
  232.                     Id = guildId,
  233.                     Time = GetGameTimeMilliseconds(),
  234.                     Num = guildNum,
  235.                 }
  236.             end
  237.             guild = X4D_Chat.Guilds[category]
  238.         end
  239.         if (guild) then
  240.             if (X4D_Chat.Settings.SavedVars.UseGuildAbbr) then
  241.                 if (not guild.Abbr) then
  242.                     if (X4D_Chat.Settings.SavedVars.GuildAbbr[guild.Num] and X4D_Chat.Settings.SavedVars.GuildAbbr[guild.Num]:len() > 0) then
  243.                         guild.Abbr = X4D_Chat.Settings.SavedVars.GuildAbbr[guild.Num]
  244.                     else
  245.                         if (not guild.Description) then
  246.                             guild.Description = GetGuildDescription(guild.Id)
  247.                         end
  248.                         if (guild.Description and guild.Description:len() > 0) then
  249.                             for word in guild.Description:gmatch('%[.-%]') do
  250.                                 guild.Abbr = word:gsub('([%[%]])', '')
  251.                                 break
  252.                             end
  253.                         end
  254.                         if (not guild.Abbr or guild.Abbr:len() == 0) then
  255.                             local abbr = channelName:gsub('[^%a%d]', ''):sub(1, 1)
  256.                             for w in channelName:gmatch('[^%a%d](.)') do
  257.                                 abbr = abbr .. w
  258.                             end
  259.                             guild.Abbr = abbr
  260.                         end
  261.                     end
  262.                 end
  263.             end
  264.             if (X4D_Chat.Settings.SavedVars.UseGuildNum) then
  265.                 if (not guild.Num) then
  266.                     guild.Num = guildNum
  267.                 end
  268.             end
  269.             channelName = channelName:gsub('([^%a%d%s])', '%%%1')
  270.             if (X4D_Chat.Settings.SavedVars.UseGuildNum and guild.Abbr and guild.Abbr:len() > 0 and guild.Num) then
  271.                 result = result:gsub(channelName, guild.Num .. '/' .. guild.Abbr)
  272.             elseif (guild.Abbr and guild.Abbr:len() > 0) then
  273.                 result = result:gsub(channelName, guild.Abbr)
  274.             elseif (X4D_Chat.Settings.SavedVars.UseGuildNum and guild.Num) then
  275.                 result = result:gsub(channelName, guild.Num)
  276.             end
  277.         end
  278.         return result
  279.     end
  280. end
  281.  
  282. X4D_Chat.Players = {}
  283.  
  284. local function GetPlayer(fromName)
  285.     return X4D_Chat.Players[fromName]
  286. end
  287.  
  288. local function AddPlayer(fromName)
  289.     local player = {
  290.         Time = GetGameTimeMilliseconds(),
  291.         From = fromName,
  292.     }
  293.     X4D_Chat.Players[fromName] = player
  294.     return player
  295. end
  296.  
  297. local function TryUpdatePlayerCharacterName(player, fromName)
  298.     if (string.StartsWith(fromName,'@')) then
  299.         for guildIndex = 1,GetNumGuilds() do
  300.             local guildId = GetGuildId(guildIndex)
  301.             if (guildId ~= nil) then
  302.                 for memberIndex = 1,GetNumGuildMembers(guildId) do
  303.                     local name, note, rankIndex, playerStatus, secsSinceLogoff = GetGuildMemberInfo(guildId, memberIndex)
  304.                     if (name == fromName) then
  305.                         local hasCharacter, characterName, zoneName, classType, alliance, level, veteranRank = GetGuildMemberCharacterInfo(guildId, memberIndex)
  306.                         if (characterName ~= nil and characterName:len() > 0) then
  307.                             player.CharacterName = characterName:gsub('%^.*', '')
  308.                             break
  309.                         end
  310.                     end
  311.                 end
  312.                 if (player.CharacterName) then
  313.                     break
  314.                 end
  315.             end
  316.         end
  317.     end
  318. end
  319.  
  320. function X4D_Chat.CreateCharacterLink(fromName, channelInfo)
  321.     local result = fromName
  322.     if (X4D_Chat.Settings.SavedVars.GuildCharNames) then
  323.         local player = GetPlayer(fromName)
  324.         if (not (player and player.CharacterName and player.Time >= (GetGameTimeMilliseconds() - 15000))) then
  325.             player = AddPlayer(fromName)
  326.             TryUpdatePlayerCharacterName(player, fromName)
  327.         end
  328.         if (not player.CharacterName) then
  329.             player.CharacterName = fromName
  330.         end
  331.         if (player.CharacterName) then
  332.             result = player.CharacterName
  333.         end
  334.     end
  335.     if (channelInfo == nil or channelInfo.playerLinkable) then
  336.         if (result and result ~= fromName) then
  337.             local rep = fromName:gsub('([^%a%d%s])', '%%%1')
  338.             local linkName = ZO_LinkHandler_CreatePlayerLink(fromName)
  339.             if (linkName) then
  340.                 if (X4D_Chat.Settings.SavedVars.GuildPlayerNames) then
  341.                     result = linkName:gsub(rep, result .. fromName)
  342.                 else
  343.                     result = linkName:gsub(rep, result)
  344.                 end
  345.             end
  346.         else
  347.             result = ZO_LinkHandler_CreatePlayerLink(fromName)
  348.         end
  349.     end
  350.     return result
  351. end
  352.  
  353. function X4D_Chat.StripColors(text)
  354.     if (X4D_Chat.Settings.SavedVars.StripColors) then
  355.         return text:gsub('%|c%x%x%x%x%x%x', '')
  356.     end
  357.     return text
  358. end
  359.  
  360. local function StringSplit(s, delimiter)
  361.     local result = {}
  362.     for match in (s..delimiter):gmatch("(.-)"..delimiter) do
  363.         local s = tostring(match)
  364.         if (s:len() > 0) then
  365.             table.insert(result, match)
  366.         end
  367.     end
  368.     return result
  369. end
  370.  
  371. function HEX2DEC(input, offset)
  372.     return (tonumber(input:sub(offset, offset), 16) * 16) + tonumber(input:sub(offset + 1, offset + 1), 16)
  373. end
  374.  
  375. function DEC2HEX(input)
  376.     local h = (input / 16)
  377.     local l = (input - (h * 16))
  378.     return string.format('%x%x', h, l)
  379. end
  380.  
  381. function string.StartsWith(String,Start)
  382.    return string.sub(String,1,string.len(Start))==Start
  383. end
  384.  
  385. local _nextUpdateTime = 0
  386.  
  387. local function OnUpdate(...)
  388.     local timeNow = GetGameTimeMilliseconds()
  389.     if (_nextUpdateTime >= timeNow) then
  390.         return
  391.     end
  392.     _nextUpdateTime = timeNow + 5000
  393.     X4D_Chat.Register()
  394.     if (X4D_Chat.Settings.SavedVars.PreventChatFade) then
  395.         if (ZO_ChatWindow.container and ZO_ChatWindow.container.currentBuffer) then
  396.             ZO_ChatWindow.container.currentBuffer:ShowFadedLines()
  397.         end
  398.     end
  399. end
  400.  
  401. local function SetComboboxValue(controlName, value)
  402.     local combobox = _G[controlName]
  403.     local dropmenu = ZO_ComboBox_ObjectFromContainer(GetControl(combobox, "Dropdown"))
  404.     local items = dropmenu:GetItems()
  405.     for k,v in pairs(items) do
  406.         if (v.name == value) then
  407.             dropmenu:SetSelectedItem(v.name)
  408.         end
  409.     end
  410. end
  411.  
  412. local function SetCheckboxValue(controlName, value)
  413.     local checkbox = _G[controlName]:GetNamedChild('Checkbox')
  414.     checkbox:SetState(value and 1 or 0)
  415.     checkbox:toggleFunction(value)
  416. end
  417.  
  418. local function SetSliderValue(controlName, value, minValue, maxValue)
  419.     local range = maxValue - minValue
  420.     local slider = _G[controlName]
  421.     local slidercontrol = slider:GetNamedChild("Slider")
  422.     local slidervalue = slider:GetNamedChild("ValueLabel")
  423.     slidercontrol:SetValue((value - minValue)/range)
  424.     slidervalue:SetText(tostring(value))
  425. end
  426.  
  427. local function SetEditBoxValue(controlName, value, maxInputChars)
  428.     if (maxInputChars and maxInputChars > 0) then
  429.         _G[controlName]['edit']:SetMaxInputChars(maxInputChars)
  430.     end
  431.     _G[controlName]['edit']:SetText(value)
  432. end
  433.  
  434. local function OnAddOnLoaded(event, addonName)
  435.     if (addonName ~= X4D_Chat.NAME) then
  436.         return
  437.     end
  438.     X4D_Chat.Settings.SavedVars = ZO_SavedVars:NewAccountWide(X4D_Chat.NAME .. '_SV', 1.12, nil, X4D_Chat.Settings.Defaults)
  439.     local LAM = LibStub('LibAddonMenu-1.0')
  440.     local cplId = LAM:CreateControlPanel('X4D_Chat_CPL', 'X4D |cFFAE19Chat')
  441.     LAM:AddHeader(cplId,
  442.         'X4D_CHAT_HEADER_SETTINGS', 'Settings')
  443.  
  444.     LAM:AddDropdown(cplId, 'X4D_CHAT_OPTION_TIMESTAMPS', 'Timestamps',
  445.         'Timestamp Option', {'Disabled', '24 Hour Format', '12 Hour Format'},
  446.         function() return X4D_Chat.Settings.SavedVars.TimestampOption or '24 Hour Format' end,
  447.         function(option)
  448.             X4D_Chat.Settings.SavedVars.TimestampOption = option
  449.         end)
  450.  
  451.     LAM:AddCheckbox(cplId,
  452.         'X4D_CHAT_CHECK_REMOVESECONDS', 'Remove "Seconds" Component',
  453.         'When enabled, the "Seconds" component is removed from timestamps.',
  454.         function() return X4D_Chat.Settings.SavedVars.RemoveSeconds end,
  455.         function() X4D_Chat.Settings.SavedVars.RemoveSeconds = not X4D_Chat.Settings.SavedVars.RemoveSeconds end)
  456.  
  457.     LAM:AddCheckbox(cplId,
  458.         'X4D_CHAT_CHECK_GUILD_CHARNAMES', 'Show Character Names in Guild Chat',
  459.         'When enabled, Player Names are replaced with Character Names in Guild Chat.',
  460.         function() return X4D_Chat.Settings.SavedVars.GuildCharNames end,
  461.         function() X4D_Chat.Settings.SavedVars.GuildCharNames = not X4D_Chat.Settings.SavedVars.GuildCharNames end)
  462.  
  463.     LAM:AddCheckbox(cplId,
  464.         'X4D_CHAT_CHECK_GUILD_PLAYERNAMES', 'Show Player Names in Guild Chat',
  465.         'When enabled, Player Names are replaced with Character Names in Guild Chat.',
  466.         function() return X4D_Chat.Settings.SavedVars.GuildPlayerNames end,
  467.         function() X4D_Chat.Settings.SavedVars.GuildPlayerNames = not X4D_Chat.Settings.SavedVars.GuildPlayerNames end)
  468.  
  469.     LAM:AddCheckbox(cplId,
  470.         'X4D_CHAT_CHECK_GUILD_ABBR', 'Use Guild Abbrevations',
  471.         'When enabled, Guild Names are replaced with an Abbreviation. Abbrevations are set in the Guild Description e.g. [FOO], or inferred as the capital letters of the guild.',
  472.         function() return X4D_Chat.Settings.SavedVars.UseGuildAbbr end,
  473.         function()
  474.             X4D_Chat.Settings.SavedVars.UseGuildAbbr = not X4D_Chat.Settings.SavedVars.UseGuildAbbr
  475.             X4D_Chat.Guilds = {}
  476.         end)
  477.  
  478.     LAM:AddCheckbox(cplId,
  479.         'X4D_CHAT_CHECK_GUILD_NUM', 'Use Guild Number',
  480.         'When enabled, Guild Names are replaced with their corresponding Number.',
  481.         function() return X4D_Chat.Settings.SavedVars.UseGuildNum end,
  482.         function()
  483.             X4D_Chat.Settings.SavedVars.UseGuildNum = not X4D_Chat.Settings.SavedVars.UseGuildNum
  484.             X4D_Chat.Guilds = {}
  485.         end)
  486.  
  487.     LAM:AddCheckbox(cplId,
  488.         'X4D_CHAT_CHECK_STRIP_COLORS', 'Strip Colors',
  489.         'When enabled, color codes are stripped from chat messages.',
  490.         function() return X4D_Chat.Settings.SavedVars.StripColors end,
  491.         function() X4D_Chat.Settings.SavedVars.StripColors = not X4D_Chat.Settings.SavedVars.StripColors end)
  492.  
  493.     LAM:AddCheckbox(cplId,
  494.         'X4D_CHAT_CHECK_STRIP_EXCESS', 'Strip Excess Text',
  495.         'When enabled, excess text is stripped from chat messages.',
  496.         function() return X4D_Chat.Settings.SavedVars.StripExcess end,
  497.         function() X4D_Chat.Settings.SavedVars.StripExcess = not X4D_Chat.Settings.SavedVars.StripExcess end)
  498.  
  499.     LAM:AddCheckbox(cplId,
  500.         'X4D_CHAT_CHECK_PREVENT_FADE', 'Prevent Chat Fade',
  501.         'When enabled, Chat Window will not Fade.',
  502.         function() return X4D_Chat.Settings.SavedVars.PreventChatFade end,
  503.         function() X4D_Chat.Settings.SavedVars.PreventChatFade = not X4D_Chat.Settings.SavedVars.PreventChatFade end)
  504.  
  505.     LAM:AddCheckbox(cplId,
  506.         'X4D_CHAT_CHECK_DISABLE_FRIEND_STATUS', 'Disable Friend Status Messages',
  507.         'When enabled, Friend Online/Offline Status Messages are not displayed.',
  508.         function() return X4D_Chat.Settings.SavedVars.DisableFriendStatus end,
  509.         function() X4D_Chat.Settings.SavedVars.DisableFriendStatus = not X4D_Chat.Settings.SavedVars.DisableFriendStatus end)
  510.  
  511.     LAM:AddEditBox(cplId,
  512.         'X4D_CHAT_EDIT_GUILD1', 'Guild #1',
  513.         'An Abbreviation for Guild #1, do not include brackets.',
  514.         false,
  515.         function()
  516.             return X4D_Chat.Settings.SavedVars.GuildAbbr[1]
  517.         end,
  518.         function()
  519.             X4D_Chat.Settings.SavedVars.GuildAbbr[1] = _G['X4D_CHAT_EDIT_GUILD1']['edit']:GetText()
  520.         end)
  521.     SetEditBoxValue('X4D_CHAT_EDIT_GUILD1', X4D_Chat.Settings.SavedVars.GuildAbbr[1], 10)
  522.  
  523.     LAM:AddEditBox(cplId,
  524.         'X4D_CHAT_EDIT_GUILD2', 'Guild #2',
  525.         'An Abbreviation for Guild #2, do not include brackets.',
  526.         false,
  527.         function()
  528.             return X4D_Chat.Settings.SavedVars.GuildAbbr[2]
  529.         end,
  530.         function()
  531.             X4D_Chat.Settings.SavedVars.GuildAbbr[2] = _G['X4D_CHAT_EDIT_GUILD2']['edit']:GetText()
  532.         end)
  533.     SetEditBoxValue('X4D_CHAT_EDIT_GUILD2', X4D_Chat.Settings.SavedVars.GuildAbbr[2], 10)
  534.  
  535.     LAM:AddEditBox(cplId,
  536.         'X4D_CHAT_EDIT_GUILD3', 'Guild #3',
  537.         'An Abbreviation for Guild #3, do not include brackets.',
  538.         false,
  539.         function()
  540.             return X4D_Chat.Settings.SavedVars.GuildAbbr[3]
  541.         end,
  542.         function()
  543.             X4D_Chat.Settings.SavedVars.GuildAbbr[3] = _G['X4D_CHAT_EDIT_GUILD3']['edit']:GetText()
  544.         end)
  545.     SetEditBoxValue('X4D_CHAT_EDIT_GUILD3', X4D_Chat.Settings.SavedVars.GuildAbbr[3], 10)
  546.  
  547.     LAM:AddEditBox(cplId,
  548.         'X4D_CHAT_EDIT_GUILD4', 'Guild #4',
  549.         'An Abbreviation for Guild #4, do not include brackets.',
  550.         false,
  551.         function()
  552.             return X4D_Chat.Settings.SavedVars.GuildAbbr[4]
  553.         end,
  554.         function()
  555.             X4D_Chat.Settings.SavedVars.GuildAbbr[4] = _G['X4D_CHAT_EDIT_GUILD4']['edit']:GetText()
  556.         end)
  557.     SetEditBoxValue('X4D_CHAT_EDIT_GUILD4', X4D_Chat.Settings.SavedVars.GuildAbbr[4], 10)
  558.  
  559.     LAM:AddEditBox(cplId,
  560.         'X4D_CHAT_EDIT_GUILD5', 'Guild #5',
  561.         'An Abbreviation for Guild #5, do not include brackets.',
  562.         false,
  563.         function()
  564.             return X4D_Chat.Settings.SavedVars.GuildAbbr[5]
  565.         end,
  566.         function()
  567.             X4D_Chat.Settings.SavedVars.GuildAbbr[5] = _G['X4D_CHAT_EDIT_GUILD5']['edit']:GetText()
  568.         end)
  569.     SetEditBoxValue('X4D_CHAT_EDIT_GUILD5', X4D_Chat.Settings.SavedVars.GuildAbbr[5], 10)
  570.  
  571.     ZO_PreHook("ZO_OptionsWindow_ChangePanels", function(panel)
  572.             if (panel == cplId) then
  573.                 ZO_OptionsWindowResetToDefaultButton:SetCallback(function ()
  574.                     if (ZO_OptionsWindowResetToDefaultButton:GetParent()['currentPanel'] == cplId) then
  575.  
  576.                         SetCheckboxValue('X4D_CHAT_CHECK_GUILD_CHARNAMES', X4D_Chat.Settings.Defaults.GuildCharNames)
  577.                         X4D_Chat.Settings.SavedVars.GuildCharNames = X4D_Chat.Settings.Defaults.GuildCharNames
  578.  
  579.                         SetCheckboxValue('X4D_CHAT_CHECK_GUILD_PLAYERNAMES', X4D_Chat.Settings.Defaults.GuildPlayerNames)
  580.                         X4D_Chat.Settings.SavedVars.GuildPlayerNames = X4D_Chat.Settings.Defaults.GuildPlayerNames
  581.  
  582.                         SetCheckboxValue('X4D_CHAT_CHECK_GUILD_ABBR', X4D_Chat.Settings.Defaults.UseGuildAbbr)
  583.                         X4D_Chat.Settings.SavedVars.UseGuildAbbr = X4D_Chat.Settings.Defaults.UseGuildAbbr
  584.  
  585.                         SetCheckboxValue('X4D_CHAT_CHECK_GUILD_NUM', X4D_Chat.Settings.Defaults.UseGuildNum)
  586.                         X4D_Chat.Settings.SavedVars.UseGuildNum = X4D_Chat.Settings.Defaults.UseGuildNum
  587.  
  588.                         SetComboboxValue('X4D_CHAT_OPTION_TIMESTAMPS', X4D_Chat.Settings.Defaults.TimestampOption)
  589.                         X4D_Chat.Settings.SavedVars.TimestampOption = X4D_Chat.Settings.Defaults.TimestampOption
  590.  
  591.                         SetCheckboxValue('X4D_CHAT_CHECK_STRIP_COLORS', X4D_Chat.Settings.Defaults.StripColors)
  592.                         X4D_Chat.Settings.SavedVars.StripColors = X4D_Chat.Settings.Defaults.StripColors
  593.  
  594.                         SetCheckboxValue('X4D_CHAT_CHECK_STRIP_EXCESS', X4D_Chat.Settings.Defaults.StripExcess)
  595.                         X4D_Chat.Settings.SavedVars.StripExcess = X4D_Chat.Settings.Defaults.StripExcess
  596.  
  597.                         SetCheckboxValue('X4D_CHAT_CHECK_PREVENT_FADE', X4D_Chat.Settings.Defaults.PreventChatFade)
  598.                         X4D_Chat.Settings.SavedVars.PreventChatFade = X4D_Chat.Settings.Defaults.PreventChatFade
  599.  
  600.                         SetCheckboxValue('X4D_CHAT_CHECK_DISABLE_FRIEND_STATUS', X4D_Chat.Settings.Defaults.DisableFriendStatus)
  601.                         X4D_Chat.Settings.SavedVars.DisableFriendStatus = X4D_Chat.Settings.Defaults.DisableFriendStatus
  602.  
  603.                         SetEditBoxValue('X4D_CHAT_EDIT_GUILD1', '', 10)
  604.                         X4D_Chat.Settings.SavedVars.GuildAbbr[1] = ''
  605.                         SetEditBoxValue('X4D_CHAT_EDIT_GUILD2', '', 10)
  606.                         X4D_Chat.Settings.SavedVars.GuildAbbr[2] = ''
  607.                         SetEditBoxValue('X4D_CHAT_EDIT_GUILD3', '', 10)
  608.                         X4D_Chat.Settings.SavedVars.GuildAbbr[3] = ''
  609.                         SetEditBoxValue('X4D_CHAT_EDIT_GUILD4', '', 10)
  610.                         X4D_Chat.Settings.SavedVars.GuildAbbr[4] = ''
  611.                         SetEditBoxValue('X4D_CHAT_EDIT_GUILD5', '', 10)
  612.                         X4D_Chat.Settings.SavedVars.GuildAbbr[5] = ''
  613.  
  614.                     end
  615.                 end)
  616.             end
  617.         end)
  618.  
  619.     -- TODO: these really should intitialize to values relative to the current game window size/resolution - these values are approximations based on a 1920x1080 (Full HD) resolution
  620.     CHAT_SYSTEM['maxContainerHeight'] = 1000
  621.     CHAT_SYSTEM['maxContainerWidth'] = 1800
  622.  
  623.     EVENT_MANAGER:RegisterForUpdate('X4D_Chat_Update', 1000, OnUpdate)
  624. end
  625.  
  626. function X4D_Chat.LootCallback(color, text)
  627.     if (color == nil or color:len() < 8) then
  628.         d('LootCallback.. bad color received')
  629.         color = '|cFFFFFF'
  630.     end
  631.     if (text == nil or text:len() == 0) then
  632.         d('LootCallback.. bad text received')
  633.         text = 'loot?'
  634.     end
  635.     d(GetTimestampPrefix(color) .. text)
  636. end
  637.  
  638. function X4D_Chat.XPCallback(color, text)
  639.     if (color == nil or color:len() < 8) then
  640.         d('XPCallback.. bad color received')
  641.         color = '|cFFFFFF'
  642.     end
  643.     if (text == nil or text:len() == 0) then
  644.         d('XPCallback.. bad text received')
  645.         text = 'xp?'
  646.     end
  647.     d(GetTimestampPrefix(color) .. text)
  648. end
  649.  
  650. function X4D_Chat.AntiSpamEmitCallback(color, text)
  651.     if (color == nil or color:len() < 8) then
  652.         d('AntiSpamEmitCallback.. bad color received')
  653.         color = '|cFFFFFF'
  654.     end
  655.     if (text == nil or text:len() == 0) then
  656.         d('AntiSpamEmitCallback.. bad text received')
  657.         text = 'spam?'
  658.     end
  659.     d(GetTimestampPrefix(color) ..  text)
  660. end
  661.  
  662. function X4D_Chat.BankEmitCallback(color, text)
  663.     if (color == nil or color:len() < 8) then
  664.         d('BankEmitCallback.. bad color received')
  665.         color = '|cFFFFFF'
  666.     end
  667.     if (text == nil or text:len() == 0) then
  668.         d('BankEmitCallback.. bad text received')
  669.         text = 'huh?'
  670.     end
  671.     d(GetTimestampPrefix(color) ..  text)
  672. end
  673.  
  674. local _onFriendPlayerStatusChanged = nil
  675.  
  676. local function OnFriendPlayerStatusChanged(...)
  677.     return GetTimestampPrefix(X4D_Chat.Colors.SYSTEM) .. _onFriendPlayerStatusChanged(...)
  678. end
  679.  
  680. local _onServerShutdownInfo = nil
  681.  
  682. local function OnServerShutdownInfo(...)
  683.     return GetTimestampPrefix(X4D_Chat.Colors.SYSTEM) .. _onServerShutdownInfo(...)
  684. end
  685.  
  686. local _onIgnoreAdded = nil
  687.  
  688. local function OnIgnoreAdded(...)
  689.     return GetTimestampPrefix(X4D_Chat.Colors.SYSTEM) .. _onIgnoreAdded(...)
  690. end
  691.  
  692. local _onIgnoreRemoved = nil
  693.  
  694. local function OnIgnoreRemoved(...)
  695.     return GetTimestampPrefix(X4D_Chat.Colors.SYSTEM) .. _onIgnoreRemoved(...)
  696. end
  697.  
  698. local _onGroupMemberJoined = nil
  699.  
  700. local function OnGroupMemberJoined(...)
  701.     return GetTimestampPrefix(X4D_Chat.Colors.SYSTEM) .. _onGroupMemberJoined(...)
  702. end
  703.  
  704. local _onGroupMemberLeft = nil
  705.  
  706. local function OnGroupMemberLeft(...)
  707.     return GetTimestampPrefix(X4D_Chat.Colors.SYSTEM) .. _onGroupMemberLeft(...)
  708. end
  709.  
  710. local _onGroupTypeChanged = nil
  711.  
  712. local function OnGroupTypeChanged(...)
  713.     return GetTimestampPrefix(X4D_Chat.Colors.SYSTEM) .. _onGroupTypeChanged(...)
  714. end
  715.  
  716. function X4D_Chat.Register()
  717.     ZO_ChatSystem_AddEventHandler(EVENT_CHAT_MESSAGE_CHANNEL, X4D_Chat.OnChatMessageReceived)
  718.     if (not X4D_LibAntiSpam) then
  719.         X4D_LibAntiSpam = LibStub('LibAntiSpam', true)
  720.         if (X4D_LibAntiSpam and X4D_LibAntiSpam.RegisterEmitCallback) then
  721.             X4D_LibAntiSpam:RegisterEmitCallback(X4D_Chat.AntiSpamEmitCallback)
  722.         end
  723.     end
  724.     if (not X4D_Loot) then
  725.         X4D_Loot = LibStub('X4D_Loot', true)
  726.         if (X4D_Loot and X4D_Loot.RegisterCallback) then
  727.             X4D_Loot:RegisterCallback(X4D_Chat.LootCallback)
  728.         end
  729.     end
  730.     if (not X4D_Mail) then
  731.         X4D_Mail = LibStub('X4D_Mail', true)
  732.         if (X4D_Mail and X4D_Mail.RegisterEmitCallback) then
  733.             X4D_Mail:RegisterEmitCallback(X4D_Chat.LootCallback)
  734.         end
  735.     end
  736.     if (not X4D_XP) then
  737.         X4D_XP = LibStub('X4D_XP', true)
  738.         if (X4D_XP and X4D_XP.RegisterCallback) then
  739.             X4D_XP:RegisterCallback(X4D_Chat.XPCallback)
  740.         end
  741.     end
  742.     if (not X4D_Bank) then
  743.         X4D_Bank = LibStub('X4D_Bank', true)
  744.         if (X4D_Bank and X4D_Bank.RegisterEmitCallback) then
  745.             X4D_Bank:RegisterEmitCallback(X4D_Chat.BankEmitCallback)
  746.         end
  747.     end
  748.  
  749.     local r, g, b = GetChatCategoryColor(CHAT_CATEGORY_SYSTEM)
  750.     if (r ~= nil) then
  751.         X4D_Chat.Colors.SYSTEM = X4D_Chat.CreateColorCode(r, g, b)
  752.     end
  753.  
  754.     local handlers = ZO_ChatSystem_GetEventHandlers()
  755.     if (handlers ~= nil) then
  756.         if (_onFriendPlayerStatusChanged == nil) then
  757.             _onFriendPlayerStatusChanged = handlers[EVENT_FRIEND_PLAYER_STATUS_CHANGED]
  758.             if (_onFriendPlayerStatusChanged ~= nil) then
  759.                 handlers[EVENT_FRIEND_PLAYER_STATUS_CHANGED] = OnFriendPlayerStatusChanged
  760.             end
  761.         end
  762.         if (_onServerShutdownInfo == nil) then
  763.             _onServerShutdownInfo = handlers[EVENT_SERVER_SHUTDOWN_INFO]
  764.             if (_onServerShutdownInfo ~= nil) then
  765.                 handlers[EVENT_SERVER_SHUTDOWN_INFO] = OnServerShutdownInfo
  766.             end
  767.         end
  768.         if (_onIgnoreAdded == nil) then
  769.             _onIgnoreAdded = handlers[EVENT_IGNORE_ADDED]
  770.             if (_onIgnoreAdded ~= nil) then
  771.                 handlers[EVENT_IGNORE_ADDED] = OnIgnoreAdded
  772.             end
  773.         end
  774.         if (_onIgnoreRemoved == nil) then
  775.             _onIgnoreRemoved = handlers[EVENT_IGNORE_REMOVED]
  776.             if (_onIgnoreRemoved ~= nil) then
  777.                 handlers[EVENT_IGNORE_REMOVED] = OnIgnoreRemoved
  778.             end
  779.         end
  780.         if (_onGroupMemberJoined == nil) then
  781.             _onGroupMemberJoined = handlers[EVENT_GROUP_MEMBER_JOINED]
  782.             if (_onGroupMemberJoined ~= nil) then
  783.                 handlers[EVENT_GROUP_MEMBER_JOINED] = OnGroupMemberJoined
  784.             end
  785.         end
  786.         if (_onGroupMemberLeft == nil) then
  787.             _onGroupMemberLeft = handlers[EVENT_GROUP_MEMBER_LEFT]
  788.             if (_onGroupMemberLeft ~= nil) then
  789.                 handlers[EVENT_GROUP_MEMBER_LEFT] = OnGroupMemberLeft
  790.             end
  791.         end
  792.         if (_onGroupTypeChanged == nil) then
  793.             _onGroupTypeChanged = handlers[EVENT_GROUP_TYPE_CHANGED]
  794.             if (_onGroupTypeChanged ~= nil) then
  795.                 handlers[EVENT_GROUP_TYPE_CHANGED] = OnGroupTypeChanged
  796.             end
  797.         end
  798.     end
  799. end
  800.  
  801. function X4D_Chat.Unregister()
  802.     ZO_ChatSystem_AddEventHandler(EVENT_CHAT_MESSAGE_CHANNEL, nil)
  803. end
  804.  
  805. local function OnPlayerActivated()
  806.     zo_callLater(X4D_Chat.Register, 3000)
  807. end
  808.  
  809. EVENT_MANAGER:RegisterForEvent(X4D_Chat.NAME, EVENT_ADD_ON_LOADED, OnAddOnLoaded)
  810. EVENT_MANAGER:RegisterForEvent(X4D_Chat.NAME, EVENT_PLAYER_ACTIVATED, OnPlayerActivated)
Advertisement
Add Comment
Please, Sign In to add comment