54 lines
2.1 KiB
TypeScript
54 lines
2.1 KiB
TypeScript
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<CardGameState, { client: Client, cards: [string], target: string }> {
|
|
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: ''})
|
|
}
|
|
|
|
}
|