File Details
v2.4.0
- R
- Mar 23, 2026
- 409.14 KB
- 15
- 12.0.1
- Retail
File Name
Vigil-v2.4.0.zip
Supported Versions
- 12.0.1
Vigil
v2.4.0 (2026-03-23)
Full Changelog Previous Releases
- Trinket tracking and zero-cooldown ability icons (#12)
- fix: dim icons on cooldown even when duration is secret
Secret-value cooldown durations and charge counts bypassed the dim
state because we can't branch on their values. Default to inactive
(dimmed) in both paths since a secret return implies a real cooldown. - fix: secret-value-safe icon dimming and cooldown detection
GetSpellCooldown/GetSpellCharges return tables with secret fields
in Midnight. Guard all field access with issecretvalue(), fall back
to GetSpellCooldownDuration for sweeps and cd.startTime for dim
state. Hide charge text when maxCharges == 1. - fix: handle secret usability in IsSpellUsable
Use frame.currentSpellID for consistency, check noMana independently
when the primary return is secret to detect insufficient resources. - spec: dynamic on-use trinket tracking
Detect equipped on-use trinkets via GetItemSpell, track cooldowns
through existing C_Spell.* system. New trinkets group, SetSpell()
method on icon elements, auto-hide empty groups. - plan: dynamic on-use trinket tracking implementation
7-task plan covering SetSpell() method, Trinkets.lua module,
Helpers/Engine/Groups integration, TOC update, and verification. - feat: add SetSpell() method to icon elements
Allows runtime spell ID swap for dynamic elements like trinkets.
Also handles testIcon fallback for placeholder elements in demo mode. - feat: add Specs/Trinkets.lua discovery module
Detects on-use trinkets by equipment slot, provides TrinketElements()
for spec injection, and UpdateTrinketElement() for runtime swaps. - feat: inject trinket elements into all specs
Trinket placeholders auto-injected by RegisterSpec, new trinkets
group added to StandardGroups default layout. - feat: wire trinket discovery into Engine
Register PLAYER_EQUIPMENT_CHANGED, discover trinkets on spec
activation, handle async item data via GET_ITEM_INFO_RECEIVED.
Re-discover trinkets after test mode deactivation. - fix: auto-hide groups with no visible elements
Previously empty groups left a floating label on screen. Now groups
with zero visible elements hide outside edit mode. - feat: add Trinkets.lua to addon load order
- fix: dim icons on cooldown using vertex color instead of alpha
The range check at the end of Update() was resetting icon vertex color
to (1,1,1) every frame, overriding any dimming SetDimState had applied.
Switch to Blizzard's CooldownViewer pattern: store dim color in upvalues
(dimR/dimG/dimB) and apply through the range check so both states resolve
together. Uses SetDesaturated + SetVertexColor(0.4, 0.4, 0.4) for
cooldown dimming, matching Blizzard's own values. - fix: trinket name display and library categorization
- Set trinket label from item name so sidebar shows the real name
instead of "trinket_slot13" - Add TRINKETS section to sidebar library so trinkets aren't mixed
in with abilities
- fix: use spell name for trinket label instead of async item name
- fix: use item name from GetItemInfo for trinket labels
- fix: set default trinket label at definition time
- fix: skip talent gate for trinket placeholders in InitElement
InitElement was calling SetEnabled(true) on trinket placeholders,
showing them with spellID 0 before DiscoverTrinkets could run.
Trinket elements now start hidden and let DiscoverTrinkets manage
their visibility. - debug: trinket label diagnostic
- fix: clear trinket removedElements during reconciliation
Trinket elements are dynamic and should never persist in
removedElements. Clears them during ReconcileSavedGroups so
they're always re-added to the trinkets group.
Also removes debug prints. - fix: force trinkets group elementIDs during reconciliation
- fix: clear deletedDefaults for trinkets group during reconciliation
The trinkets group was being blocked from creation because earlier
testing left it in deletedDefaults. Clear all trinket-related
persistence (removedElements, deletedDefaults) during reconciliation
since trinket elements are equipment-driven and managed at runtime. - fix: create trinket frames dynamically with real spell IDs
Instead of creating placeholder frames with spellID 0 that fight with
InitElement/SetEnabled, the trinkets group starts empty and
DiscoverTrinkets creates frames directly when on-use trinkets are found.
This bypasses all the spellID 0 edge cases. - fix: hide passive trinket placeholders from sidebar library
- fix: track trinket cooldowns by equipment slot
Trinket spells from GetItemSpell are buff spells, not the use action.
Use GetInventoryItemCooldown(slot) for trinket icons instead of
C_Spell.GetSpellCooldown to get the actual item cooldown. - fix: generate icons for zero-cooldown rotation abilities
Abilities like Void Ray (DDH), Chaos Strike (HDH), Templar's Verdict
(Ret), and other resource-gated spells were missing icon elements
because the pipeline skipped anything with cooldown=0. Removed the
cooldown gate in emit.mjs so all classified abilities get icons.
- fix: dim icons on cooldown even when duration is secret

