Commit Graph

28 Commits

Author SHA1 Message Date
florian.berthold d241fd1b5e feat(filters): match aura whitelist/blacklist by spell ID, not just name
release / release (push) Successful in 3s
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.
v3.3.0-coa.5
2026-05-31 15:11:21 +02:00
florian.berthold ad2a536efe fix(dispels): add Curse to Witch Doctor dispel set (Hexbreak 806240)
release / release (push) Successful in 3s
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.
v3.3.0-coa.4
2026-05-31 14:45:28 +02:00
florian.berthold 50f6e30f71 fix(libs): pcall AceGUI OnGamePadButtonDown (3.3.5 has no gamepad script type)
release / release (push) Successful in 3s
v3.3.0-coa.3
2026-05-29 20:23:33 +02:00
florian.berthold efbc200ba7 fix(dispels): drop C_Player.IsCustomClass gate from getCoaDispels
release / release (push) Successful in 4s
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.
v3.3.0-coa.2
2026-05-27 22:55:04 +02:00
florian.berthold eba2da8400 ci: respect GITHUB_REPOSITORY + tolerate per-asset upload failures
release / release (push) Successful in 2s
v3.3.0-coa.1
2026-05-25 12:16:55 +02:00
florian.berthold 1558e6b18f ci: add Gitea Actions release workflow (per-addon git-archive zip)
release / release (push) Successful in 3s
2026-05-25 12:01:40 +02:00
florian.berthold 3686bb4f9f fix(totems): raise frame level so right-click reaches the totem strip
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.
2026-05-25 11:57:54 +02:00
florian.berthold c0a23544f1 feat(totems): right-click dismiss, Witchdoctor 3-slot cap, seconds counter
- 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.
2026-05-25 11:51:11 +02:00
florian.berthold 5035f39364 fix(highlight): manual debuff scan for CoA dispel classes
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).
2026-05-25 11:51:03 +02:00
florian.berthold 83bbe12a87 feat(dispels): include 4 more CoA classes in raid-frame dispel filter
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.
2026-05-25 11:23:42 +02:00
florian.berthold 1e2408fd0a chore: remove .github/ (upstream templates, not relevant on Gitea) 2026-05-25 11:02:51 +02:00
florian.berthold f8214b6b6c fix(libs): pick up coa-ace3 9583952 (AceDB falsy-defaults PR #10 backport)
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.
2026-05-24 19:31:45 +02:00
florian.berthold 6605c1ca12 fix(libs): pick up coa-ace3 3ec2009 (BlizOptionsGroup + Settings.* CoA-compat)
Re-sync after coa-ace3 3ec2009 added two CoA-compat patches:
  - AceGUI-3.0/widgets/AceGUIContainer-BlizOptionsGroup.lua: parent
    falls back to UIParent when InterfaceOptionsFramePanelContainer is nil
  - AceConfig-3.0/AceConfigDialog-3.0: Settings.* block guarded with
    fallback to InterfaceOptions_AddCategory on WotLK-era clients

Without these, every addon registering a Blizzard Interface Options
panel via AceConfigDialog errors on load on the CoA client.
2026-05-24 17:41:32 +02:00
florian.berthold 5d9749a920 fix: include CoA custom classes in portrait/totems/raid-grouping
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.
2026-05-24 17:39:05 +02:00
florian.berthold ede7d2b23d chore(libs): sync shared LibStub-registered libs to canonical highest
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.
2026-05-24 17:07:54 +02:00
florian.berthold 2d7349cafb fix(libs): pick up coa-ace3 d422ad3 (FileDataID → string paths)
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.
2026-05-23 14:03:46 +02:00
florian.berthold da942631f0 chore(libs): sync Ace3 to coa-ace3 (WoWUIDev master @ 52e5f2c)
Bring every embedded Ace3 / CallbackHandler / LibStub copy in line with the
canonical Exiles/coa-ace3 bundle so LibStub resolution is predictable across
all Exiles forks regardless of which addons are enabled.

Libraries updated in this fork:
  AceConfig-3.0          3  (2 → 3)
  AceConfigCmd-3.0       14  (12 → 14)
  AceConfigDialog-3.0    92  (48 → 92)
  AceConfigRegistry-3.0  22  (12 → 22)
  AceDB-3.0              33  (21 → 33)
  AceDBOptions-3.0       15  (12 → 15)
  AceGUI-3.0             41  (33 → 41)
  CallbackHandler-1.0    8  (5 → 8)
  LibStub                2
2026-05-23 13:42:19 +02:00
florian.berthold 48ebec985b coa: fix CoA dispel detection timing in SUF aura scan
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.
2026-05-17 10:52:50 +02:00
florian.berthold 9679966f37 coa: fix "Show curable only" debuff filter for CoA custom classes
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
2026-05-17 06:08:34 +02:00
florian.berthold 464facd309 Bump version to v3.3.0
Carries the CoAClassColors.lua patch on top of upstream v3.2.12.
v3.3.0
2026-05-08 23:44:58 +02:00
florian.berthold b0b4b702bb Bump version to v3.2.12-coa1
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).
2026-05-08 23:43:00 +02:00
florian.berthold 089454f937 Add CoAClassColors.lua: mirror RAID_CLASS_COLORS into profile
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.
2026-05-08 22:48:42 +02:00
florian.berthold d2e8d1164b ci: preserve upstream line endings (CRLF) for clean upstream diffs 2026-05-08 18:59:45 +02:00
Jakob Roberts 06e8e33f77 Add LOW strata to health bars (#1)
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.
2025-08-27 12:36:58 -07:00
andrew6180 3dada108b9 missing files 2024-12-23 06:56:21 -07:00
Icarium d40388b8b7 Init 2023-03-02 12:15:00 +01:00
Icarium 09e96670f7 Update README.md 2023-03-02 12:10:30 +01:00
Icarium b8ae3a480b Initial commit 2023-03-02 11:52:39 +01:00