Extends the spec from 4 hardcoded hotspots to essentially every valid open-world zone in WotLK 3.3.5a -- ~50 zones total. Every zone name was validated against AzerothCore's own AreaTable.dbc reference for 3.3.5a before being included. The original request list contained several Cataclysm-only zones (Twilight Highlands, Abyssal Depths, Shimmering Expanse, Kelp'thar Forest, Ruins of Gilneas, the Northern/Southern Barrens split) that don't exist in this game version -- those were dropped rather than guessed at. Two zones that do exist (Plaguelands: The Scarlet Enclave, Mount Hyjal) were deliberately excluded as impractical for a shared open-world event (phased/instanced content, not open zones in 3.3.5a). All ~70 resource entry IDs are individually verified against live acore_world.gameobject_template, organized by the real Vanilla/TBC/ WotLK herbalism and mining tier progression -- not guessed from memory. Confirmed, notably, that no 'Rich' ore variant exists for Copper/Tin/Silver/Iron/Mithril in this database (only Thorium+ tiers got them), matching actual game design rather than assuming symmetry across ore tiers. Same underlying code mechanism as v1 (GoldRushSite gains NodeEntries/ BonusEntries, SpawnHotspot prefers per-site pool with fallback to global) -- this commit only expands the data, not the approach.
15 KiB
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)
GoldRushSitestruct (GoldRush.cpp:44) needsstd::vector<uint32> NodeEntriesandstd::vector<uint32> BonusEntries, defaulting empty.BuildSites()(GoldRush.cpp:479) parses the 2nd and 3rd|-delimited segments (in this all-zone-name version,NodeEntriesis segment 2 andBonusEntriesis segment 3, since noAreaLabelsegment is used here — adjust the parser accordingly, or use an empty middle segment as a placeholder if keeping the original 4-segmentZone|Area|NodeEntries|BonusEntriesformat 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.NodeEntrieswhen non-empty, falling back to global_nodeEntriesotherwise.- Bonus mixing: small per-node chance (
GoldRush.BonusChancePercent, ~10-15%) to pull from_currentSite.BonusEntriesinstead 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).