File Details
v12.0.25
- R
- May 17, 2026
- 5.33 MB
- 1.6K
- 12.0.5+1
- Retail
File Name
v12.0.25.zip
Supported Versions
- 12.0.5
- 12.0.1
## v12.0.25 — May 17, 2026 ### Alert System — Cascade Isolation, TTS Priority Queue, and Event-Driven Evaluation Every alert and module hook now runs inside an isolation boundary. Previously, a single failing alert — for example, picking a missing or malformed sound for Heal Pet — could throw a Lua error mid-evaluation and silence every other alert in the addon until the user reloaded the UI. One bad row took the whole panel offline. Now a fault in any individual alert is caught and contained: the failing alert stops firing, but every other alert keeps working as if nothing happened. The error is recorded with a timestamp instead of vanishing into the chat log, and `/npa status` lists any logged errors so you can see at a glance whether anything has gone wrong since you logged in. No more silent failure modes — if something breaks, you'll see it the next time you check status. Voice clips — the bundled "Class: ..." TTS sounds — now route through a four-tier priority queue (LOW / NORMAL / HIGH / CRITICAL) modeled after the cue system in Nem: Healer Alerts. Higher-priority clips preempt lower-priority ones, identical-priority clips drop instead of stacking on top of each other, and each individual alert has a 4-second per-alert cooldown so a flickering condition can't machine-gun the same cue. A 1.5-second grace window at combat start lets the very first cue at pull time skip the normal post-cue gap, so you hear it immediately rather than waiting for the queue to settle. Generic SFX (Bell, Sonar, Whistle, and the rest of the non-voice library) bypass the queue entirely and overlap freely — the queue exists only to keep the voice pack from talking over itself. Priority assignments per alert: Pet Dead and Call Pet are CRITICAL, Pet in CC / Pet Not Attacking / Wake Up Pet are HIGH, and Pet on Passive / Pet Taunt Autocast are NORMAL — so a "PET DEAD" cue can talk over a "PET ON PASSIVE" cue, but not the other way around. The Heal Pet alert is now driven by the ColorCurve API instead of a raw health-percentage read. In WoW 12.0+ restricted-aura content — Mythic+, raid, rated PvP — pet health is masked as a secret value, which broke the old "is the pet below the threshold" boolean check: any attempt to read the number out of the engine threw, and the alert went silent in exactly the content where you most want it. The overlay now refreshes its alpha at 500ms via a ColorCurve hook that produces a secret-safe alpha value, and that alpha is fed directly into the overlay frame — the tainted health number never enters Lua as a number, so the restricted contexts are no longer a wall. The visual overlay works in M+, raid, and rated PvP again. As a related constraint: the Heal Pet *voice cue* is disabled at the engine level for the foreseeable future because there is no API path to a reliable boolean ("is the pet below threshold, yes or no") in those restricted contexts — ColorCurve gives you a graduated alpha, not a crossing event. The sound row for Heal Pet is hidden in the options panel to reflect that, but your previously selected sound name is preserved in saved variables, so if the API ever opens up the row will reappear with your old choice intact. The 0.25-second polling ticker that used to re-run every alert four times a second is gone. Alert state changes are now driven entirely by the WoW events that already cover them — UNIT_HEALTH, UNIT_AURA, UNIT_PET, UNIT_TARGET, PLAYER_REGEN_DISABLED, PLAYER_REGEN_ENABLED — so the addon only does work when something actually changed instead of waking up four times a second to ask. The Frost Mage and Unholy Death Knight modules previously ran their own private 0.25-second "wait for the pet to appear" fallback ticker on top of the global one; that's been replaced by pure UNIT_PET handling with a single-shot 0.5-second safety net at module activation, which exists only to cover the narrow case where UNIT_PET fires before the module finishes registering its handler. The 500ms Heal Pet alpha refresh is the only periodic ticker that survives, and it survives only because the ColorCurve API genuinely requires polling — there is no event to listen to. `/npa test` now cycles alerts visually only — sounds do not play during the test loop. Test cycles previously poured every alert's cue into the voice queue at full speed, which both polluted the per-alert cooldowns (so a real alert that fired right after the test ended could get suppressed) and turned the test mode into a wall of overlapping TTS. The test loop is now strictly a visual sanity check: walk through what each alert looks like on screen, with no sonic clutter and no impact on the queue's state. ### Alert Sounds — Display-Coupled Cue Gating Audio cues now fire when an alert actually appears on screen, not when the underlying condition first becomes true. If a higher-priority alert is already showing — say "WAKE UP PET" — and a lower-priority condition becomes true at the same time — say "PET ON PASSIVE" — the lower alert's cue is held silent. The moment you wake the pet and the lower alert pops up on screen, you hear its cue. A 0.5-second grace gap between consecutive cues keeps rapid alert switches from dogpiling audio. If a queued cue's alert vanishes from the screen before the gap elapses, the cue drops — you don't hear sound for an alert you never actually saw. Critical-priority alerts — "PET DIED" and "CALL PET" — bypass this grace and fire as soon as they appear, since those cues are time-sensitive enough that a delay would defeat the point. Logging in or switching specs no longer triggers a wave of cues for whatever was already true at the moment you arrived: a 1-second silence on activation lets the addon settle without blasting you on entry. The same brief silence applies when leaving `/npa test`, so the test loop can never tail off into an unexpected real cue. Voice preemption between alerts is also fixed: when a higher-priority cue interrupts a lower-priority one (for example, "CALL PET" cutting in over "WAKE UP PET"), the higher cue actually plays through. Previously the lower cue would be cut off mid-word but the higher cue would silently drop, leaving you with the hard stop and no replacement audio. ### Pet in CC — Countdown Timer When the "Pet in CC" alert is active, a countdown timer now appears directly below the alert text showing the remaining duration of the longest crowd-control aura on your pet. The timer renders in white at roughly 70% of your configured font size, anchored just below the main alert — visible enough to read at a glance without competing with the alert itself. The timer updates at ~10Hz and clears automatically within a tick of the CC expiring, driven by the existing UNIT_AURA event chain. A per-character "Show CC Timer" checkbox in Alert Options (default on) lets you turn it off if you prefer the plain alert. In `/npa test`, the timer loops a synthetic 5.0 → 0.1 → 5.0 countdown so you can see what it looks like without needing an active CC. ### Hunter — Voice Pack and Full Sound Coverage The Hunter module now ships a dedicated set of voice cues — seven bundled TTS sounds, one per sounded alert. Open any sound dropdown in the options panel and they appear under a new "Class TTS" header at the bottom: Pet Died, Wake Up Pet, Call Pet, Toggle Pet Taunt, Pet in CC, Pet on Passive, Pet Not Attacking. They are now the default sound for every Hunter alert that plays sound — first-time installs (and anyone who hits Restore Defaults) hear the new voice pack out of the gate. Previous sound choices stored on existing characters are preserved. Every sounded Hunter alert now plays its sound on the rising edge of the alert firing — previously only "Pet Died" and "Pet in CC" actually played anything. Wake Up Pet, Call Pet, Pet Taunt Autocast, Pet on Passive, and Pet Not Attacking now each fire their cue once when the condition first becomes true and stay silent until the condition clears and re-occurs. No spam if a state lingers; one chirp per real transition. Sounds are suppressed on initial spec activation so logging in or reloading with an active alert (e.g., a passive pet in combat) doesn't immediately blast a cue — the first transition you hear is one that happens after you finish loading. ### Hunter — Bug Fixes - **Wake Up Pet alert no longer sticks on screen.** After casting Wake Up Pet on a feigning pet, the "WAKE UP PET" alert could remain visible even though the pet was already up and acting normally. The alert now clears reliably as soon as the pet is woken and stays cleared. Affects Beast Mastery, Marksmanship, and Survival. ### Sound Dropdowns — Scrollable and Wider Every sound dropdown in the options panel now scrolls when the list is long, matching the behavior of the Alert Font dropdown. With the Hunter voice pack added, the sound list is now too long to fit comfortably on screen — the new scroll mode keeps the dropdown a fixed height and lets you scroll through the full list instead of running off the bottom of the panel. Sound dropdowns also widened from 160px to 220px to fit the longer Class TTS labels without truncation. The Preview button stays anchored to the dropdown's right edge and shifts over with it. ### Warlock — Voice Pack and Full Sound Coverage The Warlock module now ships a dedicated set of voice cues — eight bundled TTS sounds covering every alert. Open any sound dropdown on a Warlock spec and they appear under "Class TTS": Demon Died, Sacrifice Demon, Summon Demon, Toggle Demon Taunt, Demon in CC, Demon on Passive, Demon Not Attacking, and Heal Demon. They are now the default sound for every sounded Warlock alert across Affliction, Demonology, and Destruction. Previously the only Warlock sounds were the generic "OhNo" (Demon Died) and "Sonarr" (Demon in CC); the other six alerts were silent by default. Every sounded Warlock alert now plays its dedicated voice clip on the rising edge of the alert firing — one chirp per real transition. The Heal Demon clip is bundled but the alert stays silent for now, mirroring Hunter's Heal Pet treatment — pet health detection is blocked by the restricted-aura API in M+, raid, and rated PvP, so the cue can't fire reliably. The clip is in the box ready for the day that API restriction lifts. ### Frost Mage — Voice Pack and Full Sound Coverage The Frost Mage module now ships a dedicated set of Water Elemental voice cues. Each of the six sounded Frost Mage alerts comes in two pronunciations — the full "Water Ele" and the shortened "Wele" — so every Class TTS dropdown on a Frost Mage gets twelve new entries: Summon Water Ele, Water Ele Died, Water Ele in CC, Water Ele Not Attacking, Water Ele on Passive, and Water Ele Health Low, plus a matching "Wele" line for each. Pick whichever pronunciation reads more naturally to you. The "Water Ele" set is the default on fresh installs and after Restore Defaults; previous sound choices on existing characters are preserved. Every sounded Frost Mage alert now plays its dedicated voice clip on the rising edge of the alert firing — previously the spec leaned on the generic "OhNo" (Pet Died) and "Sonarr" (Pet in CC), and was silent for Summon Water Ele, Pet on Passive, and Pet Not Attacking entirely. The Water Ele Health Low clip is bundled but the alert itself stays silent for now, matching the Hunter and Warlock heal treatments — pet health detection is blocked by the restricted-aura API in M+, raid, and rated PvP, so the cue can't fire reliably. The clip sits ready in the dropdown for the day that API restriction lifts. ### Sound Dropdowns — Per-Class TTS Filter The Class TTS section of every sound dropdown is now filtered to the active spec's class. On a Frost Mage you see only the Water Elemental cues; on a Hunter you see only the Hunter pet cues; on a Warlock only the demon cues. Previously the dropdown listed every Class TTS clip in the bundled pack regardless of which spec you were configuring, which made the list noisy — picking "Warlock: Demon Died" as your Frost Mage's Pet Died sound technically worked but obviously wasn't the design intent. Generic SFX (Bell, Sonar, RobotBlip, and the rest of the non-voice library) continue to appear in full so any class can fall back to a pure-tone sound. Specs that don't yet ship a class voice pack get a Generic-only dropdown with no orphan "Class TTS" header. ### Unholy Death Knight — Voice Pack and Default Sound Coverage The Unholy Death Knight module now ships a dedicated set of Ghoul voice cues — four bundled TTS sounds covering every sounded alert: Raise Ghoul, Ghoul in CC, Ghoul on Passive, and Ghoul Not Attacking. Open any sound dropdown on Unholy DK and they appear under "Class TTS". They are now the default sound for every sounded Unholy DK alert; previous sound choices on existing characters are preserved. Heal Ghoul stays intentionally silent — no clip is bundled. Pet health detection is blocked by the restricted-aura API in M+, raid, and rated PvP, so the cue can't fire reliably, mirroring the Hunter, Warlock, and Frost Mage heal treatments. ### Per-Spec Settings — Independent Configuration Sound choices, alert toggles, colors, and custom alert text now save independently per spec. Previously, choosing "Hunter: Pet Died" as your Pet Died sound on a Hunter would silently overwrite the demon-pack default that a Warlock spec expected — every per-alert setting was sharing a single account-wide slot regardless of which spec was active. That cross-spec bleed is gone: Hunter, Warlock, Mage, and DK each maintain their own sound dropdowns, toggles, color picks, and custom text, and switching specs no longer disturbs any of them. What stays shared across all specs, because they are display-level decisions: master enable/disable, alert font and font size, frame position, and the screen-flash effect. Existing characters with customizations from earlier versions: on first `/reload` after the upgrade, your existing per-alert settings transfer to whichever spec you log in to first. Other specs you haven't activated yet start fresh on the new defaults — which is the correction that lets the new Warlock voice pack actually take effect on Warlock specs and the Hunter pack on Hunters. **Restore Defaults** in the options panel now factory-resets the active spec's per-alert settings (sounds, toggles, colors, custom text) without touching other specs or your global display settings, so wholesale wiping one spec back to its new defaults is a single click. ### Options Panel — Show CC Timer Promoted to Display The "Show CC Timer" checkbox has moved from each spec's Alert Options section up to the global Display section, sitting underneath Flash Animation. It is now a single account-wide toggle — flipping it once applies to every pet spec. Previously every spec had its own copy of the same checkbox, which made it easy to think you'd disabled the CC timer when you'd only disabled it on one spec. Existing per-spec values are migrated into the new global on first `/reload`. ### Heal Pet Threshold — Default Raised to 50% The default Heal Pet Threshold for fresh installs is now 50% (was 30%). Existing characters keep whatever value they already had set; clicking **Restore Defaults** on a spec will reset that spec's threshold to the new 50% default along with the other per-spec defaults. ### Warlock — Felguard Taunt Autocast Detection Fix The "TURN OFF DEMON TAUNT" alert now fires correctly when the Felguard's Threatening Presence autocast is enabled in a group with a tank. Previously the alert only fired for the Voidwalker's Suffering — the Felguard case was looking for the wrong spell ID, so the pet bar scan never matched and the alert silently never appeared. Voidwalker behavior is unchanged. ### Display — Alert Spacing Auto-Scales with Font Size The vertical spacing between stacked alerts (and the position of the Pet in CC timer beneath the CC alert) now scales with your chosen Font Size. Previously the gaps were fixed in absolute pixels tuned for the 25px default — so at a 10px font, alerts sat with wide empty bands between them that looked orphaned, and at 50px the stack stayed cramped against itself. The slider now adjusts both the text height and the inter-alert gap proportionally, so any font size you pick produces a clean, evenly-spaced stack with no manual tuning needed. ---