local LC = LibStub('libChat-1.0') local LGI = LibStub("LibGuildInfo-1.0") local LAM2 = LibStub("LibAddonMenu-2.0") local GuildChat = {} local characterNameMenuOptions = { [1] = "@account", [2] = "character", [3] = "character@account", } local colorOptions = { [1] = "Alliance", [2] = "Class", [3] = "None", [4] = "Custom1", [5] = "Custom2", [6] = "Custom3", [7] = "Custom4", } local Addon = { Name = "GuildChat", NameSpaced = "Guild Chat", Author = "CrazyDutchGuy & Wobin", Version = "4.4", Defaults = { characterName = characterNameMenuOptions[1], guildRank = false, colors = { ["Aldmeri Dominion"] = "ffff00", ["Daggerfall Convenant"]= "4169E1", ["Ebonhart Pact"] = "8B0000", ["Dragon Knight"] = "CA0000", ["Sorcerer"] = "0096FF", ["Nightblade"] = "9900F1", ["Templar"] = "EFEFEF", ["Custom1"] = "FFFFFF", ["Custom2"] = "FFFFFF", ["Custom3"] = "FFFFFF", ["Custom4"] = "FFFFFF", }, ["coloring"] = { ["@account"] = colorOptions[2], ["character"] = colorOptions[2], ["guildRank"] = colorOptions[3], ["level"] = colorOptions[1], }, characterLevel = true, } } local ChannelInfo = ZO_ChatSystem_GetChannelInfo() local CategoryMapping = ZO_ChatSystem_GetEventCategoryMappings() function GuildChat:GetLevel(name) return LGI:GetLevelByMemberName(name) or 0 end function GuildChat:GetClassColour(name) return GuildChat.settings.colors[LGI:GetClassNameByMemberName(name)] end function GuildChat:GetAtColour(name) return GuildChat.settings.colors[LGI:GetAllianceNameByMemberName(name)] end local function getSavedColor(tableEntry,name) if GuildChat.settings.coloring[tableEntry] == colorOptions[1] then if GuildChat:GetAtColour(name) then return "|c" .. GuildChat:GetAtColour(name) end elseif GuildChat.settings.coloring[tableEntry] == colorOptions[2] then if GuildChat:GetClassColour(name) then return "|c" .. GuildChat:GetClassColour(name) end elseif GuildChat.settings.coloring[tableEntry] == colorOptions[3] then return "" elseif GuildChat.settings.coloring[tableEntry] == colorOptions[4] or GuildChat.settings.coloring[tableEntry] == colorOptions[5] or GuildChat.settings.coloring[tableEntry] == colorOptions[6] or GuildChat.settings.coloring[tableEntry] == colorOptions[7] then return "|c" .. GuildChat.settings.colors[GuildChat.settings.coloring[tableEntry]] end return "" end function GuildChat:GetCharacterNameLink(name) local memberInfo = LGI:GetGuildMemberByMemberName(name) local characterName = nil local characterLink = "" if memberInfo then characterName = memberInfo.characterName end if characterName then characterLink = ZO_LinkHandler_CreatePlayerLink(characterName) end if GuildChat.settings.characterName == characterNameMenuOptions[1] then return getSavedColor("@account", name) .. ZO_LinkHandler_CreatePlayerLink(name) .. "|r" elseif GuildChat.settings.characterName == characterNameMenuOptions[2] then return getSavedColor("character", name) .. characterLink .. "|r" elseif GuildChat.settings.characterName == characterNameMenuOptions[3] then return getSavedColor("character", name) .. characterLink .. "|r" .. getSavedColor("@account", name) .. ZO_LinkHandler_CreatePlayerLink(name) .. "|r" end return "" end function GuildChat:GetName(channelId, fromName, text) if not LGI:GetGuildMemberByMemberName(fromName) then return fromName end -- For whispers and tells from people not in one of your guilds local formattedName = "" if GuildChat.settings.guildRank then formattedName = formattedName .. getSavedColor("guildRank", fromName) .. "[" .. LGI:GetGuildRankByMemberName(fromName) .. "]" .. "|r" end if GuildChat.settings.characterLevel then formattedName = formattedName .. getSavedColor("level", fromName) .. "[" .. GuildChat:GetLevel(fromName) .. "]" .. "|r" end formattedName = formattedName .. GuildChat:GetCharacterNameLink(fromName) return formattedName end function GuildChat:Register() LC:registerName(function(...) return GuildChat:GetName(...) end) EVENT_MANAGER:UnregisterForEvent(Addon.Name, EVENT_PLAYER_ACTIVATED ) end local function RGBtoHEX(r,g,b,a) -- We can't have chat strings with alpha channels --return string.format("%.2x%.2x%.2x%.2x", math.floor(a * 255),math.floor(r * 255), math.floor(g * 255), math.floor(b * 255)) return string.format("%.2x%.2x%.2x", math.floor(r * 255), math.floor(g * 255), math.floor(b * 255)) end local function HEXtoRGB(hex) local a, r, g, b if(string.len(hex) == 8) then a, r, g, b = tonumber("0x"..string.sub(hex, 1, 2)) / 255, tonumber("0x"..string.sub(hex, 3, 4)) / 255, tonumber("0x"..string.sub(hex, 5, 6)) / 255, tonumber("0x"..string.sub(hex, 7, 8)) / 255 elseif(string.len(hex) == 6) then a, r, g, b = 1, tonumber("0x"..string.sub(hex, 1, 2)) / 255, tonumber("0x"..string.sub(hex, 3, 4)) / 255, tonumber("0x"..string.sub(hex, 5, 6)) / 255 end if(a) then return r, g, b, a end end local function createLAM2Panel() local panelData = { type = "panel", name = Addon.NameSpaced, displayName = "|cFFFFB0" .. Addon.NameSpaced .. "|r", author = Addon.Author, version = Addon.Version, } local optionsData = {} table.insert(optionsData, { type = "header", name = "Chat Options", }) table.insert(optionsData, { type = "dropdown", name = "Set the name to be", tooltip = "Guild Chat can display Account and/or Character name", choices = characterNameMenuOptions, getFunc = function() return GuildChat.settings.characterName end, setFunc = function(value) GuildChat.settings.characterName = value end, }) table.insert(optionsData, { type = "checkbox", name = "Show Guild Rank", nil, getFunc = function() return GuildChat.settings.guildRank end, setFunc = function(value) GuildChat.settings.guildRank = value end, }) table.insert(optionsData, { type = "checkbox", name = "Show Character Level", nil, getFunc = function() return GuildChat.settings.characterLevel end, setFunc = function(value) GuildChat.settings.characterLevel = value end, }) table.insert(optionsData, { type = "header", name = "Coloring Options", }) table.insert(optionsData, { type = "dropdown", name = "Account Name", nil, choices = colorOptions, getFunc = function() return GuildChat.settings.coloring["@account"] end, setFunc = function(value) GuildChat.settings.coloring["@account"] = value end, }) table.insert(optionsData, { type = "dropdown", name = "Character Name", nil, choices = colorOptions, getFunc = function() return GuildChat.settings.coloring["character"] end, setFunc = function(value) GuildChat.settings.coloring["character"] = value end, }) table.insert(optionsData, { type = "dropdown", name = "Character Level", nil, choices = colorOptions, getFunc = function() return GuildChat.settings.coloring["level"] end, setFunc = function(value) GuildChat.settings.coloring["level"] = value end, }) table.insert(optionsData, { type = "dropdown", name = "Guild Ranking", nil, choices = colorOptions, getFunc = function() return GuildChat.settings.coloring["guildRank"] end, setFunc = function(value) GuildChat.settings.coloring["guildRank"] = value end, }) table.insert(optionsData, { type = "header", name = "Faction Colors", }) table.insert(optionsData, { type = "colorpicker", name = "Aldmeri Dominion", tooltip = "Aldmeri Dominion Color.", getFunc = function() return HEXtoRGB(GuildChat.settings.colors["Aldmeri Dominion"]) end, setFunc = function(r,g,b,a) GuildChat.settings.colors["Aldmeri Dominion"] = RGBtoHEX(r,g,b,a) end, }) table.insert(optionsData, { type = "colorpicker", name = "Daggerfall Convenant", tooltip = "Daggerfall Convenant Color.", getFunc = function() return HEXtoRGB(GuildChat.settings.colors["Daggerfall Convenant"]) end, setFunc = function(r,g,b,a) GuildChat.settings.colors["Daggerfall Convenant"] = RGBtoHEX(r,g,b,a) end, }) table.insert(optionsData, { type = "colorpicker", name = "Ebonhart Pact", tooltip = "Ebonhart Pact Color.", getFunc = function() return HEXtoRGB(GuildChat.settings.colors["Ebonhart Pact"]) end, setFunc = function(r,g,b,a) GuildChat.settings.colors["Ebonhart Pact"] = RGBtoHEX(r,g,b,a) end, }) table.insert(optionsData, { type = "header", name = "Class Colors", }) table.insert(optionsData, { type = "colorpicker", name = "Dragon Knight", tooltip = "Dragon Knight Color.", getFunc = function() return HEXtoRGB(GuildChat.settings.colors["Dragon Knight"]) end, setFunc = function(r,g,b,a) GuildChat.settings.colors["Dragon Knight"] = RGBtoHEX(r,g,b,a) end, }) table.insert(optionsData, { type = "colorpicker", name = "Sorcerer", tooltip = "Sorcerer Color.", getFunc = function() return HEXtoRGB(GuildChat.settings.colors["Sorcerer"]) end, setFunc = function(r,g,b,a) GuildChat.settings.colors["Sorcerer"] = RGBtoHEX(r,g,b,a) end, }) table.insert(optionsData, { type = "colorpicker", name = "Nightblade", tooltip = "Nightblade Color.", getFunc = function() return HEXtoRGB(GuildChat.settings.colors["Nightblade"]) end, setFunc = function(r,g,b,a) GuildChat.settings.colors["Nightblade"] = RGBtoHEX(r,g,b,a) end, }) table.insert(optionsData, { type = "colorpicker", name = "Templar", tooltip = "Templar Color.", getFunc = function() return HEXtoRGB(GuildChat.settings.colors["Templar"]) end, setFunc = function(r,g,b,a) GuildChat.settings.colors["Templar"] = RGBtoHEX(r,g,b,a) end, }) table.insert(optionsData, { type = "header", name = "Custom Colors", }) table.insert(optionsData, { type = "colorpicker", name = "Custom #1", tooltip = "Custom #1 Color.", getFunc = function() return HEXtoRGB(GuildChat.settings.colors["Custom1"]) end, setFunc = function(r,g,b,a) GuildChat.settings.colors["Custom1"] = RGBtoHEX(r,g,b,a) end, }) table.insert(optionsData, { type = "colorpicker", name = "Custom #2", tooltip = "Custom #2 Color.", getFunc = function() return HEXtoRGB(GuildChat.settings.colors["Custom2"]) end, setFunc = function(r,g,b,a) GuildChat.settings.colors["Custom2"] = RGBtoHEX(r,g,b,a) end, }) table.insert(optionsData, { type = "colorpicker", name = "Custom #3", tooltip = "Custom #3 Color.", getFunc = function() return HEXtoRGB(GuildChat.settings.colors["Custom3"]) end, setFunc = function(r,g,b,a) GuildChat.settings.colors["Custom3"] = RGBtoHEX(r,g,b,a) end, }) table.insert(optionsData, { type = "colorpicker", name = "Custom #4", tooltip = "Custom #4 Color.", getFunc = function() return HEXtoRGB(GuildChat.settings.colors["Custom4"]) end, setFunc = function(r,g,b,a) GuildChat.settings.colors["Custom4"] = RGBtoHEX(r,g,b,a) end, }) LAM2:RegisterAddonPanel(Addon.Name.."LAM2Options", panelData) LAM2:RegisterOptionControls(Addon.Name.."LAM2Options", optionsData) end function GuildChat:EVENT_ADD_ON_LOADED(eventId, addonName) if addonName ~= Addon.Name then return end GuildChat.settings = ZO_SavedVars:NewAccountWide('GuildChat_Settings', 4, nil, Addon.Defaults) createLAM2Panel() EVENT_MANAGER:UnregisterForEvent( Addon.Name, EVENT_ADD_ON_LOADED ) end EVENT_MANAGER:RegisterForEvent(Addon.Name, EVENT_ADD_ON_LOADED, function(...) GuildChat:EVENT_ADD_ON_LOADED(...) end) EVENT_MANAGER:RegisterForEvent(Addon.Name, EVENT_PLAYER_ACTIVATED, function(...) zo_callLater(GuildChat.Register, 5000) end)