Skip to main content
0.2.0 — Dirt Nap
2026-07-13

Added

  • Added a RES_SICKNESS bot state: after a revive, if the player has the Resurrection Sickness debuff (spell 15007), the bot parks in place instead of resuming the route — all revive paths (DeadManCheck, PLAYER_ALIVE, spirit-healer interaction) funnel through a new ResumeAfterRevive() helper, a 0.25s ResSicknessCheck() loop detects the debuff even when the aura appears after the initial revive event and resumes to IDLE with post-revive grace once it wears off, and enabling the bot while the debuff is active also parks in RES_SICKNESS. Entering the wait state clears the active target/path, explicitly stops auto-run, nav, and directional movement, and rejects new route, ghost, and combat movement requests. While parked, the dispatcher, node scanning, hearthstone-after-idle, flight checks, and the freeze/stuck checker are gated off, while anti-AFK and combat self-defense stay active.
  • Added a Mintlify documentation site under docs/ (docs.json plus MDX pages) covering installation, quickstart, architecture, the Gatherer bot (overview, state machine, configuration keys, routes and data, file map), development tooling and conventions, and a full framework reference for every volvox.* service (runtime, modules, config, events, GUI builder, interface, logging, utilities).
  • Documented the mandatory documentation-maintenance process in AGENTS.md and Gatherer/AGENTS.md: the docs/ Mintlify site must be updated in the same commit as every code change alongside CHANGELOG.md — additions documented, edits reflected, removals removed — with a code→page map and docs verification checklist.
  • Added debug logging across the whole seed-planting pipeline (Rich Soil skipped because the feature is not ready, seed-plant takeover, grounding wait, item-use retry, grow wait) plus info logs when a seed is planted and when the grown herb is gathered.

Changed

  • Changed visible Gatherer labels in the settings UI, status text, minimap messages, and user-facing docs to LootRoute while leaving internal APIs, config keys, and bot route/data roots unchanged.
  • Aligned the built-in General settings page tick-rate default with the runtime fallback of 0.1 seconds.
  • Moved the status-frame Settings gear to the trailing end of the icon bar instead of the first slot.
  • Changed Resilient Seed planting to use the seed item directly from the player’s bags (GathererUseItemFromBags, backed by C_Container.UseContainerItem on the exact bag slot — the same as right-clicking the item in the backpack), falling back to use-by-ID only when the bag scan cannot find the item.

