QuestieLearner:
- Expose QuestieLearner.data as direct ref to Questie.db.global.learnedData
- Add mc (match-count) field tracking to LearnNPC/Quest/Item/Object
- Add _Learner:BroadcastIfCommsAvailable() hook called after every write
- Add QuestieLearner:HandleNetworkData() — validates, merges, and deduplicates
incoming network data for NPC/QUEST/ITEM/OBJECT types, including coordinate
and item-drop list merging
QuestieLearnerComms:
- Move DebugLog definition to top of file (was called before definition)
- Fix IsDuplicateMessage fallback: table.getn(serializedData) -> string.len(),
mod() -> math.mod() for Lua 5.0 compatibility
- Add mutedUntil table and implement 5-minute timed mute on 3 strikes
(previously the 3-strike branch was an empty if body with no effect)
- Remove duplicated nil-check + DebugLog block in ProcessRawMessage
The previous implementation used 'arg' (Lua 5.0 implicit vararg table) which
is nil inside a fixed-parameter function. Replace with the explicit index-chain
pattern matching the QuestieCompat.lua version.
- Icons/mmapIcon.tga: new minimap button icon
- MinimapIcon.lua: use mmapIcon.tga as LDB icon; apply circular mask
(AddMaskTexture for Retail, SetMask+pcall for Classic/WotLK/1.12 vanilla)
- NPC 5467 (Deep Dweller): Replace single spawn point with 28 locations
scraped from Wowhead covering the eastern Tanaris coast area
- NPC 5470 (Raging Dune Smasher): Was nil in all databases, added 23
spawn locations in the Abyssal Sands (southwest Tanaris)
- Fixes added to both classicNPCFixes.lua and tbcNPCFixes.lua
- Quest 50006 (Sandstone Giants) killCreditObjective already updated in
previous commit to include all 4 giant NPCs (5466, 5467, 5469, 5470)
All four giant types now have correct spawn data for minimap pin display.
When QuestLogCache parses incomplete tracker data upon reload,
it leaves quest.isComplete undefined or false. This allows the
Arrow to process SpecialObjectives (like required source item drops)
which do not have Completed/Needed/Collected stats on them, bypassing
our recent arrow logic fix.
Added an explicit check for QuestieDB.IsComplete(quest.Id) == 1
at the very top of the track loop to guarantee the Arrow immediately
stops processing objectives and exclusively targets the finisher.
In Lua, 0 evaluates as truthy. The check
'if questLogEntry.isComplete then return questLogEntry.isComplete end'
was completely bypassing our fallback completion logic because
GetQuestLogTitle sets isComplete = 0 when a quest is incomplete.
This caused the arrow to still point to requiredSourceItems (like
the Cold Iron Key drops) because the quest was never being flagged
as 'isComplete=true' internally.
Fixed by explicitly checking for isComplete == 1 or isComplete == -1
before returning.