fix: Blood of Heroes object rendering and QuestieQuest runtime crash fixes

This commit is contained in:
Xurkon
2026-04-12 00:45:50 -05:00
parent 98b45c804d
commit 08eace3115
4 changed files with 35 additions and 1 deletions
+6
View File
@@ -15,6 +15,12 @@
- **[UI — Search Experience]** Improved the Advanced Search results interface.
- **Dynamic Button States**: Fixed the "Show on Map" button state management to correctly toggle to "Remove from Map" when pins are active.
- **Stability**: Removed experimental rendering logic that caused regressions with standard quest objective icons.
- **[Fix — ChatFilter Mythic Keystone Parsing]** Resolved a bug where mythic keystone IDs posted in chat were incorrectly parsed as quest links and converted to broken clickable quests.
- **Pattern Guard**: Added an early skip in `ChatFilter.Filter` to detect and skip entries where the extracted name starts with `"Keystone"`, preventing keystones from entering the quest-link conversion path.
- **Root Cause**: The regex `\[(.+) %((%d+)%)]` matched chat messages like `[Keystone 12345]` because the name portion "Keystone 12345" matched `.+` and the ID happened to correspond to a valid quest ID in `QuestPointers`, causing a false-positive hyperlink replacement.
- **[Fix — Ebonhold Call Board Repeatable Quests]** Resolved a bug where repeatable quests from the Ebonhold Call Board showed as permanently complete in the tracker after re-accepting them.
- **State Leak**: On Ebonhold, Call Board quests auto-complete and vanish from the quest log without firing a `QUEST_REMOVED` event. Questie was marking them as `QUEST_TURNED_IN` in the internal `questLog` table but never cleaning that state on re-accept, causing the tracker to render them as already-complete.
- **Re-Accept Guard**: Added a pre-check in the `QUEST_ACCEPTED` handler that detects quests already in `QUEST_TURNED_IN` state and performs full cleanup (`QuestLogCache.RemoveQuest`, `CompleteQuest`, `Journey:CompleteQuest`, `Announce:CompletedQuest`, `Tracker:RemoveQuest`, `questLog[questId] = nil`) before processing the fresh accept.
## v1.5.9 (2026-04-08)
+13
View File
@@ -241,6 +241,19 @@ function _QuestEventHandler:QuestAccepted(questLogIndex, questId)
skipNextUQLCEvent = true
end
-- If the quest was already in questLog as QUEST_TURNED_IN (e.g. Ebonhold Call Board repeatable
-- quests that vanish without a proper QUEST_REMOVED event), clean up before re-accepting so the
-- tracker doesn't show it as already complete.
if questLog[questId] and questLog[questId].state == QUEST_LOG_STATES.QUEST_TURNED_IN then
Questie:Debug(Questie.DEBUG_INFO, "Quest:", questId, "re-accepted after auto-complete, clearing stale state")
QuestLogCache.RemoveQuest(questId)
QuestieQuest:CompleteQuest(questId) -- clears per-quest data
QuestieJourney:CompleteQuest(questId)
QuestieAnnounce:CompletedQuest(questId)
QuestieTracker:RemoveQuest(questId)
questLog[questId] = nil
end
QuestieCombatQueue:Queue(function()
QuestieLib:CacheItemNames(questId)
_QuestEventHandler:HandleQuestAccepted(questId)
+4 -1
View File
@@ -31,7 +31,10 @@ ChatFilter.Filter = function(chatFrame, _, msg, playerName, languageName, channe
end
end
if questId and QuestieDB.QuestPointers[questId] then
-- Skip non-quest patterns like mythic keystones
if questName and string.match(questName, "^Keystone") then
-- skip keystone links
elseif questId and QuestieDB.QuestPointers[questId] then
if (not senderGUID) then
playerName = BNGetFriendInfoByID(bnSenderID)
senderGUID = bnSenderID
+12
View File
@@ -198,6 +198,18 @@
<li><strong>Stability</strong>: Removed experimental rendering logic that caused regressions with standard quest objective icons.</li>
</ul>
</li>
<li><strong>[Fix &mdash; ChatFilter Mythic Keystone Parsing]</strong> Resolved a bug where mythic keystone IDs posted in chat were incorrectly parsed as quest links and converted to broken clickable quests.
<ul>
<li><strong>Pattern Guard</strong>: Added an early skip in <code>ChatFilter.Filter</code> to detect and skip entries where the extracted name starts with <code>"Keystone"</code>, preventing keystones from entering the quest-link conversion path.</li>
<li><strong>Root Cause</strong>: The regex <code>\[(.+) %((%d+)%)]</code> matched chat messages like <code>[Keystone 12345]</code> because the name portion "Keystone 12345" matched <code>.+</code> and the ID happened to correspond to a valid quest ID in <code>QuestPointers</code>, causing a false-positive hyperlink replacement.</li>
</ul>
</li>
<li><strong>[Fix &mdash; Ebonhold Call Board Repeatable Quests]</strong> Resolved a bug where repeatable quests from the Ebonhold Call Board showed as permanently complete in the tracker after re-accepting them.
<ul>
<li><strong>State Leak</strong>: On Ebonhold, Call Board quests auto-complete and vanish from the quest log without firing a <code>QUEST_REMOVED</code> event. Questie was marking them as <code>QUEST_TURNED_IN</code> in the internal <code>questLog</code> table but never cleaning that state on re-accept, causing the tracker to render them as already-complete.</li>
<li><strong>Re-Accept Guard</strong>: Added a pre-check in the <code>QUEST_ACCEPTED</code> handler that detects quests already in <code>QUEST_TURNED_IN</code> state and performs full cleanup (<code>QuestLogCache.RemoveQuest</code>, <code>CompleteQuest</code>, <code>Journey:CompleteQuest</code>, <code>Announce:CompletedQuest</code>, <code>Tracker:RemoveQuest</code>, <code>questLog[questId] = nil</code>) before processing the fresh accept.</li>
</ul>
</li>
</ul>
<hr>