From 65724a00c5e5a0e4eb4cb438f139432a72fc484d Mon Sep 17 00:00:00 2001 From: bijx Date: Mon, 15 Jun 2026 23:49:39 -0400 Subject: [PATCH] fix multiplayer --- src/server/GameServer.ts | 7 +++++++ tests/server/GameLifecycle.test.ts | 13 +++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/server/GameServer.ts b/src/server/GameServer.ts index 6b8299008..ae1308698 100644 --- a/src/server/GameServer.ts +++ b/src/server/GameServer.ts @@ -184,6 +184,13 @@ export class GameServer { if (gameConfig.waterNukes !== undefined) { this.gameConfig.waterNukes = gameConfig.waterNukes ?? undefined; } + if (gameConfig.invasionMode !== undefined) { + this.gameConfig.invasionMode = gameConfig.invasionMode; + } + if (gameConfig.invasionGracePeriod !== undefined) { + this.gameConfig.invasionGracePeriod = + gameConfig.invasionGracePeriod ?? undefined; + } this.gameConfig.hostCheats = gameConfig.hostCheats; } diff --git a/tests/server/GameLifecycle.test.ts b/tests/server/GameLifecycle.test.ts index 19661a764..6c1cfd836 100644 --- a/tests/server/GameLifecycle.test.ts +++ b/tests/server/GameLifecycle.test.ts @@ -85,4 +85,17 @@ describe("GameLifecycle", () => { await expect(game.end()).resolves.toBeUndefined(); expect((game as any)._hasEnded).toBe(true); }); + + it("propagates invasion mode settings through updateGameConfig", () => { + // Regression: the host's config update is an allowlist; invasion fields + // must be copied or private matches never start the invasion. + const game = new GameServer("test-game", mockLogger, Date.now(), { + gameType: GameType.Private, + } as any); + + game.updateGameConfig({ invasionMode: true, invasionGracePeriod: 5 }); + + expect((game as any).gameConfig.invasionMode).toBe(true); + expect((game as any).gameConfig.invasionGracePeriod).toBe(5); + }); });