feat: hold the scheduler on an empty server instead of polling into an ambush

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
This commit is contained in:
Claude 2026-09-03 16:58:04 +00:00
parent 6244e2bc65
commit 2857b0580e
No known key found for this signature in database
3 changed files with 123 additions and 11 deletions

View file

@ -46,6 +46,34 @@ GoldRush.MaxIntervalMinutes = 240
GoldRush.DurationMinutes = 20
#
# GoldRush.RetryMinutes
# Description: How long to wait before trying again when a scheduled event cannot
# start (nobody online, no eligible zone, nowhere to place nodes).
# The rolled Min/MaxInterval is not consumed while holding.
# Default: 5
GoldRush.RetryMinutes = 5
#
# GoldRush.GraceMinutes
# Description: After the server has been sitting below MinPlayersOnline, wait this
# long once it repopulates before running an event. Stops the first
# person to log in from having a Gold Rush announced on top of them.
# Set to 0 to roll a fresh Min/MaxInterval instead.
# Default: 15
GoldRush.GraceMinutes = 15
#
# GoldRush.MinPlayersOnline
# Description: Minimum number of players standing in an event-eligible zone before
# a scheduled event may run. Playerbots count toward this. GM-forced
# starts ignore it.
# Default: 1
GoldRush.MinPlayersOnline = 1
#
# GoldRush.MinNodes
# Description: Minimum number of temporary nodes to spawn in the hotspot