修改吃牌各方法的调用顺序

This commit is contained in:
zhl 2020-12-25 11:57:24 +08:00
parent b6a90db867
commit 93bea66c12
3 changed files with 24 additions and 22 deletions

View File

@ -9,8 +9,8 @@
"debug": "node --require ts-node/register --inspect src/index.ts",
"dev": "DEBUG=colyseus:*,jc:* node --require ts-node/register --inspect src/index.ts",
"dev:less": "DEBUG=colyseus:command,jc:* node --require ts-node/register --inspect=0.0.0.0:9229 src/index.ts",
"dev:jc": "DEBUG=jc:* node --require ts-node/register --inspect=0.0.0.0:9229 src/index.ts",
"dev:robot": "DEBUG=jc:* node --require ts-node/register --inspect=0.0.0.0:9228 src/robot.ts",
"dev:jc": "DEBUG=jc:* node --require ts-node/register src/index.ts",
"dev:robot": "DEBUG=jc:* node --require ts-node/register src/robot.ts",
"loadtest": "colyseus-loadtest loadtest/example.ts --room my_room --numClients 3",
"test": "echo \"Error: no test specified\" && exit 1",
"robot": "node --require ts-node/register --inspect=0.0.0.0:9228 src/robot.ts"

View File

@ -5,7 +5,7 @@ import {Client} from "colyseus";
import {NextSubCommand} from "./NextSubCommand";
import {GameStateConst} from "../../constants/GameStateConst";
import {GameEnv} from "../../cfg/GameEnv";
import {debugRoom} from "../../common/Debug";
import {debugRoom, error} from "../../common/Debug";
import {TurnEndCommand} from "./TurnEndCommand";
import {Card} from "../schema/Card";
import {Wait} from "./Wait";
@ -28,20 +28,24 @@ export class DiscardCommand extends Command<CardGameState, { client: Client, car
this.room.send(client,'discard_card_s2c', {errcode: 1, errmsg: 'player不存在'});
return;
}
if (!gameUtil.checkCardsExists(player.cards, cards)) {
this.room.send(client,'discard_card_s2c', {errcode: 2, errmsg: '要出的牌在手牌中不存在'});
return;
let tmpCards = [];
for (let id of cards) {
if (player.cards.has(id + '')) {
if (!player.cards.get(id + '').number) {
error(`${player.id} 的手牌 ${id} 数据有问题`);
}
tmpCards.push(player.cards.get(id + ''));
} else {
error(`${player.id} 出的牌 ${id} 在手牌中不存在`)
this.room.send(client,'discard_card_s2c', {errcode: 2, errmsg: `要出的牌 ${id} 在手牌中不存在`});
return;
}
}
if (this.state.currentTurn != client.sessionId) {
this.room.send(client,'discard_card_s2c', {errcode: 3, errmsg: '不是当前轮'});
return;
}
let tmpCards = [];
for (let id of cards) {
if (player.cards.has(id + '')) {
tmpCards.push(player.cards.get(id + ''));
}
}
if (!gameUtil.checkDiscard(tmpCards, new GameEnv().selfEatCount)) {
this.room.send(client,'discard_card_s2c', {errcode: 4, errmsg: '出牌不符合规则'});
return;
@ -80,11 +84,11 @@ export class DiscardCommand extends Command<CardGameState, { client: Client, car
}
} else {
let cardArr: Card[] = [...this.state.cards.values()];
this.room.battleMan.onCardLinkOver(player, cardArr);
this.state.updateGameState(GameStateConst.STATE_PICK_PET);
let self = this;
this.room.send(client,'eat_card_s2c', {player: player.id, errcode: 0, errmsg: ''});
this.room.battleMan.onCardLinkOver(player, cardArr);
let time = new GameEnv().playerActTime * 1000 + player.extraTime;
this.state.updateGameState(GameStateConst.STATE_PICK_PET);
// 开启选随从计时, 计时结束后结束当前轮
let timeOverSelectPet = function () {
player.extraTime = 0;

View File

@ -80,28 +80,26 @@ export class EatConfirmCommand extends Command<CardGameState, { timeUp: boolean
player.cardSet.delete(id + '');
}
let cardArr: Card[] = [...this.state.cards.values()];
this.state.updateGameState(GameStateConst.STATE_PICK_PET);
let time = new GameEnv().playerActTime * 1000 + player.extraTime;
let self = this;
// 开启选随从计时, 计时结束后结束当前轮
let timeOverSelectPet = function () {
player.extraTime = 0;
debugRoom('选随从或者法术时间到, 自动出牌, 自动进入下一轮');
self.room.dispatcher.dispatch(new TurnEndCommand());
}
self.room.beginSchedule(time, timeOverSelectPet, `select_pet`);
let fromPlayer = this.state.players.get(this.state.currentTurn);
// 成功后广播吃牌成功消息
let client = this.room.getClient(player.id);
this.room.broadcast('eat_card_s2c', {player: player.id, errcode: 0, errmsg: ''}, {except: client});
this.room.send(client,'eat_card_s2c', {player: player.id, errcode: 0, errmsg: ''});
if (fromPlayer.id !== player.id) {
this.room.battleMan.onCardLinkOver(player, cardArr, fromPlayer);
} else {
this.room.battleMan.onCardLinkOver(player, cardArr);
}
// 成功后广播吃牌成功消息
let client = this.room.getClient(player.id);
this.room.broadcast('eat_card_s2c', {player: player.id, errcode: 0, errmsg: ''}, {except: client});
this.room.send(client,'eat_card_s2c', {player: player.id, errcode: 0, errmsg: ''});
// 开启选随从计时, 计时结束后结束当前轮
this.state.updateGameState(GameStateConst.STATE_PICK_PET);
// 向其他玩家发送吃卡失败的消息
for (let [key, val] of tmpActionMap) {
if (typeof val != 'number' && key !== player.id) {