Skip to content

Fix debuff indicators changing each other's source filters - #2108

Open
dfrisone wants to merge 1 commit into
EllesmereGaming:mainfrom
dfrisone:fix/indicator-nonplayer-filter-isolation
Open

dfrisone wants to merge 1 commit into
EllesmereGaming:mainfrom
dfrisone:fix/indicator-nonplayer-filter-isolation

Conversation

@dfrisone

@dfrisone dfrisone commented Sep 16, 2026

Copy link
Copy Markdown
Contributor

What does this PR do?

Fixes Surarn's v9.1.8 report: selecting Show Non-Player Auras on one debuff indicator, then Hide From Any Player on another, changed the first indicator's selection. Both controls wrote the same profile-wide nonplayerMode.

Store the source choice on each indicator and use it for dropdown state, grid/effect filters, display invalidation and corpse eligibility. Existing profiles retain their current choices through a one-time migration covering all spec buckets. The base grid keeps its own choice.

Player and non-player sources claim separate records, so opposite Show filters both render; the first claim still wins within each source. When base and indicator Hide filters exclude opposite sources, omit the unsatisfiable record instead of ignoring an exclusion. Dispel-filter behavior is unchanged.

How was it tested?

  • Based on upstream main at 271ffc30 (v9.1.8); two Lua files changed.
  • Local Lua 5.1 harness loads the actual runtime and dropdown callbacks with UI stubs. It reproduces the original bug and passes 482 assertions on the patch: both lanes/flavors, all five indicator types, inactive-spec migration, new/copied indicators, base edits, fingerprints, grid/effect candidates, corpse eligibility, opposite-source routing, same-source claim priority and conflicting exclusions.
  • Both files compile in Lua 5.1. Diff-scoped EUI style gate and whitespace checks pass. Locale extraction passes with no key changes.
  • Source review: TOC load order and affected callers checked. Existing AuraKit/container path retained; no new API, event, timer, hook or frame. Migration visits saved indicators once per profile; normal configuration access adds a flag check, fingerprint field and bounded filter work. No per-frame callback added.
  • Not tested in game. No client build, combat/taint validation or visual verification claimed. Required client checks: original two-indicator reproduction; opposite Show selections on icons/squares; conflicting base/indicator Hide selections and recovery after clearing one; reload/profile/spec changes; effect indicators and dead-unit behavior.

Screenshots

Before/after in-game screenshots are unavailable. They still need to be captured during client validation.

Checklist

  • New settings default OFF (no behavior change without opt-in) - N/A: genuine bug fix, no new user-facing option; existing choices are migrated.
  • Zero cost while disabled: no events registered, no polling, no hooks doing work, no frames built - no new registrations/hooks/frames; no execution when the Raid Frames addon is disabled.
  • Cheap while enabled: event-driven (no polling, no timer-based logic, no per-frame allocations) - bounded configuration work and one-time profile migration; no polling or timers added.
  • No writes onto Blizzard-owned frames (weak-table pattern used); HookScript/hooksecurefunc only, never SetScript on Blizzard frames - edits affect addon configuration and synthesized filter records only; no new frame mutations.
  • Tested in-game on live; no version gates or pre-Midnight APIs added - live testing is outstanding. Verified no version gates or APIs were added; scope remains Midnight 12.1+.

Cats working together

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