use C_ClassInfo for spec ids/info

This commit is contained in:
andrew6180
2026-02-16 12:11:44 -07:00
parent d494eab111
commit 23b813ef8a
+56 -196
View File
@@ -3781,211 +3781,71 @@ do
end end
do do
local classData = { local function getClassIcon(class)
DEATHKNIGHT = { if not class or class == "" then
icon = "Interface\\Icons\\Spell_Deathknight_ClassIcon", return "Interface\\Icons\\INV_Misc_QuestionMark"
specs = { end
[250] = { name = L["Blood"], icon = "Interface\\Icons\\Spell_Deathknight_BloodPresence" }, return "Interface\\Icons\\classicon_" .. class:lower()
[251] = { name = L["Frost"], icon = "Interface\\Icons\\Spell_Deathknight_FrostPresence" }, end
[252] = { name = L["Unholy"], icon = "Interface\\Icons\\Spell_Deathknight_UnholyPresence" },
} local function getSpecIcon(specInfo)
}, if specInfo and specInfo.SpecFilename then
DRUID = { return "Interface\\Icons\\" .. specInfo.SpecFilename
icon = "Interface\\Icons\\Ability_Druid_Maul", end
specs = { return "Interface\\Icons\\INV_Misc_QuestionMark"
[102] = { name = L["Balance"], icon = "Interface\\Icons\\Spell_Nature_StarFall" }, end
[103] = { name = L["Feral Combat"], icon = "Interface\\Icons\\Ability_Racial_BearForm" },
[104] = { name = L["Guardian"], icon = "Interface\\Icons\\Ability_Racial_BearForm" }, local function createSpecString(class, specInfo)
[105] = { name = L["Restoration"], icon = "Interface\\Icons\\Spell_Nature_HealingTouch" }, local classIcon = getClassIcon(class)
} local specIcon = getSpecIcon(specInfo)
}, local specName = specInfo and specInfo.Name or "Unknown"
HUNTER = {
icon = "Interface\\Icons\\INV_Weapon_Bow_07",
specs = {
[253] = { name = L["Beast Mastery"], icon = "Interface\\Icons\\Ability_Hunter_BeastTaming" },
[254] = { name = L["Marksmanship"], icon = "Interface\\Icons\\Ability_Marksmanship" },
[255] = { name = L["Survival"], icon = "Interface\\Icons\\Ability_Hunter_SwiftStrike" },
}
},
MAGE = {
icon = "Interface\\Icons\\INV_Staff_13",
specs = {
[62] = { name = L["Arcane"], icon = "Interface\\Icons\\Spell_Holy_MagicalSentry" },
[63] = { name = L["Fire"], icon = "Interface\\Icons\\Spell_Fire_FireBolt02" },
[64] = { name = L["Frost"], icon = "Interface\\Icons\\Spell_Frost_FrostBolt02" },
}
},
PALADIN = {
icon = "Interface\\Icons\\INV_Hammer_01",
specs = {
[65] = { name = L["Holy"], icon = "Interface\\Icons\\Spell_Holy_HolyBolt" },
[66] = { name = L["Protection"], icon = "Interface\\Icons\\Spell_Holy_DevotionAura" },
[70] = { name = L["Retribution"], icon = "Interface\\Icons\\Spell_Holy_AuraOfLight" },
}
},
PRIEST = {
icon = "Interface\\Icons\\INV_Staff_30",
specs = {
[256] = { name = L["Discipline"], icon = "Interface\\Icons\\Spell_Holy_WordFortitude" },
[257] = { name = L["Holy"], icon = "Interface\\Icons\\Spell_Holy_GuardianSpirit" },
[258] = { name = L["Shadow"], icon = "Interface\\Icons\\Spell_Shadow_ShadowWordPain" },
}
},
ROGUE = {
icon = "Interface\\Icons\\INV_ThrowingKnife_04",
specs = {
[259] = { name = L["Assassination"], icon = "Interface\\Icons\\Ability_Rogue_Eviscerate" },
[260] = { name = L["Combat"], icon = "Interface\\Icons\\Ability_BackStab" },
[261] = { name = L["Subtlety"], icon = "Interface\\Icons\\Ability_Stealth" },
}
},
SHAMAN = {
icon = "Interface\\Icons\\Spell_Nature_BloodLust",
specs = {
[262] = { name = L["ElementalShaman"], icon = "Interface\\Icons\\Spell_Nature_Lightning" },
[263] = { name = L["Enhancement"], icon = "Interface\\Icons\\Spell_Nature_LightningShield" },
[264] = { name = L["Restoration"], icon = "Interface\\Icons\\Spell_Nature_MagicImmunity" },
}
},
WARLOCK = {
icon = "Interface\\Icons\\Spell_Nature_FaerieFire",
specs = {
[265] = { name = L["Affliction"], icon = "Interface\\Icons\\Spell_Shadow_DeathCoil" },
[266] = { name = L["Demonology"], icon = "Interface\\Icons\\Spell_Shadow_Metamorphosis" },
[267] = { name = L["Destruction"], icon = "Interface\\Icons\\Spell_Shadow_RainOfFire" },
}
},
WARRIOR = {
icon = "Interface\\Icons\\INV_Sword_27",
specs = {
[71] = { name = L["Arms"], icon = "Interface\\Icons\\Ability_Rogue_Eviscerate" },
[72] = { name = L["Fury"], icon = "Interface\\Icons\\Ability_Warrior_InnerRage" },
[73] = { name = L["Protection"], icon = "Interface\\Icons\\INV_Shield_06" },
}
},
}
-- Creates the options layout. Due to CUSTOM_CLASS_COLORS, it needs to be created dynamically.
local function createSpecString(class, specID)
local data = classData[class]
if not data then return "" end
local classIcon = data.icon or "Interface\\Icons\\INV_Misc_QuestionMark"
local specData = data.specs[specID] or { icon = "Interface\\Icons\\INV_Misc_QuestionMark", name = "Unknown" }
local color = WA_GetClassColor(class) local color = WA_GetClassColor(class)
return ("|T%s:0|t |T%s:0|t |c%s%s|r"):format(classIcon, specData.icon, color, specData.name) return ("|T%s:0|t |T%s:0|t |c%s%s|r"):format(classIcon, specIcon, color, specName)
end
local function addSpec(classFile, specInfo)
if not specInfo or not specInfo.ID then
return
end
local class = specInfo.Class or classFile or ""
local specID = specInfo.ID
Private.spec_types_all[specID] = createSpecString(class, specInfo)
Private.specid_to_icon[specID] = getSpecIcon(specInfo)
local specName = specInfo.Name or ""
local key = class .. specName
Private.specname_to_id[key] = specID
Private.specid_to_name[specID] = key
end end
Private.spec_types_all = {} Private.spec_types_all = {}
Private.spec = {} Private.spec = {}
for class, data in pairs(classData) do Private.specid_to_icon = {}
for specID in pairs(data.specs) do Private.specname_to_id = {}
Private.spec_types_all[specID] = createSpecString(class, specID) Private.specid_to_name = {}
local classOrder = CLASS_SORT_ORDER
if type(classOrder) ~= "table" or #classOrder == 0 then
classOrder = {}
if LOCALIZED_CLASS_NAMES_MALE then
for class in pairs(LOCALIZED_CLASS_NAMES_MALE) do
table.insert(classOrder, class)
end
table.sort(classOrder)
end
end
if C_ClassInfo and C_ClassInfo.GetAllSpecs and C_ClassInfo.GetSpecInfo then
for _, class in ipairs(classOrder) do
local specs = C_ClassInfo.GetAllSpecs(class)
if specs then
for _, spec in ipairs(specs) do
addSpec(class, C_ClassInfo.GetSpecInfo(class, spec))
end
end
end end
end end
wipe(classData)
end end
Private.specid_to_icon = {
[250] = "Interface\\Icons\\Spell_Deathknight_BloodPresence",
[251] = "Interface\\Icons\\Spell_Deathknight_FrostPresence",
[252] = "Interface\\Icons\\Spell_Deathknight_UnholyPresence",
[102] = "Interface\\Icons\\Spell_Nature_StarFall",
[103] = "Interface\\Icons\\Ability_Racial_BearForm",
[104] = "Interface\\Icons\\Ability_Racial_BearForm",
[105] = "Interface\\Icons\\Spell_Nature_HealingTouch",
[253] = "Interface\\Icons\\Ability_Hunter_BeastTaming",
[254] = "Interface\\Icons\\Ability_Marksmanship",
[255] = "Interface\\Icons\\Ability_Hunter_SwiftStrike",
[62] = "Interface\\Icons\\Spell_Holy_MagicalSentry",
[63] = "Interface\\Icons\\Spell_Fire_FireBolt02",
[64] = "Interface\\Icons\\Spell_Frost_FrostBolt02",
[65] = "Interface\\Icons\\Spell_Holy_HolyBolt",
[66] = "Interface\\Icons\\Spell_Holy_DevotionAura",
[70] = "Interface\\Icons\\Spell_Holy_AuraOfLight",
[256] = "Interface\\Icons\\Spell_Holy_WordFortitude",
[257] = "Interface\\Icons\\Spell_Holy_GuardianSpirit",
[258] = "Interface\\Icons\\Spell_Shadow_ShadowWordPain",
[259] = "Interface\\Icons\\Ability_Rogue_Eviscerate",
[260] = "Interface\\Icons\\Ability_BackStab",
[261] = "Interface\\Icons\\Ability_Stealth",
[262] = "Interface\\Icons\\Spell_Nature_Lightning",
[263] = "Interface\\Icons\\Spell_Nature_LightningShield",
[264] = "Interface\\Icons\\Spell_Nature_MagicImmunity",
[265] = "Interface\\Icons\\Spell_Shadow_DeathCoil",
[266] = "Interface\\Icons\\Spell_Shadow_Metamorphosis",
[267] = "Interface\\Icons\\Spell_Shadow_RainOfFire",
[71] = "Interface\\Icons\\Ability_Rogue_Eviscerate",
[72] = "Interface\\Icons\\Ability_Warrior_InnerRage",
[73] = "Interface\\Icons\\INV_Shield_06",
}
Private.specname_to_id = {
["DEATHKNIGHT" .. L["Blood"]] = 250,
["DEATHKNIGHT" .. L["Frost"]] = 251,
["DEATHKNIGHT" .. L["Unholy"]] = 252,
["DRUID" .. L["Balance"]] = 102,
["DRUID" .. L["Feral Combat"]] = 103,
["DRUID" .. L["Guardian"]] = 104,
["DRUID" .. L["Restoration"]] = 105,
["HUNTER" .. L["Beast Mastery"]] = 253,
["HUNTER" .. L["Marksmanship"]] = 254,
["HUNTER" .. L["Survival"]] = 255,
["MAGE" .. L["Arcane"]] = 62,
["MAGE" .. L["Fire"]] = 63,
["MAGE" .. L["Frost"]] = 64,
["PALADIN" .. L["Holy"]] = 65,
["PALADIN" .. L["Protection"]] = 66,
["PALADIN" .. L["Retribution"]] = 70,
["PRIEST" .. L["Discipline"]] = 256,
["PRIEST" .. L["Holy"]] = 257,
["PRIEST" .. L["Shadow"]] = 258,
["ROGUE" .. L["Assassination"]] = 259,
["ROGUE" .. L["Combat"]] = 260,
["ROGUE" .. L["Subtlety"]] = 261,
["SHAMAN" .. L["ElementalShaman"]] = 262,
["SHAMAN" .. L["Enhancement"]] = 263,
["SHAMAN" .. L["Restoration"]] = 264,
["WARLOCK" .. L["Affliction"]] = 265,
["WARLOCK" .. L["Demonology"]] = 266,
["WARLOCK" .. L["Destruction"]] = 267,
["WARRIOR" .. L["Arms"]] = 71,
["WARRIOR" .. L["Fury"]] = 72,
["WARRIOR" .. L["Protection"]] = 73,
}
Private.specid_to_name = {
[250] = "DEATHKNIGHT" .. L["Blood"],
[251] = "DEATHKNIGHT" .. L["Frost"],
[252] = "DEATHKNIGHT" .. L["Unholy"],
[102] = "DRUID" .. L["Balance"],
[103] = "DRUID" .. L["Feral Combat"],
[104] = "DRUID" .. L["Guardian"],
[105] = "DRUID" .. L["Restoration"],
[253] = "HUNTER" .. L["Beast Mastery"],
[254] = "HUNTER" .. L["Marksmanship"],
[255] = "HUNTER" .. L["Survival"],
[62] = "MAGE" .. L["Arcane"],
[63] = "MAGE" .. L["Fire"],
[64] = "MAGE" .. L["Frost"],
[65] = "PALADIN" .. L["Holy"],
[66] = "PALADIN" .. L["Protection"],
[70] = "PALADIN" .. L["Retribution"],
[256] = "PRIEST" .. L["Discipline"],
[257] = "PRIEST" .. L["Holy"],
[258] = "PRIEST" .. L["Shadow"],
[259] = "ROGUE" .. L["Assassination"],
[260] = "ROGUE" .. L["Combat"],
[261] = "ROGUE" .. L["Subtlety"],
[262] = "SHAMAN" .. L["ElementalShaman"],
[263] = "SHAMAN" .. L["Enhancement"],
[264] = "SHAMAN" .. L["Restoration"],
[265] = "WARLOCK" .. L["Affliction"],
[266] = "WARLOCK" .. L["Demonology"],
[267] = "WARLOCK" .. L["Destruction"],
[71] = "WARRIOR" .. L["Arms"],
[72] = "WARRIOR" .. L["Fury"],
[73] = "WARRIOR" .. L["Protection"],
}
--[=[[ Old unused Talent List --[=[[ Old unused Talent List
Private.talents_ids = { Private.talents_ids = {
DEATHKNIGHT = {{48979,48997,49182,48978,49004,55107,48982,48987,49467,48985,49145,49015,48977,49006,49005,48988,53137,49027,49016,50365,62905,49018,55233,49189,55050,49023,61154,49028}, {49175,49455,49042,55061,49140,49226,50880,49039,51468,51123,49149,49137,49186,49471,49796,55610,49024,49188,50040,49203,50384,65661,54639,51271,49200,49143,50187,49202,49184}, {51745,48962,55129,49036,48963,49588,48965,49013,51459,49158,49146,49219,55620,49194,49220,49223,55666,49224,49208,52143,66799,51052,50391,63560,49032,49222,49217,51099,55090,50117,49206}}, DEATHKNIGHT = {{48979,48997,49182,48978,49004,55107,48982,48987,49467,48985,49145,49015,48977,49006,49005,48988,53137,49027,49016,50365,62905,49018,55233,49189,55050,49023,61154,49028}, {49175,49455,49042,55061,49140,49226,50880,49039,51468,51123,49149,49137,49186,49471,49796,55610,49024,49188,50040,49203,50384,65661,54639,51271,49200,49143,50187,49202,49184}, {51745,48962,55129,49036,48963,49588,48965,49013,51459,49158,49146,49219,55620,49194,49220,49223,55666,49224,49208,52143,66799,51052,50391,63560,49032,49222,49217,51099,55090,50117,49206}},