v1.0.0
VanillaGuide+
v1.0.0 (2026-07-04)
Full Changelog Previous Releases
- Build the use-item button on ItemButtonTemplate with a tooltip.
Hovering shows the owned item via GameTooltip:SetBagItem when it is
in the bags (charges/cooldown state), falling back to SetItemByID
before it has been looted. - Replace fractional QIDs with QID + OIDX objective tracking.
The hand-authored zone guides encoded "quest 771, objective 2" as
|QID|771.2|, which the parser's integer-only pattern silently drops -
those 639 steps across 107 files had no QID at all and could never
auto-complete. Rewrite them as |QID|771| |OIDX|2| and promote N/K
sub-steps to C when the same file accepts the quest earlier, so the
leaderboard objective actually completes them.
The RXP converters parsed the .complete objective index and dropped
it, and ignored .collect entirely; both now emit |OIDX| and |L| tags.
Document OIDX and the fractional-QID pitfall in the authoring guide. - Fix quest automation races and step-advance deadlocks.
- Resolve automation against the first pending step instead of
self.current, which lags one update behind during NPC interaction - Re-drive the still-open gossip/quest window after the step advances
(auto-offered follow-ups fired before the advance and were missed) - Handle QUEST_GREETING for non-gossip multi-quest NPCs
- Arm the delayed-update gate only for turn-ins; an uncheck via
GoToPreviousObjective wedged it shut for good since the rewound
quest legitimately stays in the log. Time-bound the gate (3s) and
flush it from the ticker as a backstop - Guard CompleteQuestByQid on the raw turnedin table: the handler
records the QID first, which made GetObjectiveStatus hide the
matching step from its own search - Advance on QUEST_REMOVED (new ClassicAPI event) and rewind to the
accept step when a quest is abandoned - Warn once when a turn-in is skipped because the quest was never
accepted, instead of silently jumping ahead
- Resolve automation against the first pending step instead of
- build tools
- Add automatic quest accept and turnin via C_GossipInfo.
New Auto Accept/Turnin toggle (default on, hold SHIFT to suspend). Gossip
windows select the current step quest by QID (title for untagged steps),
requiring isComplete for turnins; QUEST_DETAIL accepts, QUEST_PROGRESS
completes when completable, and QUEST_COMPLETE claims the reward only when
there is no reward choice. Consolidate the scattered QUEST_DETAIL and
QUEST_COMPLETE registrations into TrackEvents. - Add C_QuestLog/C_Item name fallbacks and warm caches at guide load.
GetQuestNameByQid now reads the server-authoritative quest cache first with
pfQuest as fallback, so QID name resolution works without pfDB and always
matches quest log titles. GetItemNameByItemId falls back to
C_Item.GetItemNameByID, which fires the server query on a miss instead of
returning nil forever. LoadGuide pre-requests quest and item data for every
|QID|, |L|, and |U| tag (deduplicated) so later lookups are synchronous, and
the USE-item button icon comes from C_Item.GetItemIconByID. - Replace legacy bag/loot scanning with C_Item, C_Container, and C_Timer.
Count |L|-tagged collect steps via C_Item.GetItemCount on BAG_UPDATE_DELAYED
instead of parsing loot messages; this drops the count+1 fudge and catches
mail/trade/vendor/AH acquisitions. CHAT_MSG_LOOT remains only for legacy BUY
steps without an |L| tag. Delete the texture-matching GetItemCount helper,
switch FindBagSlot and the UseContainerItem hook to
C_Container.GetContainerItemID, replace both OnUpdate poll frames with
C_Timer, and purge the dead QUEST_QUERY_COMPLETE registration.
Also fix five AceEvent-2.0 handler signatures that expected an event-name
first argument (Ace2 passes event args directly): CHAT_MSG_LOOT errored on
every loot, ADDON_LOADED never installed the trainer hook, PLAYER_LEVEL_UP
compared HP against the |LV| level, UNIT_QUEST_LOG_CHANGED and
UI_INFO_MESSAGE never matched. BUY name matching also stripped item-link
brackets so it can actually match step names. - Update README.md
- Detect hearthstone binds via HEARTHSTONE_BOUND instead of chat parsing.
The ClassicAPI event fires on SMSG_BINDPOINTUPDATE (login sync suppressed);
the handler re-reads GetBindLocation() for the SETHEARTH step match. Remove
the now-orphaned home-bind and quest-accepted locale patterns. - Require ClassicAPI v1.5.0+ and switch quest tracking to questID-based APIs.
Replace CHAT_MSG_SYSTEM accept parsing and the GetQuestReward hook with the
QUEST_ACCEPTED / QUEST_TURNED_IN events, matching guide steps by QID tag with
title comparison as fallback for untagged steps. Turnins are now tracked on
server confirmation, including quests outside the loaded guide.
Make quest log lookups QID-first via C_QuestLog.IsOnQuest and
GetQuestIDForLogIndex: GetQuestDetails/GetObjectiveStatus, SmartSkipToStep log
maps, chain inference, quest watch tracking, and IsQuestInLogByQid (no longer
needs pfDB). Remove dead ScanQuestLog/IsQuestInLog/IsQuestComplete helpers.
OnEnable refuses to load below CLASSIC_API_VERSION 10500.