CoA's 3.3.5 client returns spellId as the 11th UnitAura value (stock 3.3.5a
stops at 10). The scan loop now captures it and the whitelist/blacklist match
on name OR spellId. The filter 'add' box accepts a numeric spell ID (stored as
a numeric key so it matches UnitAura's spellId) and the list view resolves IDs
to 'Name (ID)' via GetSpellInfo. Fixes ambiguity from name-only matching where
CoA custom spells share display names across ranks/variants.
WITCHDOCTOR could only flag Disease/Poison (Cleansing Idol). Hexbreak
(806240) is a single-target Curse remover, so add Curse=true. highlight.lua
reads this via GetCoaDispels, so the dispellable-debuff highlight picks it up.
Witchdoctor (and likely other CoA classes intermittently) never got the
"On curable debuff" border highlight on raid/party frames: the
C_Player.IsCustomClass() check in getCoaDispels could return false at
scan time and cache playerCoaDispels = false, after which the highlight
manual-scan path was never entered and the fallback RAID filter (which
doesn't know about COA dispel spells) silently returned nothing.
COA_CLASS_DISPELS only contains custom-class tokens (CHRONOMANCER,
WITCHDOCTOR, MONK = Templar, PROPHET = Venomancer, etc.) so any token
match already implies the player is a dispelling custom class — the
IsCustomClass call is redundant. Trust the table directly. Vanilla
classes whose tokens aren't in the table still get false → RAID filter
path, unchanged.
Bump v3.3.0-coa.2.
Parent unit button registers AnyUp clicks and opens the unit popup via
frame.menu — and was z-above the totem (which sat at frame level 1),
so right-clicks fell through to the popup instead of dismissing the
totem. Lift the totem to topFrameLevel + 5 so it wins the click.
- Right-click on a populated totem slot calls DestroyTotem(slot).
EnableMouse on the strip absorbs clicks (loses click-to-target on
the totem-bar pixels only; health/power bar still targets normally).
- COA_CLASS_TOTEMS table overrides MAX_TOTEMS per class. WITCHDOCTOR
capped to 3 so the 4th unused slot no longer renders. Easy to extend
for any future custom totem classes.
- Integer-seconds countdown text centred on each slot. totemMonitor
only repaints the FontString when the integer changes so OnUpdate
stays cheap. Cleared on expiry / dismiss.
UnitDebuff(unit, 1, "RAID") ignores CoA custom classes, so on a
Witchdoctor/Templar/etc. hasDebuff was always nil and the unit-frame
border highlight never lit up on curable Poison/Disease/Magic/Curse.
Fix mirrors the auras.lua shim: if ShadowUF.GetCoaDispels() returns a
dispel set, scan UnitDebuff entries manually and match by dispelType.
Expose getCoaDispels on the ShadowUF namespace so highlight.lua can
reuse the single source of truth (COA_CLASS_DISPELS lives in auras.lua).
COA_CLASS_DISPELS was missing Sun Cleric, Primalist (WILDWALKER token),
Witchdoctor, and Tinker — so members of those classes saw no dispel
highlighting on raid frames despite being able to cleanse. Sourced
dispel types from coa-decursive's DCR_init.lua spell map (Sanctify,
Soothing Touch, Cleansing Idol, Nanobot Cleanser), which is verified
against gameplay rather than DBC misc_value.
Also adds inline display-name comments for MONK / PROPHET / WILDWALKER
since the in-game class names don't match the internal tokens.
Re-sync after coa-ace3 9583952 backported WoWUIDev/Ace3 PR #10 which fixes
the AceDB-3.0 simple-value defaults metatable: previously falsy defaults
like ["*"] = false read back as nil because of `k2~=nil and v or nil`
short-circuiting. Now they round-trip correctly.
portrait.lua: guard CLASS_ICON_TCOORDS[classToken] lookup. CoA custom
classes (Witchdoctor, Templar, …) have no entry in the vanilla
CLASS_ICON_TCOORDS table, so the old SetTexCoord call crashed with a
nil-index whenever a custom-class unit was shown. Cache the lookup
into a local and fall through to blank texture on miss.
totems.lua: file-level class gate registered the totem bar only for
SHAMAN (and a 1-slot DK guardian variant), locking out Witchdoctor and
any future CoA totem class. Probe MAX_TOTEMS > 1 / HasMultiCastActionBar
(Bartender's pattern) and register without a class filter when the
player has the multi-cast totem bar, so any CoA totem class picks it up.
units.lua: raid-header groupingOrder was the hardcoded 10-class vanilla
string, which dumped the 11 CoA custom classes into an unsorted tail
when GROUP BY CLASS was active. Build the order dynamically from
RAID_CLASS_COLORS (CoA populates this with all 21 classes via the
CUSTOM_CLASS_COLORS mechanism) at the call site.
Bumps in this fork:
- LibSharedMedia-3.0
Brings these libs in line with the highest version any Exiles fork currently
bundles, so LibStub resolution is predictable regardless of load order.
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.