2.4.0
2.4.0
New Features
Gardening
- Configurable watering: planting now reads a water count from the UI (and per-action overrides in batches). Set to 0 to skip auto-watering entirely. (#87)
- Non-modal plant status label replaces intrusive popups — progress, success, cancel, and errors display inline with colored text and timestamps. An audible cue plays on completion instead of a message box.
- Gardening overlay moved to the bottom-right of the screen. New
CloseOverlaylifecycle properly disposes the overlay between sessions whileHideOverlaycontinues to preserve state mid-session.
Doodle Training
- New "Cycles" UI: set how many times to run the trick rotation before stopping.
Dev Tools
- New Reset State button in the Debug group: clears manual coordinates and the image-recognition cache in one click. Useful for users with stale state from prior builds.
Bug Fixes
- Golf "-2" courses misidentified as their base course (#86):
MatchCourseNamewas iteratingCourseNameToFilein insertion order and using substring containment, so OCR text for "Whole in Won-2" matched "Whole in Won" first and ran the wrong action file. 17 courses with both base and "-2" variants were affected. Candidates are now iterated by descending key length so the more specific name wins; the same fix applies to the fuzzy-match fallback. - Stale coordinates after recapture/recalibrate: a regression from #80 caused
GetElementLocationAsyncto short-circuit on cached centers without re-verifying, so capturing a new template variant or updating manual coordinates had no effect — the bot kept clicking the old location (most visible on fishing'sRedFishingButton, resolved every cast). Cache is now invalidated when templates are saved or manual coordinates actually change, and Reset All clears it too.One-time fix for existing fishing issues: use the Dev tab → Reset State to clear the stale cached center. Subsequent recaptures will auto-clear the cache, so this won't recur.
- Misleading coordinate-source logs:
CoordinatesManagerlabelled every successful resolve as[source=ImageRec]even when the value came from cache, sending stale-cache bug investigations down the wrong path. Added aUIElementSourceenum (Cache/ImageRec/Manual/None) and aGetElementLocationWithSourceAsyncoverload that returns where the value actually came from.
Internal
- New
UIElementSourceenum andGetElementLocationWithSourceAsyncoverload (additive — existingGetElementLocationAsynccallers unchanged). - Updated cached coordinates for several gardening templates (Remove Plant, Scratch Doodle, jellybean/plant buttons) from recent captures.
Full Changelog: 2.3.1...2.4.0