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.
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.