diff --git a/src/client/graphics/layers/MainRadialMenu.ts b/src/client/graphics/layers/MainRadialMenu.ts index 3151c6a48..c0b707577 100644 --- a/src/client/graphics/layers/MainRadialMenu.ts +++ b/src/client/graphics/layers/MainRadialMenu.ts @@ -134,7 +134,9 @@ export class MainRadialMenu extends LitElement implements Layer { }; const isFriendlyTarget = - recipient !== null && recipient.isFriendly(myPlayer); + recipient !== null && + recipient.isFriendly(myPlayer) && + !recipient.isDisconnected(); this.radialMenu.setCenterButtonAppearance( isFriendlyTarget ? donateTroopIcon : swordIcon, diff --git a/src/client/graphics/layers/RadialMenuElements.ts b/src/client/graphics/layers/RadialMenuElements.ts index 1dcf3eb90..0cf28cebb 100644 --- a/src/client/graphics/layers/RadialMenuElements.ts +++ b/src/client/graphics/layers/RadialMenuElements.ts @@ -117,6 +117,14 @@ function isFriendlyTarget(params: MenuElementParams): boolean { return isFriendly.call(selectedPlayer, params.myPlayer); } +function isDisconnectedTarget(params: MenuElementParams): boolean { + const selectedPlayer = params.selected; + if (selectedPlayer === null) return false; + const isDisconnected = (selectedPlayer as PlayerView).isDisconnected; + if (typeof isDisconnected !== "function") return false; + return isDisconnected.call(selectedPlayer); +} + // eslint-disable-next-line @typescript-eslint/no-unused-vars const infoChatElement: MenuElement = { id: "info_chat", @@ -571,7 +579,7 @@ export const centerButtonElement: CenterButtonElement = { return false; } - if (isFriendlyTarget(params)) { + if (isFriendlyTarget(params) && !isDisconnectedTarget(params)) { return !params.playerActions.interaction?.canDonateTroops; } @@ -581,7 +589,7 @@ export const centerButtonElement: CenterButtonElement = { if (params.game.inSpawnPhase()) { params.playerActionHandler.handleSpawn(params.tile); } else { - if (isFriendlyTarget(params)) { + if (isFriendlyTarget(params) && !isDisconnectedTarget(params)) { const selectedPlayer = params.selected as PlayerView; const ratio = params.uiState?.attackRatio ?? 1; const troopsToDonate = Math.floor(ratio * params.myPlayer.troops()); @@ -626,7 +634,7 @@ export const rootMenuElement: MenuElement = { : [ boatMenuElement, ally, - isFriendlyTarget(params) + isFriendlyTarget(params) && !isDisconnectedTarget(params) ? donateGoldRadialElement : attackMenuElement, ]),