Fixed

  • Moved volvox.Config profile storage and the status-frame persistence file to scripts/LootRoute/, with legacy read/migration from scripts/Gatherer/ and configs/Demon/; also fixed reload persistence when WGG.JsonDecode returns a Lua-source string instead of a table.
  • Fixed ghost recovery getting stuck while pathing to Spirit Healers by resetting stalled ghost nav paths and always moving toward the healer’s X/Y position instead of climbing in place.
  • Fixed melee characters failing to chase ranged combat targets by treating a live attackable combat target as fight-worthy even when threat APIs are unreliable, and by measuring chase range from target coordinates before stopping movement.
  • Fixed Single Button Assistant combat stalls by casting Blizzard’s assisted-combat suggestion by exact spell ID before falling back to spell name only when the protected ID callback fails; nil exact-ID returns are now reported as unconfirmed without a same-tick name fallback, and SBA ticks remain suppressed outside player combat.
  • Fixed Single Button Assistant result reporting so an accepted exact-ID protected cast is not later marked failed only because the localized-name fallback failed.
  • Fixed deferred GUI load validation to check the renamed LootRoute settings category instead of the removed legacy Gatherer registry key.
  • Fixed profile migration to treat non-string file reads as missing current profiles before checking legacy config paths.
  • Fixed combat-safe item use to initialize a temporary enemy scan range when Mobrange is still zero.
  • Fixed killed-mob loot memory pruning so expired corpse keys are removed during new interactions.
  • Renamed new Gatherer globals to follow the Gatherer<Thing> helper convention.
  • Fixed route save failure logging to guard DataPath when reporting a missing written route file.
  • Fixed Gatherer consumable ITEMUSE panic during combat: phial/flask use now defers before landing, dismounting, or cancelling form when the player is in combat or an enemy is nearby.
  • Fixed post-fight wild-node cleanup missing Rumbling Oreling / Vengeful Lasher harvest corpses that are not flagged as regular lootable corpses, while gating the harvest fallback on combat-log UNIT_DIED confirmation so live guardians are not treated as corpses by name alone; harvest-style corpses remain eligible during active LOOTMOB retries until the stall timeout.
  • Fixed Midnight mulch selection to require the chosen item to be currently usable before firing it, so Magical Mulch (238387) is auto-used as the fallback only when the client says its item-use effect is available and usability API failures do not fall through permissively.
  • Fixed Gatherer new-route creation silently losing typed route names or reporting success without a route file: EditBox values now save when focus leaves, route actions fall back to the active recording name and log unavailable-core errors, and route saves create/verify C:/WGG/scripts/Gatherer/route/<name>.json before selecting the route.
  • Fixed config/profile writes to verify the file contents after non-true WGG write returns, preserving successful writes from APIs that return nil while still reporting real failures.
  • Fixed fight-target chase distance to measure against the actual chase source returned by GetFightChasePosition() and use coordinate distance only as a fallback, keeping fallback-hostile movement reachable when target is stale.
  • Fixed the status-frame settings separator to inherit the frame’s configured border color instead of hardcoding the default purple accent, and ensured hot-reloaded existing status frames create the separator before repositioning the Settings gear.
  • Fixed route name validation to reject Windows reserved device names and trailing periods before writing route JSON files.
  • Fixed Midnight mulch never being used before herb gathers: SafeItemCount (used by ItemReady for mulch ownership checks) hard-depended on the legacy GetItemCount global (removed from the Midnight 12.0 client) and silently reported zero of every mulch tier — Empowered Mulch (238389), Imbued Mulch (238388), and Magical Mulch (238387). SafeItemCount now prefers C_Item.GetItemCount with a legacy fallback, SelectMidnightMulch honors the per-tier enable settings (MIDUseEmpoweredMulch / MIDUseImbuedMulch / MIDUseMagicalMulch) documented on MidnightMulchConsumables, and TryPrepareMidnightMulch debug-logs when no mulch is owned, enabled, and off cooldown.
  • Fixed Resilient Seed planting never triggering on Rich Soil: seed counting used the legacy GetItemCount global (removed from the Midnight 12.0 client) and silently reported zero seeds, so Rich Soil was filtered out of node scanning. Seed counting now goes through GathererItemCount, which prefers C_Item.GetItemCount and falls back to the legacy GetItemCount global.
  • Fixed Rich Soil debug logging to apply the 5-second throttle before recounting seed item availability, and corrected the documented config key to gatherer.plant_resilient_seed.
  • Fixed the bot approaching Rich Soil without ever planting: the seed takeover only ran inside the tracked-node gather-start gauntlet (≤6yd, grounded, movement flags), which Rich Soil (GameObjectType 8, never lootable) could not satisfy. Planting now triggers as soon as the soil is within the 10yd plant-spell range, and SeedPlant lands/dismounts and stops movement itself.
  • Fixed SeedPlant assuming the plant happened immediately after item use: a new casting phase confirms the 1.5s plant cast starts and finishes (retrying the item use when the cast never appears) before waiting for the grown herb.
  • Fixed the seed wait phase never recognizing the fully grown herb: acceptance hard-required the herb’s creator GUID to match the player, but seed-grown herbs are server-spawned and often carry no creator GUID, so every candidate was rejected until the grow timeout. Creator match is now a fast-accept only; otherwise any Midnight herb that appeared near the soil after planting is accepted (the pre-plant snapshot still filters pre-existing herbs), and rejected candidates are debug-logged.
  • Fixed the minimap dropdown’s Enable Bot/Disable Bot action to call the Gatherer module start/stop methods instead of missing root-level volvox methods.
  • Corrected the GUI builder docs to distinguish visible tab-button wrapping from internal tab content sizing.
  • Clarified Gatherer route fallback docs so "default" is not presented as a load fallback.
0.1.0 — First Harvest
2026-07-05

Added

  • Initial Keep a Changelog file and release workflow documentation.
  • scripts/changelog-release.sh for creating dated release sections with automatic major/minor/patch version increments from Unreleased entries.
  • Documented the mandatory changelog maintenance and release process in AGENTS.md.