Nem: Pet Alerts

Never miss critical pet problems again. Big, readable on-screen alerts the moment your pet dies, vanishes, gets CC'd, drops low, sits on Passive, stops attacking — backed by voice packs so you also hear it without taking your eyes off your rotation.

File Details

v12.0.22

  • R
  • Apr 25, 2026
  • 4.84 MB
  • 1.6K
  • 12.0.5+1
  • Retail

File Name

v12.0.22.zip

Supported Versions

  • 12.0.5
  • 12.0.1

# v12.0.22 (2026-04-24) ## Core Refactor — NPA / NHA Alignment A structural refactor of the core engine to bring **Nem: Pet Alerts** and its sister addon **Nem: Healer Alerts** into a near-identical layout. No gameplay behavior changes — same alerts, same triggers, same sounds, same display. ### Why The two addons grew side-by-side and accumulated stylistic drift — different section ordering, different database access patterns, different debouncing strategies, dead code on both sides. Future bug fixes and feature work were cheaper if both cores looked the same. ### What changed inside - **Database access** — every read and write inside the core now goes through `NPA.db`, an alias set once when saved variables load. The `NemPetAlertsSV` global only appears in `InitDatabase` (where it's necessary) and the `/reset` handler. Behavior is unchanged. - **Event debouncing** — added `ScheduleEvaluate(delay)` with a pending-guard. The four scattered `C_Timer.After(0.1, Evaluate)` calls in the event handler now route through it. Bursts of events (e.g. spec change firing three events in a row) coalesce into one re-evaluate instead of three. - **Section ordering** — file is reorganized into a canonical layout: license → upvalues → asset paths → class detection → spec registry → theme → libraries → sounds → fonts → defaults → utility → sound playback → pet utilities → spec helpers → tickers → display → apply → slot → evaluate → lock/unlock → activation → InitDatabase → test → slash → debug → options panel → OnLogin → events. - **`IsFullyImplemented`** moved to sit immediately after `FindActiveModule`, where it belongs. ### Bug fix - `CreateDisplay` was hardcoding `"CENTER", UIParent, "CENTER"` and ignoring the saved `db.point` / `db.relativePoint` / `db.relativeTo` fields. The frame still ended up in the right spot because `ApplyDisplaySettings` runs immediately after with the correct anchor, but the initial placement could flicker on login if the user had moved the frame to a non-center anchor. Now reads the saved anchor on creation. ### Slash command cleanup - `/npa off` and `/npa toggle` now call the active module's `ClearAllState()` to fully reset alert state instead of just hiding the display. - The inline test-mode teardown that was duplicated in both `/off` and `/toggle` is gone — those commands now call `ToggleTest()` if test is active and let it own the cleanup. ### Dead code removed - `CORE_DEFAULTS.alertColors = {}` — `ActivateModule` always initializes this, the default was redundant. ### Spec module contract - The optional `Debug = function(self, db) end` hook is now documented in the contract. Already used by some modules; now official. ---