- GoldRushSite gains NodeEntries and BonusEntries vectors.
- GoldRush.ZonePool now uses the 2-segment v2 format:
ZoneName|NodeEntries|BonusEntries.
- AreaLabel segment removed; all zone names resolve directly via AreaTable.dbc.
- Per-node bonus chance controlled by GoldRush.BonusChancePercent (default 15).
- Backward compatibility: zones without entries fall back to global NodeEntries.
- conf/gold_rush.conf.dist updated with full 57-zone pool and BonusChancePercent.
- CHANGELOG.md updated.
Implements docs/zone-specific-resources-spec.md section 3.
Relates to PR #4
AreaTable.dbc names the Sholazar Basin subzone "River's Heart", not "The
River's Heart". ResolveAreaEntry does an exact normalised match, so the
default ZonePool entry never resolved and BuildSites silently dropped it --
the module logged "loaded with 3 hotspot(s)" for a four-entry pool.
Verified against the extracted AreaTable.dbc on the live server: the other
seven zone and area names in the default pool all match exactly.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019vTNrJGsprcjdjjjDJD5ZM
Every failed scheduled start overwrote the rolled Min/MaxInterval with a
hard-coded 5 minutes and never restored it, so on a server that sits empty
the scheduler degenerated into a permanent 5-minute poll. The moment the
first player logged in, an event fired within one retry window and anchored
on their exact position, with a server-wide announcement -- login ambush
rather than a scheduled world event. It also wrote a retry line to
gold-rush.log every 5 minutes forever (Debug defaults to 1).
StartEvent now counts eligible anchors when the schedule expires, holds
without consuming the interval while below MinPlayersOnline, and inserts
GraceMinutes once the world repopulates. The count runs only on schedule
expiry, never per world tick.
New config: GoldRush.RetryMinutes (5), GoldRush.GraceMinutes (15),
GoldRush.MinPlayersOnline (1). GraceMinutes = 0 rolls a fresh interval
instead. GM-forced starts pass scheduled=false and bypass both gates.
Verified with clang -fsyntax-only against the live build's compile flags.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019vTNrJGsprcjdjjjDJD5ZM