Skip to content

Releases: brues-code/VanillaGuide-Plus

v1.0.5

Choose a tag to compare

@github-actions github-actions released this 06 Sep 05:38

VanillaGuide+

v1.0.5 (2026-09-06)

Full Changelog Previous Releases

  • Route waypoints through pluggable providers; guard guide-not-loaded state
    Navigation.lua wrapped TomTom, Cartographer and MetaMap in one branching
    MapPoint/ClearWaypoint pair, and callers gated on the addon globals directly
    (StatusFrame, UpdateWaypoint). Adding pfQuest meant another branch in every
    one of those places.
    Replace that with a provider registry: { label, IsAvailable, Add, Clear },
    taking a zone name plus 0-100 map coords. Callers now ask
    GetWaypointProvider() instead of naming addons. Selection is auto (first
    available, TomTom first as the only cross-zone arrow) or pinned via
    db.char.waypointprovider; mapmetamap/mapbwp are gone, MetaMap BWP is its own
    provider. ClearWaypoint clears every provider so switching leaves nothing
    stale behind.
    The pfQuest provider uses pfMap:AddNode with arrow = true, the meta flag
    route.lua already reads to force a node into the route planner, then
    route.SetTarget to pin the arrow to the guide step rather than the nearest
    quest objective. The node texture is pfQuest's own img\fav so its layer is a
    known 6 — SetTarget/IsTarget match on layer.
    Options gets a cycle button in place of the two MetaMap checkboxes; DiagNav
    lists providers and TestWaypoint no longer hardcodes TomTom.
    Also fix a crash reachable independently of any of this: self.actions and
    self.tags only exist after LoadGuide parses a guide, but GetObjectiveInfo,
    GetObjectiveStatus and GetObjectiveTag indexed them unconditionally. Event
    handlers reach these with no guide loaded — pfUI's libunitscan calling
    TargetByName fired PLAYER_TARGET_CHANGED into the GETFLIGHTPOINT handler and
    threw "attempt to index field `actions'". Guard the table, not just the step,
    matching GetLootRequirement. ObjectivesFrame's ResetScrollbar (called from
    the panel's OnShow) and UpdateOHPanel threw the same way on an unloaded
    guide.
  • Update .pkgmeta
  • Create .luarc.json
  • Purge unused Deformat-2.0 and Gratuity-2.0 libs
    Neither was ever called: the Deformat (DF) and Gratuity locals were
    dead, Gratuity's FindDeformat (Deformat's only consumer) is never
    invoked, and no other embedded lib depends on either. Also drop the
    unused Dewdrop local D -- FuBarPlugin loads Dewdrop itself for the
    menu, so the library stays; only our dead reference is removed.
  • Derive turtleRaces from C_CreatureInfo instead of hardcoding.

v1.0.4

Choose a tag to compare

@github-actions github-actions released this 11 Aug 03:43

VanillaGuide+

v1.0.4 (2026-08-11)

Full Changelog Previous Releases

  • Fix GM login crash; spread guide load across frames
    GM/admin characters return an empty UnitFactionGroup, so myfaction was
    nil and RegisterGuide re-deferred every guide back into the same list
    the PLAYER_ENTERING_WORLD loop was walking with ipairs -- an unbounded
    append-while-iterating loop that grew a table until the client crashed
    in Lua's array-grow.
    • GetPlayerFaction: derive faction from the player's base race via
      C_CreatureInfo.GetFactionInfo(UnitRaceBase) when UnitFactionGroup is
      empty, so GM logins register guides instead of re-deferring forever.
    • Snapshot and clear deferguides before the register loop so
      RegisterGuide can never iterate the list it appends to.
    • Register guides frame-spread via a coroutine and defer InitializeRoute
      briefly past login for load headroom.
    • Re-enable the RXP / RXP_Hardcore guide packs now the login path is safe.

v1.0.3

Choose a tag to compare

@github-actions github-actions released this 07 Jul 20:03

VanillaGuide+

v1.0.3 (2026-07-07)

Full Changelog Previous Releases

  • guide names should match zone names

v1.0.2

Choose a tag to compare

@github-actions github-actions released this 05 Jul 01:26

VanillaGuide+

v1.0.2 (2026-07-05)

Full Changelog Previous Releases

  • Fix login crash: stop loading all guide packs into the fixed Lua pool
    The client compiled every guide pack (~5.4 MB of Lua across 418 files) into
    vanilla 1.12's fixed Lua memory pool at login. The recently added RXP /
    RXP_Hardcore packs (~3.4 MB) pushed it over the edge and, combined with the
    pfQuest-turtle DB, exhausted the pool during file load (lmemPool.cpp:53) before
    any runtime code ran. Drop RXP/RXP_Hardcore from the TOC startup load; they are
    a separate route pack not used by the VanillaGuide routes. Load-on-demand is the
    proper long-term fix.
    Also fold in fixes/mitigations found while hunting the crash:
    • LoadNextGuide: terminate the auto-advance chain instead of returning true
      unconditionally (dangling/unregistered next zone wrapped to guidelist[1] and
      looped forever); add a consecutive-advance cap reset in UpdateStatusFrame.
    • Swap GetQuestDetails(qid).requirements count to GetNumQuestObjectives(qid)
      for the OIDX bounds-check (no table/string materialization).
    • Cache GetLootRequirement results per guide load (self.lootreqcache).
    • Coalesce bursty status refreshes via ScheduleStatusUpdate (C_Timer debounce).
    • Throttle guide-load cache warming (WarmCaches) instead of a synchronous burst.

v1.0.1

Choose a tag to compare

@github-actions github-actions released this 04 Jul 21:23

VanillaGuide+

v1.0.1 (2026-07-04)

Full Changelog Previous Releases

  • Derive item tracking from quest objective data; validate OIDX tags.
    GetLootRequirement resolves a step's item requirement from the
    authored |L| tag, or for COMPLETE steps from
    C_QuestLog.GetQuestDetails' requirements array (the |OIDX| objective,
    or the sole objective of a single-objective quest). Bag-count
    completion and collect-step name enrichment now cover untagged quest
    collects with no guide-data changes.
    Guide load also bounds-checks every |OIDX| against the quest's real
    objective count and reports out-of-range tags in debug mode.
  • Key race routing on UnitRaceBase tokens.
    GetRouteForRace now defaults to UnitRaceBase("player"), so the
    turtleRaces table shrinks to one ChrRaces.dbc-token entry per race
    (High Elf arrives as BloodElf, raceID 10) and call sites drop the
    UnitRace second-return dance. Legacy spellings still resolve via a
    space-stripping fallback. Remove the unused GetRacesForFaction; the
    remaining UnitRace calls are localized display only, which also fixes
    the "My Race" button showing the raw BloodElf token.
  • Update README.md
  • bump min version of classicapi

v1.0.0

Choose a tag to compare

@github-actions github-actions released this 04 Jul 20:32

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
  • 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.