Releases: G-Mein/procAlert
Releases · G-Mein/procAlert
Release list
ProcAlert v1.2.2
WoW 12.0.7 Retail + 12.1.0 PTR (Interface 120007, 120100).
Added
.pkgmetafor CurseForge's GitHub-linked auto-packager:package-as: ProcAlertkeeps the packaged addon folder name stable regardless of the repo folder's own casing, andmanual-changelogwires CurseForge auto-builds to CHANGELOG.md instead of a generated commit list.## X-Curse-Project-ID: 1583705in the TOC for packager/tool compatibility.
Changed
- Confirmed working on the 12.1.0 PTR; TOC now lists both
120007and120100as supported Interface versions so the addon loads on live and PTR clients. - README wording updated to "Proc Alert" to match the CurseForge listing title.
v1.2.1
WoW 12.0.7 Retail (Interface 120007). Git tag: 1.2.1
Fixed
- Hotfix: import crash on some WoW clients where
loadis unavailable (options.lua:ImportProfile). Import parser now falls back toloadstring(sandboxed viasetfenv) instead of calling a nil loader.
ProcAlert v1.2.0
[v1.2.0] - 2026-07-09
WoW 12.0.7 Retail (Interface 120007). Git tag: 1.2
Added
- Diagnostics dashboard (
display_diagnostics.lua) in the Settings Debug tab, surfacing live profiler/memoization/pool stats (PA.Diagnostics.GetStats). - Generic frame-pool / object-factory / memoization utilities (
utils/pool.lua,utils/object_factory.lua,utils/memoizer.lua) backing the row-pooling fixes below.
Changed
- Rule editor and spell picker lists now reuse existing row frames instead of destroying/recreating them (
CreateFrame+Hide/SetParent(nil)) on every rebuild, avoiding per-rebuild frame churn and GC pressure. - Rule editor rebuilds are now coalesced via
PA.Editor.RequestRebuild()instead of rebuilding immediately from every mutation site, so several changes from one action only trigger a single rebuild. - The main update loop moved from a per-rendered-frame
OnUpdatedriver to aC_Timer.NewTicker(0.05, ...), decoupling it from render FPS; elapsed time is clamped to 0.25s to avoid a large catch-up jump after a loading-screen/lag spike. - Resource bars are now only refreshed on ticks where a tracked resource (aura/health/power/rune) actually changed, instead of every tick.
Fixed
- Pulse/glow/bounce alert animations updated on every single rendered frame via
OnUpdate— on a high-refresh-rate setup (e.g. 200 FPS) that's 200SetAlpha/SetPointcalls per second for an effect that's a slow sine wave. Decoupled the visual update from the render frame rate (fixed ~15 Hz cadence via an elapsed-time accumulator, confirmed as the biggest perf win of this pass) — same look, big drop in work on high-FPS systems. - The BOUNCE icon pulse pattern (
display.lua) re-anchored the icon (ClearAllPoints+SetPoint, a full layout pass) on every single rendered frame (60+/sec) for as long as any alert was bouncing, even though the rounded bounce offset only actually changes a few times per second. Now the re-anchor is skipped whenever the rounded Y offset is unchanged from the previous frame — removes continuous, mostly-wasted layout work during sustained fights with active bounce alerts. C_Spell.GetSpellCooldown()was called independently byCooldownSwipeShown(GCD filtering),SpellReadyState's fallback branch, and theCOOLDOWN_PCTcondition type — so any rule set tracking both "spell ready" and "cooldown %" for the same spell (a common combo, e.g. trinket/cooldown alerts) paid for the same C-API call multiple times per tick. Added a shared per-Evaluate memoization cache (GetSpellCooldownMemo, wiped alongside the existing ready-state memo) so each spellID is only queried once per tick regardless of how many conditions reference it. Reduces sustained per-tick CPU cost in longer fights with many active cooldown-based rules.- Fixed the root cause of the recurring ~1-second full freezes ("richtige Spitzen, wo ne Sekunde nichts mehr geht") under heavy combat load:
utils/profiler.lua's built-in micro-profiler appended every singleEvaluate()measurement to an unbounded array (up to ~20x/s), growing into tens of thousands of entries over a long raid/M+ run — a classic trigger for a large, stop-the-world Lua GC pause. Only the running aggregates (count/avg/peak/min) and the last sample are kept now; nothing else read the full history. PA.Engine.UpdateAura()allocated a brand-new{ stacks, duration, icon }table on every singleUNIT_AURArefresh (very frequent in combat with procs/HoTs/debuffs). It now reuses the existing per-spellID table, cutting steady-state GC pressure during heavy aura churn.RenderOutput(TEXT_CENTER/TEXT_PULSE) re-ran the expensiveSetFont()whenever only the text color changed (e.g. pulsing/threshold colors), because font and color shared one dirty-check. Font and color changes are now gated independently, soSetFont()only runs on an actual font/size/flag change.ICON_GLOW/ICON_DISPLAYcalledC_Spell.GetSpellTexture()on every render tick (10-20x/s) even when the spellID hadn't changed. The texture is now only re-resolved when the spellID actually changes.- TTS alerts queued behind each other (
overlap=false) instead of interrupting, so announcements fell further and further behind when procs fired faster than speech could finish.C_VoiceChat.StopSpeakingText()now cancels a still-playing line before a new one starts. - Fixed severe frame stutter ("ruckelt wie sau") every time a TTS line fired: with the default system-voice setting,
C_TTSSettings.GetVoiceOptionID()(an expensive system-voice enumeration) was re-run on every single alert; it's now resolved once and cached.StopSpeakingText()is also no longer called unconditionally — it now only fires while a previous line is actually still speaking, tracked via the realVOICE_CHAT_TTS_PLAYBACK_STARTED/FINISHED/FAILEDevents, instead of on every alert regardless of state. - Hardened
voiceID/Enum.TtsVoiceTypelookups againstnilso a bad value can no longer throw inside the TTSpcalland silently disable speech. - Active profile now falls back to the last valid character profile while spec data is still unavailable after load / cinematic transitions, so Evoker resource bars and other per-profile settings no longer appear to reset into a temporary
_0profile. - Resource-bar positions are now persisted by resource name as well as legacy index, so Evoker bars keep their placement across spec-order changes and scene transitions.
- Legacy resource-bar position tables are now auto-migrated to name keys on profile activation, and numeric leftovers are cleaned up after the first successful bind.
- Evoker resource bars now fall back to Mana + Essence when spec data is not ready during rebuild, so Mana no longer disappears on reload / first open (2026-07-05)
- RebuildResourceBars now initializes all cache tables before wiping them, so resource-bar rebuilds no longer abort on reload/options refresh (2026-07-05)
- Main ticker and pulse-driver helpers were forward-declared so the performance patch stays scope-safe in Lua (2026-07-05)
- Post-release docs now note the microlag/performance pass in README and changelog (2026-07-05)
V 1.1
[v1.1.0 Production] - 2026-07-05
WoW 12.0.7 Retail (Interface 120007). Git tag: procalert-v1.1.0-production
Added
- Live Auras PopUp feature for rule condition creation (2026-07-05)
- Per-bar width/height overrides for resource bars (2026-07-05)
- Rule Snapshots: save/load/delete named snapshots of rules + settings per character/spec (2026-07-05)
- Vertical resource bars option (bottom-to-top fill via StatusBar orientation) (2026-07-05)
- Debug panel now hidden unless enabled via the "Show Debug panel" checkbox (sv._debug) (2026-07-05)
Changed
- Resource Bars panel: per-bar enable/label/width/height block moved above the threshold colours (2026-07-05)
- Threshold colour grid switched from 2 to 3 columns (2026-07-05)
Fixed
- Checkboxes not reflecting their saved state on first show / after reload (e.g. Show Debug panel appeared unchecked despite being enabled); MakeCheckbox now applies its getValue deferred (2026-07-05)
- Memory-leak in Live Auras OnUpdate script (2026-07-05)
- onSelect Closure variable staleness (2026-07-05)
- Delete() API typo in ui_helpers + rule_editor (2026-07-05)
- Locale key duplication in enUS (2026-07-05)
- Live Auras button overlapping operator/value controls for stack conditions (2026-07-05)
- Live Auras button visibility not refreshed when condition type changes (2026-07-05)
- Live Auras button limited to buff conditions (popup only lists active buffs) (2026-07-05)
- Frame leak in Live Auras popup — item buttons now pooled/reused (2026-07-05)
- Bar width/height getters nil-guarded and zero-value global fallback rejected (2026-07-05)
Full Changelog: 1.0...1.1
First release.
ProcAlert v1.0 — First Stable Release
Visual & audio alert editor for all classes and specs — WoW Midnight (Interface 12.0.7).
Build fully customizable on-screen alerts (pulsing text, icon glows, screen flashes, sounds, TTS) that fire when your conditions are met, plus color-coded resource bars for every spec.
Highlights
- Rule editor — combine conditions (buffs, debuffs, stacks, cooldowns, stance/form, custom Lua) with AND/OR logic and priority handling
- Up to 10 output frames (4 by default), freely draggable and saved automatically
- 9 output types — center text, pulsing text, icon glow, plain icon, sound, custom sound, text-to-speech, screen flash, resource bar recolor
- Resource bars for your active spec + health bar, with selectable bar textures (LibSharedMedia), adjustable size, per-bar enable/label, and drag-to-position
- Per-bar threshold coloring — each bar and health get their own independent
% → colorthresholds (scroll the % field to fine-tune; Shift = ±5) - Per-character + spec profiles — every character gets its own config; nothing is shared between characters of the same class anymore
- Import / Export — share a full setup as a string; rules-only imports keep your current bar & frame settings intact
- 5 languages — English, Deutsch, Español, Français, Italiano
- Custom sound support — drop
.oggfiles intoAudio/and register them
Slash Commands
| Command | Action |
|---|---|
/pa |
Open the rule editor |
/pa settings |
Settings & debug panel |
/pa fm |
Toggle frame edit mode |
/pa reset |
Reset frame positions |
/pa testmode |
Force all alerts visible |
Installation
- Extract into
World of Warcraft/_retail_/Interface/AddOns/ /reloador restart WoW- Click the minimap button or type
/pa
Notes
- Resource-value conditions are intentionally omitted: WoW 12.0 hides those numbers from addons in combat. Use the visual resource bars instead.
Full README: included in the addon folder · Report issues on the tracker.