feat(editor): add WPVP JSON round-trip (export/import sidecar)

Closes the JSON round-trip gap on the PvP rank catalog
format shipped this batch. --export-wpvp-json emits all 12
scalar fields plus a dual int + name form for rankKind (5
values) so hand-edits can use either representation.
--import-wpvp-json defaults bracket level to 1..80 (no level
gate) when omitted — matches the typical case for vanilla
honor ranks which weren't level-gated beyond the cap.
Verified byte-identical round-trip on all three preset
emitters (starter / alliance vanilla 9-rank ladder / arena
5-tier ladder). 835 documented CLI flags.
This commit is contained in:
Kelsi 2026-05-09 20:42:21 -07:00
parent e9997ed218
commit 791c8b5dd6
3 changed files with 153 additions and 0 deletions

View file

@ -1583,6 +1583,10 @@ void printUsage(const char* argv0) {
std::printf(" Print WPVP entries (id / kind / threshold / emblem reward / title+chest cross-refs / alliance / horde names)\n");
std::printf(" --validate-wpvp <wpvp-base> [--json]\n");
std::printf(" Static checks: id+name required, kind 0..4, level range valid, faction alt names paired, threshold monotonic within kind, arena>=1500\n");
std::printf(" --export-wpvp-json <wpvp-base> [out.json]\n");
std::printf(" Export binary .wpvp to a human-editable JSON sidecar (defaults to <base>.wpvp.json)\n");
std::printf(" --import-wpvp-json <json-path> [out-base]\n");
std::printf(" Import a .wpvp.json sidecar back into binary .wpvp (accepts rankKind int OR name string; bracket level defaults to 1..80)\n");
std::printf(" --gen-weather-temperate <wow-base> [zoneName]\n");
std::printf(" Emit .wow weather schedule: clear-dominant + occasional rain + fog (forest / grassland)\n");
std::printf(" --gen-weather-arctic <wow-base> [zoneName]\n");