From a7a988ca75b2e1a68fa002e25bad9723873ea196 Mon Sep 17 00:00:00 2001 From: zhl Date: Thu, 10 Dec 2020 10:47:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=A9=E5=B1=95=E6=8A=BD=E5=8D=A1=E7=9A=84gm?= =?UTF-8?q?=E5=91=BD=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/global.d.ts | 5 +++-- src/rooms/RoomExtMethod.ts | 4 ++-- src/rooms/commands/GMCommand.ts | 34 +++++++++++++++++++++++++++++---- src/utils/game.util.ts | 14 ++++++++++++-- 4 files changed, 47 insertions(+), 10 deletions(-) diff --git a/src/global.d.ts b/src/global.d.ts index 0ad05d8..ec5e7bd 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -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; /** * 更新玩家血量 diff --git a/src/rooms/RoomExtMethod.ts b/src/rooms/RoomExtMethod.ts index ac07eb6..3e2fcc2 100644 --- a/src/rooms/RoomExtMethod.ts +++ b/src/rooms/RoomExtMethod.ts @@ -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, diff --git a/src/rooms/commands/GMCommand.ts b/src/rooms/commands/GMCommand.ts index f5aff22..467b7f4 100644 --- a/src/rooms/commands/GMCommand.ts +++ b/src/rooms/commands/GMCommand.ts @@ -7,9 +7,6 @@ import {debugRoom, error} from "../../common/Debug"; export class GMCommand extends Command { 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 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); + } } diff --git a/src/utils/game.util.ts b/src/utils/game.util.ts index f41568b..3d2005e 100644 --- a/src/utils/game.util.ts +++ b/src/utils/game.util.ts @@ -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;