96 lines
3.2 KiB
Markdown
96 lines
3.2 KiB
Markdown
CoA Bartender4
|
|
==============
|
|
|
|
This is the CoA Guild 'Exiles' fork of [Bartender4][upstream] by
|
|
Hendrik "Nevcairiel" Leppkes, vendored from Ascension's WotLK 3.3.5
|
|
Conquest of Azeroth (CoA) client
|
|
(upstream version `4.4.2-2-g3b02ee4`).
|
|
|
|
[upstream]: https://github.com/Nevcairiel/Bartender4
|
|
|
|
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:
|
|
|
|
```bash
|
|
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.
|