Added
- Added a
RES_SICKNESSbot 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 newResumeAfterRevive()helper, a 0.25sResSicknessCheck()loop detects the debuff even when the aura appears after the initial revive event and resumes toIDLEwith post-revive grace once it wears off, and enabling the bot while the debuff is active also parks inRES_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.jsonplus 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 everyvolvox.*service (runtime, modules, config, events, GUI builder, interface, logging, utilities). - Documented the mandatory documentation-maintenance process in
AGENTS.mdandGatherer/AGENTS.md: thedocs/Mintlify site must be updated in the same commit as every code change alongsideCHANGELOG.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
LootRoutewhile 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.1seconds. - 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 byC_Container.UseContainerItemon 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.Configprofile storage and the status-frame persistence file toscripts/LootRoute/, with legacy read/migration fromscripts/Gatherer/andconfigs/Demon/; also fixed reload persistence whenWGG.JsonDecodereturns 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
LootRoutesettings category instead of the removed legacyGathererregistry 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
Mobrangeis 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
DataPathwhen reporting a missing written route file. - Fixed Gatherer consumable
ITEMUSEpanic 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_DIEDconfirmation so live guardians are not treated as corpses by name alone; harvest-style corpses remain eligible during activeLOOTMOBretries 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>.jsonbefore selecting the route. - Fixed config/profile writes to verify the file contents after non-
trueWGG write returns, preserving successful writes from APIs that returnnilwhile 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 whentargetis 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 byItemReadyfor mulch ownership checks) hard-depended on the legacyGetItemCountglobal (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).SafeItemCountnow prefersC_Item.GetItemCountwith a legacy fallback,SelectMidnightMulchhonors the per-tier enable settings (MIDUseEmpoweredMulch/MIDUseImbuedMulch/MIDUseMagicalMulch) documented onMidnightMulchConsumables, andTryPrepareMidnightMulchdebug-logs when no mulch is owned, enabled, and off cooldown. - Fixed Resilient Seed planting never triggering on Rich Soil: seed counting used the legacy
GetItemCountglobal (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 throughGathererItemCount, which prefersC_Item.GetItemCountand falls back to the legacyGetItemCountglobal. - 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
SeedPlantlands/dismounts and stops movement itself. - Fixed
SeedPlantassuming the plant happened immediately after item use: a newcastingphase 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
volvoxmethods. - 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.
Added
- Initial Keep a Changelog file and release workflow documentation.
scripts/changelog-release.shfor 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.
.png?fit=max&auto=format&n=yZatCT6YQ7S22QWv&q=85&s=bb502db827d4362d1268445c3b70d21d)