996a11dd0a
release / release (push) Successful in 5s
- CoA renamed classes but UnitClass returns old tokens; added a token->name map (CoAClassColors.lua, from coa-omen) applied in the Skills header + the shared AddCharacterTooltipHeader/SetCharacterRowNameLevel helpers (fixes class names everywhere). - Skills vertical list now shows rank/max (precompute carries maxRank; was showing /0).
138 lines
6.1 KiB
Lua
138 lines
6.1 KiB
Lua
-- CoAClassColors.lua
|
|
--
|
|
-- Mirrors the live client's RAID_CLASS_COLORS palette into
|
|
-- Altoholic.ClassInfo so the guild/character/profession panes render
|
|
-- the 21 Conquest-of-Azeroth custom classes (plus HERO) instead of
|
|
-- defaulting to WHITE via the `or WHITE` fallback at
|
|
-- Altoholic.lua:581.
|
|
--
|
|
-- Background
|
|
-- ----------
|
|
-- Altoholic ships a hardcoded ChatColor table keyed by the 10 vanilla
|
|
-- englishClass tokens (Altoholic.lua:23-32). On the CoA Voljin/PTR
|
|
-- realm, UnitClass / GetGuildRosterInfo return tokens like BARBARIAN,
|
|
-- WITCHDOCTOR, CHRONOMANCER, … which fall through the table.
|
|
--
|
|
-- The realm-authoritative palette is shipped by the client itself in
|
|
-- _G.RAID_CLASS_COLORS (Interface/SharedXML/SharedConstants.lua inside
|
|
-- patch-B.MPQ — 10 vanilla + HERO + 21 CoA = 32 entries on Voljin).
|
|
-- Other Exiles addon ports follow the same mirror pattern
|
|
-- (coa-omen/CoAClassColors.lua → CUSTOM_CLASS_COLORS,
|
|
-- coa-shadowedunitframes/.../CoAClassColors.lua → SUF profile,
|
|
-- coa-kui-nameplates/.../CoAClassColors.lua → !ClassColors).
|
|
--
|
|
-- Source of truth: db.exil.es /coa/dev for the full palette;
|
|
-- _G.RAID_CLASS_COLORS at FrameXML load time for the running client.
|
|
|
|
local Alto = _G.Altoholic
|
|
local AC = Alto and Alto.ClassInfo
|
|
if type(AC) ~= "table" then return end
|
|
|
|
local source = _G.RAID_CLASS_COLORS
|
|
if type(source) ~= "table" then return end
|
|
|
|
local function unpackColor(c)
|
|
if type(c) ~= "table" then return end
|
|
if c.GetRGB then return c:GetRGB() end
|
|
return c.r, c.g, c.b
|
|
end
|
|
|
|
for token, color in pairs(source) do
|
|
if AC[token] == nil then
|
|
local r, g, b = unpackColor(color)
|
|
if r and g and b then
|
|
AC[token] = string.format("|cFF%02X%02X%02X",
|
|
r * 255 + 0.5, g * 255 + 0.5, b * 255 + 0.5)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Class ICONS
|
|
-- -----------
|
|
-- WoW's _G.CLASS_ICON_TCOORDS only carries texcoords for the playable
|
|
-- classes the *client* shipped with — on the CoA Voljin client that is
|
|
-- the vanilla 10 + DEATHKNIGHT only. The 21 CoA custom classes
|
|
-- (BARBARIAN, WITCHDOCTOR, CHRONOMANCER, …) have no entry, so any draw
|
|
-- site that does `CLASS_ICON_TCOORDS[class]` falls back to a wrong or
|
|
-- blank icon (Altoholic.lua:ShowClassIcons hit this).
|
|
--
|
|
-- The realm-authoritative class-icon atlas is the 512x512 (8x8 grid of
|
|
-- 64px cells) BLP that the CoA Details! fork bundles and renders for
|
|
-- all 32 classes. We ship a copy of that atlas as
|
|
-- Interface\AddOns\Altoholic\images\coa-classes.blp and reproduce its
|
|
-- per-token texcoords below (source: Details/functions/profiles.lua
|
|
-- class_coords). Keyed by the UPPERCASE englishClass token — the same
|
|
-- key DataStore stores (DataStore_Characters: UnitClass()'s 2nd return)
|
|
-- and CLASS_ICON_TCOORDS uses, so it is a drop-in for both.
|
|
--
|
|
-- Includes the vanilla 10 + DK too, so a single lookup covers every
|
|
-- CoA-playable class uniformly out of one texture.
|
|
|
|
local COA_CLASS_ICON_TEXTURE = [[Interface\AddOns\Altoholic\images\coa-classes]]
|
|
|
|
-- left, right, top, bottom (verbatim from the CoA Details atlas)
|
|
local COA_CLASS_ICON_TCOORDS = {
|
|
WITCHHUNTER = { 0.875, 1, 0.375, 0.5 },
|
|
WITCHDOCTOR = { 0.75, 0.875, 0.375, 0.5 },
|
|
WILDWALKER = { 0.625, 0.75, 0.375, 0.5 },
|
|
WARRIOR = { 0.5, 0.625, 0.375, 0.5 },
|
|
WARLOCK = { 0.375, 0.5, 0.375, 0.5 },
|
|
TINKER = { 0.25, 0.375, 0.375, 0.5 },
|
|
SUNCLERIC = { 0.125, 0.25, 0.375, 0.5 },
|
|
STORMBRINGER = { 0, 0.125, 0.375, 0.5 },
|
|
STARCALLER = { 0.875, 1, 0.25, 0.375 },
|
|
SPIRITMAGE = { 0.75, 0.875, 0.25, 0.375 },
|
|
SONOFARUGAL = { 0.625, 0.75, 0.25, 0.375 },
|
|
SHAMAN = { 0.5, 0.625, 0.25, 0.375 },
|
|
ROGUE = { 0.375, 0.5, 0.25, 0.375 },
|
|
REAPER = { 0.25, 0.375, 0.25, 0.375 },
|
|
RANGER = { 0.125, 0.25, 0.25, 0.375 },
|
|
PYROMANCER = { 0, 0.125, 0.25, 0.375 },
|
|
PROPHET = { 0.875, 1, 0.125, 0.25 },
|
|
PRIEST = { 0.75, 0.875, 0.125, 0.25 },
|
|
PALADIN = { 0.625, 0.75, 0.125, 0.25 },
|
|
NECROMANCER = { 0.5, 0.625, 0.125, 0.25 },
|
|
MONK = { 0.375, 0.5, 0.125, 0.25 },
|
|
MAGE = { 0.25, 0.375, 0.125, 0.25 },
|
|
HUNTER = { 0.125, 0.25, 0.125, 0.25 },
|
|
HERO = { 0, 0.125, 0.125, 0.25 },
|
|
GUARDIAN = { 0.875, 1, 0, 0.125 },
|
|
FLESHWARDEN = { 0.75, 0.875, 0, 0.125 },
|
|
DRUID = { 0.625, 0.75, 0, 0.125 },
|
|
DEMONHUNTER = { 0.5, 0.625, 0, 0.125 },
|
|
DEATHKNIGHT = { 0.375, 0.5, 0, 0.125 },
|
|
CULTIST = { 0.25, 0.375, 0, 0.125 },
|
|
CHRONOMANCER = { 0.125, 0.25, 0, 0.125 },
|
|
BARBARIAN = { 0, 0.125, 0, 0.125 },
|
|
}
|
|
|
|
-- Returns texture, left, right, top, bottom for a CoA-playable class
|
|
-- token, or nil if the token is unknown (caller should fall back to the
|
|
-- stock CLASS_ICON_TCOORDS path). Tolerant of a nil/missing token.
|
|
function Alto:GetCoAClassIcon(token)
|
|
if type(token) ~= "string" then return end
|
|
local tc = COA_CLASS_ICON_TCOORDS[token]
|
|
if not tc then return end
|
|
return COA_CLASS_ICON_TEXTURE, tc[1], tc[2], tc[3], tc[4]
|
|
end
|
|
|
|
-- CoA renamed its classes, but UnitClass()/DataStore still return the OLD tokens
|
|
-- (PROPHET, MONK, …). Map them to the current display names. Source: coa-omen/README-CoA.md.
|
|
-- Tokens not listed here keep their normal localized name (returns nil).
|
|
local COA_CLASS_NAMES = {
|
|
HERO = "Hero", BARBARIAN = "Barbarian", WITCHDOCTOR = "Witch Doctor",
|
|
DEMONHUNTER = "Felsworn", WITCHHUNTER = "Witch Hunter", STORMBRINGER = "Stormbringer",
|
|
FLESHWARDEN = "Knight of Xoroth", GUARDIAN = "Guardian", MONK = "Templar",
|
|
SONOFARUGAL = "Bloodmage", RANGER = "Ranger", CHRONOMANCER = "Chronomancer",
|
|
NECROMANCER = "Necromancer", PYROMANCER = "Pyromancer", CULTIST = "Cultist",
|
|
STARCALLER = "Starcaller", SUNCLERIC = "Sun Cleric", TINKER = "Tinker",
|
|
PROPHET = "Venomancer", REAPER = "Reaper", WILDWALKER = "Primalist",
|
|
SPIRITMAGE = "Runemaster",
|
|
}
|
|
|
|
-- Current CoA display name for a class token, or nil if unmapped (caller falls back).
|
|
function Alto:GetCoAClassName(token)
|
|
if type(token) ~= "string" then return end
|
|
return COA_CLASS_NAMES[token]
|
|
end
|