扩展抽卡的gm命令
This commit is contained in:
parent
198685ae48
commit
a7a988ca75
5
src/global.d.ts
vendored
5
src/global.d.ts
vendored
@ -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;
|
||||
|
||||
/**
|
||||
* 更新玩家血量
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user