v2026.22-17-gad1aa63
Details
-
FilenameSilverDragon-v2026.22-17-gad1aa63.zip
-
Uploaded by
-
UploadedJul 26, 2026
-
Size537.71 KB
-
Downloads41
-
MD5b0158e01e5140d611a6163a720f7ef16
Supported WoW Retail Versions
- 12.0.7
Supported WoW Mists of Pandaria Classic Versions
- 5.5.4
Supported WoW Wrath of the Lich King Classic Versions
- 3.4.5
Supported WoW Classic Versions
- 1.15.8
Supported WoW Burning Crusade Classic Versions
- 2.5.6
Changelog
SilverDragon
v2026.22-17-gad1aa63 (2026-07-26)
Full Changelog Previous Releases
- Systems update: leave conditions with nothing to say out of explanations
A condition can now be marked SILENT, for the ones that can't usefully
explain themselves, and summarize returns nothing at all when everything it
was given is silent. Callers drop the line rather than print an empty one. - Systems update: conditions for map pois, map art, indoors and faction
These cover checks the HandyNotes handler currently does by hand, ahead of
folding those keys into its requires. Nothing here uses them yet. - Systems update: cache condition checks, and hold buffs through combat
Conditions gain Test(), which memoises a check against an identity key for
the rest of the frame, so points sharing a world quest or a vignette ask the
game once between them rather than once each.
Aura lookups read as secret for the whole of combat, and AuraActive answered
"no buff" to that, so anything gated on a zone-wide buff hid itself the
moment you pulled. It now keeps answering with the last value it could
actually read. Calendar conditions do the same through chat lockdown. - Systems update: nestable conditions, and share upgradeloot
Conditions gain All and Any, which wrap a group up as a condition so
groups can nest.
upgradeloot moves to systems/rewards and is now the same file as the
handler's. Ours had drifted: no expansion support, and a requires=
group on loot was flattened into an and, so satisfying one alternative
wasn't enough. Keeps our class and covenant fields for the loot popup
icons, which the handler's copy didn't have. - Systems update: share the token formatting with the handler
RenderString was a hand-maintained mirror of the handler's render_replacer
and had drifted: no secret guard on the replacement, no //,
and non-numeric ids became nil before the branches were reached. The
implementation now lives in systems/formatting.lua and gets copied across
like the other systems files, with RenderString, RenderStringList and
CacheString reduced to entry points.
mob_name keeps the parts that need our database -- the mobdb fallback and
the name-to-id index -- over the shared lookup. - Systems update: unknowable appearances, NotMajorFaction, tooltip tidying
The one that matters is HasAppearance, which cached "the API has no
appearance for this item" as false and then handed that false back on every
later call. An item that should read as unknowable started reading as
known-and-not-collected instead, which is the same vibe as 3841235: it
stops being hidden from the only-knowable loot lists and tooltips. - Custom mob list rebuilt itself on every change
CustomChanged looked for the zone group under custom.args rather than
custom.args.zones.args, so it never found one and always fell through to
a full BuildCustomList.
Side benefit: the unchecked toggle left behind by removing a mob now
sticks around reliably, instead of being purged the next time a rebuild
happened to run. It's there so you can re-add a mob you removed by
mistake. - History: clearing the window left the broker list alone
self.rares was accumulated in parallel with self.data and never consulted
self.removed, so neither Clear All nor dismissing a single line took
anything out of the broker's "seen this session" list. It held the same
tables as self.data anyway, so derive it instead of keeping both. - Quest-gated rewards were hidden from only-knowable loot lists
The rewards system reads a handful of *_notable keys that SilverDragon
has no config for, so they came back nil. That matters for quest_notable:
without it Reward:Obtained() returns nil rather than false for a quest
reward you haven't earned, and nil reads as "unknowable" downstream, so
those rewards vanished from tooltips and loot windows with regular loot
turned off.
Give the shim fallbacks for the keys we don't configure. The rest only
feed Notable(), which is gated on show_npcs_emphasizeNotable and so does
nothing today; that one stays off. - Achievement criteria could be half-loaded and then never revisited
achievements_loaded was set inside the innermost criteria loop, so it
meant "we read at least one criterion off at least one achievement"
rather than "we finished a pass". If the client wasn't handing over
achievement data yet, whichever achievements happened to come back empty
were skipped, and the flag then stopped LoadAllAchievementMobs from ever
looking again -- so those mobs had no achievement status for the rest of
the session, varying run to run with pairs() order.
Set the flag after the full pass instead, and record each achievement in
achievements_scanned only once it has actually yielded criteria, so
anything that wasn't ready is left for later. RECEIVED_ACHIEVEMENT_LIST
clears the flag to trigger that later pass.
Deliberately not "only set the flag once every achievement has criteria":
the table carries achievements that legitimately don't exist on older
clients, so that would rescan forever. AchievementMobStatus is called
per-mob while drawing tooltips and overlay pins, which makes an
event-driven retry a lot safer than a polled one -- and the
achievements_scanned check keeps the retry to a table walk plus one cheap
call per achievement still missing. - Overlay: in Classic minimap zoom cache went stale, or was never filled
Retail has C_Minimap.GetViewRadius and so is unaffected.
MINIMAP_UPDATE_ZOOM and CVAR_UPDATE called RefreshAllData directly,
skipping UpdateMinimapIcons -- the only thing that caches indoors/zoom
for GetMinimapViewDiameter. - Loot detail tooltips could lose the treasure/shared flags
Preventative. Only caller was in outputs/ldb.lua and didn't pass any of
the varargs. - ClickTarget: do not push an unshowable popup onto the stack
ShowFrame could return nil, so check that. If it did fail it'd make the
length check and ipairs iteration disagree. - Vignettes: cope with vignettes that have no id or atlas
Keep firing the maybe-nil raw vignetteID because event consumers expect
it. - Announcement flash would only check mounts for mobs
- Announcement flash would be stuck with loot/not-loot settings from first flash
Follow-up to af8c4fe572a4c03b7379b44089b340fd31b85398 - History: fix disabling, clearing, and vignette positions
- OnDisable unregistered against
self, but the callbacks are
registered against the "History" string, so disabling never actually
stopped them -- the window would pop back open the next time a rare
was seen. ShardChanged wasn't being unregistered at all. - The Seen callback stopped one argument short and dropped the
vignetteGUID, and GetPositionFromData checked a mistypeddata.GUID,
so vignette and point-of-interest entries never refreshed their
position from the live vignette. Pass it through and store it the way
ClickTarget does, and use it for the tooltip's Vignette ID line
too. (This only became available recently with 381981fd4.) - "Clear all" in the context menu only flushed the data provider without
marking entries removed, so any later refresh (including a shard
change) brought them all back. Both clear paths now share one method.
- OnDisable unregistered against