Simple Taunt Announce - reborn

Simple Taunt Announce reborn

File Details

SimpleTauntAnnunce-1.1

  • R
  • Apr 3, 2026
  • 29.49 KB
  • 33
  • 12.0.1+1
  • Retail

File Name

SimpleTauntAnnunce.zip

Supported Versions

  • 12.0.1
  • 12.0.0

# 1.1.0 — WoW Midnight compatibility update (2025)

This release fully rewrites the event detection engine to be compatible with
WoW Midnight's anti-bot API restrictions. All previously working functionality
is preserved: dual audio notifications (own taunt vs. other tank's taunt),
raid icon display, class-colored names, and all configuration modes.

### Breaking changes

- **`COMBAT_LOG_EVENT_UNFILTERED` removed.** Blizzard made this event entirely
  unregisterable in Midnight (even at top-level), as part of the anti-bot
  initiative. The event detection engine has been replaced with
  `UNIT_SPELLCAST_SUCCEEDED` (see below).

### New features / behaviour changes

- **New event engine: `UNIT_SPELLCAST_SUCCEEDED`.**
  Detects taunt casts by the player, player's pet/vehicle, and visible
  party/raid members without relying on the combat log.
  - Own taunts and pet/vehicle taunts still trigger `soundOwn`.
  - Other tanks' taunts still trigger `soundOther`.
  - Group membership verified via `UnitInRaid()` / `UnitInParty()` (no
    bitmask flags, which are now secret values in Midnight).
  - Raid icons retrieved via `GetRaidTargetIndex()` instead of bitmask.

- **Known limitation:** Failed/immune taunts are no longer detectable.
  `UNIT_SPELLCAST_SUCCEEDED` only fires for casts that land server-side.
  The original "failed (immune)" annotation has been removed from messages.

### Bug fixes

#### Midnight anti-bot "secret values" mitigations

- **`COMBATLOG_OBJECT_RAIDTARGET*` constants** (`RAIDTARGET1`–`8`,
  `RAIDTARGET_MASK`) can be `nil` in Midnight. Building a Lua table with
  `nil` keys generates a fatal `"table index is nil"` error at addon load.
  All constants are now captured at top-level with numeric fallbacks
  (e.g. `COMBATLOG_OBJECT_RAIDTARGET1 or 0x00000100`).

- **`COMBATLOG_OBJECT_AFFILIATION_*` and `COMBATLOG_OBJECT_TYPE_PLAYER`**
  same treatment — captured locally with historical bitmask fallbacks.

- **`Enum.PartyCategory`** is `nil` in Midnight. Replaced with a local
  constant using a safe chain guard:
  `(Enum and Enum.PartyCategory and Enum.PartyCategory.Instance) or 2`

- **`spellID` parameter as a "secret value" (multi-layer proxy).** For
  `nameplate*` unit IDs, Midnight passes a special proxy value for `spellID`
  that defeats successive layers of guards:
  - Layer 1: reports as `<no value>` in debugger but is **truthy**
    → bypasses `if not spellID`
  - Layer 2: `type()` returns `"number"` for it
    → bypasses `type(spellID) ~= 'number'`
  - Layer 3: throws `"table index is secret"` when used as a table index

  Final fix: **`pcall`** around the table lookup — immune to any future
  changes in the proxy's impersonation strategy.

  ```lua
  local ok, isTaunt = pcall(function() return tauntSpells[spellID] end)
  if not ok or not isTaunt then return end
  ```

#### API removals / replacements

- **`LE_PARTY_CATEGORY_INSTANCE`** removed in WoW 10.0 (Dragonflight).
  Replaced with `Enum.PartyCategory.Instance` (now further protected, see above).

- **`RAID_CLASS_COLORS[className].colorStr`** deprecated and removed.
  Replaced with `C_ClassColor.GetClassColor(classFileName):WrapTextInColorCode(name)`.

- **`frame:RegisterEvent('COMBAT_LOG_EVENT_UNFILTERED')`** called from inside
  an event handler triggers `ADDON_ACTION_FORBIDDEN` in Midnight. Even moving
  the call to top-level triggers the same error, as the event itself is now
  fully protected. Resolved by migrating to `UNIT_SPELLCAST_SUCCEEDED`.

#### Configuration panel (SimpleTauntAnnounce_Config)

- **`InterfaceOptionsCheckButtonTemplate`** removed in WoW 10.0.
  Replaced with `UICheckButtonTemplate` plus a manually created
  `GameFontHighlight` label.

- **`getglobal(frameName .. "Text")`** removed (was already deprecated since
  WoW 3.0). Replaced with direct `CreateFontString` on the checkbox frame.

- **`UIDropDownMenuTemplate` and all `UIDropDownMenu_*` functions** removed in
  Midnight. Replaced with a `UIPanelButtonTemplate` button that opens a native
  context menu via `MenuUtil.CreateContextMenu()` (API introduced in WoW 10.0).

#### Profiling / info command

- **`UpdateAddOnCPUUsage`, `GetAddOnCPUUsage`, `GetFrameCPUUsage`,
  `GetScriptCPUUsage`** removed in WoW 10.x. The `/sta info` CPU section is
  now fully nil-guarded and silently skipped if APIs are unavailable.

- **`UpdateAddOnMemoryUsage` / `GetAddOnMemoryUsage`** wrapped with
  `C_AddOns.*` namespace fallback for forward compatibility.

---

## 1.0.58 and earlier

Original releases by BeathsCurse. Changelog not included in this repository.
For historical versions see the original CurseForge/WoWInterface release page.