mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-05-10 19:13:52 +00:00
feat(editor): add WHRD (Heroic Loot Scaling) — 108th open format
Novel replacement for the implicit Heroic-mode loot rules vanilla WoW encoded in dungeon/raid script systems: a Normal-mode boss drops items from one loot table, the Heroic-mode version drops the same items at +N item levels with M× drop chance plus an optional Heroic-only currency token. Each WHRD entry binds one (mapId, difficultyId) combination to its scaling rules so the loot-roll engine can layer the modifiers over the base WLOT loot table at encounter death. Six tunable fields per scaling: itemLevelDelta (signed int16, typically +13 for 5-man Heroic, +13 to +26 for raid Heroic), bonusQualityChance (basis points 0..10000 for the probability of a +1-quality-tier bonus drop), dropChanceMultiplier (float, 1.0 = same rate, 1.5 = +50%), heroicTokenItemId (per-tier currency reward like Emblem of Frost), bonusEmblemCount (extra emblems on top of base 1× per boss). mapId=0 is a wildcard that applies the scaling to ANY map at the given difficultyId — used by the ChallengeMode preset to define generic Bronze/Silver/ Gold tier scalings without naming each instance. Three preset emitters: makeWotLK5manHeroic (5 WotLK 5-man Heroics: Utgarde Keep, Nexus, Azjol-Nerub, Ahn'kahet, Drak'Tharon — all +13/2× Emblem of Heroism), makeRaid25Heroic (4 25H raids: Naxx +13, EoE +13, Ulduar +26, ICC +26 with corresponding Conquest/Triumph/ Frost emblems), makeChallengeMode (3 anachronistic challenge-mode tiers as a template for custom servers backporting MoP-era systems). Validator's most novel checks are bounds-aware: bonusQualityChance capped at 10000 basis points (above that would guarantee multiple bonus drops), no negative itemLevelDelta (Heroic shouldn't be worse than Normal — warning, not error), no >50 ilvl delta (beyond canonical range — warning), no zero or excessive dropChance- Multiplier, AND (mapId, difficultyId) tuple uniqueness unless mapId=0 wildcard (multiple scalings binding the same instance+difficulty would make loot-roll lookup ambiguous). Format count 107 -> 108. CLI flag count 1175 -> 1180.
This commit is contained in:
parent
81070c470c
commit
ede6fb9c3a
10 changed files with 729 additions and 0 deletions
|
|
@ -2261,6 +2261,16 @@ void printUsage(const char* argv0) {
|
|||
std::printf(" Print WPTT entries (id / tree / tier / column / max ranks / prereq talentId / loyalty req / name) plus per-talent rank-spell IDs\n");
|
||||
std::printf(" --validate-wptt <wptt-base> [--json]\n");
|
||||
std::printf(" Static checks: id+name required, treeKind 0..2, tier 0..6, column 0..2, maxRank 1..5, no duplicate talentIds, no two talents in same (tree,tier,col) cell, no self-referencing prereqs, prereqs resolve to existing entries IN SAME TREE at EARLIER TIER, spellIdsByRank.size() == maxRank, no zero-spell-id within array\n");
|
||||
std::printf(" --gen-hrd <whrd-base> [name]\n");
|
||||
std::printf(" Emit .whrd 5 WotLK 5-man Heroic scalings (Utgarde Keep / Nexus / Azjol-Nerub / Ahn'kahet / Drak'Tharon — +13 ilvl, 2x Emblem of Heroism)\n");
|
||||
std::printf(" --gen-hrd-raid25 <whrd-base> [name]\n");
|
||||
std::printf(" Emit .whrd 4 WotLK 25H raid scalings (Naxx +13 / EoE +13 / Ulduar +26 / ICC +26 ilvl, 1.5x rare drop chance, +1 Emblem of Conquest/Triumph/Frost)\n");
|
||||
std::printf(" --gen-hrd-cm <whrd-base> [name]\n");
|
||||
std::printf(" Emit .whrd 3 challenge-mode tier scalings (Bronze +13/Silver +20/Gold +26 ilvl) — anachronistic for WotLK but useful template for custom-server backports\n");
|
||||
std::printf(" --info-whrd <whrd-base> [--json]\n");
|
||||
std::printf(" Print WHRD entries (id / map / difficulty / +ilvl / bonus quality %% / drop multiplier / token id / extra emblems / name)\n");
|
||||
std::printf(" --validate-whrd <whrd-base> [--json]\n");
|
||||
std::printf(" Static checks: id+name required, difficultyId>0 (Normal=0 by convention), bonusQualityChance<=10000 basis points, dropChanceMultiplier>0, no duplicate scalingIds, no two scalings binding the same (mapId,difficultyId) tuple unless mapId=0 wildcard; warns on negative ilvlDelta (Heroic worse than Normal?), ilvl>50 (beyond canonical range), drop multiplier>10x\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");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue