File Details
v0.9.1-beta
- B
- May 24, 2026
- 78.88 KB
- 26
- 12.0.5
- Retail
File Name
Broker_MidnightEvents-v0.9.1-beta.zip
Supported Versions
- 12.0.5
Broker: MidnightEvents
v0.9.1-beta (2026-05-24)
Full Changelog Previous Releases
- docs: changelog entry for v0.9.1-beta bugfix refresh
- feat(diag): /meprobe POI quirk probe for ad-hoc investigation
Generic POI-by-name probe. Sweeps continent + MIDNIGHT_ZONE_IDS with
GetEventsForMap, GetDelvesForMap, GetAreaPOIForMap and reports every
match for a case-insensitive name fragment, capturing IsAreaPOITimed,
GetAreaPOISecondsLeft, atlas, tooltipWidgetSet, iconWidgetSet, plus
the corresponding ns.Events.GetActive() entry after dedup.
Result saved to Broker_MidnightEventsDB._probe with a chat summary.
Default fragment 'voidburrow'; retarget via /meprobe <fragment> for
the next POI anomaly. Marked throwaway in the header comment. - fix(events): widget-text timer fallback for POIs reporting isTimed without secondsLeft
Mining Voidburrow (poiIDs 8675, 8526) reports IsAreaPOITimed=true but
GetAreaPOISecondsLeft returns nil. The map-tooltip countdown is rendered
from a TextWithState widget in the POI's tooltipWidgetSet as a localized
'Time Left: X Hr Y Min' string with Blizzard chat-escape codes embedded.
Adds ParseTimeLeftSeconds + StripEscapes + SecondsFromWidgetSet, wired
into ResolvePoi and BuildMapEntry as a fallback when isTimed=true and
the standard seconds-left getter returns nil. enUS locale assumption
documented; non-English clients degrade silently to current 'active'
rendering (no regression).
Escape-stripping handles |c color spans, |r reset, |4SINGULAR:PLURAL;
plural escapes (critical — |4Hr:Hr; contains a literal '4' digit the
parser would otherwise lift as the hours value), |n newlines, and
|H...|h hyperlinks. - fix(picks): clear cached pick on abandon, not just turn-in
User flagged two follow-up cases on the lifetime-flag picks fix:- What if the player drops/abandons the weekly? The cached pick
should clear, but the previous logic only cleared when
IsQuestFlaggedCompleted(prev) returned false. Given lifetime-
persistent flags (the Liadrin pool case), that check returns true
permanently for any prior-week completion of the same pool member,
so abandoning a re-accepted previously-completed pick would falsely
preserve the cache. - Bonus Event Weekly uses the same picks mechanism, so it suffers
from the same potential issue (not yet verified but architecturally
identical).
Fix distinguishes "removed via turn-in" from "removed via abandon" at
the event level rather than relying on the unreliable flag check:
- QUEST_TURNED_IN handler stamps recentTurnIn[questID] = GetTime()
* QUEST_REMOVED handler checks for a recent (≤5s) turn-in:- paired with QUEST_TURNED_IN → real turn-in, preserve cache
- bare QUEST_REMOVED → abandon, clear matching picks
Session-local recentTurnIn map; doesn't need to persist (any /reload
guarantees there's no in-flight transition to track).
5s window is generous — QUEST_REMOVED typically fires within a frame
of QUEST_TURNED_IN. Wider than needed but safe; the worst case is a
QUEST_REMOVED arriving ≥5s after its QUEST_TURNED_IN, which would
falsely clear the cache and downgrade the row to no-annotation —
strictly less wrong than the previous behavior.
Applies uniformly to all picks pools: Liadrin, Bonus Event Weekly,
Void Assault zone, and any future picks-flagged rows.
- What if the player drops/abandons the weekly? The cached pick
- fix(picks): drop "any pool flagged" fallback; restore cache preservation
Probe on Artherio (2026-05-24) returned IsQuestFlaggedCompleted = true
for ALL 9 Liadrin pool member quest IDs simultaneously. Conclusion:
these completion flags are achievement-style and persist across
weekly resets — once you've ever picked a pool member, its flag is
true forever. So "any pool member flagged" is meaningless as a signal
for "which one did you pick THIS week," and pairs()-iteration order
arbitrarily picks the wrong one.
Two-pass detection now reduced to:
1. Active quest log scan (definitive — if it's in the log, it's
the pick).
2. Cached-and-still-flagged preservation (covers post-turn-in,
where the quest leaves the log but its flag stays true).
The "any pool flagged" pass is gone.
Cold-start consequence: a character who completed a Liadrin pick
before the feature was deployed AND never opens the addon while the
quest is in their log will see the row marked done but without the
"(<choice> picked)" annotation. Acceptable trade — IsWeeklySlotDone
still flags the row done from the slot's own pool-OR semantics, and
choosing-no-annotation is better than choosing-wrong-annotation.
Weekly reset hook in Settings.lua now also clears char.picks. Without
this, the cached pick would carry from week to week since the
underlying flags don't clear — last week's pick would persist into
the new cycle until the player accepts a new one (which might never
happen on alts that skip Liadrin this week).
For Artherio's current bug state (picks.liadrin = 94457 Battlegrounds,
should be 93910 Prey): the new logic keeps the wrong value this week
because all 9 are flagged and the cached one passes the preservation
check. Manual recovery this week = SV edit OR /reload past next weekly
reset (which now clears picks automatically with this commit).

