From f4f3de929bd833aa79d5fc81ca07431b2844509e Mon Sep 17 00:00:00 2001 From: Florian Berthold Date: Fri, 29 May 2026 23:55:29 +0200 Subject: [PATCH 1/3] coa.28: fix login scan in 9 DataStore modules (the 'data not saved' root cause) Quests, Achievements, Reputations, Pets, Stats, Skills, Crafts, Spells, Talents all had the ghost-gated PLAYER_ALIVE scan (DEBUG 2025-07-21 leftover): they only scanned when the player died and released spirit, so their data never populated on a normal login. Now scan once per session at login (addon.coaScannedThisSession guard), matching the earlier DataStore_Characters/_Inventory fix. This is why reputations/recipes/quests/pets/etc were 'not saved'. --- Altoholic/Altoholic.lua | 2 +- Altoholic/Altoholic.toc | 2 +- DataStore_Achievements/DataStore_Achievements.lua | 3 ++- DataStore_Crafts/DataStore_Crafts.lua | 3 ++- DataStore_Pets/DataStore_Pets.lua | 3 ++- DataStore_Quests/DataStore_Quests.lua | 3 ++- DataStore_Reputations/DataStore_Reputations.lua | 3 ++- DataStore_Skills/DataStore_Skills.lua | 3 ++- DataStore_Spells/DataStore_Spells.lua | 3 ++- DataStore_Stats/DataStore_Stats.lua | 3 ++- DataStore_Talents/DataStore_Talents.lua | 3 ++- 11 files changed, 20 insertions(+), 11 deletions(-) diff --git a/Altoholic/Altoholic.lua b/Altoholic/Altoholic.lua index e5da91f..df3d083 100644 --- a/Altoholic/Altoholic.lua +++ b/Altoholic/Altoholic.lua @@ -338,7 +338,7 @@ function addon:OnEnable() -- CoA: use a Lua constant, not GetAddOnMetadata — TOC metadata is cached at game launch -- and does NOT refresh on /reload, so the .toc version looked stale ("still .18"). A Lua -- constant re-evaluates on every /reload, giving a truthful loaded-code version. Bump with the .toc. - AltoholicFrameName:SetText("Altoholic |cFFFFFFFF3.3.002b-coa.27|r") + AltoholicFrameName:SetText("Altoholic |cFFFFFFFF3.3.002b-coa.28|r") local realm = GetRealmName() local player = UnitName("player") diff --git a/Altoholic/Altoholic.toc b/Altoholic/Altoholic.toc index 16f5c1d..a62c10d 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.27 +## Version: 3.3.002b-coa.28 ## 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/DataStore_Achievements/DataStore_Achievements.lua b/DataStore_Achievements/DataStore_Achievements.lua index 9ab3ece..ebf0243 100644 --- a/DataStore_Achievements/DataStore_Achievements.lua +++ b/DataStore_Achievements/DataStore_Achievements.lua @@ -235,7 +235,8 @@ end -- *** EVENT HANDLERS *** function addon:PLAYER_ALIVE() -- print("DataStore_Achievements.lua") -- DEBUG 2025 07 21 - if not UnitIsGhost("player") then return end -- only scan if player released spirit and went to graveyard + if addon.coaScannedThisSession then return end -- CoA: scan once at login (was ghost-gated, so data never saved on a normal login - the cause of "data not saved") + addon.coaScannedThisSession = true ScanAllAchievements() ScanProgress() diff --git a/DataStore_Crafts/DataStore_Crafts.lua b/DataStore_Crafts/DataStore_Crafts.lua index 6c9d88e..35eed10 100644 --- a/DataStore_Crafts/DataStore_Crafts.lua +++ b/DataStore_Crafts/DataStore_Crafts.lua @@ -546,7 +546,8 @@ end -- *** Event Handlers *** local function OnPlayerAlive() -- print("DataStore_Crafts.lua") -- DEBUG 2025 07 21 - if not UnitIsGhost("player") then return end -- only scan if player released spirit and went to graveyard + if addon.coaScannedThisSession then return end -- CoA: scan once at login (was ghost-gated, so data never saved on a normal login - the cause of "data not saved") + addon.coaScannedThisSession = true ScanProfessionLinks() end diff --git a/DataStore_Pets/DataStore_Pets.lua b/DataStore_Pets/DataStore_Pets.lua index 4182863..cce3a72 100644 --- a/DataStore_Pets/DataStore_Pets.lua +++ b/DataStore_Pets/DataStore_Pets.lua @@ -46,7 +46,8 @@ end -- *** Event Handlers *** local function OnPlayerAlive() -- print("DataStore_Pets.lua") -- DEBUG 2025 07 21 - if not UnitIsGhost("player") then return end -- only scan if player released spirit and went to graveyard + if addon.coaScannedThisSession then return end -- CoA: scan once at login (was ghost-gated, so data never saved on a normal login - the cause of "data not saved") + addon.coaScannedThisSession = true ScanCompanions("CRITTER") ScanCompanions("MOUNT") diff --git a/DataStore_Quests/DataStore_Quests.lua b/DataStore_Quests/DataStore_Quests.lua index ca68a76..b354c1c 100644 --- a/DataStore_Quests/DataStore_Quests.lua +++ b/DataStore_Quests/DataStore_Quests.lua @@ -177,7 +177,8 @@ end -- *** Event Handlers *** local function OnPlayerAlive() -- print("DataStore_Quests.lua") -- DEBUG 2025 07 21 - if not UnitIsGhost("player") then return end -- only scan if player released spirit and went to graveyard + if addon.coaScannedThisSession then return end -- CoA: scan once at login (was ghost-gated, so data never saved on a normal login - the cause of "data not saved") + addon.coaScannedThisSession = true ScanQuests() end diff --git a/DataStore_Reputations/DataStore_Reputations.lua b/DataStore_Reputations/DataStore_Reputations.lua index f1bb674..6bf9584 100644 --- a/DataStore_Reputations/DataStore_Reputations.lua +++ b/DataStore_Reputations/DataStore_Reputations.lua @@ -177,7 +177,8 @@ end -- *** EVENT HANDLERS *** function addon:PLAYER_ALIVE() -- print("DataStore_Reputations.lua") -- DEBUG 2025 07 21 - if not UnitIsGhost("player") then return end -- only scan if player released spirit and went to graveyard + if addon.coaScannedThisSession then return end -- CoA: scan once at login (was ghost-gated, so data never saved on a normal login - the cause of "data not saved") + addon.coaScannedThisSession = true ScanReputations() end diff --git a/DataStore_Skills/DataStore_Skills.lua b/DataStore_Skills/DataStore_Skills.lua index 22b04b3..fa774f3 100644 --- a/DataStore_Skills/DataStore_Skills.lua +++ b/DataStore_Skills/DataStore_Skills.lua @@ -239,7 +239,8 @@ end -- *** EVENT HANDLERS *** function addon:PLAYER_ALIVE() -- print("DataStore_Skills.lua") -- DEBUG 2025 07 21 - if not UnitIsGhost("player") then return end -- only scan if player released spirit and went to graveyard + if addon.coaScannedThisSession then return end -- CoA: scan once at login (was ghost-gated, so data never saved on a normal login - the cause of "data not saved") + addon.coaScannedThisSession = true ScanSkills() end diff --git a/DataStore_Spells/DataStore_Spells.lua b/DataStore_Spells/DataStore_Spells.lua index 3b2e43c..e652d8d 100644 --- a/DataStore_Spells/DataStore_Spells.lua +++ b/DataStore_Spells/DataStore_Spells.lua @@ -105,7 +105,8 @@ end -- *** EVENT HANDLERS *** function addon:PLAYER_ALIVE() -- print("DataStore_Spells.lua") -- DEBUG 2025 07 21 - if not UnitIsGhost("player") then return end -- only scan if player released spirit and went to graveyard + if addon.coaScannedThisSession then return end -- CoA: scan once at login (was ghost-gated, so data never saved on a normal login - the cause of "data not saved") + addon.coaScannedThisSession = true ScanSpells() end diff --git a/DataStore_Stats/DataStore_Stats.lua b/DataStore_Stats/DataStore_Stats.lua index a230828..9c06e19 100644 --- a/DataStore_Stats/DataStore_Stats.lua +++ b/DataStore_Stats/DataStore_Stats.lua @@ -156,7 +156,8 @@ end -- *** EVENT HANDLERS *** function addon:PLAYER_ALIVE() -- print("DataStore_Stats.lua") -- DEBUG 2025 07 21 - if not UnitIsGhost("player") then return end -- only scan if player released spirit and went to graveyard + if addon.coaScannedThisSession then return end -- CoA: scan once at login (was ghost-gated, so data never saved on a normal login - the cause of "data not saved") + addon.coaScannedThisSession = true ScanStats() end diff --git a/DataStore_Talents/DataStore_Talents.lua b/DataStore_Talents/DataStore_Talents.lua index f979fb2..3de4ddb 100644 --- a/DataStore_Talents/DataStore_Talents.lua +++ b/DataStore_Talents/DataStore_Talents.lua @@ -419,7 +419,8 @@ end -- *** EVENT HANDLERS *** function addon:PLAYER_ALIVE() -- print("DataStore_Talents.lua") -- DEBUG 2025 07 21 - if not UnitIsGhost("player") then return end -- only scan if player released spirit and went to graveyard + if addon.coaScannedThisSession then return end -- CoA: scan once at login (was ghost-gated, so data never saved on a normal login - the cause of "data not saved") + addon.coaScannedThisSession = true ScanTalents() ScanTalentReference() From 57c603fa8e1983ef848e5744db69b122170d5c54 Mon Sep 17 00:00:00 2001 From: Florian Berthold Date: Sat, 30 May 2026 01:09:12 +0200 Subject: [PATCH 2/3] coa.29: right-size VisibleLines for the taller window (rows were overflowing) All list rows are 22px; the resize had set VisibleLines=20 uniformly (20x22=440 > the 414px content frame), so the bottom rows spilled past the frame - visible as the guild list running into the 'Click a character's AiL' footer. Set 18 rows for all list tabs (18x22=396), 17 for GuildMembers (it has the equipment footer). --- Altoholic/Altoholic.lua | 2 +- Altoholic/Altoholic.toc | 2 +- Altoholic/Frames/AccountSummary.lua | 2 +- Altoholic/Frames/Activity.lua | 2 +- Altoholic/Frames/BagUsage.lua | 2 +- Altoholic/Frames/GuildBankTabs.lua | 2 +- Altoholic/Frames/GuildMembers.lua | 2 +- Altoholic/Frames/GuildProfessions.lua | 2 +- Altoholic/Frames/Quests.lua | 2 +- Altoholic/Frames/Recipes.lua | 2 +- Altoholic/Frames/Skills.lua | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Altoholic/Altoholic.lua b/Altoholic/Altoholic.lua index df3d083..c091e7e 100644 --- a/Altoholic/Altoholic.lua +++ b/Altoholic/Altoholic.lua @@ -338,7 +338,7 @@ function addon:OnEnable() -- CoA: use a Lua constant, not GetAddOnMetadata — TOC metadata is cached at game launch -- and does NOT refresh on /reload, so the .toc version looked stale ("still .18"). A Lua -- constant re-evaluates on every /reload, giving a truthful loaded-code version. Bump with the .toc. - AltoholicFrameName:SetText("Altoholic |cFFFFFFFF3.3.002b-coa.28|r") + AltoholicFrameName:SetText("Altoholic |cFFFFFFFF3.3.002b-coa.29|r") local realm = GetRealmName() local player = UnitName("player") diff --git a/Altoholic/Altoholic.toc b/Altoholic/Altoholic.toc index a62c10d..b950e3a 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.28 +## Version: 3.3.002b-coa.29 ## 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/AccountSummary.lua b/Altoholic/Frames/AccountSummary.lua index 98a04a1..2a90d21 100644 --- a/Altoholic/Frames/AccountSummary.lua +++ b/Altoholic/Frames/AccountSummary.lua @@ -168,7 +168,7 @@ end function ns:Update() - local VisibleLines = 20 + local VisibleLines = 18 local frame = "AltoholicFrameSummary" local entry = frame.."Entry" diff --git a/Altoholic/Frames/Activity.lua b/Altoholic/Frames/Activity.lua index 2324d52..6525114 100644 --- a/Altoholic/Frames/Activity.lua +++ b/Altoholic/Frames/Activity.lua @@ -23,7 +23,7 @@ local ns = addon.Activity -- ns = namespace local Characters = addon.Characters function ns:Update() - local VisibleLines = 20 + local VisibleLines = 18 local frame = "AltoholicFrameActivity" local entry = frame.."Entry" diff --git a/Altoholic/Frames/BagUsage.lua b/Altoholic/Frames/BagUsage.lua index 8c29a9b..a478b50 100644 --- a/Altoholic/Frames/BagUsage.lua +++ b/Altoholic/Frames/BagUsage.lua @@ -22,7 +22,7 @@ local ns = addon.BagUsage -- ns = namespace local Characters = addon.Characters function ns:Update() - local VisibleLines = 20 + local VisibleLines = 18 local frame = "AltoholicFrameBagUsage" local entry = frame.."Entry" diff --git a/Altoholic/Frames/GuildBankTabs.lua b/Altoholic/Frames/GuildBankTabs.lua index e7e60f6..ea44eef 100644 --- a/Altoholic/Frames/GuildBankTabs.lua +++ b/Altoholic/Frames/GuildBankTabs.lua @@ -72,7 +72,7 @@ function ns:Update() BuildView() end - local VisibleLines = 20 + local VisibleLines = 18 local frame = "AltoholicFrameGuildBankTabs" local entry = frame.."Entry" diff --git a/Altoholic/Frames/GuildMembers.lua b/Altoholic/Frames/GuildMembers.lua index 5a49210..d9d4dd7 100644 --- a/Altoholic/Frames/GuildMembers.lua +++ b/Altoholic/Frames/GuildMembers.lua @@ -285,7 +285,7 @@ function ns:Update() BuildView() end - local VisibleLines = 20 + local VisibleLines = 17 local frame = "AltoholicFrameGuildMembers" local entry = frame.."Entry" diff --git a/Altoholic/Frames/GuildProfessions.lua b/Altoholic/Frames/GuildProfessions.lua index b98653f..963f70a 100644 --- a/Altoholic/Frames/GuildProfessions.lua +++ b/Altoholic/Frames/GuildProfessions.lua @@ -221,7 +221,7 @@ function ns:Update() BuildView() end - local VisibleLines = 20 + local VisibleLines = 18 local frame = "AltoholicFrameGuildProfessions" local entry = frame.."Entry" diff --git a/Altoholic/Frames/Quests.lua b/Altoholic/Frames/Quests.lua index e6c8c26..77f24df 100644 --- a/Altoholic/Frames/Quests.lua +++ b/Altoholic/Frames/Quests.lua @@ -34,7 +34,7 @@ function ns:Update() local character = addon.Tabs.Characters:GetCurrent() - local VisibleLines = 20 + local VisibleLines = 18 local frame = "AltoholicFrameQuests" local entry = frame.."Entry" diff --git a/Altoholic/Frames/Recipes.lua b/Altoholic/Frames/Recipes.lua index 37d27b5..cb1cb49 100644 --- a/Altoholic/Frames/Recipes.lua +++ b/Altoholic/Frames/Recipes.lua @@ -218,7 +218,7 @@ end function ns:Update() local currentProfession = addon.TradeSkills.CurrentProfession - local VisibleLines = 20 + local VisibleLines = 18 local frame = "AltoholicFrameRecipes" local entry = frame.."Entry" diff --git a/Altoholic/Frames/Skills.lua b/Altoholic/Frames/Skills.lua index a580667..164ede4 100644 --- a/Altoholic/Frames/Skills.lua +++ b/Altoholic/Frames/Skills.lua @@ -30,7 +30,7 @@ local inset = 2 function ns:Update() - local VisibleLines = 20 + local VisibleLines = 18 local frame = "AltoholicFrameSkills" local entry = frame.."Entry" local DS = DataStore From 5f39ea21fa4e3288075fdbbf175a3aba2c435e31 Mon Sep 17 00:00:00 2001 From: Florian Berthold Date: Sat, 30 May 2026 01:33:20 +0200 Subject: [PATCH 3/3] coa.30: show all professions in the character view (4x3 wrapped grid) CoA characters can learn every profession, but the char-view panel only had 2 profession quick-icons. Added Prof1-12 laid out as a wrapped 4-per-row grid in the open middle-left area (room exists now that the window is 555 tall), clear of the dropdowns and the bottom view-groups. UpdateViewIcons already fills/hides them dynamically (coa.13). --- Altoholic/Altoholic.lua | 2 +- Altoholic/Altoholic.toc | 2 +- Altoholic/Frames/TabCharacters.xml | 45 +++++++++++++++++++++++------- 3 files changed, 37 insertions(+), 12 deletions(-) diff --git a/Altoholic/Altoholic.lua b/Altoholic/Altoholic.lua index c091e7e..5f6a3ff 100644 --- a/Altoholic/Altoholic.lua +++ b/Altoholic/Altoholic.lua @@ -338,7 +338,7 @@ function addon:OnEnable() -- CoA: use a Lua constant, not GetAddOnMetadata — TOC metadata is cached at game launch -- and does NOT refresh on /reload, so the .toc version looked stale ("still .18"). A Lua -- constant re-evaluates on every /reload, giving a truthful loaded-code version. Bump with the .toc. - AltoholicFrameName:SetText("Altoholic |cFFFFFFFF3.3.002b-coa.29|r") + AltoholicFrameName:SetText("Altoholic |cFFFFFFFF3.3.002b-coa.30|r") local realm = GetRealmName() local player = UnitName("player") diff --git a/Altoholic/Altoholic.toc b/Altoholic/Altoholic.toc index b950e3a..7e30c77 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.29 +## Version: 3.3.002b-coa.30 ## 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/TabCharacters.xml b/Altoholic/Frames/TabCharacters.xml index 0a7c85e..4303347 100644 --- a/Altoholic/Frames/TabCharacters.xml +++ b/Altoholic/Frames/TabCharacters.xml @@ -243,19 +243,44 @@ + + + + + + + + + + +