--------------------------------------------------------------------------------- -- -- Prat - A framework for World of Warcraft chat mods -- -- Copyright (C) 2023 Prat Development Team -- -- This program is free software; you can redistribute it and/or -- modify it under the terms of the GNU General Public License -- as published by the Free Software Foundation; either version 2 -- of the License, or (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to: -- -- Free Software Foundation, Inc., -- 51 Franklin Street, Fifth Floor, -- Boston, MA 02110-1301, USA. -- -- ------------------------------------------------------------------------------- Prat:AddModuleToLoad(function() local PRAT_MODULE = Prat:RequestModuleName("LinkInfoIcons") if PRAT_MODULE == nil then return end local module = Prat:NewModule(PRAT_MODULE) local PL = module.PL -- define localized strings local PL = module.PL --[==[@debug@ PL:AddLocale(PRAT_MODULE, "enUS", { ["module_name"] = "LinkInfoIcons", ["module_desc"] = "Adds icons and item info to hyperlinks", ["full_description"] = "Adds icons and item info to links in the chat.", ["Item Links"] = "Item Links", ["Spell Links"] = "Spell Links", ["Achievement Links"] = "Achievement Links", ["Player Links"] = "Player Links", ["Icon"] = "Icon", ["Item Level"] = "Item Level", ["Item Type"] = "Item Type", ["Class Icon"] = "Class Icon", ["Class Label"] = "Class Label", ["Race Label"] = "Race Label", }) --@end-debug@]==] -- These Localizations are auto-generated. To help with localization -- please go to http://www.wowace.com/projects/prat-3-0/localization/ --@non-debug@ do local L L = { ["LinkInfoIcons"] = { ["Achievement Links"] = true, ["Class Icon"] = true, ["Class Label"] = true, ["full_description"] = "Adds icons and item info to links in the chat.", ["Icon"] = true, ["Item Level"] = true, ["Item Links"] = true, ["Item Type"] = true, ["module_desc"] = "Adds icons and item info to hyperlinks", ["module_name"] = "LinkInfoIcons", ["Player Links"] = true, ["Race Label"] = true, ["Spell Links"] = true, } } PL:AddLocale(PRAT_MODULE, "enUS", L) L = { ["LinkInfoIcons"] = { --[[Translation missing --]] ["Achievement Links"] = "Achievement Links", --[[Translation missing --]] ["Class Icon"] = "Class Icon", --[[Translation missing --]] ["Class Label"] = "Class Label", --[[Translation missing --]] ["full_description"] = "Adds icons and item info to links in the chat.", --[[Translation missing --]] ["Icon"] = "Icon", --[[Translation missing --]] ["Item Level"] = "Item Level", --[[Translation missing --]] ["Item Links"] = "Item Links", --[[Translation missing --]] ["Item Type"] = "Item Type", --[[Translation missing --]] ["module_desc"] = "Adds icons and item info to hyperlinks", --[[Translation missing --]] ["module_name"] = "LinkInfoIcons", --[[Translation missing --]] ["Player Links"] = "Player Links", --[[Translation missing --]] ["Race Label"] = "Race Label", --[[Translation missing --]] ["Spell Links"] = "Spell Links", } } PL:AddLocale(PRAT_MODULE, "itIT", L) L = { ["LinkInfoIcons"] = { --[[Translation missing --]] ["Achievement Links"] = "Achievement Links", --[[Translation missing --]] ["Class Icon"] = "Class Icon", --[[Translation missing --]] ["Class Label"] = "Class Label", --[[Translation missing --]] ["full_description"] = "Adds icons and item info to links in the chat.", --[[Translation missing --]] ["Icon"] = "Icon", --[[Translation missing --]] ["Item Level"] = "Item Level", --[[Translation missing --]] ["Item Links"] = "Item Links", --[[Translation missing --]] ["Item Type"] = "Item Type", --[[Translation missing --]] ["module_desc"] = "Adds icons and item info to hyperlinks", --[[Translation missing --]] ["module_name"] = "LinkInfoIcons", --[[Translation missing --]] ["Player Links"] = "Player Links", --[[Translation missing --]] ["Race Label"] = "Race Label", --[[Translation missing --]] ["Spell Links"] = "Spell Links", } } PL:AddLocale(PRAT_MODULE, "ptBR", L) L = { ["LinkInfoIcons"] = { --[[Translation missing --]] ["Achievement Links"] = "Achievement Links", --[[Translation missing --]] ["Class Icon"] = "Class Icon", --[[Translation missing --]] ["Class Label"] = "Class Label", --[[Translation missing --]] ["full_description"] = "Adds icons and item info to links in the chat.", --[[Translation missing --]] ["Icon"] = "Icon", --[[Translation missing --]] ["Item Level"] = "Item Level", --[[Translation missing --]] ["Item Links"] = "Item Links", --[[Translation missing --]] ["Item Type"] = "Item Type", --[[Translation missing --]] ["module_desc"] = "Adds icons and item info to hyperlinks", --[[Translation missing --]] ["module_name"] = "LinkInfoIcons", --[[Translation missing --]] ["Player Links"] = "Player Links", --[[Translation missing --]] ["Race Label"] = "Race Label", --[[Translation missing --]] ["Spell Links"] = "Spell Links", } } PL:AddLocale(PRAT_MODULE, "frFR", L) L = { ["LinkInfoIcons"] = { ["Achievement Links"] = "Erfolgslinks", ["Class Icon"] = "Klassensymbol", ["Class Label"] = "Klassenbeschriftung", ["full_description"] = "Fügt Links im Chat Symbole und Gegenstandsinformationen hinzu.", ["Icon"] = "Symbol", ["Item Level"] = "Gegenstandsstufe", ["Item Links"] = "Gegenstandslinks", ["Item Type"] = "Gegenstandsart", ["module_desc"] = "Fügt Hyperlinks Symbole und Gegenstandsinformationen hinzu", ["module_name"] = "LinkInfo-Symbole", ["Player Links"] = "Spielerlinks", ["Race Label"] = "Wettlaufbeschriftung", ["Spell Links"] = "Zauberlinks", } } PL:AddLocale(PRAT_MODULE, "deDE", L) L = { ["LinkInfoIcons"] = { --[[Translation missing --]] ["Achievement Links"] = "Achievement Links", --[[Translation missing --]] ["Class Icon"] = "Class Icon", --[[Translation missing --]] ["Class Label"] = "Class Label", --[[Translation missing --]] ["full_description"] = "Adds icons and item info to links in the chat.", --[[Translation missing --]] ["Icon"] = "Icon", --[[Translation missing --]] ["Item Level"] = "Item Level", --[[Translation missing --]] ["Item Links"] = "Item Links", --[[Translation missing --]] ["Item Type"] = "Item Type", --[[Translation missing --]] ["module_desc"] = "Adds icons and item info to hyperlinks", --[[Translation missing --]] ["module_name"] = "LinkInfoIcons", --[[Translation missing --]] ["Player Links"] = "Player Links", --[[Translation missing --]] ["Race Label"] = "Race Label", --[[Translation missing --]] ["Spell Links"] = "Spell Links", } } PL:AddLocale(PRAT_MODULE, "koKR", L) L = { ["LinkInfoIcons"] = { --[[Translation missing --]] ["Achievement Links"] = "Achievement Links", --[[Translation missing --]] ["Class Icon"] = "Class Icon", --[[Translation missing --]] ["Class Label"] = "Class Label", --[[Translation missing --]] ["full_description"] = "Adds icons and item info to links in the chat.", --[[Translation missing --]] ["Icon"] = "Icon", --[[Translation missing --]] ["Item Level"] = "Item Level", --[[Translation missing --]] ["Item Links"] = "Item Links", --[[Translation missing --]] ["Item Type"] = "Item Type", --[[Translation missing --]] ["module_desc"] = "Adds icons and item info to hyperlinks", --[[Translation missing --]] ["module_name"] = "LinkInfoIcons", --[[Translation missing --]] ["Player Links"] = "Player Links", --[[Translation missing --]] ["Race Label"] = "Race Label", --[[Translation missing --]] ["Spell Links"] = "Spell Links", } } PL:AddLocale(PRAT_MODULE, "esMX", L) L = { ["LinkInfoIcons"] = { --[[Translation missing --]] ["Achievement Links"] = "Achievement Links", --[[Translation missing --]] ["Class Icon"] = "Class Icon", --[[Translation missing --]] ["Class Label"] = "Class Label", --[[Translation missing --]] ["full_description"] = "Adds icons and item info to links in the chat.", --[[Translation missing --]] ["Icon"] = "Icon", --[[Translation missing --]] ["Item Level"] = "Item Level", --[[Translation missing --]] ["Item Links"] = "Item Links", --[[Translation missing --]] ["Item Type"] = "Item Type", --[[Translation missing --]] ["module_desc"] = "Adds icons and item info to hyperlinks", --[[Translation missing --]] ["module_name"] = "LinkInfoIcons", --[[Translation missing --]] ["Player Links"] = "Player Links", --[[Translation missing --]] ["Race Label"] = "Race Label", --[[Translation missing --]] ["Spell Links"] = "Spell Links", } } PL:AddLocale(PRAT_MODULE, "ruRU", L) L = { ["LinkInfoIcons"] = { --[[Translation missing --]] ["Achievement Links"] = "Achievement Links", --[[Translation missing --]] ["Class Icon"] = "Class Icon", --[[Translation missing --]] ["Class Label"] = "Class Label", --[[Translation missing --]] ["full_description"] = "Adds icons and item info to links in the chat.", --[[Translation missing --]] ["Icon"] = "Icon", --[[Translation missing --]] ["Item Level"] = "Item Level", --[[Translation missing --]] ["Item Links"] = "Item Links", --[[Translation missing --]] ["Item Type"] = "Item Type", --[[Translation missing --]] ["module_desc"] = "Adds icons and item info to hyperlinks", --[[Translation missing --]] ["module_name"] = "LinkInfoIcons", --[[Translation missing --]] ["Player Links"] = "Player Links", --[[Translation missing --]] ["Race Label"] = "Race Label", --[[Translation missing --]] ["Spell Links"] = "Spell Links", } } PL:AddLocale(PRAT_MODULE, "zhCN", L) L = { ["LinkInfoIcons"] = { --[[Translation missing --]] ["Achievement Links"] = "Achievement Links", --[[Translation missing --]] ["Class Icon"] = "Class Icon", --[[Translation missing --]] ["Class Label"] = "Class Label", --[[Translation missing --]] ["full_description"] = "Adds icons and item info to links in the chat.", --[[Translation missing --]] ["Icon"] = "Icon", --[[Translation missing --]] ["Item Level"] = "Item Level", --[[Translation missing --]] ["Item Links"] = "Item Links", --[[Translation missing --]] ["Item Type"] = "Item Type", --[[Translation missing --]] ["module_desc"] = "Adds icons and item info to hyperlinks", --[[Translation missing --]] ["module_name"] = "LinkInfoIcons", --[[Translation missing --]] ["Player Links"] = "Player Links", --[[Translation missing --]] ["Race Label"] = "Race Label", --[[Translation missing --]] ["Spell Links"] = "Spell Links", } } PL:AddLocale(PRAT_MODULE, "esES", L) L = { ["LinkInfoIcons"] = { --[[Translation missing --]] ["Achievement Links"] = "Achievement Links", --[[Translation missing --]] ["Class Icon"] = "Class Icon", --[[Translation missing --]] ["Class Label"] = "Class Label", --[[Translation missing --]] ["full_description"] = "Adds icons and item info to links in the chat.", --[[Translation missing --]] ["Icon"] = "Icon", --[[Translation missing --]] ["Item Level"] = "Item Level", --[[Translation missing --]] ["Item Links"] = "Item Links", --[[Translation missing --]] ["Item Type"] = "Item Type", --[[Translation missing --]] ["module_desc"] = "Adds icons and item info to hyperlinks", --[[Translation missing --]] ["module_name"] = "LinkInfoIcons", --[[Translation missing --]] ["Player Links"] = "Player Links", --[[Translation missing --]] ["Race Label"] = "Race Label", --[[Translation missing --]] ["Spell Links"] = "Spell Links", } } PL:AddLocale(PRAT_MODULE, "zhTW", L) end --@end-non-debug@ Prat:SetModuleDefaults(module.name, { profile = { on = false, item = { icon = true, itemLevel = true, itemType = true, }, spell = { icon = true, }, achievement = { icon = true, }, player = { raceLabel = false, classIcon = true, classLabel = false, }, } }) Prat:SetModuleOptions(module.name, { name = PL.module_name, desc = PL.module_desc, type = "group", --childGroups = "tab", get = function(info) return module.db.profile[info[#info-1]][info[#info]] end, set = function(info, value) module.db.profile[info[#info-1]][info[#info]] = value end, args = { description = { name = PL["full_description"], type = "description", order = 10, }, item = { name = PL["Item Links"], type = "group", order = 20, inline = true, args = { icon = { name = PL["Icon"], type = "toggle", order = 90 }, itemLevel = { name = PL["Item Level"], type = "toggle", order = 100 }, itemType = { name = PL["Item Type"], type = "toggle", order = 110 }, }, }, spell = { name = PL["Spell Links"], type = "group", inline = true, order = 30, args = { icon = { name = PL["Icon"], type = "toggle", order = 90 }, }, }, achievement = { name = PL["Achievement Links"], type = "group", inline = true, order = 40, args = { icon = { name = PL["Icon"], type = "toggle", order = 90 }, }, }, player = { name = PL["Player Links"], type = "group", inline = true, order = 50, args = { raceLabel = { name = PL["Race Label"], type = "toggle", order = 90 }, classIcon = { name = PL["Class Icon"], type = "toggle", order = 90 }, classLabel = { name = PL["Class Label"], type = "toggle", order = 90 }, }, }, }, }) Prat:SetModuleInit(module, function(self) Prat.RegisterMessageItem("PLAYERINFO", "PLAYER", "before") end) function module:OnModuleEnable() end function module:OnModuleEnable() Prat.RegisterChatEvent(self, "Prat_FrameMessage") end function module:OnModuleDisable() Prat.UnregisterAllChatEvents(self) end local function GetClassTexture(classFilename) return CreateAtlasMarkup(GetClassAtlas(classFilename), 12, 12, 0, -2) end -- replace text using prat event implementation function module:Prat_FrameMessage(arg, message, frame, event) if message.GUID == nil then return end local playerLocation = PlayerLocation:CreateFromGUID(message.GUID) if not playerLocation:IsValid() then return end local className, classFilename = C_PlayerInfo.GetClass(playerLocation) local race = C_PlayerInfo.GetRace(playerLocation) local raceInfo = race and C_CreatureInfo.GetRaceInfo(race) if self.db.profile.player.classLabel and className ~= nil then message.PLAYERINFO = className .. " " .. message.PLAYERINFO end if self.db.profile.player.classIcon and classFilename ~= nil then message.PLAYERINFO = GetClassTexture(classFilename) .. message.PLAYERINFO end if self.db.profile.player.raceLabel and raceInfo ~= nil then message.PLAYERINFO = raceInfo.raceName .. " " .. message.PLAYERINFO end end function module:Prat_Ready() self:updateAll() end function module:GetDescription() return PL["module_desc"] end local function GetTexture(file) return CreateTextureMarkup(file, 64, 64, 12, 12, 0, 1, 0, 1, 0, -2) end local function GetPattern(type) return "|c.-|H" .. type .. ":.-|h.-|h|r" end local function IsGear(classID) return classID == Enum.ItemClass.Armor or classID == Enum.ItemClass.Weapon or classID == Enum.ItemClass.Profession end local function SubInItemInfo(link) local res = link local _, _, subType, equipLocation, icon, classID = C_Item.GetItemInfoInstant(link) local details = {} if module.db.profile.item.itemType then table.insert(details, subType) end if module.db.profile.item.itemType and IsGear(classID) and classID ~= Enum.ItemClass.Weapon and equipLocation and equipLocation ~= "" then table.insert(details, _G[equipLocation]) end local level = C_Item.GetDetailedItemLevelInfo(link) if module.db.profile.item.itemLevel and IsGear(classID) and level then table.insert(details, level) end if #details > 0 then res = link:gsub("|h%[(.-)%]|h", "|h%[%1 %(" .. table.concat(details, " ") .. "%)%]|h") end if module.db.profile.item.icon and icon then res = GetTexture(icon) .. res end return res end local function SubInSpellInfo(link) local spellID = tonumber(link:match("Hspell:(%d+)")) local icon if C_Spell and C_Spell.GetSpellInfo then local info = C_Spell.GetSpellInfo(spellID) icon = info and info.iconID else icon = select(3, GetSpellInfo(spellID)) end local res = link if module.db.profile.spell.icon and icon then res = GetTexture(icon) .. res end return res end local function SubInAchievementInfo(link) local achievementID = tonumber(link:match("Hachievement:(%d+)")) local icon = select(10, GetAchievementInfo(achievementID)) local res = link if module.db.profile.achievement.icon and icon then res = GetTexture(icon) .. res end return res end Prat.RegisterPattern({ pattern = GetPattern("item"), matchfunc = function(link) if module.db.profile.on then return Prat:RegisterMatch(SubInItemInfo(link)) end end, type = "FRAME", priority = 43 }, module.name) Prat.RegisterPattern({ pattern = GetPattern("spell"), matchfunc = function(link) if module.db.profile.on then return Prat:RegisterMatch(SubInSpellInfo(link)) end end, type = "FRAME", priority = 43 }, module.name) Prat.RegisterPattern({ pattern = GetPattern("achievement"), matchfunc = function(link) if module.db.profile.on then return SubInAchievementInfo(link) end end, type = "FRAME", priority = 41 }, module.name) return end) -- Prat:AddModuleToLoad