Re-sync after coa-ace3 d422ad3 which converted 42 numeric FileDataIDs in
Set*Texture() calls back to string paths. Upstream Ace3 uses FDIDs which
silently fail on WoW 3.3.5 / CoA, rendering color swatches, checkboxes
and window chrome as solid-red placeholders.
Previous approach baked playerCoaDispels into group.coaRaidFilter during
OnLayoutApplied, which can fire before PLAYER_LOGIN when C_Player isn't
ready yet — Venomancer and other CoA classes got cached as false and
never re-evaluated.
Fix: move all CoA logic into scan() itself so it runs on every
PLAYER_ENTERING_WORLD update. getCoaDispels() no longer caches when
C_Player is unavailable (returns nil without storing), so the first
successful in-world call populates it correctly.
updateGroup() is restored to its original form — no group.coaRaidFilter.
scan() intercepts filter=="HARMFUL|RAID", calls getCoaDispels(), and if
a dispel set is found strips |RAID and applies the per-type check inline.
UnitAura "HARMFUL|RAID" only honours vanilla class dispel knowledge in
the 3.3.5 client — CoA custom classes (Chronomancer, Monk/Templar,
Prophet/Venomancer, etc.) were silently filtered to zero debuffs.
Fix: in updateGroup(), detect CoA dispellers via C_Player:IsCustomClass()
and store their per-class dispel set on group.coaRaidFilter instead of
appending |RAID. scan() skips debuffs whose auraType is not in that
set, preserving contiguous button layout with no gaps.
Class → dispel types (sourced from coa-decursive):
CHRONOMANCER Magic/Curse/Disease/Poison (Roll Back 804490)
MONK Magic/Disease/Poison (Rebuke 525051)
PROPHET Poison (Antivenom 800905; curse-dispel doesn't fire)
PYROMANCER Disease/Poison
RANGER Disease/Poison
CULTIST Curse
SONOFARUGAL Curse
SPIRITMAGE Magic
STARCALLER Magic
WITCHHUNTER Curse
Marks this fork as carrying the CoAClassColors.lua patch, so users can
tell at a glance (e.g. via /reload addon list) that they are running the
guild-patched build. Suffix follows the coa-omen convention
(3.0.9-coa1).
SUF stores class colors in a private ShadowUF.db.profile.classColors
table seeded only with the vanilla 10 in defaultlayout.lua. On the
Voljin/CoA client _G.RAID_CLASS_COLORS is populated by FrameXML with
22 additional tokens (HERO + 21 CoA customs), but those never reach
SUF, so a guildmate's CoA-class health bar falls through to the
percent gradient.
New file post-hooks ShadowUF:OnInitialize, ProfileReset and
ProfilesChanged to copy any RAID_CLASS_COLORS entry the active
profile is missing into profile.classColors. Idempotent — only fills
nil keys, so user customisations and SUF's stock vanilla-10 values
win.
Source of truth is the live client's table, populated in
patch-B.MPQ → SharedXML/SharedConstants.lua, so the addon stays in
sync with whatever palette the realm ships without a hardcoded copy.
The strata was defaulting much higher than it should be and was overlapping with other frames such as the character pane. This was applying to all bars including raid, player, and party.