From 7eab582d8a8ee2af1a6baae7baf0696c7005de2e Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Fri, 18 Sep 2026 15:16:44 -0400 Subject: fix: harden triggers, economy, casino, world data, and admin/net paths --- internal/game/cmd_quit.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'internal/game/cmd_quit.go') diff --git a/internal/game/cmd_quit.go b/internal/game/cmd_quit.go index bf46748..249df80 100644 --- a/internal/game/cmd_quit.go +++ b/internal/game/cmd_quit.go @@ -74,7 +74,16 @@ func (g *Game) beginQuitCountdown(sess *net.Session) { g.broadcastAction(sess, "%s sits down to rest.", p.Name) ticksLeft := 10 - id := g.SubscribeTicks(engine.ToTicks(1), func() bool { + var id uint64 + id = g.SubscribeTicks(engine.ToTicks(1), func() bool { + // The engine snapshots its subscribers before firing them, so this + // callback can still run once after cancelRest unsubscribes it. Bail + // out unless this is still the registered countdown, so a quit + // cancelled on the final tick never force-disconnects the player (and + // never forfeits a committed casino wager). + if g.restTimers[p.Name] != id { + return false + } switch ticksLeft { case 10: sess.WriteLine("You sit down to rest...") -- cgit v1.2.3