From 7a3ecf7c70c48a7fc62a3e126fb97f9a36aa10dc Mon Sep 17 00:00:00 2001 From: zhl Date: Tue, 16 Mar 2021 14:11:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A6=82=E6=9E=9Cstate.cards=E4=B8=AD=E6=9C=89?= =?UTF-8?q?=E5=8D=A1,=20=E4=B8=94=E5=8D=A1=E7=9A=84owner=E6=98=AF=E4=B8=8B?= =?UTF-8?q?=E4=B8=80=E8=BD=AE=E7=9A=84=E7=8E=A9=E5=AE=B6,=20=E9=82=A3?= =?UTF-8?q?=E4=B9=88=E6=B8=85=E7=A9=BAcards?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/global.d.ts | 5 +++++ src/rooms/GeneralRoom.ts | 9 +++++++++ src/rooms/commands/TurnEndCommand.ts | 10 ++++++++++ 3 files changed, 24 insertions(+) diff --git a/src/global.d.ts b/src/global.d.ts index e608bd3..15021d0 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -329,6 +329,11 @@ declare module 'colyseus' { * @return {Player} */ getPlayerByIdx(idx: number): Player; + + /** + * 获取下一个玩家 + */ + nextPlayer(): string; } } diff --git a/src/rooms/GeneralRoom.ts b/src/rooms/GeneralRoom.ts index 16ed0f6..7d5dc67 100644 --- a/src/rooms/GeneralRoom.ts +++ b/src/rooms/GeneralRoom.ts @@ -421,4 +421,13 @@ export class GeneralRoom extends Room { } return results } + + nextPlayer(): string { + const players = [...this.state.players.values()]; + players.sort((a, b) => a.idx - b.idx); + const sessionIds = players.map(p => p.id); + return (this.state.currentTurn) + ? sessionIds[(sessionIds.indexOf(this.state.currentTurn) + 1) % sessionIds.length] + : sessionIds[0] + } } diff --git a/src/rooms/commands/TurnEndCommand.ts b/src/rooms/commands/TurnEndCommand.ts index ebd6c10..84b9de9 100644 --- a/src/rooms/commands/TurnEndCommand.ts +++ b/src/rooms/commands/TurnEndCommand.ts @@ -40,6 +40,16 @@ export class TurnEndCommand extends Command { player.statData.set(StateTypeEnum.MAXAP, maxAp); player.statData.set(StateTypeEnum.MAXSAP, maxsAp); } + // 如果state.cards中有卡, 且卡的owner是下一轮的玩家, 那么清空cards + // 20200316 添加 + if (this.state.cards.size > 0) { + const nextPid = this.room.nextPlayer() + const targetCard = [...this.state.cards.values()][0] + if (targetCard.owner == nextPid) { + this.state.cards.clear() + } + } + // 判断是否胜利 let result = gameUtil.checkGameEnd(this.state); if (result) {