扩展抽卡的gm命令

This commit is contained in:
zhl 2020-12-10 10:47:20 +08:00
parent 198685ae48
commit a7a988ca75
4 changed files with 47 additions and 10 deletions

5
src/global.d.ts vendored
View File

@ -165,10 +165,11 @@ declare module "colyseus" {
* @param dstplayer
* @param count , max_count至少一个不为0
* @param max_count , count和max_count都不为0, Math.min(count, (max_count - ))
* @param source 0: 正常抽卡, 1: 技能
* @param source 0: 正常抽卡, 1: 技能, 2: gm命令抽的卡
* @param fromplayer
* @param extData
*/
addCard(dstplayer: string, count: number, max_count: number, source?: number, fromplayer?: string): number;
addCard(dstplayer: string, count: number, max_count: number, source?: number, fromplayer?: string, extData?: {}): number;
/**
*

View File

@ -66,7 +66,7 @@ Object.defineProperties(Room.prototype, {
* @param fromplayer
*/
addCard: {
value: function ( dstplayer: string, count: number, max_count: number, source: number = 0, fromplayer?: string): number {
value: function ( dstplayer: string, count: number, max_count: number, source: number = 0, fromplayer?: string, extData?: {}): number {
let maxCountCfg = singleton(GameEnv).maxCardNum;
let maxCount = Math.min(maxCountCfg, max_count);
let player = this.state.players.get(dstplayer);
@ -84,7 +84,7 @@ Object.defineProperties(Room.prototype, {
return 0;
}
let player2 = fromplayer ? this.state.players.get(fromplayer) : null;
let cards = gameUtil.drawCard(this, this.state.cardQueue, player, count, player2);
let cards = gameUtil.drawCard(this, this.state.cardQueue, player, count, player2, extData);
let client = this.getClient(dstplayer);
let sData = {
player: dstplayer,

View File

@ -7,9 +7,6 @@ import {debugRoom, error} from "../../common/Debug";
export class GMCommand extends Command<CardGameState, {client: Client, message: string}> {
async execute({client, message} = this.payload) {
if (message.indexOf(':') < 0) {
return;
}
let arr = message.split(':');
switch (arr[0]) {
case 'changeeffect':
@ -22,6 +19,9 @@ export class GMCommand extends Command<CardGameState, {client: Client, message:
case 'draw':
this.drawCard(arr[1]);
break;
case 'help':
this.sendHelp(client, arr[1]);
break;
}
}
@ -29,8 +29,16 @@ export class GMCommand extends Command<CardGameState, {client: Client, message:
let players = [...this.state.players.values()];
return players[idx];
}
sendHelp(client: Client, msg: string) {
let str = ''
str += '将一个玩家的手牌全变成指定的效果卡: changeeffect:玩家index|效果卡id 例: changeeffect:0|20011 \n';
str += '将牌组中的卡全部变成指定的效果卡: changequeue:效果卡id 例: changequeue:20011 \n';
str += '抽一定数量的卡, 注意类型和效果id的搭配: draw:玩家index|数量|类型|效果id|点数 例: draw:0|3 or draw:0|1|1|20011|2 \n';
client.send('notice_msg', str);
}
/**
*
* changeeffect:玩家index|id
* changeeffect:0|20011
* @param msg
*/
@ -52,6 +60,7 @@ export class GMCommand extends Command<CardGameState, {client: Client, message:
/**
*
* changequeue:效果卡id
* changequeue:20011
* @param msg
*/
@ -64,7 +73,9 @@ export class GMCommand extends Command<CardGameState, {client: Client, message:
/**
*
* draw:玩家index|||id|
* draw:0|3
* draw:0|3|1|20011|9
* @param msg
*/
drawCard(msg: string) {
@ -76,6 +87,21 @@ export class GMCommand extends Command<CardGameState, {client: Client, message:
let playerIdx = parseInt(arr[0]);
let player = this.getPlayerByIdx(playerIdx);
let count = parseInt(arr[1]);
this.room.addCard(player.id, count, 0);
let extData;
if (arr.length > 2) {
extData = {};
// @ts-ignore
extData.type = parseInt(arr[2]);
}
if (arr.length > 3) {
// @ts-ignore
extData.effect = parseInt(arr[3]);
}
if (arr.length > 4) {
// @ts-ignore
extData.number = parseInt(arr[4]);
}
this.room.addCard(player.id, count, 0, 2, null, extData);
}
}

View File

@ -97,11 +97,21 @@ let gameUtil = {
* @param player
* @param count
* @param fromplayer
* @param extData
*/
drawCard(room: Room, cardArr: Card[], player: Player, count: number, fromplayer?: Player): Card[] {
drawCard(room: Room, cardArr: Card[], player: Player, count: number, fromplayer?: Player, extData?: {}): Card[] {
let cards: Card[] = [];
for (let i = 0; i < count; i++) {
cards.push(cardArr.pop());
let card = cardArr.pop();
if (extData) {
// @ts-ignore
extData['effect'] && (card.effect = extData['effect']);
// @ts-ignore
extData['type'] && (card.type = extData['type']);
// @ts-ignore
extData['number'] && (card.number = extData['number']);
}
cards.push(card);
}
this.addCardToPlayer(room, player, cards, fromplayer);
return cards;