Zore's Scrolling Battle Text

ZSBT is a modern scrolling combat text addon for WoW Retail that delivers customizable incoming/outgoing combat text and notification alerts with strong spam control and safe compatibility in dungeons/raids.

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`).