florian.berthold 3fb81c08a0 fix: enable stance/state bars for CoA custom classes with shapeshift forms
Vanilla Bartender4 assumes only DRUID/WARRIOR/WARLOCK/PRIEST/ROGUE/HERO have
shapeshift forms. CoA custom classes (Witchdoctor, Templar, …) can register
forms late at runtime and aren't in the whitelist, so the stance/state bar
never came up for them.

StanceBar.lua:
  - ApplyConfig() no longer Disable()s the module when GetNumShapeshiftForms()
    is 0 at config time. A disabled module never re-enables on
    UPDATE_SHAPESHIFT_FORMS, so late-registered forms were lost. We now just
    hide the bar frame.
  - Register UPDATE_SHAPESHIFT_FORMS and PLAYER_ENTERING_WORLD on the module
    itself and re-Enable() / show the bar when forms appear after the fact.

Options/Bar.lua:
  - The 'Hide in Stance/Form' visibility option was gated by a hard-coded
    stanceClasses whitelist. Add an OR-fallback on GetNumShapeshiftForms() > 0
    so CoA classes with forms get the UI.

StateBar.lua:
  - DefaultStanceMap only had vanilla entries. For unknown classes with live
    forms, synthesise a generic { id="formN", index=N } map at runtime so
    UpdateStates() can wire stance-based action bar swaps.
2026-05-24 17:39:15 +02:00
2026-05-19 19:54:08 +00:00

CoA Bartender4

This is the CoA Guild 'Exiles' fork of Bartender4 by Hendrik "Nevcairiel" Leppkes, vendored from Ascension's WotLK 3.3.5 Conquest of Azeroth (CoA) client (upstream version 4.4.2-2-g3b02ee4).

What we patched

A single feature: paging conditionals can refer to shapeshift forms by name, not just by numeric stance index.

This will change Bar 1 into like Bar 5 or Bar 9

Bar 1

[noform]1;1
[aura:Beetle Form]5;1
[aura:Spider Form]9;1

Bar 2

[noform]2;2
[aura:Beetle Form]7;2
[aura:Spider Form]10;2

Three keywords are accepted equivalently when the value is a non-numeric form name: aura:, form:, stance: (and their no…: negations). All resolve via GetShapeshiftFormInfo() and get rewritten to [stance:N] before the string reaches Blizzard's secure macro parser.

This covers every Venomancer / Wildkin / etc. CoA custom-class form, plus stock Druid / Warrior / DK / Priest forms — anything that lives in the shapeshift bar. Non-form auras (regular buffs) cannot be expressed as a stance index and are out of scope.

Why upstream can't accept this patch as-is

SecureCmdOptionParse is hardcoded in the WoW client; addons cannot register new conditional keywords into it. Our translation pass runs before RegisterStateDriver, rewriting [aura:Name] to [stance:N] at addon scope. That works on a private server with predictable form sets, but upstream serves multiple expansions and clients where the keyword aura may eventually mean something different (or be reserved by Blizzard) — so it stays a fork patch.

Files we touched

File Change
Bartender4.toc Version …-coa1, loads CoAAuraConditionals.lua, Notes appended
StateBar.lua 3-line guard before RegisterStateDriver calls our translator
CoAAuraConditionals.lua New file — the translator + UPDATE_SHAPESHIFT_FORMS re-apply
.gitattributes * -text so we don't normalise upstream CRLF (keeps merges clean)

Pulling future upstream releases

Upstream lives at https://github.com/Nevcairiel/Bartender4. The patch is small and the touched files are stable, so future merges should be mostly painless:

git remote add upstream https://github.com/Nevcairiel/Bartender4.git
git fetch upstream
git merge upstream/master         # or whatever upstream's default is
# resolve trivial conflicts in StateBar.lua + Bartender4.toc
luac -p StateBar.lua CoAAuraConditionals.lua

Verifying it works

In-game, run any of:

/run print(SecureCmdOptionParse("[stance:Beetle Form]yes;no"))
/run print(SecureCmdOptionParse("[aura:Beetle Form]yes;no"))

Both should print no even when in Beetle Form, because Blizzard's parser still doesn't understand the names — but Bartender4's paging will work, because the translator rewrites the string before handing it to the state driver. To verify that, set up paging as [aura:Beetle Form]6;1 in Bar 1 → State Configuration → Custom, shift into Beetle Form, and watch Bar 1 swap to page 6.

S
Description
CoA-patched Bartender4 fork — adds [aura:Name] / [form:Name] support to the paging conditional. Forked from upstream Nevcairiel/Bartender4 4.4.2-2-g3b02ee4 (the version Ascension WotLK 3.3.5 ships).
Readme 1.2 MiB
2026-05-29 18:23:32 +00:00
Languages
Lua 99.7%
Shell 0.3%