diff --git a/docs/zone-specific-resources-spec.md b/docs/zone-specific-resources-spec.md deleted file mode 100644 index 18fa7c8..0000000 --- a/docs/zone-specific-resources-spec.md +++ /dev/null @@ -1,232 +0,0 @@ -# Zone-specific resource nodes — implementation spec (v2: full zone coverage) - -**This supersedes the original 4-zone version of this spec.** Same -underlying mechanism (see section 3, unchanged), but `GoldRush.ZonePool` -now covers essentially every valid open-world zone in the game instead of -just four, each with resources appropriate to that zone. Any hotspot not -explicitly listed here falls back to the existing global `NodeEntries` -pool, exactly as before. - ---- - -## 0. Zone list validation — do this before using this spec, not after - -The starting zone list for this spec came from a hand-written file that -included several zones that **do not exist in WotLK 3.3.5a** — Cataclysm -additions/renames (Twilight Highlands, Abyssal Depths, Shimmering Expanse, -Kelp'thar Forest, Ruins of Gilneas, the Northern/Southern Barrens split, -"Northern Stranglethorn" as a standalone zone, Uldum as a full zone rather -than a Tanaris subzone, "Ahn'Qiraj: The Fallen Kingdom" which doesn't match -any real zone name). - -**Every zone name below was cross-checked against AzerothCore's own -published `AreaTable.dbc` reference for version 3.3.5a** -(https://www.azerothcore.org/wiki/areatable) — not memory, not assumption. -If this spec is ever extended with more zones later, verify the same way -before adding them; guessing zone names that don't exist in this exact -game version has already cost real time once in this project. - -**Two zones were confirmed real but deliberately excluded** as impractical -for a shared open-world event: -- **Plaguelands: The Scarlet Enclave** — real, but phased, instanced, and - faction-separated (the Death Knight starting experience). An event here - would be invisible to almost every player. -- **Mount Hyjal** — raid-instance content in 3.3.5a, not an open leveling - zone (it didn't become open world until Cataclysm). - -**Hrothgar's Landing** is real and included, but flagged as niche — it's a -small island gated behind Argent Tournament rank progression, so events -there will reach a much smaller audience than the rest of the list. - ---- - -## 1. Resource universe — every entry below verified against live `acore_world.gameobject_template` (type=3) - -### Classic herbs (Eastern Kingdoms / Kalimdor) -| Tier (~level) | Herb | Entries | -|---|---|---| -| 1-10 | Peacebloom | 1618, 3724 | -| 1-10 | Silverleaf | 1617, 3725 | -| 1-10 | Earthroot | 1619, 3726 | -| 10-20 | Mageroyal | 1620, 3727 | -| 15-25 | Briarthorn | 1621, 3729 | -| 15-25 | Stranglekelp (coastal only) | 2045 | -| 15-25 | Bruiseweed | 1622, 3730 | -| 20-30 | Wild Steelbloom | 1623 | -| 20-30 | Kingsblood | 1624 | -| 30-40 | Liferoot | 2041 | -| 30-40 | Fadeleaf | 2042 | -| 35-45 | Goldthorn | 2046 | -| 35-45 | Khadgar's Whisker | 2043 | -| 40-50 | Firebloom | 2866 | -| 44-54 | Purple Lotus | 142140, 180165 | -| 44-54 | Arthas' Tears | 142141, 176642 | -| 44-54 | Sungrass | 142142, 176636, 180164 | -| 44-54 | Blindweed | 142143, 183046 | -| 45-55 | Ghost Mushroom | 142144 | -| 45-55 | Gromsblood | 142145, 176637 | -| 45-55 | Plaguebloom | 176587, 176641 | -| 48-60 | Golden Sansam | 176583, 176638, 180167 | -| 48-60 | Dreamfoil | 176584, 176639, 180168 | -| 48-60 | Mountain Silversage | 176586, 176640, 180166 | -| 48-60 | Icecap | 176588 | -| 48-60 | Firethorn (Un'Goro only) | 191303 | -| 55+ | Black Lotus (rare/bonus) | 176589 | - -### Classic ore -| Tier | Ore | Entries | -|---|---|---| -| 1-15 | Copper Vein | 1731, 2055, 3763, 103713, 181248 | -| 15-25 | Tin Vein | 1732, 2054, 3764, 103711, 181249 | -| 15-25 | Silver Vein | 1733, 105569 | -| 25-35 | Iron Deposit | 1735 | -| 35-45 | Gold Vein | 1734, 150080, 181109 | -| 35-45 | Mithril Deposit | 2040, 150079, 176645 | -| 45-55 | Truesilver Deposit | 2047, 150081, 181108 | -| 50-60 | Small Thorium Vein | 324, 150082, 176643 | -| 50-60 | Rich Thorium Vein (bonus) | 175404 | -| 45-55 | Dark Iron Deposit (Searing Gorge / Burning Steppes only) | 165658 | - -**Note**: no "Rich" variant exists for Copper/Tin/Silver/Iron/Mithril in -this database — confirmed by direct query, not assumed. Only Thorium and -the Outland tiers below got Rich variants in the actual game design. - -### Outland herbs/ore (all zones, ~58-70) -| Herb | Entries | Ore | Entries | -|---|---|---|---| -| Felweed | 181270, 183044 | Fel Iron Deposit | 181555 | -| Dreaming Glory | 181271, 183045 | Adamantite Deposit | 181556 | -| Ragveil (Zangarmarsh-flavored) | 181275, 183043 | Rich Adamantite Deposit (bonus) | 181569, 181570 | -| Terocone (Nagrand/Blade's Edge-flavored) | 181277 | Khorium Vein (bonus) | 181557 | -| Flame Cap | 181276 | | | -| Netherbloom | 181279 | | | -| Nightmare Vine | 181280 | | | -| Mana Thistle | 181281 | | | - -### Northrend herbs/ore (already verified in v1 of this spec) -Goldclover 189973 · Lichbloom 190171 · Icethorn 190172 · Frost Lotus 190176 -· Talandra's Rose 190170 · Adder's Tongue 191019 · Tiger Lily 190169 · -Titanium Vein 191133 · Cobalt Deposit 189978 · Rich Cobalt Deposit 189979 · -Saronite Deposit 189980 · Rich Saronite Deposit 189981 - ---- - -## 2. Full `GoldRush.ZonePool` replacement - -One line per zone, `;`-separated, using the format -`ZoneName|NodeEntries|BonusEntries` (no `AreaLabel` segment — using bare -zone names only, since these came verbatim from the AreaTable.dbc dump and -are guaranteed to resolve; a guessed subzone name could silently drop a -zone from the pool if wrong). - -``` -GoldRush.ZonePool = Dun Morogh|1618;3724;1617;3725;1619;3726;1731;2055;3763|; Elwynn Forest|1618;3724;1617;3725;1619;3726;1731;2055;3763|; Tirisfal Glades|1618;3724;1617;3725;1619;3726;1731;2055;3763|; Durotar|1618;3724;1617;3725;1619;3726;1731;2055;3763|; Teldrassil|1618;3724;1617;3725;1619;3726;1731;2055;3763|; Mulgore|1618;3724;1617;3725;1619;3726;1731;2055;3763|; Azuremyst Isle|1618;3724;1617;3725;1619;3726;1731;2055;3763|; Bloodmyst Isle|1618;3724;1617;3725;1619;3726;1731;2055;3763|; Loch Modan|1620;3727;1621;3729;1731;2055;1732;2054|; Westfall|1620;3727;1621;3729;1731;2055;1732;2054|; Silverpine Forest|1620;3727;1621;3729;1731;2055;1732;2054|; Darkshore|1620;3727;1621;3729;1731;2055;1732;2054|; The Barrens|1620;3727;1621;3729;1731;2055;1732;2054|; Redridge Mountains|1622;3730;1623;1732;2054;1733;105569|; Duskwood|1622;3730;1623;1732;2054;1733;105569|; Ashenvale|1622;3730;1621;3729;1732;2054;1733;105569|; Stranglethorn Vale|1622;3730;1623;2045;1732;2054;1733;105569|; Wetlands|1624;1735|; Hillsbrad Foothills|1624;1735|; Stonetalon Mountains|1624;1735|; Thousand Needles|1624;1735|; The Hinterlands|2041;2042;1735;1734;150080|; Arathi Highlands|2041;2042;1735;1734;150080|; Desolace|2041;2042;1735;1734;150080|; Western Plaguelands|2046;2043;1734;150080;2040;150079|; Swamp of Sorrows|2046;2043;1734;150080;2040;150079|; Dustwallow Marsh|2046;2043;1734;150080;2040;150079|; Badlands|2866;2040;150079;176645|; Searing Gorge|2866;165658;2040;150079;176645|; Feralas|2866;2040;150079;176645|; Blasted Lands|142140;180165;142141;176642;2047;150081;181108|; Burning Steppes|142140;180165;142141;176642;165658;2047;150081;181108|; Tanaris|142142;176636;180164;142143;183046;2047;150081;181108|; Azshara|142140;180165;142141;176642;2047;150081;181108|; Eastern Plaguelands|142144;176587;176641;324;150082;176643;175404|176589; Felwood|142145;176637;324;150082;176643;175404|176589; Silithus|176588;142145;176637;324;150082;176643;175404|176589; Un'Goro Crater|191303;324;150082;176643;175404|176589; Winterspring|142140;180165;142142;176636;180164;324;150082;176643;175404|176589; Isle of Quel'Danas|181270;183044;181271;183045;181279;181555;181556|181557; Hellfire Peninsula|181270;183044;181271;183045;181555;181556|181569;181570; Zangarmarsh|181270;183044;181275;183043;181555;181556|181569;181570; Terokkar Forest|181270;183044;181271;183045;181555;181556|181569;181570; Nagrand|181279;181277;181556|181557; Blade's Edge Mountains|181277;181280;181556|181557; Netherstorm|181280;181281;181276;181557|181557; Shadowmoon Valley|181281;181276;181557|181557; Borean Tundra|189973;191019;189978|189979; Howling Fjord|189973;191019;189978|189979; Dragonblight|190169;190170;189978;189980|189979;189981; Grizzly Hills|190169;190170;189978;189980|189979;189981; Zul'Drak|190171;190172;189980;191133|189981; Storm Peaks|190171;190172;189980;191133|189981; Icecrown|190176;190171;190172;189973;190170;191019;191133|189979;189981; Crystalsong Forest|190176;190171;190172;189973;190170;191019;191133|189979;189981; Sholazar Basin|190171;190172;189973;190170;191019;189978;189979;189980;189981;191133|189979;189981; Hrothgar's Landing|190176;190171;190172;191133|189979;189981 -``` - -**This is long and easy to typo when hand-editing later.** Recommend -keeping a formatted, one-zone-per-line copy in this file (below) as the -source of truth, and only generating the single-line config value from it -mechanically — don't hand-edit the config's one-liner directly for future -changes. - -
-One zone per line (source of truth for future edits) - -``` -Dun Morogh | 1618;3724;1617;3725;1619;3726;1731;2055;3763 -Elwynn Forest | 1618;3724;1617;3725;1619;3726;1731;2055;3763 -Tirisfal Glades | 1618;3724;1617;3725;1619;3726;1731;2055;3763 -Durotar | 1618;3724;1617;3725;1619;3726;1731;2055;3763 -Teldrassil | 1618;3724;1617;3725;1619;3726;1731;2055;3763 -Mulgore | 1618;3724;1617;3725;1619;3726;1731;2055;3763 -Azuremyst Isle | 1618;3724;1617;3725;1619;3726;1731;2055;3763 -Bloodmyst Isle | 1618;3724;1617;3725;1619;3726;1731;2055;3763 -Loch Modan | 1620;3727;1621;3729;1731;2055;1732;2054 -Westfall | 1620;3727;1621;3729;1731;2055;1732;2054 -Silverpine Forest | 1620;3727;1621;3729;1731;2055;1732;2054 -Darkshore | 1620;3727;1621;3729;1731;2055;1732;2054 -The Barrens | 1620;3727;1621;3729;1731;2055;1732;2054 -Redridge Mountains | 1622;3730;1623;1732;2054;1733;105569 -Duskwood | 1622;3730;1623;1732;2054;1733;105569 -Ashenvale | 1622;3730;1621;3729;1732;2054;1733;105569 -Stranglethorn Vale | 1622;3730;1623;2045;1732;2054;1733;105569 -Wetlands | 1624;1735 -Hillsbrad Foothills | 1624;1735 -Stonetalon Mountains | 1624;1735 -Thousand Needles | 1624;1735 -The Hinterlands | 2041;2042;1735;1734;150080 -Arathi Highlands | 2041;2042;1735;1734;150080 -Desolace | 2041;2042;1735;1734;150080 -Western Plaguelands | 2046;2043;1734;150080;2040;150079 -Swamp of Sorrows | 2046;2043;1734;150080;2040;150079 -Dustwallow Marsh | 2046;2043;1734;150080;2040;150079 -Badlands | 2866;2040;150079;176645 -Searing Gorge | 2866;165658;2040;150079;176645 (Dark Iron) -Feralas | 2866;2040;150079;176645 -Blasted Lands | 142140;180165;142141;176642;2047;150081;181108 -Burning Steppes | 142140;180165;142141;176642;165658;2047;150081;181108 (Dark Iron) -Tanaris | 142142;176636;180164;142143;183046;2047;150081;181108 -Azshara | 142140;180165;142141;176642;2047;150081;181108 -Eastern Plaguelands | 142144;176587;176641;324;150082;176643;175404 | bonus: 176589 -Felwood | 142145;176637;324;150082;176643;175404 | bonus: 176589 -Silithus | 176588;142145;176637;324;150082;176643;175404 | bonus: 176589 -Un'Goro Crater | 191303;324;150082;176643;175404 | bonus: 176589 -Winterspring | 142140;180165;142142;176636;180164;324;150082;176643;175404 | bonus: 176589 -Isle of Quel'Danas | 181270;183044;181271;183045;181279;181555;181556 | bonus: 181557 -Hellfire Peninsula | 181270;183044;181271;183045;181555;181556 | bonus: 181569;181570 -Zangarmarsh | 181270;183044;181275;183043;181555;181556 | bonus: 181569;181570 -Terokkar Forest | 181270;183044;181271;183045;181555;181556 | bonus: 181569;181570 -Nagrand | 181279;181277;181556 | bonus: 181557 -Blade's Edge Mountains | 181277;181280;181556 | bonus: 181557 -Netherstorm | 181280;181281;181276;181557 | bonus: 181557 -Shadowmoon Valley | 181281;181276;181557 | bonus: 181557 -Borean Tundra | 189973;191019;189978 | bonus: 189979 -Howling Fjord | 189973;191019;189978 | bonus: 189979 -Dragonblight | 190169;190170;189978;189980 | bonus: 189979;189981 -Grizzly Hills | 190169;190170;189978;189980 | bonus: 189979;189981 -Zul'Drak | 190171;190172;189980;191133 | bonus: 189981 -Storm Peaks | 190171;190172;189980;191133 | bonus: 189981 -Icecrown | 190176;190171;190172;189973;190170;191019;191133 | bonus: 189979;189981 -Crystalsong Forest | 190176;190171;190172;189973;190170;191019;191133 | bonus: 189979;189981 -Sholazar Basin | 190171;190172;189973;190170;191019;189978;189979;189980;189981;191133 | bonus: 189979;189981 -Hrothgar's Landing (niche) | 190176;190171;190172;191133 | bonus: 189979;189981 -``` - -
- ---- - -## 3. Code mechanism (unchanged from v1 — already specced, just restating for completeness) - -- `GoldRushSite` struct (`GoldRush.cpp:44`) needs `std::vector - NodeEntries` and `std::vector BonusEntries`, defaulting empty. -- `BuildSites()` (`GoldRush.cpp:479`) parses the 2nd and 3rd - `|`-delimited segments (in this all-zone-name version, `NodeEntries` is - segment 2 and `BonusEntries` is segment 3, since no `AreaLabel` segment - is used here — adjust the parser accordingly, or use an empty middle - segment as a placeholder if keeping the original 4-segment - `Zone|Area|NodeEntries|BonusEntries` format is preferred for consistency - with a future entry that does want an area label. Pick whichever's - cleaner; document the choice in code comments either way, since the two - format variants look easy to confuse later. -- `SpawnHotspot()` (`GoldRush.cpp:919`) uses `_currentSite.NodeEntries` - when non-empty, falling back to global `_nodeEntries` otherwise. -- Bonus mixing: small per-node chance (`GoldRush.BonusChancePercent`, - ~10-15%) to pull from `_currentSite.BonusEntries` instead of the normal - pool for that one node. -- **Backward compatibility required**: a hotspot with no node/bonus - segments must still fall back to the global pool. - -## 4. Testing - -Given the scale (50+ zones instead of 4), don't try to manually -`.goldrush teststart` every single one before shipping. Reasonable -approach: -- Spot-check one zone per tier (a starting zone, a mid-level zone, a - high-level Classic zone, one Outland zone, one Northrend zone) to - confirm the parsing and per-zone resource selection actually works. -- Confirm the fallback path still works for a hotspot deliberately left - without node/bonus data. -- Trust the DB-verified entry IDs for the rest rather than clicking - through all fifty — the risk at this point is a config-parsing bug - (same for every zone), not a wrong item ID (individually verified above).