diff --git a/TODO.txt b/TODO.txt index 2f0a68eac..20cbacd16 100644 --- a/TODO.txt +++ b/TODO.txt @@ -132,7 +132,7 @@ * auto reject alliance when event dissapears DONE 9/20/2024 * first place has crown DONE 9/20/2024 * can't attack ally DONE 9/20/2024 -* add updates to eventbox: boats (max count, too far) +* add updates to eventbox: boats (max count, too far) DONE 9/20/2024 * make alliances expire * color code events * broken alliances diff --git a/src/client/graphics/layers/EventsDisplay.ts b/src/client/graphics/layers/EventsDisplay.ts index cbe8f334e..446ceda08 100644 --- a/src/client/graphics/layers/EventsDisplay.ts +++ b/src/client/graphics/layers/EventsDisplay.ts @@ -1,6 +1,6 @@ import {nullable} from "zod"; import {EventBus, GameEvent} from "../../../core/EventBus"; -import {AllianceRequest, AllianceRequestEvent, AllianceRequestReplyEvent, BrokeAllianceEvent as BrokenAllianceEvent, Game} from "../../../core/game/Game"; +import {AllianceRequest, AllianceRequestEvent, AllianceRequestReplyEvent, BrokeAllianceEvent as BrokenAllianceEvent, Game, PlayerID} from "../../../core/game/Game"; import {ClientID} from "../../../core/Schemas"; import {Layer} from "./Layer"; @@ -19,7 +19,11 @@ export enum MessageType { } export class DisplayMessageEvent implements GameEvent { - constructor(public readonly message: string, public readonly type: MessageType) { } + constructor( + public readonly message: string, + public readonly type: MessageType, + public readonly playerID: PlayerID | null = null + ) { } } interface Event { @@ -88,6 +92,18 @@ export class EventsDisplay implements Layer { } onDisplayMessageEvent(event: DisplayMessageEvent) { + if (event.playerID != null) { + const myPlayer = this.game.playerByClientID(this.clientID) + if (myPlayer == null) { + return + } + if (myPlayer == null) { + return + } + if (myPlayer.id() != event.playerID) { + return + } + } this.addEvent({ description: event.message, createdAt: this.game.ticks(), diff --git a/src/core/execution/BoatAttackExecution.ts b/src/core/execution/BoatAttackExecution.ts index 77ca3a593..110f4f625 100644 --- a/src/core/execution/BoatAttackExecution.ts +++ b/src/core/execution/BoatAttackExecution.ts @@ -51,7 +51,7 @@ export class BoatAttackExecution implements Execution { this.attacker = mg.player(this.attackerID) if (this.attacker.boats().length >= mg.config().boatMaxNumber()) { - mg.displayMessage(`No boats available, max ${mg.config().boatMaxNumber()}`, MessageType.WARN) + mg.displayMessage(`No boats available, max ${mg.config().boatMaxNumber()}`, MessageType.WARN, this.attackerID) this.active = false this.attacker.addTroops(this.troops) return @@ -78,7 +78,7 @@ export class BoatAttackExecution implements Execution { return } if (manhattanDistWrapped(this.src.cell(), this.dst.cell(), mg.width()) > mg.config().boatMaxDistance()) { - mg.displayMessage(`Cannot send boat: destination is too far away`, MessageType.WARN) + mg.displayMessage(`Cannot send boat: destination is too far away`, MessageType.WARN, this.attackerID) this.active = false return } diff --git a/src/core/game/Game.ts b/src/core/game/Game.ts index c648cfe93..480ca2aea 100644 --- a/src/core/game/Game.ts +++ b/src/core/game/Game.ts @@ -182,7 +182,7 @@ export interface Game { inSpawnPhase(): boolean addExecution(...exec: Execution[]): void config(): Config - displayMessage(message: string, type: MessageType): void + displayMessage(message: string, type: MessageType, playerID: PlayerID | null): void } export interface MutableGame extends Game {