From 11c47a86db26927a71ee067ecbafa30151df97c7 Mon Sep 17 00:00:00 2001 From: Florian Berthold Date: Fri, 29 May 2026 15:22:21 +0200 Subject: [PATCH] coa.7: guard Skills tab summary against unscanned skill ranks GetColor() did floor(rank/..) with no nil-guard and riding did 'field >= 300'; skillRank1/2/cooking/firstaid/fishing/riding are nil for chars DataStore_Characters hasn't scanned. GetColor now defaults rank to 0 and each field falls back to 0. --- Altoholic/Altoholic.toc | 2 +- Altoholic/Frames/Skills.lua | 13 +++++++------ README.md | 1 + 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Altoholic/Altoholic.toc b/Altoholic/Altoholic.toc index 6656257..4e77ad8 100644 --- a/Altoholic/Altoholic.toc +++ b/Altoholic/Altoholic.toc @@ -13,7 +13,7 @@ ## Author: Thaoky, Telkar-RG ## X-Edited-By: Exiles (Sub-Net) — florian.berthold@sub-net.at -## Version: 3.3.002b-coa.6 +## Version: 3.3.002b-coa.7 ## X-Category: Inventory, Tradeskill, Mail ## X-Localizations: enUS, frFR, zhCN, zhTW, deDE, koKR, esES, esMX, ruRU ## X-Website: http://wow.curse.com/downloads/wow-addons/details/altoholic.aspx diff --git a/Altoholic/Frames/Skills.lua b/Altoholic/Frames/Skills.lua index 9dc7197..90ca083 100644 --- a/Altoholic/Frames/Skills.lua +++ b/Altoholic/Frames/Skills.lua @@ -119,7 +119,7 @@ function ns:Update() else icon = "" end - field = Characters:GetField(line, "skillRank1") + field = Characters:GetField(line, "skillRank1") or 0 _G[entry..i.."Skill1NormalText"]:SetText(icon .. ns:GetColor(field) .. field) -- profession 2 @@ -130,29 +130,29 @@ function ns:Update() else icon = "" end - field = Characters:GetField(line, "skillRank2") + field = Characters:GetField(line, "skillRank2") or 0 _G[entry..i.."Skill2NormalText"]:SetText(icon .. ns:GetColor(field) .. field) -- cooking -- icon = addon:TextureToFontstring(addon:GetSpellIcon(2550), size, size) .. " " icon = addon:TextureToFontstring2(addon:GetSpellIcon(2550), size, size, inset, inset, inset, inset) .. " " - field = Characters:GetField(line, "cooking") + field = Characters:GetField(line, "cooking") or 0 _G[entry..i.."CookingNormalText"]:SetText(icon .. ns:GetColor(field) .. field) -- first aid -- icon = addon:TextureToFontstring(addon:GetSpellIcon(3273), size, size) .. " " icon = addon:TextureToFontstring2(addon:GetSpellIcon(3273), size, size, inset, inset, inset, inset) .. " " - field = Characters:GetField(line, "firstaid") + field = Characters:GetField(line, "firstaid") or 0 _G[entry..i.."FirstAidNormalText"]:SetText(icon .. ns:GetColor(field) .. field) -- fishing -- icon = addon:TextureToFontstring(addon:GetSpellIcon(7733), size, size) .. " " icon = addon:TextureToFontstring2(addon:GetSpellIcon(7733), size, size, inset, inset, inset, inset) .. " " - field = Characters:GetField(line, "fishing") + field = Characters:GetField(line, "fishing") or 0 _G[entry..i.."FishingNormalText"]:SetText(icon .. ns:GetColor(field) .. field) -- riding - field = Characters:GetField(line, "riding") + field = Characters:GetField(line, "riding") or 0 if field >= 300 then -- icon = addon:TextureToFontstring("Interface\\Icons\\Ability_Mount_Gryphon_01", size, size) .. " " icon = addon:TextureToFontstring2("Interface\\Icons\\ability_mount_drake_bronze", size, size, inset, inset, inset, inset) @@ -400,6 +400,7 @@ end local skillColors = { RECIPE_GREY, RED, ORANGE, YELLOW, GREEN } function ns:GetColor(rank, skillCap) + rank = rank or 0 -- CoA: skill fields are nil for chars DataStore_Characters hasn't scanned skillCap = skillCap or 450 return skillColors[ floor(rank / (skillCap/4)) + 1 ] end diff --git a/README.md b/README.md index 0707c7b..d224c12 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ Altoholic: modified development for WotLK Ported for the Ascension CoA (Vol'jin) 3.3.5a client by the Exiles guild. Released as `*-coa.N` tags via Gitea Actions; see `Exiles/coa-altoholic`. +- **3.3.002b-coa.7** — Skills tab: `GetColor()` now nil-safe and the per-skill rank fields (`skillRank1/2`, `cooking`, `firstaid`, `fishing`, `riding`) default to `0` — they're nil for chars `DataStore_Characters` hasn't scanned, which crashed the Skills summary (`floor(rank/…)` arithmetic and the `>= 300` riding check). - **3.3.002b-coa.6** — Final straggler: guarded `AccountSharing.lua` realm/name line (name getter was the last `format` arg, so a no-value collapsed it to a format error). Concludes the frame sweep. - **3.3.002b-coa.5** — Refactor + completeness pass: - Extracted the duplicated character header/row blocks into `Altoholic:AddCharacterTooltipHeader()` and `Altoholic:SetCharacterRowNameLevel()` — the nil-guards now live in one place instead of being copy-pasted across frames.