Files
DevelopingTom 585cf8fdb8 Fix dead players sending alliance requests (#1508)
## Description:

Prevent unholly alliances with the undead.

## Please complete the following:

- [x] I have added screenshots for all UI updates
- [x] I process any text displayed to the user through translateText()
and I've added it to the en.json file
- [x] I have added relevant tests to the test directory
- [x] I confirm I have thoroughly tested these changes and take full
responsibility for any bugs introduced
- [x] I have read and accepted the CLA aggreement (only required once).

## Please put your Discord username so you can be contacted if a bug or
regression is found:

IngloriousTom
2025-07-20 04:13:36 -04:00

111 lines
3.0 KiB
TypeScript

import {
Game,
Player,
PlayerInfo,
PlayerType,
UnitType,
} from "../src/core/game/Game";
import { setup } from "./util/Setup";
let game: Game;
let player: Player;
let other: Player;
describe("PlayerImpl", () => {
beforeEach(async () => {
game = await setup(
"plains",
{
instantBuild: true,
},
[
new PlayerInfo("player", PlayerType.Human, null, "player_id"),
new PlayerInfo("other", PlayerType.Human, null, "other_id"),
],
);
while (game.inSpawnPhase()) {
game.executeNextTick();
}
player = game.player("player_id");
player.addGold(BigInt(1000000));
other = game.player("other_id");
game.config().structureMinDist = () => 10;
});
test("City can be upgraded", () => {
const city = player.buildUnit(UnitType.City, game.ref(0, 0), {});
const buCity = player
.buildableUnits(game.ref(0, 0))
.find((bu) => bu.type === UnitType.City);
expect(buCity).toBeDefined();
expect(buCity!.canUpgrade).toBe(city.id());
});
test("DefensePost cannot be upgraded", () => {
player.buildUnit(UnitType.DefensePost, game.ref(0, 0), {});
const buDefensePost = player
.buildableUnits(game.ref(0, 0))
.find((bu) => bu.type === UnitType.DefensePost);
expect(buDefensePost).toBeDefined();
expect(buDefensePost!.canUpgrade).toBeFalsy();
});
test("City can be upgraded from another city", () => {
const city = player.buildUnit(UnitType.City, game.ref(0, 0), {});
const cityToUpgrade = player.findUnitToUpgrade(
UnitType.City,
game.ref(0, 1),
);
expect(cityToUpgrade).toBeTruthy();
if (cityToUpgrade === false) {
return;
}
expect(cityToUpgrade.id()).toBe(city.id());
});
test("City cannot be upgraded when too far away", () => {
player.buildUnit(UnitType.City, game.ref(0, 0), {});
const cityToUpgrade = player.findUnitToUpgrade(
UnitType.City,
game.ref(50, 50),
);
expect(cityToUpgrade).toBe(false);
});
test("Unit cannot be upgraded when not enough gold", () => {
player.buildUnit(UnitType.City, game.ref(0, 0), {});
player.removeGold(BigInt(1000000));
const cityToUpgrade = player.findUnitToUpgrade(
UnitType.City,
game.ref(0, 1),
);
expect(cityToUpgrade).toBe(false);
});
test("Destination ports chances scale with level", () => {
game.config().proximityBonusPortsNb = () => 0;
player.conquer(game.ref(10, 10));
const playerPort = player.buildUnit(UnitType.Port, game.ref(10, 10), {});
other.conquer(game.ref(0, 0));
const otherPort = other.buildUnit(UnitType.Port, game.ref(0, 0), {});
otherPort.increaseLevel();
otherPort.increaseLevel();
const ports = player.tradingPorts(playerPort);
expect(ports.length).toBe(3);
});
test("Can't send alliance requests when dead", () => {
// conquer other
const otherTiles = other.tiles();
for (const tile of otherTiles) {
player.conquer(tile);
}
expect(other.canSendAllianceRequest(player)).toBe(false);
});
});