promotional bannermobile promotional banner

DragonShout

A highly customizable combat announcer for interrupts, CC, and dispels

File Details

1.1.0

  • R
  • Apr 15, 2026
  • 2.03 MB
  • 17
  • 12.0.1+2
  • MoP Classic + 2

File Name

DragonShout-1.1.0.zip

Supported Versions

  • 12.0.1
  • 5.5.3
  • 2.5.5

Dragon Shout

1.1.0 (2026-04-15)

Full Changelog Previous Releases

  • chore(master): release 1.1.0 (#1)
    Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
  • chore: add CurseForge and Wago project IDs to TOC
  • docs: add MIT license
  • docs: add logo to README header
  • feat: add per-type Solo/Group/Raid channel selection (#5) (#6)
  • fix: wrap long debug print lines to pass luacheck W631 (#4)
  • chore: add 400x400 logo and 64x64 TGA icon (#3)
  • chore: add issue templates, PR template, CODEOWNERS, FUNDING, and label/project docs (#2)
  • refactor: rename CCListener to AuraListener
  • feat: add debug suite, fix playerGUID nil bug, fix test throttle, update CC templates
    • Fix ns.playerGUID always nil: register PLAYER_LOGIN fallback in Lifecycle.Initialize
    • Fix test buttons silently throttled: add noThrottle param to Announcer.Announce
    • Add /ds debug toggle and enhanced /ds status with GUID, version, debug state
    • Add Debug Settings section in Options (debug toggle, print status, clear throttle)
    • Add Announcer.ClearThrottle() public API; wipe throttle via options or /ds clear
    • Add debug traces throughout all listeners and announcer guard paths
    • Update ccOnYou template defaults to per-type strings (Silenced/Stunned/etc.)
    • Add schema migration v2 for ccOnYou template format upgrade
    • Remove dead C_ChatInfo.SendChatMessage branch (always fell through to SendChatMessage)
    • Fix ApplyTemplate: nil tokens now emit empty string, not literal in chat
    • Fix AnnounceCustom: only fires when player is source or dest of the CC event
  • refactor: convert Options tabs to Section card layout
    Replace flat header layout (W.CreateHeader + widgets directly in parent)
    with Section card layout (W.CreateSection with widgets in section.content)
    across all 7 DragonShout_Options tabs.
    • GeneralTab: Core Settings + Testing sections
    • InterruptsTab: Interrupts section
    • CCAppliedTab: CC Applied section
    • CCOnYouTab: CC on You + CC Types + Per-Type Templates sections
    • DispelsTab: Dispels section
    • CustomSpellsTab: Custom Spells section
    • ProfilesTab: Current Profile + Profile Actions sections
      Also adds local ipairs = ipairs cache in CCOnYouTab, CustomSpellsTab,
      and ProfilesTab; uses ipairs in RefreshProfileWidgets widget loop.
  • refactor: merge CC tables, remove AuraListener
  • feat: per-CC-type template overrides and custom spell token help text
    • Add ccOnYou.typeTemplates sub-table (silence/polymorph/stun/disorient/fear/root) - empty string falls back to global template
    • Announcer.Announce() accepts optional 4th ccType param; resolves typeTemplates[ccType] override when non-empty
    • CCListener and AuraListener pass ccType to Announce for ccOnYou
    • CCOnYouTab: new Per-Type Templates section with one TextInput per type
    • CustomSpellsTab: token help description (, , )
  • feat: add and template tokens for CC announcements
    • CCListener: add CC_TYPE_LABEL table (Silenced/Stunned/Polymorphed/etc.)
      and GetPlayerCCDuration() helper (Retail via C_UnitAuras, Classic via
      UnitDebuff). Pass and tokens in ccOnYou and ccApplied
      announce calls. Fix ccOnYou/ccApplied/AnnounceCustom control flow: use
      inverted conditions instead of bare returns so AnnounceCustom always runs.
    • AuraListener: pass duration from addedAuras (Retail) and UnitDebuff pos5
      (Classic) into AnnounceIfCC. Add token via CC_TYPE_LABEL. Guard
      durationStr against zero-duration auras (permanent silences).
    • Config: update ccOnYou default template to include and .
    • enUS.lua: update template and tooltip locale keys; add Silenced/Stunned/
      Polymorphed/Disoriented/Feared/Rooted locale strings for future UI use.
    • CCOnYouTab: update template tooltip to list , , .
  • chore: set ignore = dirty on all submodules
  • chore: initialize git submodules
  • fix: correct CLEU dispatching, AuraListener robustness, and options degradation
    • Fix SPELL_INTERRUPT/SPELL_AURA_APPLIED/SPELL_DISPEL: remove shared
      fixed-position destructure from CombatLogListener; each handler now
      calls select(12, CombatLogGetCurrentEventInfo()) for its own suffix
      fields. Fixes auraType=nil bug that silently disabled all CC detection
      via CLEU
    • Fix InterruptListener: SPELL_INTERRUPT has no extraSpellName field;
      resolve interrupted spell name from extraSpellId via GetSpellName()
      helper (C_Spell.GetSpellName on Retail, GetSpellInfo on Classic)
    • Fix AuraListener Retail: handle updateInfo.isFullUpdate with full
      debuff scan via C_UnitAuras.GetAuraDataByIndex
    • Fix AuraListener Classic: replace 0.5s debounce with absent-to-present
      CC tracking via announcedCCs table; prevents re-announcing active CCs
      on every UNIT_AURA fire
    • Fix Lifecycle: remove PLAYER_LOGIN event registration that accumulated
      handlers on every addon re-enable
    • Fix Announcer: tonumber(entry.spellId) guards against string/number
      mismatch in custom spell matching
    • Fix DragonShout_Options/Core.lua: replace error() with graceful print
      and sentinel ns tables; use direct GetLocale for ns.L
    • Initialize git submodules (Ace3, LibDataBroker-1.1, LibDBIcon-1.0, DragonWidgets)
  • feat: initial DragonShout addon scaffold
    Full Ace3-based combat announcer addon.
    • Interrupt, CC, dispel, and custom spell announcements
    • Per-category channel selection and message templates
    • Throttle per spell, minimap icon, slash commands
    • LoadOnDemand options UI with DragonWidgets
    • Supports Retail, MoP Classic, TBC Anniversary