Skip to content

Enhanced QuickSlot: always-on loot popup with queue#177

Open
dlamanna wants to merge 5 commits intoPeterodox:mainfrom
dlamanna:feature/quickslot-enhanced
Open

Enhanced QuickSlot: always-on loot popup with queue#177
dlamanna wants to merge 5 commits intoPeterodox:mainfrom
dlamanna:feature/quickslot-enhanced

Conversation

@dlamanna
Copy link

@dlamanna dlamanna commented Mar 7, 2026

Summary

Extends the QuickSlot system to listen for loot from all earned sources (not just quest completion), queue multiple popup candidates, and handle deferred item evaluation gracefully.

  • New setting "Always-On Loot Popup" — registers CHAT_MSG_LOOT permanently to catch boss drops, world drops, treasure chests, bonus rolls, etc.
  • New setting "Upgrades And Containers Only" — filters queue to only show equipment upgrades and usable containers
  • Two-bucket FIFO queue — high priority (equipment upgrades, containers) drains before low priority (cosmetics, mounts, pets, toys, decor)
  • Candidate filter with duplicate suppression (5s) and recently-handled cooldown (30s)
  • Deferred resolution for uncached items — retries classification at 0.5s intervals, max 3 attempts
  • Display-time revalidation — re-checks eligibility before showing each queued item (still in bags, still an upgrade)
  • Container chaining — opening a container that produces upgrades queues them naturally via the always-on listener

Architecture

Four logical units, all in Widget_QuickSlot.lua:

  1. CandidateFilter — dedup and cooldown suppression caches
  2. QueueManager — two FIFO buckets with priority drain, revalidation, queue advancement on dismiss/equip/use
  3. DeferredResolver — C_Timer retry loop for items whose classification or upgrade status isn't immediately available
  4. Loot pipelineOnItemLooted routes through filter → queue/deferred, with BAG_UPDATE_DELAYED fallback

Files Changed

  • Code/Widget/Widget_QuickSlot.lua — all four units + popup dismiss/equip/use wiring
  • Code/Settings/Settings.lua — two new checkbox entries
  • Initialization.lua — default values for QuickSlotAlwaysOn and QuickSlotPriorityOnly
  • Locales/enUS.lua — setting labels and descriptions
  • docs/plans/ — design doc and implementation plan (can be excluded from merge if preferred)

Non-Goals

  • No detection of AH, vendor, mail, trade, or manual bag moves
  • No retroactive scan of existing bags when always-on mode is enabled
  • No automatic equip without user action
  • No modification to existing quest-completion behavior when always-on is disabled

Test Plan

  • Enable "Valuable Reward Popup" + "Always-On Loot Popup" in settings
  • Loot a boss drop that is an equipment upgrade — verify popup appears
  • Loot multiple items quickly — verify they queue and show sequentially
  • Equip/dismiss a popup — verify next queued item appears
  • Loot a container — verify popup to open it; opening it queues any upgrades inside
  • Loot a cosmetic/mount/pet/toy — verify it queues at low priority (after equipment)
  • Enable "Upgrades And Containers Only" — verify cosmetics/mounts are filtered out
  • Disable always-on — verify quest-completion popups still work normally
  • Loot same item twice within 5s — verify duplicate suppression

🤖 Generated with Claude Code

@dlamanna dlamanna force-pushed the feature/quickslot-enhanced branch 3 times, most recently from 5ae47e0 to 5188011 Compare March 21, 2026 14:59
dlamanna and others added 5 commits March 21, 2026 08:00
Check item count before calling SetUsableItem() in UpdateItem(). When
the count reaches 0 (container opened/consumed), skip re-registration
of bag events and timers, disable the button, and trigger OnItemConsumed()
to start a short dismiss countdown. This prevents the popup from staying
on screen indefinitely after opening bags/chests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant