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

Closes the JSON round-trip gap on the trade skill recipe
catalog format shipped last batch. --export-wtsk-json emits
all 14 scalar fields plus a dual int + name form for
profession, plus a nested reagents[] array — only non-empty
slots are emitted to keep hand-edits compact.
--import-wtsk-json zeroes the reagent slots before parsing
(so a 2-element reagents array correctly clears slots 2 and
3) and accepts profession by either int or name. Verified
byte-identical round-trip on all three preset emitters
(starter / blacksmithing / alchemy — including recipes with
3 reagent slots populated). 754 documented CLI flags.
This commit is contained in:
Kelsi 2026-05-09 19:43:16 -07:00
parent 33a7b4b3cf
commit 77384f600e
3 changed files with 158 additions and 0 deletions

View file

@ -1421,6 +1421,10 @@ void printUsage(const char* argv0) {
std::printf(" Print WTSK entries (id / profession / 4 skill brackets / craft spell / produced item / qty / tool / reagent count / name)\n");
std::printf(" --validate-wtsk <wtsk-base> [--json]\n");
std::printf(" Static checks: id>0+unique, name not empty, profession 0..13, craft spell + produced item required, monotonic skill brackets\n");
std::printf(" --export-wtsk-json <wtsk-base> [out.json]\n");
std::printf(" Export binary .wtsk to a human-editable JSON sidecar with nested reagents (defaults to <base>.wtsk.json)\n");
std::printf(" --import-wtsk-json <json-path> [out-base]\n");
std::printf(" Import a .wtsk.json sidecar back into binary .wtsk (accepts profession int OR name string, reagents array up to 4 slots)\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");