promotional bannermobile promotional banner

Vamooses Endeavors

Track your Housing Endeavor progress across all characters with a clean, theme-able interface showing tasks, completion status, and season milestones.

File Details

Vamoose's Endeavors v1.16.0

  • R
  • Apr 23, 2026
  • 578.42 KB
  • 11.8K
  • 12.0.5+2
  • Retail

File Name

VamoosesEndeavors-1.16.0.zip

Supported Versions

  • 12.0.5
  • 12.0.1
  • 12.0.0

FIXED:
- AltSharing was registered for the wrong neighborhood-change event
  (VE_NEIGHBORHOOD_CHANGED instead of VE_ACTIVE_NEIGHBORHOOD_CHANGED).
  Long-standing latent bug surfaced by post-1.15.0 audit — its handler had
  been silently never firing. Cross-faction channels now actually re-join
  when you switch active neighborhoods.

CHANGED:
- Removed `/ve scale`, `/ve validate`, `/ve rules`, `/ve observer` debug
  commands and their stale entries in `/ve` help — all relics of the old
  scale-derivation/Observer architecture deleted in 1.15.0.
- Schema migration v3 now also clears legacy `learnedFormula`, `taskRules`,
  and `formulaCheckpoint` SavedVars keys (was being done unconditionally on
  every login).
- Trimmed `VE_XPEngine` context: dropped unread `taskXPCache`,
  `taskXPByPlayer`, `playerCompletions`, and `_ptc` fields (and the dedup
  work that built them). Per-rebuild allocation roughly halved.
- Removed `VE_XPEngine` public methods with zero callers:
  `GetDecayMultiplier`, `HasContext`, `ClearContext`,
  `GetPlayerCompletionCount`. Public surface now only exposes what the UI
  actually reads.
- `EndeavorTracker:GetActivityLogData` no longer falls back to
  `self.cachedActivityLog` — the fallback was unreachable since both paths
  are populated together.
- Fixed: `INITIATIVE_TASK_COMPLETED` 30-second activity-log fallback timer was
  fire-and-forget — five rapid task completions stacked five separate
  fallback timers instead of debouncing. Now cancel-and-replace, single
  fallback in flight at a time.
- Fixed: `SetAsActiveEndeavor` spawned two un-cancellable timers per click
  (1.5s + 3s). Two rapid "Set Active" clicks meant four orphaned timers
  doing duplicate work. Now stored on cancellable handles.
- Fixed: defensive nil-guard on `pending.taskName` in coupon correlation —
  would have errored on `VE_DB.taskActualCoupons[nil]` if the task name
  was ever missing from the pending queue.
- Removed dead `Tracker:GetCouponGainsThisSession` (zero callers) and the
  `VE_FETCH_STATUS_CHANGED` event trigger (no listeners).
