File Details
ZSBTv2.5.0.zip
- R
- Jun 15, 2026
- 5.65 MB
- 490
- 12.0.7+2
- Retail
File Name
ZSBTv2.5.0.zip
Supported Versions
- 12.0.7
- 12.0.5
- 12.0.1
# Changelog
## 2.5.0
### Performance
- Combat pipeline: extracted the Whirlwind aggregation flush callback into a named module-level function; previously an anonymous closure was heap-allocated on every Whirlwind hit.
- Combat pipeline: added a 1.5s TTL cache for target debuff lookups (`hasTargetDebuffSpellId`) with per-GUID invalidation, reducing redundant aura scans during rapid multi-hit sequences.
- Combat pipeline: replaced per-event pet color table construction with module-level constants for all four pet damage/healing color pairs.
- Combat pipeline: replaced string concatenation keys in the damage meter last-totals map with a two-level nested table, eliminating string allocations on every outgoing damage event.
- Animation engine: removed redundant `ClearAllPoints`/`SetPoint` calls for icon FontStrings and icon textures from the per-frame `AE_UpdateEvent` path (ran ~66 times/sec per active event); anchor is now set once at event creation time.
- Animation engine: added early-out at the top of the `OnUpdate` handler when no scroll areas have active events, skipping all processing overhead for that tick.
- UI: `FireTestText` scroll area parent frames no longer call `ClearAllPoints`/`SetPoint` on every combat event; geometry is cached and only re-applied when the configured position or size actually changes.
### Fixed
- Combat pipeline (Midnight): guarded four `tostring(amount)` call sites in UNIT_COMBAT DOT and pet fallback paths with `IsSafeNumber` checks to prevent Lua errors when `amount` is a WoW 12.x secret/tainted value.
- Object pool: `RecycleIconFS` now resets `SetRotation` to 0 (matching `RecycleFontString`) so a rotated icon FontString cannot carry stale rotation into its next consumer.
- Display: `TryMerge` now stores a shallow copy of the incoming `meta` table in the merge buffer rather than a direct reference, preventing stale crit annotations if the caller's table is mutated before the flush timer fires.
### Changed
- Quick Control Bar: dragging is now blocked during combat (`InCombatLockdown`). If a drag is released while in combat, the position save is deferred and applied when combat ends (`PLAYER_REGEN_ENABLED`).