From 6e34cebead669d2fe88cd126a0800dfa4c98a73b Mon Sep 17 00:00:00 2001 From: Xurkon Date: Sun, 22 Mar 2026 08:30:20 -0500 Subject: [PATCH] feat: release v1.4.6 - Fix SavedVariables persistence and red textures for MafWow/3.3.5a --- CHANGELOG.md | 7 + Compat/Compat.lua | 49 +++-- Compat/embeds.xml | 34 ++- Database/QuestieDB.lua | 39 ++-- Database/compiler.lua | 71 ++++--- .../widgets/AceGUIContainer-Frame.lua | 10 +- .../widgets/AceGUIContainer-Window.lua | 24 +-- .../widgets/AceGUIWidget-CheckBox.lua | 18 +- .../widgets/AceGUIWidget-ColorPicker.lua | 6 +- .../widgets/AceGUIWidget-DropDown-Items.lua | 6 +- .../widgets/AceGUIWidget-Heading.lua | 4 +- Libs/AceGUI-3.0/widgets/AceGUIWidget-Icon.lua | 2 +- Libs/XXH_Lua_Lib/XXH_Lua_Lib.lua | 13 +- Localization/l10n.lua | 1 + Modules/Journey/History.lua | 2 +- Modules/Journey/QuestieJourney.lua | 13 +- Modules/Journey/tabs/MyJourney/MyJourney.lua | 2 +- .../Journey/tabs/MyJourney/MyJourneyTab.lua | 26 +-- Modules/Journey/tabs/MyJourney/Note.lua | 2 +- Modules/Libs/QuestieLib.lua | 4 +- Modules/Libs/QuestieLoader.lua | 29 ++- Modules/Libs/QuestiePluginAPI.lua | 8 + Modules/Migration.lua | 53 +++++ .../DatabaseTab/QuestieOptionsDatabase.lua | 36 ++-- Modules/Quest/QuestieQuest.lua | 2 +- Modules/QuestieCompat.lua | 22 +- Modules/QuestieEventHandler.lua | 3 + Modules/QuestieInit.lua | 87 +++++++- Modules/QuestieLearner.lua | 139 ++++++------ Modules/QuestieLearnerExport.lua | 14 +- Modules/QuestieValidateGameCache.lua | 198 +++++++++--------- Modules/VersionCheck.lua | 53 ++--- Questie-X-Classic.toc | 42 +--- Questie-X-TBC.toc | 41 +--- Questie-X-Turtle.toc | 44 +--- Questie-X.toc | 42 +--- Questie.lua | 46 ++++ Questie.toc | 1 - docs/changelog.html | 11 + release_notes.txt | 8 +- 40 files changed, 654 insertions(+), 558 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c421dc0..4d8dd59 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## v1.4.6 (2026-03-22) +- **[Fix]** Resolved issue where Questie would not save options or show the Welcome screen repeatedly. This was caused by version mismatches in `.toc` files and an initialization race condition. +- **[Fix]** Synchronized AceAddon registration name to `"Questie-X"` to match the folder name, ensuring proper `ADDON_LOADED` event handling and database initialization. +- **[Fix]** Patched `AceGUI-3.0` widgets (`Heading`, `Frame`, `Window`, `Icon`, `DropDown-Items`, `ColorPicker`) to use string texture paths instead of numeric `FileDataIDs`, resolving "red texture" issues on WotLK 3.3.5a clients. +- **[Cleanup]** Systematically removed all `QX:` debug print statements across the entire codebase for a cleaner production experience. +- **[Version]** Bumped version to 1.4.6 and updated `Interface` version to 30300 across all `.toc` files. + ## v1.4.5 — Network & Taint Stability Update - **[Network Fix]** Resolved a critical crash ("`Usage: AceSerializer:Deserialize(str): str must be a string, got table`") occurring in QuestieLearnerComms and Export functions. This was caused by a lightweight, customized `AceSerializer-3.0.lua` implementation in Questie-X that lacked proper `self` parameter handling for standard colon-syntax method calls (`:`). As a result, method calls were serializing/deserializing the library table itself instead of the intended payload string. We patched `AceSerializer` natively to dynamically support both dot (`.`) and colon (`:`) syntax seamlessly without dropping arguments, while ensuring `Deserialize` correctly yields `(success, result)` tuples expected by the calling functions. diff --git a/Compat/Compat.lua b/Compat/Compat.lua index 343c77b..47bd01c 100644 --- a/Compat/Compat.lua +++ b/Compat/Compat.lua @@ -190,7 +190,8 @@ local function timerOnFinished(self) end end -QuestieCompat.C_Timer = { +if not QuestieCompat.C_Timer then + QuestieCompat.C_Timer = { -- Schedules a (repeating) timer that can be canceled. (https://wowpedia.fandom.com/wiki/API_C_Timer.NewTimer) NewTicker = function(duration, callback, iterations) local timer = next(inactiveTimers) @@ -221,6 +222,7 @@ QuestieCompat.C_Timer = { return QuestieCompat.C_Timer.NewTicker(duration, callback, 1) end } +end local mapIdToUiMapId = {} -- convert current mapAreaID and mapLevel to UiMapId @@ -408,24 +410,37 @@ end local questObjectivesCache = {} local function parseQuestObjective(text) - return string.match(string.gsub(text, "\239\188\154", ":"), "(.*):%s*([%d]+)%s*/%s*([%d]+)") + local name, fulfilled, required = string.match(string.gsub(text, "\239\188\154", ":"), "(.*):%s*([%d]+)%s*/%s*([%d]+)") + if not name then + + end + return name, fulfilled, required end -QuestieCompat.C_QuestLog = { - GetQuestObjectives = function(questID, questLogIndex) + +if not rawget(QuestieCompat, "C_QuestLog") then + QuestieCompat.C_QuestLog = {} +end +local cLog = QuestieCompat.C_QuestLog + +cLog.GetQuestObjectives = function(questID, questLogIndex) + local questObjectives = {} if questLogIndex then local numObjectives = GetNumQuestLeaderBoards(questLogIndex) for i = 1, numObjectives do local description, objectiveType, isCompleted = GetQuestLogLeaderBoard(i, questLogIndex) - if objectiveType ~= "log" then + if objectiveType ~= "log" and description then local objectiveName, numFulfilled, numRequired = parseQuestObjective(description) - local fulfilled = questObjectivesCache[objectiveName] - if fulfilled then - numFulfilled = fulfilled - questObjectivesCache[objectiveName] = nil + if objectiveName then + local fulfilled = questObjectivesCache[objectiveName] + if fulfilled then + numFulfilled = fulfilled + questObjectivesCache[objectiveName] = nil + end end + table.insert(questObjectives, { text = description, type = objectiveType, @@ -437,16 +452,16 @@ QuestieCompat.C_QuestLog = { end end return questObjectives - end, - - GetMaxNumQuestsCanAccept = function() + end + + cLog.GetMaxNumQuestsCanAccept = function() return MAX_QUESTLOG_QUESTS - end, - - IsOnQuest = function(questId) + end + + cLog.IsOnQuest = function(questId) return QuestieCompat.GetQuestLogIndexByID(questId) ~= nil - end, -} + end + -- Can't find anything about this function. diff --git a/Compat/embeds.xml b/Compat/embeds.xml index d751a44..e9531db 100644 --- a/Compat/embeds.xml +++ b/Compat/embeds.xml @@ -1,34 +1,26 @@ - +