diff options
| author | historia <[not public]> | 2026-09-18 05:31:09 -0400 |
|---|---|---|
| committer | historia <[not public]> | 2026-09-18 05:31:09 -0400 |
| commit | 153acb7f644d755c45533b7c5311e3ffa47e8973 (patch) | |
| tree | 7645e6f7b65bc3830b078e3b9336d2e6b199d584 /internal/game/sys_triggers.go | |
| parent | 87d08f0151e643951769e323995f1c5ed89ee200 (diff) | |
| download | thehouseoficarus-153acb7f644d755c45533b7c5311e3ffa47e8973.tar.gz | |
fix: harden engine across casino, economy, concurrency, security, and content
Diffstat (limited to 'internal/game/sys_triggers.go')
| -rw-r--r-- | internal/game/sys_triggers.go | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/internal/game/sys_triggers.go b/internal/game/sys_triggers.go index 2dbde9f..312fe50 100644 --- a/internal/game/sys_triggers.go +++ b/internal/game/sys_triggers.go @@ -4,6 +4,7 @@ import ( "fmt" "os" "path/filepath" + "sort" "strings" "sync" @@ -98,9 +99,17 @@ func (g *Game) startSequence(sess *net.Session, p *player.Player, steps []behavi // sequences are removed. func (g *Game) SequenceTick() { g.seqMu.Lock() - playerSeqs := make([]*sequence, 0, len(g.sequences)) - for _, s := range g.sequences { - playerSeqs = append(playerSeqs, s) + // g.sequences is a map: collect its keys and sort them so the per-tick + // order in which simultaneous sequences advance is reproducible (the + // determinism contract in building_guide/tick_order.md). + keys := make([]string, 0, len(g.sequences)) + for key := range g.sequences { + keys = append(keys, key) + } + sort.Strings(keys) + playerSeqs := make([]*sequence, 0, len(keys)) + for _, key := range keys { + playerSeqs = append(playerSeqs, g.sequences[key]) } globalSeqs := append([]*sequence(nil), g.globalSeqs...) g.seqMu.Unlock() |
