File Details
v12.0.24
- R
- May 9, 2026
- 4.92 MB
- 1.1K
- 12.0.5
- Retail
File Name
v12.0.24.zip
Supported Versions
- 12.0.5
v12.0.24 — May 9, 2026
Restoration Druid, Mistweaver Monk, Discipline Priest — Alert Layout Standardized
Every alert across the three fully-supported specs now sits on a uniform 25-pixel grid, anchored to the same top position. Previously each spec had its own spacing — Druid ran 20-46 px between rows because slots were reserved for countdown numbers, while Monk and Disc used 30 px. Now the suite is consistent: alerts stack tightly and predictably, and adding or removing an alert from any spec slides the rest cleanly into place.
As part of this, the Lifebloom Expiring and Soul of the Forest countdown numbers have been removed from Restoration Druid. Neither the other Druid alerts nor any alert on Mistweaver or Discipline shipped a countdown, so the two timer rows were the only thing breaking the visual rhythm of the stack. If you'd previously toggled the LB or SOTF timer off in the saved variables, that setting is quietly cleared on first load — the timers no longer exist either way.
Discipline Priest's three alerts have also been reordered top-to-bottom: Spread Atonement, Cast Void Shield, Power Word: Shield Ready. Atonement coverage is the moment-to-moment decision a Disc priest makes most often, so it now occupies the top slot with the other specs' top-priority alerts (Tree of Life, Renewing Mist).
Discipline Priest — Phantom Alerts on Combat Re-entry Fixed
The "Power Word: Shield Ready" and "Cast Void Shield" alerts no longer fire spuriously when you re-enter combat with PWS or VS already established. Previously, if PWS was on cooldown when combat ended and the cooldown expired during the downtime, the alert would replay the moment combat started again — even though nothing had actually changed in your rotation. Same problem if a Void Shield proc was sitting up across a combat boundary. The alerts now only fire when the readiness or proc state genuinely transitions during a fight; opener alerts on a fresh pull (PWS never cast, no carry-over state) still play normally.
Sounds — Spec-Specific Voice Sounds Added
The bundled sound library has been overhauled with new spec-specific voice cues. Restoration Druid, Mistweaver Monk, and Discipline Priest now ship with dedicated sounds for each of their alerts — for example, the Lifebloom Expiring alert plays a "Lifebloom Expiring" cue by default instead of a generic chime. Defaults for all three specs have been updated to use these new sounds out of the box. On first load after this update, your saved sound choices for Restoration Druid, Mistweaver Monk, and Discipline Priest will be reset once so you pick up the new spec-specific defaults — if you'd customized any of those alerts to a different sound previously, you'll need to set it again from the dropdown.
The sound dropdown now groups the new cues under their class, e.g. Druid: Lifebloom Expiring, Monk: Renewing Mist, Priest: Void Shield. Several extra sounds (Druid: Swiftmend, Druid: Tree of Life, Priest: Atonement, etc.) are registered and available to pick even though no alert defaults to them yet — you can wire them up to any alert via the Sound dropdown.
The four generic sounds (Bell, Lamp, Ping, Redfox) remain available for any spec that hasn't yet had voice cues added (Holy Paladin, Holy Priest, Restoration Shaman, Preservation Evoker).
What changed under the hood:
- BUNDLED_SOUNDS table cleaned up. Eleven orphan registrations that pointed to .ogg files which never shipped (Bleeper, Drums, HeartbeatSingle, MetalGearSpotted, OhNo, RobotBlip, SharpPunch, Shotgun, Sonar, Sonarr, WaterDrop) have been removed.
- GetSoundPath fallback fixed. Previously fell back to
RobotBlipwhich wasn't an actual file on disk — meaning any unresolved sound name silently played nothing. Now falls back toBell, which always exists.
All Specs — Alerts Now Suppressed When Solo
Healer alerts and raid-frame glows are now silent unless you're in a party or raid. Fighting a few mobs solo as a healer no longer triggers any alert, glow, or sound — the addon stays out of your way until there's actually someone to heal. The instant you join (or leave) a group, alerts pick up (or clear) automatically. Test mode still works while solo so you can preview alerts and position the frame as before.
Options Panel — Layout & Theming Polish
A pass over the options panel cleaning up alignment, spacing, and theming inconsistencies. Pure visual polish — no behavior changes.
- Display section reorganized. The Alert Font dropdown has moved from Alert Options up to the Display section, sitting directly beneath Font Size and lining up with the Sound dropdowns. The redundant Alert Text Scale slider has been removed entirely — Font Size already does the same job. Existing font choices are preserved; any saved Scale value is quietly cleared on first load.
- Class-colored text inputs. Every text input on the panel now renders in your active spec's class color, matching the slider value field, section borders, and scrollbar thumb. Spec-helper numeric inputs and the alert text override boxes were previously plain white — they now retint with the rest of the panel on spec change.
- Bottom button alignment. The four buttons (Test, Unlock Frame, Center Position, Restore Defaults) are now uniform width and remain perfectly centered as a group.
- Scrollbar flush with section bottom. When scrolled all the way down, the bottom of the Alert Options box now lines up exactly with the scrollbar track — the previous ~20px gap is gone.
- Right-column alignment. Font Size slider and Alert Font label/dropdown now line up cleanly with the right-column alert checkboxes below them.
- Numeric input centering. Labels and edit boxes on every numeric input in Alert Options now share a vertical center line, matching the Nem: Pet Alerts look.
- Tighter Alert Options spacing. The oversized gap between numeric inputs and alert text fields has been tightened, controlled by a single shared value so all current and future specs space consistently.
Discipline Priest — Full Rewrite (Event-Driven, CUF Glows)
Discipline Priest has been rebuilt from the ground up to match the architecture of Mistweaver Monk and Restoration Druid. All polling and background tickers are gone. Every alert reacts to in-game events as they happen.
Raid frame glows:
- Void Shield (highest priority). Any group member with an active Void Shield absorb gets a purple glow. Suppresses the Atonement glow while present.
- Atonement. Any group member with your Atonement gets a glow. Coverage threshold is configurable per-mode (dungeons vs. raids), same system as Mistweaver's Renewing Mist counter.
Text alerts:
- Atonement coverage low. Fires when your active Atonement count drops below your configured threshold.
- Cast Void Shield. Fires when Master the Darkness procs, signalling your next PW:S will become a Void Shield. Won't appear while PW:S is on cooldown — VS requires a castable PW:S, so showing it during the CD serves no purpose.
- Power Word: Shield ready. Fires when PW:S is off cooldown. Suppressed while Cast Void Shield is active — the two alerts are mutually exclusive.
When either VS or PW:S is cast, the PW:S ready alert holds off for the full haste-modified cooldown before returning. Works correctly for both self and group-target casts.
All alerts are combat-only.
Discipline Priest — Performance
Added /nha perf on, /nha perf off, and /nha perf (mid-fight peek), matching Mistweaver Monk and Restoration Druid. Block breakdown: ATON / VS / PWS / END. CUF glow attribution: vs / aton / none / disabled.
Discipline Priest — Bug Fixes
- Crash on cooldown field access in M+. WoW's cooldown API returns secret values in M+ and rated PvP, causing a Lua error that fired 160 times per pull and broke all alerts. Cooldown detection is now fully event-driven.
- Crash on haste read in M+.
UnitSpellHaste()returns a secret value in tainted contexts. Now pcall-protected with a 7.5s baseline fallback. - PW:S alert not clearing after cast. The ready alert was persisting because the crash above prevented the cooldown timer from starting. Both VS and PW:S casts now clear the alert and start the timer immediately.
- PW:S alert firing immediately after casting Void Shield on a group member. VS on yourself cleared correctly; VS on a group member did not. VS consumption is now detected via the PW:S texture reverting, which works for both cast targets.
- PW:S alert firing while the spell was still on cooldown. Talents like Borrowed Time weren't reflected in the haste-calculated timer, so it could expire early. The cooldown duration is now read directly from the game API, which includes all talent and set-bonus modifiers.
- Lua error comparing a protected cooldown value in M+. A
> 0check on a protected API value threw in competitive content. The comparison is now taint-safe. - Cast Void Shield alert missing procs in raid. Talent or set-bonus changes that shortened PW:S's cooldown between casts weren't always picked up, causing silent proc suppression. The cooldown now self-corrects against the live API on every cast, matching Druid's Wild Growth tracker. Falls back to the event-driven tracker in tainted contexts (M+ / rated PvP).
All Specs — Source Cleanup
Repo-wide pass through every Lua file to strip narrative comments, restated-obvious notes, and design-essay blocks. Section dividers, file headers, and concise inline ID/hex tags are preserved; everything else moved to the shared knowledge file with proper context. No behavior changes — comment-only.
Discipline Priest — PW:S Cooldown Prediction
The "Power Word: Shield Ready" alert now fires accurately for Oracle Disc Priests in Mythic+. Two things were wrong before: the addon assumed the base 7.5s cooldown for everyone and ignored the Waste No Time talent's 1.5s reduction, and in M+ the WoW haste API returns a tainted "secret value" while in combat — making the addon's haste calculation fall through to 0%. With ~10% haste and Waste No Time taken, the alert was firing roughly half a second late on every PW:S cast. Both are fixed.
Talent state is detected on login, spec change, and any talent edit, with a deferred re-check to cover zone-transition timing where the talent API hasn't finished populating when PLAYER_ENTERING_WORLD fires. Haste is cached from a clean read and falls back to the cache when the live read is tainted, so the prediction stays correct throughout an M+ run. Non-Oracle Disc players see no change.
A second fix in the same area: Cast Void Shield could pop briefly while PW:S was still on cooldown right after a cast — the live cooldown read sometimes reports "ready" before WoW's internal cooldown registers. The cooldown sweep now defers to an active timer instead of overriding it.
Trade-off on the cached haste: mid-combat haste changes (Bloodlust, trinket procs) won't be reflected until the next clean read. The error window is bounded to roughly the difference between equipped and buffed haste, and is the same staleness most Disc CD trackers accept.
What changed under the hood:
CheckWasteNoTimeTalent()usesIsPlayerSpell(440681)as the primary detection path, withC_ClassTalents.GetActiveConfigID()→C_Traits.GetNodeInfo(...)walk (verified viaactiveEntry.entryIDwithdefinitionID → spellIDfallback) retained as a fallback. Re-runs onPLAYER_ENTERING_WORLD,PLAYER_TALENT_UPDATE,PLAYER_SPECIALIZATION_CHANGED, andTRAIT_CONFIG_UPDATED, with a 0.5s deferred re-check on each to cover late-arriving talent data.hasWasteNoTimeTalentandlastKnownHastePctsurviveClearAllState. These are player metadata, not runtime state — they were being wiped every time the solo gate fired, which broke prediction the moment the player left a dungeon. They now persist the same way Druid's Early Spring and set-bonus flags do.ComputePWSCooldowncomputeseffectiveBase = 7.5 - (hasWNT and 1.5 or 0)and divides by1 + haste/100. Haste read is pcall + secret-value guarded onUnitSpellHaste, withGetHaste()fallthrough and the cached value as a last resort.GetPWSCooldownDurationpriority: liveC_Spell.GetSpellCooldown(real countdown when on CD) →ComputePWSCooldown(talent + current haste) →pwsKnownCDcache as last-resort defensive fallback./nha debugnow printshasWasteNoTimeTalent,lastKnownHastePct, and the currentinstanceTypeso all three are verifiable in-game.

