mod-gold-rush/CHANGELOG.md
Claude 3e84c7bb90 fix: stale ZonePool default + add missing CHANGELOG entries
The hardcoded fallback default for GoldRush.ZonePool still used the
old ZoneName|AreaLabel format after the parser switched to
ZoneName|NodeEntries|BonusEntries. Not a crash risk (BuildNodeEntries
safely no-ops on non-numeric input) but stale and misleading. Cleared
to an empty default -- the real default lives in gold_rush.conf.dist.

Also added CHANGELOG entries for both this PR's zone-specific
resources feature and the earlier null-session broadcast crash fix
(PR #3), neither of which had been logged despite being merged.
2026-09-04 20:22:31 +00:00

84 lines
4.5 KiB
Markdown

# Changelog
All notable changes to `mod-gold-rush` will be documented in this file.
## [Unreleased — hallsworth fork]
### Added
- Per-zone resource nodes. `GoldRush.ZonePool` entries can now carry their own
node and bonus pools (`ZoneName|NodeEntries|BonusEntries`) instead of every
hotspot drawing from one global list -- an event in Un'Goro spawns Un'Goro-
appropriate herbs/ore, Sholazar spawns Northrend resources, etc. `gold_rush.conf.dist`
ships with all ~57 valid WotLK 3.3.5a open-world zones pre-populated (see
`docs/zone-specific-resources-spec.md` for how each zone's resource list was
derived and verified). New `GoldRush.BonusChancePercent` (default 15) config
controls how often a spawn pulls from a zone's rarer bonus pool instead of its
normal one. A zone left without node/bonus data still falls back to the
global `GoldRush.NodeEntries` pool exactly as before.
### Fixed
- Event start/end announcements no longer crash the server. `StartEvent()` and
`EndEvent()` both used `ChatHandler(nullptr).SendWorldText(...)` to broadcast
server-wide -- `ChatHandler::SendWorldText` assumes a real session and calls
`GetSession()->SendPacket()` unconditionally, so a null session was an
immediate null-pointer crash. Confirmed via a symbolized backtrace against a
captured coredump on the live server (two crashes within ~24h). Replaced with
`sWorldSessionMgr->SendServerMessage(SERVER_MSG_STRING, text)`, the session-free
broadcast path the built-in `.announce` GM command uses.
- Bot routing is no longer a silent no-op. `Engine::ChangeStrategy` dispatches on the
first character of the strategy name and ignores anything without a `+`/`-`/`~`/`?`
prefix, so the bare `"new rpg"` calls did nothing. Now sends `"+new rpg"`, and only
to the non-combat engine, which is the only engine `AiFactory` ever adds it to.
- Temporary node lifetime is no longer 1000x too long. The `respawnTime` argument to
`Map::SummonGameObject` reaches `GameObject::SetRespawnTime(int32)`, which is in
seconds; the module was passing milliseconds, turning a 20-minute event into a
~14-day one. Nodes never expired on their own.
- A config reload during a live event no longer orphans its gameobjects. `LoadConfig`
cleared the tracked node list without despawning, leaving nodes in the world with
nothing left to remove them.
- Nodes are placed on real ground. Spawns previously reused the anchor's exact Z for
every scattered X/Y, so on sloped terrain they floated or sank. Placement now probes
ground height, rejects cliffs and lower floors, requires line of sight to the anchor,
and retries a few times before giving up on a node.
### Added
- `GoldRush.RetryMinutes` (default 5), `GoldRush.GraceMinutes` (default 15) and
`GoldRush.MinPlayersOnline` (default 1).
### Changed
- The scheduler no longer collapses to a fixed retry poll on an empty server. Previously
every failed attempt overwrote the rolled Min/MaxInterval with a hard-coded 5 minutes
and stayed there, so the first player to log in got an event announced on top of them
within one retry window. It now holds while the world is below `MinPlayersOnline`, and
waits `GraceMinutes` once the world repopulates before running. GM-forced starts
(`.goldrush start` / `teststart`) bypass both checks.
- Node scatter uses a square-root radius so points spread evenly across the disc
instead of bunching near the anchor.
- `DespawnHotspotNodes` resolves the map once instead of per node, and warns if the
map cannot be resolved.
- Dropped the redundant `SetRespawnTime` / `SetSpawnedByDefault` calls after
`Map::SummonGameObject`, which already does both.
## [Unreleased]
### Added
- Standalone repository documentation in `README.md`.
- Initial `CHANGELOG.md` for tracking module releases.
- Clear documentation that `mod-playerbots` is a required dependency.
- Added a compatibility section describing the AzerothCore + Playerbots
expectations for this module.
### Changed
- Loosened Gold Rush hotspot selection so events can fall back to eligible
live-player zones when configured hotspots are unavailable.
- Improved GM messaging for zone eligibility failures.
- Allowed zone-based fallback when an exact configured sub-area anchor is not
available.
### Fixed
- Fixed `GoldRush.NodeEntries` parsing so configured node IDs are actually
loaded from `gold_rush.conf`.
- Fixed startup behavior where Gold Rush could appear to have no valid node
entries even when configuration values were present.
- Fixed `teststart` and scheduler flows that were overly strict about allowed
zones.