修改掉线逻辑,增加赢牌的gm命令

This commit is contained in:
zhl 2020-12-14 18:04:00 +08:00
parent 204f4fec3e
commit 4f06b539e7
3 changed files with 32 additions and 18 deletions

View File

@ -100,22 +100,22 @@ export class GeneralRoom extends Room {
}
//TODO: 掉线逻辑
async onLeave (client: Client, consented: boolean) {
// this.state.players.get(client.sessionId).state = PlayerStateConst.PLAYER_OFFLINE;
//
// try {
// if (consented) {
// throw new Error("consented leave");
// }
// await this.allowReconnection(client, 60);
// this.state.players.get(client.sessionId).state = PlayerStateConst.PLAYER_NORMAL;
//
// } catch (e) {
// this.state.players.delete(client.sessionId);
// }
//TODO: 检查重新开始后, gameState
if (this.state.gameState === GameStateConst.STATE_GAME_OVER) {
this.state.players.delete(client.id);
this.bUserLeft(client.id);
this.state.players.delete(client.sessionId);
this.bUserLeft(client.sessionId);
} else {
this.state.players.get(client.sessionId).state = PlayerStateConst.PLAYER_OFFLINE;
try {
if (consented) {
throw new Error("consented leave");
}
await this.allowReconnection(client, 60);
this.state.players.get(client.sessionId).state = PlayerStateConst.PLAYER_NORMAL;
} catch (e) {
debugRoom(`player realy level :${client.sessionId}`);
this.state.players.delete(client.sessionId);
}
}
}
@ -209,8 +209,8 @@ export class GeneralRoom extends Room {
}
}
addRobot() {
const sessionId = generateId();
addRobot(playerId?: string) {
const sessionId = playerId || generateId();
let client = new RobotClient(sessionId, this.state, this.clock, this['onMessageHandlers']);
if (this.reservedSeatTimeouts[sessionId]) {
clearTimeout(this.reservedSeatTimeouts[sessionId]);

View File

@ -2,6 +2,7 @@ import {Command} from "@colyseus/command";
import {CardGameState} from "../schema/CardGameState";
import {Client} from "colyseus";
import {debugRoom, error} from "../../common/Debug";
import {GameResultCommand} from "./GameResultCommand";
export class GMCommand extends Command<CardGameState, {client: Client, message: string}> {
@ -28,6 +29,9 @@ export class GMCommand extends Command<CardGameState, {client: Client, message:
case 'addcard':
this.addCard(arr[1]);
break;
case 'setwin':
this.setWin(arr[1]);
break;
case 'help':
this.sendHelp(client, arr[1]);
break;
@ -45,6 +49,7 @@ export class GMCommand extends Command<CardGameState, {client: Client, message:
str += '抽一定数量的卡, 注意类型和效果id的搭配: draw:玩家index|数量|类型|效果id|点数 例: draw:0|3 or draw:0|1|1|20011|2 \n';
str += '更新英雄血量: herohp:玩家index|血量 例: herohp:0|500 \n';
str += '生成几张特定效果的卡: addcard:玩家index|效果卡id|数量 例: addcard:0|20011|1\n';
str += '将某一队设为赢家: setwin:队伍index 例: setwin:0\n';
client && client.send('notice_msg', str);
}
@ -152,4 +157,13 @@ export class GMCommand extends Command<CardGameState, {client: Client, message:
let count = parseInt(arr[1]);
this.room.updateHp(player.id, count);
}
setWin(msg: string) {
let teamId = parseInt(msg);
for (let [,player] of this.state.players) {
if (player.team != teamId) {
player.hp = 0;
}
}
this.room.dispatcher.dispatch(new GameResultCommand());
}
}

View File

@ -58,7 +58,6 @@ export class GameResultCommand extends Command<CardGameState, {}> {
this.room.bGameResult(resultData);
this.state.updateGameState(GameStateConst.STATE_GAME_OVER);
this.resetAllState();
//启动定时, 时间到后, 踢出没离开且没点重玩的玩家, 并将房间设为非private
let self = this;
let resultTimeOver = async function () {
@ -96,6 +95,7 @@ export class GameResultCommand extends Command<CardGameState, {}> {
}
let time = singleton(GameEnv).gameResultTime * 1000;
this.room.beginSchedule(time, resultTimeOver, 'restart_schedule');
this.resetAllState();
}
/**