/dt test- show a single test toast/dt testmode- toggle continuous test toasts (2.5s interval) for live config preview/dt clear- dismiss all active toasts/dt config- open config window- Rapid-fire
/dt test(10+ times) to stress the frame pool - Hover/unhover during animations to verify pause/resume
/console scriptErrors 1to surface Lua errors
Mandatory; no raw alternatives.
| Library | Replaces |
|---|---|
| AceEvent | frame:RegisterEvent() |
| AceTimer | C_Timer.After() / C_Timer.NewTimer() |
| AceDB | Raw SavedVariables |
| AceConsole | SLASH_* globals |
| LibSharedMedia-3.0 | Hardcoded font/texture paths |
For local dev, Ace3 is a git submodule at Libs/Ace3/. The .pkgmeta externals only resolve during CI packaging.
- Loot event ->
LootListener/XPListenerparses and callsToastManager.QueueToast(lootData) - QueueToast -> Checks combat deferral and duplicate stacking, then calls
ShowToast() - ShowToast ->
ToastFrame.Acquire()gets frame from pool,Populate()fills it,PlayLifecycle()starts animation - PlayLifecycle -> Builds a
lib:Queue(): entrance -> attention (optional, quality-gated) -> exit (with hold delay) - Queue completes ->
OnToastFinished()->StopAll()->Release()returns frame to pool
Frames are recycled via Acquire() / Release(). Release() calls ClearQueue(), clears state fields, and has a pool duplication guard. Always call StopAll() before starting a new queue on an acquired frame.
When "Match ElvUI Style" is enabled: font face uses E.media.normFont, font size/outline respects user settings (not overridden), background is never overridden, border color uses E.media.bordercolor when quality border is off. SkinToast() runs after PopulateToast().
DragonToast exposes a generic messaging API via ns.MessageBridge so external addons can suppress toasts and queue custom toast notifications without depending on internal implementation details.
| Message | Payload | Description |
|---|---|---|
DRAGONTOAST_SUPPRESS |
source (string) |
Suppresses normal item toasts. Adds source to suppression set with a per-source 120s safety timer. |
DRAGONTOAST_UNSUPPRESS |
source (string) |
Removes source from suppression set and cancels its safety timer. |
DRAGONTOAST_QUEUE_TOAST |
toastData (table) |
Validates required fields and forwards to ToastManager.QueueToast(). |
Required fields:
itemName(string) - display nameitemIcon(number) - texture IDitemQuality(number) - Blizzard quality enum (0-7)
Optional fields (auto-filled if missing):
timestamp(number) - defaults toGetTime()if omitteditemLink(string) - clickable item linkitemID(number) - item ID for duplicate detectionitemLevel(number) - item levelitemType(string) - item type / subheading textitemSubType(string) - item sub-typequantity(number) - stack countlooter(string) - name of the looterisSelf(boolean) - whether the looter is the local playerisCurrency(boolean) - currency flag (bypasses suppression)isRollWin(boolean) - roll-win flag (bypasses suppression)isXP(boolean) - XP flag (bypasses suppression, enables XP stacking)isHonor(boolean) - honor flag (bypasses suppression, enables honor stacking)copperAmount(number) - non-negative money magnitude in coppermoneyDirection("gain"or"loss") - money movement direction; omitted values remain gains for compatibility
Suppression uses a multi-source set. Each source string maps to its own 120-second safety timer. Toasts are suppressed when any source is active (next(suppressionSources) ~= nil). Normal item toasts are blocked; XP, honor, currency, and roll-win toasts always pass through.
The safety timer auto-clears a source if the matching UNSUPPRESS message never arrives (e.g. crash or reload).
| Legacy Message | Translates To |
|---|---|
DRAGONLOOT_LOOT_OPENED |
DRAGONTOAST_SUPPRESS with source "DragonLoot" |
DRAGONLOOT_LOOT_CLOSED |
DRAGONTOAST_UNSUPPRESS with source "DragonLoot" |
DRAGONLOOT_ROLL_WON |
DRAGONTOAST_QUEUE_TOAST (transforms rollData to lootData) |
These will be removed when all senders migrate to the generic API.
-- Suppress toasts while your custom loot frame is open
local AceEvent = LibStub("AceEvent-3.0")
-- When your loot frame opens
AceEvent:SendMessage("DRAGONTOAST_SUPPRESS", "MyLootAddon")
-- Queue a custom toast
AceEvent:SendMessage("DRAGONTOAST_QUEUE_TOAST", {
itemName = "Thunderfury, Blessed Blade of the Windseeker",
itemIcon = 134585,
itemQuality = 5,
itemLink = itemLink,
quantity = 1,
looter = UnitName("player"),
isSelf = true,
})
-- When your loot frame closes
AceEvent:SendMessage("DRAGONTOAST_UNSUPPRESS", "MyLootAddon")- Localized loot patterns -
CHAT_MSG_LOOTstrings are locale-dependent. Build patterns from Blizzard globals. - AceTimer cleanup - cancel timers before nullifying references, or closures fire on recycled frames.
- ElvUI skin ordering -
SkinToast()must respect user Appearance settings, not override them.
| Label | Description |
|---|---|
| Category | |
C-Bug |
Something is broken |
C-Feature |
New feature or enhancement |
C-Performance |
Speed, memory, or frame rate |
C-Usability |
UX, accessibility, discoverability |
C-Code-Quality |
Refactor, cleanup, tech debt |
C-Documentation |
Docs, README, guides |
C-Localization |
Translation, locale strings |
| Area | |
A-Core |
Addon lifecycle, slash commands, minimap icon |
A-Toast |
Toast frames, animations, manager, display |
A-Listeners |
Event listeners (loot, XP, honor, mail, currency, rep) |
A-Options |
DragonToast_Options companion addon |
A-Config |
Config schema, defaults, presets |
A-Appearance |
Visual styling, fonts, textures, colors |
A-Integration |
Cross-addon messaging, ElvUI skin |
A-Localization |
Locale files, translations |
A-CI |
GitHub workflows, packaging, CI/CD |
| Difficulty | |
D-Good-First-Issue |
Good for newcomers |
D-Straightforward |
Clear path, minimal risk |
D-Complex |
Multiple files, needs design |
D-Expert |
Deep system knowledge required |
| Platform | |
P-Retail |
Retail (Dragonflight/TWW) |
P-TBC-Anniversary |
TBC Anniversary Classic |
P-MoP-Classic |
Mists of Pandaria Classic |
P-All-Versions |
Affects all supported versions |
| Status | |
S-Needs-Investigation |
Requires debugging or research |
- DragonToast - Bugs: project #6 (
C-Bugissues) - DragonToast - Feature Requests: project #7 (
C-Featureissues)