feat(pipeline): WAUH auction house config catalog (139th open format)

Novel replacement for the implicit per-faction auction-house
policy vanilla WoW carried in AuctionHouse.dbc + the hard-
coded deposit/cut rate constants in the server's AuctionMgr
(the 5% Alliance/Horde rate vs 15% neutral Booty Bay rate
was hard-coded on AH faction id). Each WAUH entry binds one
auction house instance to its faction-access rules,
deposit-rate (% of vendor sell price held as deposit), AH cut
(% taken from final sale price before crediting seller),
allowed listing durations (min/max hours), per-slot copper
fee, and the auctioneer NPC binding.

Three presets capturing canonical vanilla AH instances:
  --gen-auh-stormwind  Alliance Stormwind Trade District AH
                       with 5%/5% deposit/cut rates, 12-48hr
                       listing tiers, NPC Auctioneer Tricket
                       (creatureId 8666)
  --gen-auh-orgrimmar  Horde Orgrimmar Valley of Strength AH
                       with same vanilla rates as Stormwind,
                       NPC Auctioneer Tahesh (9856)
  --gen-auh-bootybay   Neutral Booty Bay AH with the famous
                       15%/15% penalty rates, NPC Auctioneer
                       Beardo (9858)

Validator catches: id+name required, factionAccess 0..3,
depositRatePct + cutPct each in 0..10000 (basis points), no
duplicate ahIds, no duplicate (faction,name) pairs (UI tab
dispatch tie), no duplicate npcAuctioneerId (gossip dispatch
tie), maxListingDurationHours > 0 and minListing <= maxListing.
CRITICAL: combined depositRatePct + cutPct < 10000 (else
seller would lose money on every successful sale — economic
trap). Warns on combined > 50% (sellers may abandon AH;
verify intentional like neutral AH penalty).

Format count 138 -> 139. CLI flag count 1445 -> 1452.
This commit is contained in:
Kelsi 2026-05-10 05:16:25 -07:00
parent e49567da3c
commit 4b63025e4a
10 changed files with 732 additions and 0 deletions

View file

@ -2699,6 +2699,16 @@ void printUsage(const char* argv0) {
std::printf(" Export binary .wprc to a human-editable JSON sidecar (defaults to <base>.wprc.json; emits triggerEvent as int + name string)\n");
std::printf(" --import-wprc-json <json-path> [out-base]\n");
std::printf(" Import a .wprc.json sidecar back into binary .wprc (triggerEvent int OR \"onhit\"/\"oncrit\"/\"oncast\"/\"ontakedamage\"/\"onheal\"/\"ondodge\"/\"onparry\"/\"onblock\"/\"onkill\" — round-trips proc rule tables byte-identical)\n");
std::printf(" --gen-auh-stormwind <wauh-base> [name]\n");
std::printf(" Emit .wauh Stormwind Trade District AH (Alliance, vanilla 5%% deposit + 5%% cut + 12-48hr durations, NPC Auctioneer Tricket 8666)\n");
std::printf(" --gen-auh-orgrimmar <wauh-base> [name]\n");
std::printf(" Emit .wauh Orgrimmar Valley of Strength AH (Horde, same vanilla rates as Stormwind, NPC Auctioneer Tahesh 9856)\n");
std::printf(" --gen-auh-bootybay <wauh-base> [name]\n");
std::printf(" Emit .wauh Booty Bay Neutral AH (Neutral cross-faction, famous 15%% deposit + 15%% cut penalty rates, NPC Auctioneer Beardo 9858)\n");
std::printf(" --info-wauh <wauh-base> [--json]\n");
std::printf(" Print WAUH entries (id / faction / depositPct / cutPct / hour range / fee / npcAuctioneerId / name)\n");
std::printf(" --validate-wauh <wauh-base> [--json]\n");
std::printf(" Static checks: id+name required, factionAccess 0..3, depositRatePct + cutPct each in 0..10000 (basis points), no duplicate ahIds, no duplicate (faction,name) pairs, no duplicate npcAuctioneerId (gossip dispatch tie), maxListingDuration > 0 and minListing <= maxListing; CRITICAL: combined depositRatePct + cutPct < 10000 (else seller loses money on every sale). Warns on combined > 50%% (sellers may abandon AH; verify intentional like neutral AH penalty)\n");
std::printf(" --catalog-pluck <wXXX-file> <id> [--json]\n");
std::printf(" Extract one entry by id from any registered catalog format. Auto-detects magic, dispatches to the per-format --info-* handler internally, then prints just the matching entry. Primary-key field is auto-detected (first *Id field, or first numeric)\n");
std::printf(" --catalog-find <directory> <id> [--magic <WXXX>] [--json]\n");