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

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", "debug": "node --require ts-node/register --inspect src/index.ts",
"dev": "DEBUG=colyseus:*,jc:* 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: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:jc": "DEBUG=jc:* node --require ts-node/register src/index.ts",
"dev:robot": "DEBUG=jc:* node --require ts-node/register --inspect=0.0.0.0:9228 src/robot.ts", "dev:robot": "DEBUG=jc:* node --require ts-node/register src/robot.ts",
"loadtest": "colyseus-loadtest loadtest/example.ts --room my_room --numClients 3", "loadtest": "colyseus-loadtest loadtest/example.ts --room my_room --numClients 3",
"test": "echo \"Error: no test specified\" && exit 1", "test": "echo \"Error: no test specified\" && exit 1",
"robot": "node --require ts-node/register --inspect=0.0.0.0:9228 src/robot.ts" "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 {NextSubCommand} from "./NextSubCommand";
import {GameStateConst} from "../../constants/GameStateConst"; import {GameStateConst} from "../../constants/GameStateConst";
import {GameEnv} from "../../cfg/GameEnv"; import {GameEnv} from "../../cfg/GameEnv";
import {debugRoom} from "../../common/Debug"; import {debugRoom, error} from "../../common/Debug";
import {TurnEndCommand} from "./TurnEndCommand"; import {TurnEndCommand} from "./TurnEndCommand";
import {Card} from "../schema/Card"; import {Card} from "../schema/Card";
import {Wait} from "./Wait"; 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不存在'}); this.room.send(client,'discard_card_s2c', {errcode: 1, errmsg: 'player不存在'});
return; return;
} }
if (!gameUtil.checkCardsExists(player.cards, cards)) { let tmpCards = [];
this.room.send(client,'discard_card_s2c', {errcode: 2, errmsg: '要出的牌在手牌中不存在'}); 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; return;
} }
}
if (this.state.currentTurn != client.sessionId) { if (this.state.currentTurn != client.sessionId) {
this.room.send(client,'discard_card_s2c', {errcode: 3, errmsg: '不是当前轮'}); this.room.send(client,'discard_card_s2c', {errcode: 3, errmsg: '不是当前轮'});
return; 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)) { if (!gameUtil.checkDiscard(tmpCards, new GameEnv().selfEatCount)) {
this.room.send(client,'discard_card_s2c', {errcode: 4, errmsg: '出牌不符合规则'}); this.room.send(client,'discard_card_s2c', {errcode: 4, errmsg: '出牌不符合规则'});
return; return;
@ -80,11 +84,11 @@ export class DiscardCommand extends Command<CardGameState, { client: Client, car
} }
} else { } else {
let cardArr: Card[] = [...this.state.cards.values()]; let cardArr: Card[] = [...this.state.cards.values()];
this.room.battleMan.onCardLinkOver(player, cardArr);
this.state.updateGameState(GameStateConst.STATE_PICK_PET);
let self = this; let self = this;
this.room.send(client,'eat_card_s2c', {player: player.id, errcode: 0, errmsg: ''}); 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; let time = new GameEnv().playerActTime * 1000 + player.extraTime;
this.state.updateGameState(GameStateConst.STATE_PICK_PET);
// 开启选随从计时, 计时结束后结束当前轮 // 开启选随从计时, 计时结束后结束当前轮
let timeOverSelectPet = function () { let timeOverSelectPet = function () {
player.extraTime = 0; player.extraTime = 0;

View File

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