coa.10: CoA reputation factions (data-driven) + custom-class icons + all-professions Skills
release / release (push) Successful in 5s

- Reputation view rebuilt data-driven from each char's scanned factions grouped
  by in-game category; CoA custom factions (and future ones) appear automatically.
  Old hardcoded tree kept only as an icon lookup.
- CoA custom-class icons (classes 12-32) render from bundled atlas
  Altoholic/images/coa-classes.blp (texcoords from coa-details) instead of the
  Warrior glue-icon fallback in ShowClassIcons.
- Skills tab shows ALL known professions (dynamic list incl Woodcutting/Woodworking),
  not 2 fixed slots; DataStore_Skills scans on PLAYER_ENTERING_WORLD/SKILL_LINES_CHANGED
  (fixes 'no profession data' that only scanned on ghost-release).
This commit is contained in:
2026-05-29 15:55:25 +02:00
parent ec868716ed
commit 0565051302
15 changed files with 428 additions and 177 deletions
+17 -28
View File
@@ -76,8 +76,6 @@ local function AddRealm(AccountName, RealmName)
local realmBankSlots = 0
local realmFreeBankSlots = 0
local SkillsCache = { {name = "", rank = 0}, {name = "", rank = 0} }
-- 1) Add the realm name
table.insert(characterList, { linetype = INFO_REALM_LINE + (realmCount*3),
isCollapsed = false,
@@ -87,36 +85,27 @@ local function AddRealm(AccountName, RealmName)
-- 2) Add the characters
for characterName, character in pairs(DataStore:GetCharacters(RealmName, AccountName)) do
SkillsCache[1].name = ""
SkillsCache[1].rank = 0
SkillsCache[1].spellID = nil
SkillsCache[2].name = ""
SkillsCache[2].rank = 0
SkillsCache[2].spellID = nil
local i = 1
local professions = DataStore:GetPrimaryProfessions(character)
if professions then
for SkillName, s in pairs(professions) do
SkillsCache[i].name = SkillName
SkillsCache[i].rank = DataStore:GetSkillInfo(character, SkillName)
SkillsCache[i].spellID = DataStore:GetProfessionSpellID(SkillName)
i = i + 1
if i > 2 then -- it seems that under certain conditions, the loop continues after 2 professions.., so break
break
end
-- CoA: characters can know ALL professions at once (no retail 2-primary
-- limit) plus the customs Woodcutting/Woodworking. Build a dynamic list of
-- every known primary profession instead of the old fixed 2 slots. Each
-- entry carries its own name/rank/spellID(icon) so Skills.lua can render an
-- arbitrary number of professions. GetPrimaryProfessionList never returns
-- nil (returns {} for unscanned chars), but guard anyway.
local professions = {}
if DataStore.GetPrimaryProfessionList then
local list = DataStore:GetPrimaryProfessionList(character) or {}
for _, p in ipairs(list) do
professions[#professions + 1] = {
name = p.name,
rank = p.rank or 0,
spellID = DataStore:GetProfessionSpellID(p.name),
}
end
end
table.insert(characterList, { linetype = INFO_CHARACTER_LINE + (realmCount*3),
key = character,
skillName1 = SkillsCache[1].name,
skillRank1 = SkillsCache[1].rank,
spellID1 = SkillsCache[1].spellID,
skillName2 = SkillsCache[2].name,
skillRank2 = SkillsCache[2].rank,
spellID2 = SkillsCache[2].spellID,
professions = professions, -- CoA: dynamic list of all primary professions
cooking = DataStore:GetCookingRank(character),
firstaid = DataStore:GetFirstAidRank(character),
fishing = DataStore:GetFishingRank(character),