diff --git a/src/core/execution/nation/NationAllianceBehavior.ts b/src/core/execution/nation/NationAllianceBehavior.ts index 186a3b556..f98958aaa 100644 --- a/src/core/execution/nation/NationAllianceBehavior.ts +++ b/src/core/execution/nation/NationAllianceBehavior.ts @@ -28,6 +28,13 @@ export class NationAllianceBehavior { handleAllianceRequests() { for (const req of this.player.incomingAllianceRequests()) { + // Alliance Request intents created during the spawn phase are executed on + // the first tick post-spawn phase. With the following condition we reject + // all requests created during the spawn phase. + if (req.createdAt() <= this.game.config().numSpawnPhaseTurns() + 1) { + req.reject(); + continue; + } if (this.getAllianceDecision(req.requestor(), true)) { req.accept(); } else { diff --git a/tests/NationAllianceBehavior.test.ts b/tests/NationAllianceBehavior.test.ts index ea2c74077..b078457cf 100644 --- a/tests/NationAllianceBehavior.test.ts +++ b/tests/NationAllianceBehavior.test.ts @@ -51,6 +51,10 @@ describe("AllianceBehavior.handleAllianceRequests", () => { player, new NationEmojiBehavior(random, game, player), ); + + while (game.inSpawnPhase()) { + game.executeNextTick(); + } }); function setupAllianceRequest({ @@ -59,6 +63,7 @@ describe("AllianceBehavior.handleAllianceRequests", () => { numTilesPlayer = 10, numTilesRequestor = 10, alliancesCount = 0, + createdAtTick = game.ticks() + 1, } = {}) { if (isTraitor) requestor.markTraitor(); @@ -82,7 +87,7 @@ describe("AllianceBehavior.handleAllianceRequests", () => { const mockRequest = { requestor: () => requestor, recipient: () => player, - createdAt: () => 0 as unknown as Tick, + createdAt: () => createdAtTick as unknown as Tick, accept: vi.fn(), reject: vi.fn(), } as unknown as AllianceRequest; @@ -92,6 +97,16 @@ describe("AllianceBehavior.handleAllianceRequests", () => { return mockRequest; } + test("should reject alliance created on first post-spawn tick", () => { + const cutoff = game.config().numSpawnPhaseTurns() + 1; + const request = setupAllianceRequest({ createdAtTick: cutoff }); + + allianceBehavior.handleAllianceRequests(); + + expect(request.accept).not.toHaveBeenCalled(); + expect(request.reject).toHaveBeenCalled(); + }); + test("should accept alliance when all conditions are met", () => { const request = setupAllianceRequest({});