diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c58168..6e08b2d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## v1.3.9 — BackdropTemplate & Tracking Reliability + +- **[Quest Tracking]** Significantly improved the reliability of shift-clicking to track or untrack quests. Added more robust user action detection to identify clicks directly in the tracker or the Quest Log. +- **[Quest Re-tracking]** Resolved an issue where hidden quests would refuse to re-track after being manually untracked. Toggling quests back on is now consistently recognized as a manual user action across all WoW versions. +- **[AceGUI Fix]** Fixed a critical crash: `Couldn't find inherited node "BackdropTemplate"`. Implemented a cross-version safe method for frame inheritance in AceGUI-3.0, ensuring stability on WotLK and Classic clients. +- **[Verification]** Performed a comprehensive syntax audit using `luaparse` for all modified core files and AceGUI widgets. + +## v1.3.8 — UseAction Taint Fixes + +- **[Taint Resolution]** Successfully resolved the `ADDON_ACTION_BLOCKED: UseAction()` error by updating internal libraries and eliminating global namespace pollution. +- **[Library Update]** Updated `Compat/embeds.xml` to use modern, taint-free versions of core libraries. +- **[Addon Stability]** Audited `QuestieInit.lua` and `QuestieLoader.lua` for safe global population. + ## v1.3.7 — Quest Tracking & Robustness - **[Quest Tracking]** Resolved inconsistent quest tracking/untracking by making the tracking state idempotent. This eliminates "doing nothing" results while toggling quests in the Quest Log and prevents tracking loops caused by Blizzard's auto-track feature. @@ -66,6 +79,12 @@ --- +## v1.3.8 +- **[QuestieTracker]** Resolved persistent "stuck" quest tracking/untracking by ensuring `AQW_Insert` and `RemoveQuestWatch` hooks respect manual untracking state. +- **[QuestieTracker]** Refined watch hooks to distinguish between manual user actions (e.g. shift-clicking in Quest Log) and internal Blizzard/server objective updates. +- **[QuestieTracker]** Added robustness for Quest IDs passed directly to Blizzard watch APIs (common on custom WoW private servers). +- **[Global Safety]** Added lint suppressions for external frames (`VoiceOverFrame`, etc.) in `QuestieTracker.lua`. + ## v1.3.1 - Refined data-sharing mechanism to use exclusively hidden global channels, removing guild-channel broadcasts to minimize chat traffic. @@ -101,7 +120,7 @@ - **[Cross-link engine — full rewrite]** Replaced the narrow NPC↔Quest cross-link stubs with a comprehensive bidirectional relationship engine covering all four entity types. Three shared primitives underpin the whole system: `_AddToArray(tbl, key, value, ovrTable, ovrId)` adds a value to an array field and mirrors it to the live `*DataOverrides` table in the same call; `_AddToNestedArray` does the same for two-level nested arrays (used for quest starters/finishers sub-slots); `_AddToQuestObjective` inserts `{entityId, text}` pairs into `quest[10][slot]` (the objectives array) with the same dual-write pattern. Every write is idempotent (no-op if value already present). - **[CrossLinkAfterNPC]** Called whenever a new NPC ID is first committed to `learnedData.npcs`. Iterates all learned quests: (a) if quest`[2][1]` contains this npcId → adds questId to `npc[10]` (questStarts); (b) if quest`[3][1]` contains this npcId → adds questId to `npc[11]` (questEnds); (c) walks quest`[10][3]` (item objectives) — for each item whose `item[2]` (npcDrops) already references this NPC, the NPC is injected into `quest[10][1]` as a creature objective so it can receive map pins and tooltip text. -- **[CrossLinkAfterQuest]** Called when a new quest is first committed to `learnedData.quests`. Links all referenced entities: starter NPCs (quest`[2][1]`) → each known NPC's `npc[10]`; starter objects (quest`[2][2]`) → each known object's `obj[2]`; finisher NPCs (quest`[3][1]`) → `npc[11]`; finisher objects (quest`[3][2]`) → `obj[3]`; source item (quest`[11]`) → `item[5]` (startQuest key per itemDB schema); item drop chain (quest`[10][3]` items whose `item[2]` lists known NPCs) → those NPCs are injected into `quest[10][1]` as creature objectives. +- **[CrossLinkAfterQuest]** Called when a new quest is first committed to `learnedData.quests`. Links all referenced entities: starter NPCs (quest`[2][1]`) → each known NPC's `npc[10]`; starter objects (quest`[2][2]`) → each known object's `obj[2]`; finisher NPCs (quest`[3][1]`) → `npc[11]`; finisher objects (quest`[3][2]`) → `obj[3]`; source item (quest`[11]`) → `item[5]` (startQuest key per itemDB schema); item drop chain (quest`[10][3]` items whose `item[2]` lists known NPCs) → those NPCs are injected into `quest[10][1]` as a creature objective. This means: learn a quest that needs Wolf Fur → later kill a wolf that drops it → the wolf NPC immediately becomes a tracked creature objective for that quest. - **[CrossLinkAfterObject]** Called when a new object is first committed to `learnedData.objects`. Scans all learned quests: if quest`[2][2]` references this objectId → adds questId to `obj[2]` (questStarts); if quest`[3][2]` references it → adds questId to `obj[3]` (questEnds). - **[CrossLinkAfterItem]** Called when a new item is first committed to `learnedData.items` AND whenever a new drop-NPC relationship is added via `LearnItemDrop`. Two passes: (1) scan all learned quests for `quest[11] == itemId` → set `item[5] = questId` (item starts this quest); (2) scan all learned quests for `quest[10][3]` entries matching itemId — for each such quest, every NPC in `item[2]` (drop sources) is injected into `quest[10][1]` as a creature objective. This means: learn a quest that needs Wolf Fur → later kill a wolf that drops it → the wolf NPC immediately becomes a tracked creature objective for that quest. - **[CrossLinkAfterQuestGiver]** Now handles all three entity type slots (1=NPC, 2=Object, 3=Item) instead of only NPCs. For typeSlot=1: stitches `npc[10/11]` ↔ `quest[2/3][1]` bidirectionally. For typeSlot=2: stitches `obj[2/3]` ↔ `quest[2/3][2]`. For typeSlot=3: adds itemId to `quest[2][3]` (item starters slot). All writes go to both `learnedData` (SavedVariables) and live `*DataOverrides` tables simultaneously. @@ -381,7 +400,7 @@ ### TOC / Addon Identity -- **[TOC]** Core addon `.toc` files updated to `Questie-X` title and `v1.1.4` version. +- **[TOC]** Core addon `.toc` files updated to `Questie-X` title and `v1.3.8` - **[Libs]** Added `LibDeflate`, `XXH_Lua_Lib`, `LibDBIcon-1.0`, and `LibDataBroker-1.1` to the Libs directory. ### Bug Fixes diff --git a/Libs/AceGUI-3.0/widgets/AceGUIContainer-DropDownGroup.lua b/Libs/AceGUI-3.0/widgets/AceGUIContainer-DropDownGroup.lua index cd83755..379ea25 100644 --- a/Libs/AceGUI-3.0/widgets/AceGUIContainer-DropDownGroup.lua +++ b/Libs/AceGUI-3.0/widgets/AceGUIContainer-DropDownGroup.lua @@ -125,7 +125,7 @@ local function Constructor() dropdown.frame:Show() dropdown:SetLabel("") - local border = CreateFrame("Frame", nil, frame, "BackdropTemplate") + local border = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil) border:SetPoint("TOPLEFT", 0, -26) border:SetPoint("BOTTOMRIGHT", 0, 3) border:SetBackdrop(PaneBackdrop) diff --git a/Libs/AceGUI-3.0/widgets/AceGUIContainer-Frame.lua b/Libs/AceGUI-3.0/widgets/AceGUIContainer-Frame.lua index 39a1004..ba156f3 100644 --- a/Libs/AceGUI-3.0/widgets/AceGUIContainer-Frame.lua +++ b/Libs/AceGUI-3.0/widgets/AceGUIContainer-Frame.lua @@ -176,7 +176,7 @@ local PaneBackdrop = { } local function Constructor() - local frame = CreateFrame("Frame", nil, UIParent, "BackdropTemplate") + local frame = CreateFrame("Frame", nil, UIParent, BackdropTemplateMixin and "BackdropTemplate" or nil) frame:Hide() frame:EnableMouse(true) @@ -203,7 +203,7 @@ local function Constructor() closebutton:SetWidth(100) closebutton:SetText(CLOSE) - local statusbg = CreateFrame("Button", nil, frame, "BackdropTemplate") + local statusbg = CreateFrame("Button", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil) statusbg:SetPoint("BOTTOMLEFT", 15, 15) statusbg:SetPoint("BOTTOMRIGHT", -132, 15) statusbg:SetHeight(24) diff --git a/Libs/AceGUI-3.0/widgets/AceGUIContainer-InlineGroup.lua b/Libs/AceGUI-3.0/widgets/AceGUIContainer-InlineGroup.lua index 1676ae4..357e843 100644 --- a/Libs/AceGUI-3.0/widgets/AceGUIContainer-InlineGroup.lua +++ b/Libs/AceGUI-3.0/widgets/AceGUIContainer-InlineGroup.lua @@ -75,7 +75,7 @@ local function Constructor() titletext:SetJustifyH("LEFT") titletext:SetHeight(18) - local border = CreateFrame("Frame", nil, frame, "BackdropTemplate") + local border = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil) border:SetPoint("TOPLEFT", 0, -17) border:SetPoint("BOTTOMRIGHT", -1, 3) border:SetBackdrop(PaneBackdrop) diff --git a/Libs/AceGUI-3.0/widgets/AceGUIContainer-TabGroup.lua b/Libs/AceGUI-3.0/widgets/AceGUIContainer-TabGroup.lua index 8e46876..ff7553c 100644 --- a/Libs/AceGUI-3.0/widgets/AceGUIContainer-TabGroup.lua +++ b/Libs/AceGUI-3.0/widgets/AceGUIContainer-TabGroup.lua @@ -502,7 +502,7 @@ local function Constructor() titletext:SetHeight(18) titletext:SetText("") - local border = CreateFrame("Frame", nil, frame, "BackdropTemplate") + local border = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil) border:SetPoint("TOPLEFT", 1, -27) border:SetPoint("BOTTOMRIGHT", -1, 3) border:SetBackdrop(PaneBackdrop) diff --git a/Libs/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua b/Libs/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua index 89f387a..0e74696 100644 --- a/Libs/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua +++ b/Libs/AceGUI-3.0/widgets/AceGUIContainer-TreeGroup.lua @@ -637,7 +637,7 @@ local function Constructor() local num = AceGUI:GetNextWidgetNum(Type) local frame = CreateFrame("Frame", nil, UIParent) - local treeframe = CreateFrame("Frame", nil, frame, "BackdropTemplate") + local treeframe = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil) treeframe:SetPoint("TOPLEFT") treeframe:SetPoint("BOTTOMLEFT") treeframe:SetWidth(DEFAULT_TREE_WIDTH) @@ -656,7 +656,7 @@ local function Constructor() treeframe:SetScript("OnSizeChanged", Tree_OnSizeChanged) treeframe:SetScript("OnMouseWheel", Tree_OnMouseWheel) - local dragger = CreateFrame("Frame", nil, treeframe, "BackdropTemplate") + local dragger = CreateFrame("Frame", nil, treeframe, BackdropTemplateMixin and "BackdropTemplate" or nil) dragger:SetWidth(8) dragger:SetPoint("TOP", treeframe, "TOPRIGHT") dragger:SetPoint("BOTTOM", treeframe, "BOTTOMRIGHT") @@ -681,7 +681,7 @@ local function Constructor() scrollbg:SetAllPoints(scrollbar) scrollbg:SetColorTexture(0,0,0,0.4) - local border = CreateFrame("Frame", nil, frame, "BackdropTemplate") + local border = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil) border:SetPoint("TOPLEFT", treeframe, "TOPRIGHT") border:SetPoint("BOTTOMRIGHT") border:SetBackdrop(PaneBackdrop) diff --git a/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown.lua b/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown.lua index 59c7f53..8149519 100644 --- a/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown.lua +++ b/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown.lua @@ -249,7 +249,7 @@ do local function Constructor() local count = AceGUI:GetNextWidgetNum(widgetType) - local frame = CreateFrame("Frame", "AceGUI30Pullout"..count, UIParent, "BackdropTemplate") + local frame = CreateFrame("Frame", "AceGUI30Pullout"..count, UIParent, BackdropTemplateMixin and "BackdropTemplate" or nil) local self = {} self.count = count self.type = widgetType @@ -300,7 +300,7 @@ do scrollFrame.obj = self itemFrame.obj = self - local slider = CreateFrame("Slider", "AceGUI30PulloutScrollbar"..count, scrollFrame, "BackdropTemplate") + local slider = CreateFrame("Slider", "AceGUI30PulloutScrollbar"..count, scrollFrame, BackdropTemplateMixin and "BackdropTemplate" or nil) slider:SetOrientation("VERTICAL") slider:SetHitRectInsets(0, 0, -10, 0) slider:SetBackdrop(sliderBackdrop) diff --git a/Libs/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua b/Libs/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua index 0c779dc..1617c7a 100644 --- a/Libs/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua +++ b/Libs/AceGUI-3.0/widgets/AceGUIWidget-Keybinding.lua @@ -210,7 +210,7 @@ local function Constructor() label:SetJustifyH("CENTER") label:SetHeight(18) - local msgframe = CreateFrame("Frame", nil, UIParent, "BackdropTemplate") + local msgframe = CreateFrame("Frame", nil, UIParent, BackdropTemplateMixin and "BackdropTemplate" or nil) msgframe:SetHeight(30) msgframe:SetBackdrop(ControlBackdrop) msgframe:SetBackdropColor(0,0,0) diff --git a/Libs/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua b/Libs/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua index bacb2be..0870532 100644 --- a/Libs/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua +++ b/Libs/AceGUI-3.0/widgets/AceGUIWidget-MultiLineEditBox.lua @@ -299,7 +299,7 @@ local function Constructor() text:SetPoint("BOTTOMRIGHT", button, "BOTTOMRIGHT", -5, 1) text:SetJustifyV("MIDDLE") - local scrollBG = CreateFrame("Frame", nil, frame, "BackdropTemplate") + local scrollBG = CreateFrame("Frame", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil) scrollBG:SetBackdrop(backdrop) scrollBG:SetBackdropColor(0, 0, 0) scrollBG:SetBackdropBorderColor(0.4, 0.4, 0.4) diff --git a/Libs/AceGUI-3.0/widgets/AceGUIWidget-Slider.lua b/Libs/AceGUI-3.0/widgets/AceGUIWidget-Slider.lua index 483d400..90d57dc 100644 --- a/Libs/AceGUI-3.0/widgets/AceGUIWidget-Slider.lua +++ b/Libs/AceGUI-3.0/widgets/AceGUIWidget-Slider.lua @@ -221,7 +221,7 @@ local function Constructor() label:SetJustifyH("CENTER") label:SetHeight(15) - local slider = CreateFrame("Slider", nil, frame, "BackdropTemplate") + local slider = CreateFrame("Slider", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil) slider:SetOrientation("HORIZONTAL") slider:SetHeight(15) slider:SetHitRectInsets(0, 0, -10, 0) @@ -243,7 +243,7 @@ local function Constructor() local hightext = slider:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall") hightext:SetPoint("TOPRIGHT", slider, "BOTTOMRIGHT", -2, 3) - local editbox = CreateFrame("EditBox", nil, frame, "BackdropTemplate") + local editbox = CreateFrame("EditBox", nil, frame, BackdropTemplateMixin and "BackdropTemplate" or nil) editbox:SetAutoFocus(false) editbox:SetFontObject(GameFontHighlightSmall) editbox:SetPoint("TOP", slider, "BOTTOM") diff --git a/Modules/QuestLinks/Hooks.lua b/Modules/QuestLinks/Hooks.lua index e8e53ef..2a21148 100644 --- a/Modules/QuestLinks/Hooks.lua +++ b/Modules/QuestLinks/Hooks.lua @@ -42,8 +42,17 @@ function Hooks:HookQuestLogTitle() -- For all other clicks (including tracking/untracking), use the original function -- only call Questie's tracker if we actually want to fix this quest (normal quests already call AQW_insert) - if Questie.db.profile.trackerEnabled and GetNumQuestLeaderBoards(questLogLineIndex) == 0 and (not IsQuestWatched(questLogLineIndex)) then - QuestieTracker:AQW_Insert(questLogLineIndex, QUEST_WATCH_NO_EXPIRE) + if Questie.db.profile.trackerEnabled and GetNumQuestLeaderBoards(questLogLineIndex) == 0 then + local _, _, _, _, _, _, _, questId = GetQuestLogTitle(questLogLineIndex) + if questId and questId > 0 then + if Questie.db.char.TrackedQuests[questId] or (Questie.db.profile.autoTrackQuests and (not Questie.db.char.AutoUntrackedQuests[questId])) then + -- Quest is currently tracked — hidden it + QuestieTracker:UntrackQuestId(questId) + else + -- Quest is currently hidden — show it + QuestieTracker:AQW_Insert(questLogLineIndex, QUEST_WATCH_NO_EXPIRE) + end + end if WatchFrame_Update then WatchFrame_Update() end diff --git a/Modules/Tracker/QuestieTracker.lua b/Modules/Tracker/QuestieTracker.lua index 8b41fac..3684251 100644 --- a/Modules/Tracker/QuestieTracker.lua +++ b/Modules/Tracker/QuestieTracker.lua @@ -2287,19 +2287,36 @@ function QuestieTracker.RemoveQuestWatch(index, isQuestie) if not isQuestie then if index then - local questId = select(8, GetQuestLogTitle(index)) - if (not questId) or questId == 0 then - -- When an objective progresses in TBC "index" is the questId, but when a quest is manually removed from - -- the quest watch (e.g. shift clicking it in the quest log) "index" is the questLogIndex. - -- We should NOT untrack when Blizzard calls this with a questId internally during objective updates. - if questId == 0 then - Questie:Debug(Questie.DEBUG_DEVELOP, "[QuestieTracker.RemoveQuestWatch] - Internal Blizzard update, skipping untrack for ID:", index) - end + local _, _, _, isHeader, _, _, _, questId = GetQuestLogTitle(index) + + if isHeader then return end - if questId then - QuestieTracker:UntrackQuestId(questId) + if (not questId) or questId == 0 then + -- Maybe index was already a questId (Ascension/Ebonhold extension) + if index > 0 and (GetQuestLogIndexByID and GetQuestLogIndexByID(index) > 0) then + questId = index + else + return + end + end + + if questId and questId > 0 then + local stack = debugstack(2, 5, 0) + local isUserAction = stack:find("QuestLog") or stack:find("OnClick") or stack:find("QuestWatch") or stack:find("TrackerLinePool") or stack:find("TrackerMenu") or IsShiftKeyDown() + + if not isUserAction then + -- Internal update: Only untrack if we are NOT in auto-track mode + if not Questie.db.profile.autoTrackQuests then + Questie:Debug(Questie.DEBUG_DEVELOP, "[QuestieTracker.RemoveQuestWatch] - Internal update (untrack):", questId) + QuestieTracker:UntrackQuestId(questId) + end + else + -- User triggered untrack: Explicitly follow it. + Questie:Debug(Questie.DEBUG_DEVELOP, "[QuestieTracker.RemoveQuestWatch] - User action (untrack):", questId) + QuestieTracker:UntrackQuestId(questId) + end Questie:Debug(Questie.DEBUG_DEVELOP, "[QuestieTracker.RemoveQuestWatch] - by Blizzard", questId) end end @@ -2341,7 +2358,7 @@ function QuestieTracker:AQW_Insert(index, expire) -- This prevents double calling this function local now = GetTime() - if index and index == QuestieTracker.last_aqw and (now - lastAQW) < 0.1 then + if index and index == QuestieTracker.last_aqw and (now - lastAQW) < 0.05 then return end @@ -2352,24 +2369,50 @@ function QuestieTracker:AQW_Insert(index, expire) -- that is all the player will see. This also prevents hitting the Blizzard Quest Watch Limit. RemoveQuestWatch(index, true) - local questId = select(8, GetQuestLogTitle(index)) + local _, _, _, isHeader, _, _, _, questId = GetQuestLogTitle(index) + if isHeader then return end + if (not questId) or questId == 0 then -- When an objective progresses in TBC "index" is the questId, but when a quest is manually added to the quest watch -- (e.g. shift clicking it in the quest log) "index" is the questLogIndex. - questId = index + if index and index > 50 and GetQuestLogIndexByID and GetQuestLogIndexByID(index) > 0 then + questId = index + else + return + end end if questId and questId > 0 then + -- Check if this was a manual user action (Shift-Click in Quest Log or similar) + local stack = debugstack(2, 8, 0) + local isUserAction = stack:find("QuestLog") or stack:find("OnClick") or stack:find("QuestWatch") or stack:find("Toggle") or stack:find("TrackerLinePool") or stack:find("TrackerMenu") or IsShiftKeyDown() + -- These checks makes sure the only way to track a quest is through the Blizzard Quest Log -- or another Addon hooked into the Blizzard Quest Log that replaces the default Quest Log. if not Questie.db.profile.autoTrackQuests then - -- Manual track mode: force track when AddQuestWatch is called - Questie.db.char.TrackedQuests[questId] = true - Questie.db.char.AutoUntrackedQuests[questId] = nil - else - if Questie.db.char.AutoUntrackedQuests[questId] then - -- Quest was manually hidden — shift-click re-tracks it + if isUserAction then + Questie:Debug(Questie.DEBUG_DEVELOP, "[QuestieTracker:AQW_Insert] - Manual mode, user re-track:", questId) + Questie.db.char.TrackedQuests[questId] = true Questie.db.char.AutoUntrackedQuests[questId] = nil + else + -- In manual mode, we normally only track on user action, but if Blizzard calls it, + -- it might be a re-sync of something the user HAD tracked. + if Questie.db.char.TrackedQuests[questId] then + -- Keep it tracked + else + -- Blizzard auto-tracked something we didn't ask for? Ignore it in Manual mode. + return + end + end + else + if isUserAction then + -- Auto track mode: User manually tracked it (un-hiding) + Questie:Debug(Questie.DEBUG_DEVELOP, "[QuestieTracker:AQW_Insert] - Auto mode, user un-hide:", questId) + Questie.db.char.AutoUntrackedQuests[questId] = nil + elseif Questie.db.char.AutoUntrackedQuests[questId] then + -- Auto track mode: Internal update for a HIDDEN quest — respect the hidden state! + Questie:Debug(Questie.DEBUG_DEVELOP, "[QuestieTracker:AQW_Insert] - Auto mode, skipping hidden quest:", questId) + return end end diff --git a/Modules/Tracker/TrackerLinePool.lua b/Modules/Tracker/TrackerLinePool.lua index cb8f527..f03657d 100644 --- a/Modules/Tracker/TrackerLinePool.lua +++ b/Modules/Tracker/TrackerLinePool.lua @@ -1017,6 +1017,10 @@ TrackerLinePool.OnClickQuest = function(self, button) end end else + local questLogIndex = GetQuestLogIndexByID(self.Quest.Id) + if questLogIndex and questLogIndex > 0 then + RemoveQuestWatch(questLogIndex) + end QuestieTracker:UntrackQuestId(self.Quest.Id) local questLogFrame = QuestLogExFrame or ClassicQuestLog or QuestLogFrame if questLogFrame:IsShown() then diff --git a/Questie-X-Classic.toc b/Questie-X-Classic.toc index ebcec21..bdb1ec3 100644 --- a/Questie-X-Classic.toc +++ b/Questie-X-Classic.toc @@ -1,11 +1,11 @@ ## Interface: 30300 -## Title: |cFF5EBAF3Questie|r|cFFDAFAFD-X|r-Classic|cFF00FF00 v1.3.7|r +## Title: |cFF5EBAF3Questie|r|cFFDAFAFD-X|r-Classic|cFF00FF00 v1.3.9|r ## Notes: A standalone Classic QuestHelper ## Notes-esMX: Ayundante de misión ## Notes-esES: Ayundante de misión ## Notes-ptBR: Ajudante de missão ## Notes-frFR: Assistant de quête -## Version: 1.3.7 +## Version: 1.3.9 ## RequiredDeps: ## OptionalDeps: Ace3, CallbackHandler-1.0, HereBeDragons, LibDataBroker-1.1, LibDBIcon-1.0, LibSharedMedia-3.0, LibStub, LibUIDropDownMenu ## SavedVariables: QuestieConfig diff --git a/Questie-X-TBC.toc b/Questie-X-TBC.toc index 169ff60..44b609b 100644 --- a/Questie-X-TBC.toc +++ b/Questie-X-TBC.toc @@ -1,11 +1,11 @@ ## Interface: 30300 -## Title: |cFF5EBAF3Questie|r|cFFDAFAFD-X|r-TBC|cFF00FF00 v1.3.7|r +## Title: |cFF5EBAF3Questie|r|cFFDAFAFD-X|r-TBC|cFF00FF00 v1.3.9|r ## Notes: A standalone Classic QuestHelper ## Notes-esMX: Ayundante de misión ## Notes-esES: Ayundante de misión ## Notes-ptBR: Ajudante de missão ## Notes-frFR: Assistant de quête -## Version: 1.3.7 +## Version: 1.3.9 ## RequiredDeps: ## OptionalDeps: Ace3, CallbackHandler-1.0, HereBeDragons, LibDataBroker-1.1, LibDBIcon-1.0, LibSharedMedia-3.0, LibStub, LibUIDropDownMenu ## SavedVariables: QuestieConfig diff --git a/Questie-X-Turtle.toc b/Questie-X-Turtle.toc index 07acda9..6968673 100644 --- a/Questie-X-Turtle.toc +++ b/Questie-X-Turtle.toc @@ -1,11 +1,11 @@ ## Interface: 11200 -## Title: |cFF5EBAF3Questie|r|cFFDAFAFD-X|r-Turtle|cFF00FF00 v1.3.7|r +## Title: |cFF5EBAF3Questie|r|cFFDAFAFD-X|r-Turtle|cFF00FF00 v1.3.9|r ## Notes: A standalone Classic QuestHelper ## Notes-esMX: Ayundante de misiones ## Notes-esES: Ayundante de misiones ## Notes-ptBR: Ajudante de misiones ## Notes-frFR: Assistant de quêtes -## Version: 1.3.7 +## Version: 1.3.9 ## RequiredDeps: ## OptionalDeps: Ace3, CallbackHandler-1.0, HereBeDragons, LibDataBroker-1.1, LibDBIcon-1.0, LibSharedMedia-3.0, LibStub, LibUIDropDownMenu, Questie-X-TurtleDB ## SavedVariables: QuestieConfig diff --git a/Questie-X.toc b/Questie-X.toc index 34ce5cd..0372bd6 100644 --- a/Questie-X.toc +++ b/Questie-X.toc @@ -11,7 +11,7 @@ ## Notes-esES: Ayundante de misión ## Notes-ptBR: Ajudante de missão ## Notes-frFR: Assistant de quête -## Version: 1.3.7 +## Version: 1.3.9 ## RequiredDeps: ## OptionalDeps: Ace3, CallbackHandler-1.0, HereBeDragons, LibDataBroker-1.1, LibDBIcon-1.0, LibSharedMedia-3.0, LibStub, LibUIDropDownMenu, Questie-X-WotLKDB, Questie-X-ClassicDB, Questie-X-TBCDB, Questie-X-TurtleDB, Questie-X-AscensionDB, Questie-X-EbonholdDB ## SavedVariables: QuestieConfig, QuestieLearnerDB