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;