mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-06-21 11:40:42 +00:00
teammode: bots can attack each other now to prevent them from ganging up on players
This commit is contained in:
@@ -124,7 +124,6 @@ export class GameImpl implements Game {
|
||||
this._nations.forEach((n) => this.addPlayer(n.playerInfo));
|
||||
return;
|
||||
}
|
||||
const isDuos = this.config().gameConfig().playerTeams === Duos;
|
||||
const allPlayers = [
|
||||
...this._humans,
|
||||
...this._nations.map((n) => n.playerInfo),
|
||||
|
||||
@@ -20,6 +20,7 @@ import {
|
||||
Attack,
|
||||
BuildableUnit,
|
||||
Cell,
|
||||
ColoredTeams,
|
||||
EmojiMessage,
|
||||
Gold,
|
||||
MessageType,
|
||||
@@ -606,6 +607,9 @@ export class PlayerImpl implements Player {
|
||||
if (this.team() == null || other.team() == null) {
|
||||
return false;
|
||||
}
|
||||
if (this.team() == ColoredTeams.Bot || other.team() == ColoredTeams.Bot) {
|
||||
return false;
|
||||
}
|
||||
return this._team == other.team();
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
import {
|
||||
ColoredTeams,
|
||||
Game,
|
||||
GameMode,
|
||||
PlayerType,
|
||||
} from "../src/core/game/Game";
|
||||
import { playerInfo, setup } from "./util/Setup";
|
||||
|
||||
let game: Game;
|
||||
|
||||
describe("Teams", () => {
|
||||
test("bots are on the same team, but can attack each other", async () => {
|
||||
game = await setup("Plains", { gameMode: GameMode.Team, playerTeams: 2 });
|
||||
|
||||
const bot1 = game.addPlayer(playerInfo("bot1", PlayerType.Bot));
|
||||
const bot2 = game.addPlayer(playerInfo("bot2", PlayerType.Bot));
|
||||
|
||||
// Both bots should be on the same team
|
||||
expect(bot1.team()).toBe(ColoredTeams.Bot);
|
||||
expect(bot2.team()).toBe(ColoredTeams.Bot);
|
||||
|
||||
// But they should be allowed to attack each other.
|
||||
expect(bot1.isOnSameTeam(bot2)).toBe(false);
|
||||
});
|
||||
|
||||
test("humans spawn on different teams", async () => {
|
||||
game = await setup(
|
||||
"Plains",
|
||||
{
|
||||
gameMode: GameMode.Team,
|
||||
playerTeams: 2,
|
||||
},
|
||||
[
|
||||
playerInfo("human1", PlayerType.Human),
|
||||
playerInfo("human2", PlayerType.Human),
|
||||
],
|
||||
);
|
||||
expect(game.player("human1").isOnSameTeam(game.player("human2"))).toBe(
|
||||
false,
|
||||
);
|
||||
});
|
||||
});
|
||||
+17
-3
@@ -1,6 +1,12 @@
|
||||
import fs from "fs/promises";
|
||||
import path from "path";
|
||||
import { Difficulty, GameType } from "../../src/core/game/Game";
|
||||
import {
|
||||
Difficulty,
|
||||
Game,
|
||||
GameType,
|
||||
PlayerInfo,
|
||||
PlayerType,
|
||||
} from "../../src/core/game/Game";
|
||||
import { createGame } from "../../src/core/game/GameImpl";
|
||||
import { genTerrainFromBin } from "../../src/core/game/TerrainMapLoader";
|
||||
import { UserSettings } from "../../src/core/game/UserSettings";
|
||||
@@ -9,7 +15,11 @@ import { generateMap } from "../../src/scripts/TerrainMapGenerator";
|
||||
import { TestConfig } from "./TestConfig";
|
||||
import { TestServerConfig } from "./TestServerConfig";
|
||||
|
||||
export async function setup(mapName: string, _gameConfig: GameConfig = {}) {
|
||||
export async function setup(
|
||||
mapName: string,
|
||||
_gameConfig: GameConfig = {},
|
||||
humans: PlayerInfo[] = [],
|
||||
): Promise<Game> {
|
||||
// Load the specified map
|
||||
const mapPath = path.join(__dirname, "..", "testdata", `${mapName}.png`);
|
||||
const imageBuffer = await fs.readFile(mapPath);
|
||||
@@ -35,5 +45,9 @@ export async function setup(mapName: string, _gameConfig: GameConfig = {}) {
|
||||
const config = new TestConfig(serverConfig, gameConfig, new UserSettings());
|
||||
|
||||
// Create and return the game
|
||||
return createGame([], [], gameMap, miniGameMap, config);
|
||||
return createGame(humans, [], gameMap, miniGameMap, config);
|
||||
}
|
||||
|
||||
export function playerInfo(name: string, type: PlayerType): PlayerInfo {
|
||||
return new PlayerInfo("fr", name, type, null, name);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user