You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

698 lines
19 KiB

---------------------------------------------------------------------------------
--
-- 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 = select(3, GetSpellInfo(spellID))
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