- v3 schema migration now also clears `houseXP` from per-guid `houseData`
  entries (pre-1.15.0 wrote it; v1.15.0+ doesn't).
- Cleaned up vestigial XP FORMULA comment block in Constants.lua and the
  duplicate "5." section heading.
- Misc unused-local cleanup across HousingTracker, AltSharing, and
  Endeavors.lua (LSP nits).
- Fixed: `houseInfo.houseName` is `0` (number, truthy) for unnamed houses
  per Blizzard API — the `or` fallback was rendering "0" instead of
  "House N" / "Select House" / "Unknown" in the dropdown and active-
  endeavor display. Both call sites now type-check the string.
- Fixed: `showLoginActiveEndeavor` config setting was in defaults and
  read by EndeavorTracker but never written to SavedVariables — toggling
  it off in the Config tab silently reset to ON every reload.
- Fixed: HousingTracker `Initialize()` and `PLAYER_ENTERING_WORLD` 1.5s
  startup timers were fire-and-forget — could stack if both fired in the
  same load sequence. Now share a single cancellable handle.
- Fixed: EndeavorTracker had three more orphan timers in `OnEvent`
  (PLAYER_ENTERING_WORLD house-list fetch, login-msg announcer, coupon
  retry). All converted to cancellable `NewTimer` with cancel-replace.
  Dropped the now-redundant `_couponRetryScheduled` flag.
- Fixed: `UpdateCoupons` lacked the `if C_CurrencyInfo` guard every other
  call site uses. Coupon icon now also loads for players with 0 coupons
  (was previously gated behind `quantity > 0`).
- Fixed: theme switch on the Activity and Leaderboard tabs left rows
  rendered in the previous theme's colors when the activity log
  timestamp hadn't changed. Both now pass `forceUpdate=true`.
- Fixed: mini favourites panel rows in the header used inline
  `SetBackdropColor` and weren't registered with the theme engine — theme
  switch left their backdrop in the previous color. Now registered as
  Panel widgets so ThemeEngine re-skins them.
- `maxLevel` fallback (HousingTracker + Store default) lowered from 50 to
  9 so it matches the current Midnight S2 cap and doesn't ping as a
  "magic number" — the API is still authoritative when available; the
  fallback only fires if the C call errors.
- Removed dead `CHANNEL_UI_UPDATE` event registration in AltSharing — no
  handler had ever existed for it.
- Fixed (real root cause): the header's contribution was computed by
  matching log entries against the CURRENT character's name, so playing on
  an alt with no contributions to the active initiative showed 0 even
  though the account had earned plenty. Now sums entries across all
  characters that have logged in with VE (the same set the leaderboard's
  account-grouped row shows), matching Blizzard's per-character API value
  only when you have one character.
- Removed 18 debug slash commands. `/ve` (toggle window), `/ve debug`
  (toggle debug mode), and `/ve reset` (factory reset, asks for confirmation)
  are the only ones left. The rest were XP debugging scaffolding from
  the pre-12.0.5 architecture (xpdump, coupons, tasks, questreward,
  currencies, allcurrencies, activity, broadcast, roster, apis, house,
  initiatives, relearn, dumplog, decorinfo, coffer, quote, refresh,
  heal, dump, couponstore). Init.lua dropped from 816 lines to ~250.
- EndeavorTracker simplification pass:
  - Deleted `pendingRetryTimer` field and 3 cancellation blocks — was set
    nowhere, retry mechanism it backed had been removed long ago.
  - Dropped `attempt` parameter from `FetchEndeavorData` — no caller passed
    a real value, the `attempt > 0` branches (retry logging, "retrying"
    state) were unreachable.
  - Replaced two inline "clear endeavor data" duplicates with calls to the
    pre-existing `ClearEndeavorData` helper, parameterized to accept the
    season-name string.
  - Trimmed `fetchStatus` from 4 fields to 2 — removed `attempt` (write-
    only) and `nextRetry` (write-only).
  - `UpdateFetchStatus` signature reduced from `(state, attempt, nextRetry)`
    to just `(state)`. All ~7 call sites simplified.
  - Removed unreachable `"retrying"` state from the 3 tab fetchState checks.
- Renamed Rankings tab section header "Leaderboard" -> "Initiative
  Contribution" so the column unambiguously reads as contribution (matches
  Blizzard's `playerTotalContribution` API field), not as XP. Discord
  feedback flagged the ambiguity.
- Folded `Modules/HousingTracker.lua` into `EndeavorTracker.lua` and deleted
  the module (~330 lines absorbed). Same rationale as the v1.16 XPEngine
  fold-in: HousingTracker had one feeder (Blizzard housing events) and one
  consumer pattern, which made the separate module pure indirection. Public
  methods moved: `RequestHouseInfo`, `UpdateCoupons`. Two redundant methods
  deleted (zero callers): `GetHouseLevel`, `GetCoupons`. Duplicate
  `PLAYER_HOUSE_LIST_UPDATED` registration + debounce timer collapsed.
  Duplicate startup timer (1.5s vs 2s) collapsed into the existing
  `_initFetchTimer`. UI consumers swap `VE.HousingTracker.X` ->
  `VE.EndeavorTracker.X`. No behaviour change.
- Removed the `/ve memory` chart — moveable bar-chart window that sampled
  VE's addon memory once per second. Useful during the memory-leak hunts
  of v1.10-ish, no longer earning its 200 lines. Use stock `/dump
  GetAddOnMemoryUsage("VamoosesEndeavors")` if you want a one-off number.
- Removed three now-redundant timers: `_setActiveRefreshTimer` (3s in
  SetAsActiveEndeavor), `pendingSelectTimer` (1.5s in SelectHouse), and
  `_loginMsgTimer` (12s login-msg fallback in _ProcessHouseListUpdate).
  All three were doing manual "wait + RefreshActivityLogCache" or "wait +
  print" work that the new INITIATIVE_ACTIVITY_LOG_UPDATED listener +
  reliable NEIGHBORHOOD_INITIATIVE_UPDATED firing makes obsolete. Net:
  three fewer timer handles to track and cancel.
- Restored: per-character breakdown tooltip on the contribution display.
  Hover the contribution number to see how much each of your characters
  contributed this cycle, sorted by amount.
- Fixed: header `playerContribution` could stay 0 when the panel opened
  before `PLAYER_HOUSE_LIST_UPDATED` fired. Root cause was layered:
  `RefreshActivityLogCache` early-returned at an `IsViewingActiveNeighborhood`
  gate whenever `viewingGUID` wasn't loaded yet, AND `_RebuildXPIndexes`
  bailed out on a `currentHouseGUID` check. Both gates removed. The
  activity log now drives the display directly: when valid log data
  arrives, indexes rebuild and the header updates. Per-house caching in
  `VE_DB.houseData` and the `_RestoreCachedXP` wipe/restore dance were
  also dropped — house switch triggers a new activity log which triggers
  a fresh rebuild. Header shows 0 briefly on first login until the log
  arrives, which is fine.
- Subscribed to `INITIATIVE_ACTIVITY_LOG_UPDATED` (Blizzard event we'd been
  working around). Activity log refreshes are now event-driven with a 5s
  debounce instead of polling — server tells us when fresh data lands and
  we render once. The 30-second post-completion fallback timer is gone
  entirely (the new event covers it). The event can fire ~50/min on an
  active neighborhood, hence the 5s debounce — no need to re-render that
  fast.
- Removed `nextXPCache` in Endeavors tab — was an in-sort memoization for
  `CalculateNextContribution` that's now fast enough to call directly.
  Saves a table allocation, two cache-management loops, and the
  staleness-on-house-switch class of bugs we kept worrying about.
- VE_Health.lua cleanup: removed two no-op stub migrations (v1 → v1 and
  v1 → v2 were placeholders with no body), removed CONFIG_TYPE_DEFAULTS
  type-check loop (was paranoid coverage of one bool we own), refactored
  v3 migration with a `dropKey` helper to remove the repetitive
  if-exists-then-log-then-nil pattern, added an early-out when schema is
  already current so the loop is skipped entirely on every load past the
  first one.
- Slimmed task row tooltip to just task name + description + click hints.
  Cut "Current House XP reward", "Base reward: +N coupons", "Next House
  XP", "Next Endeavor Contribution" lines — all redundant with the badges
  already on the row itself.
- Folded `VE_XPEngine` into `EndeavorTracker` and deleted the module.
  XPEngine had a single feeder (EndeavorTracker) and one feeder feeding
  itself via `IngestActivityLog`/`IngestLiveTasks` was paying for the
  abstraction zero times. The four UI-facing methods
  (`GetHouseXP`, `GetPlayerContribution`, `GetAccountCompletionCount`,
  `CalculateNextContribution`, `GetTaskRankings`) and the activity-log
  helpers now live directly on `EndeavorTracker`. UI consumers swap
  `VE.XPEngine` → `VE.EndeavorTracker`. No behaviour change.
- Removed initiative-completion loot icon machinery from the progress bar
  factory (Framework: ~50 lines). Was Observer-mode-only and already
  retired in 1.15.0; the implementation followed.
- Deleted obsolete `plans/OBSERVER_REDESIGN_PLAN.md`,
  `plans/HOUSE_XP_FIX_PLAN.md`, `plans/xp_calculation_flow.md` — all
  described architectures that no longer exist.