import {Command} from "@colyseus/command"; import {CardGameState} from "../schema/CardGameState"; import {Client} from "colyseus"; import gameUtil from "../../utils/game.util"; import {GameStateConst} from "../../constants/GameStateConst"; /** * 吃牌 */ export class EatCardCommand extends Command { execute({ client, cards, target } = this.payload) { const player = this.state.players.get(client.sessionId); if (!player) { client.send('eat_card_s2c', {errcode: 1, errmsg: 'player不存在或者'}); return; } if (!gameUtil.checkCardsExists(player.cards, cards)) { client.send('eat_card_s2c', {errcode: 2, errmsg: '要出的牌在手牌中不存在'}); return; } if (this.state.currentTurn == client.sessionId) { client.send('eat_card_s2c', {errcode: 3, errmsg: '不能吃自己的牌'}); return; } if (!this.state.cards.has(target + '')) { client.send('eat_card_s2c', {errcode: 4, errmsg: '找不到要吃的牌'}); return; } let tmpCards = []; for (let id of cards) { tmpCards.push(player.cards.get(id + '')); } tmpCards.push(this.state.cards.get(target + '')); if (!gameUtil.checkDiscard(tmpCards)) { client.send('discard_card_s2c', {errcode: 5, errmsg: '不符合吃牌规则'}); return; } if (this.state.gameState !== GameStateConst.STATE_BEGIN_EAT) { client.send('discard_card_s2c', {errcode: 6, errmsg: '已经被别人吃了'}); return; } for (let id of cards) { this.state.cards.set(id+'', player.cards.get(id + '')); player.cards.delete(id + ''); player.cardSet.delete(id+''); } this.state.gameState = GameStateConst.STATE_PICK_PET; //TODO:: 调用 onCardLinkReady() // 成功后广播吃牌成功消息 this.room.broadcast('eat_card_s2c', {player: client.sessionId, errocode: 0, errmsg: ''}) } }