promotional bannermobile promotional banner

Nem: Pet Alerts

Never miss critical pet problems again. Large on-screen alerts for dead, missing, CC’d, low health, or taunting in groups.

File Details

v12.0.22

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

File Name

v12.0.22.zip

Supported Versions

  • 12.0.5

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.