增加一个添加特定effect玩家手牌的方法

This commit is contained in:
zhl 2020-12-14 15:59:57 +08:00
parent 108b68f410
commit 5161ec738f
6 changed files with 106 additions and 11 deletions

16
src/global.d.ts vendored
View File

@ -222,6 +222,22 @@ declare module "colyseus" {
*/
addScheduleTime(millisecond: number, reason?: string, name?: string, ): void;
/**
* n张指定效果id的卡
* @param effectId
* @param count
* @param player
* @param fromplayer
*/
generateCard({player, count, effectId, fromplayer, options}
: {player: string | Player,
count: number,
effectId: number,
fromplayer?: string | Player,
options?: any}): void;
/**
*
*/
addRobot():void;
}

View File

@ -6,6 +6,7 @@ import {PetInfo} from "../message/PetInfo";
import {PlayDeadCommand} from "./commands/PlayDeadCommand";
import {singleton} from "../common/Singleton";
import {GameEnv} from "../cfg/GameEnv";
import {Player} from "./schema/Player";
/**
*
@ -152,5 +153,50 @@ Object.defineProperties(Room.prototype, {
}
this.broadcast("pet_update_s2c", {data: [...playerSet]}, {afterNextPatch: true});
}
},
/**
* n张指定效果id的卡,
* @param effectId
* @param count
* @param player
*/
generateCard: {
value: function ({player, count, effectId, fromplayer, options}
: {player: string | Player, count: number, effectId: number, fromplayer?: string | Player, options?: any}): void {
let tmpCards = [];
for (let i = 0; i < count; i++) {
let cardId = 1000 + (this.state.maxCardId ++ );
let card = gameUtil.generateCardWithEffect(effectId, cardId, options);
tmpCards.push(card);
}
let dstplayer;
if (typeof player == 'string') {
dstplayer = this.state.players.get(player);
} else {
dstplayer = player;
}
let sourcePlayer;
if (typeof fromplayer == 'string') {
sourcePlayer = this.state.players.get(fromplayer);
} else {
sourcePlayer = player;
}
gameUtil.addCardToPlayer(this, dstplayer, tmpCards, sourcePlayer);
let client = this.getClient(dstplayer);
let sData = {
player: dstplayer.id,
cards: tmpCards,
source: 1
};
this.sDrawCard(client, sData);
let cardIds = tmpCards.map(card => card.id);
let bData = {
player: dstplayer.id,
cards: cardIds,
source: 1
};
this.bDrawCard(bData, {except: client});
}
}
});

View File

@ -5,6 +5,7 @@ import gameUtil from "../../utils/game.util";
import {singleton} from "../../common/Singleton";
import {GameEnv} from "../../cfg/GameEnv";
import {NextTurnCommand} from "./NextTurnCommand";
import arrUtil from "../../utils/array.util";
/**
*
@ -14,7 +15,12 @@ import {NextTurnCommand} from "./NextTurnCommand";
export class BeginGameCommand extends Command<CardGameState, {}> {
async execute() {
this.state.cardQueue = gameUtil.initCardQue();
this.state.maxCardId = 0;
let card0 = gameUtil.initCardQue();
let card1 = gameUtil.initCardQue();
let cardAll = card0.concat(card1);
arrUtil.randomSort(cardAll);
this.state.cardQueue = cardAll;
for (let client of this.room.clients) {
this.room.addCard(client.sessionId, singleton(GameEnv).initCardNum, 0);
}

View File

@ -25,6 +25,9 @@ export class GMCommand extends Command<CardGameState, {client: Client, message:
case 'addrobot':
this.addRobot(arr[1]);
break;
case 'addcard':
this.addCard(arr[1]);
break;
case 'help':
this.sendHelp(client, arr[1]);
break;
@ -41,6 +44,7 @@ export class GMCommand extends Command<CardGameState, {client: Client, message:
str += '将牌组中的卡全部变成指定的效果卡: changequeue:效果卡id 例: changequeue:20011 \n';
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';
client && client.send('notice_msg', str);
}
@ -90,7 +94,18 @@ export class GMCommand extends Command<CardGameState, {client: Client, message:
card.effect = effectId;
}
}
addCard(msg: string) {
if (msg.indexOf('|') < 0) {
error(`错误的GM命令格式: ${msg}`);
return;
}
let arr = msg.split('|');
let playerIdx = parseInt(arr[0]);
let effectId = parseInt(arr[1]);
let player = this.getPlayerByIdx(playerIdx);
let count = parseInt(arr[2]);
this.room.generateCard({player: player, count, effectId, fromplayer: player});
}
/**
*
* draw:玩家index|||id|

View File

@ -56,6 +56,10 @@ export class CardGameState extends Schema {
*
*/
restartCount = 0;
/**
* card id
*/
maxCardId = 0;
updateGameState(val: number) {
let preVal = this.gameState;

View File

@ -24,21 +24,29 @@ let gameUtil = {
let effid = this.getRandomEffect(cfg.weightArr, effCfgMap, countMap);
let card = new Card(localId++, cfg.point, cfg.type_id, effid);
cards.push(card);
// if (cfg.type_id == 1) {
// let effid = this.getRandomEffect(cfg.weightArr, effCfgMap, countMap);
// let card = new Card(localId ++, cfg.point, cfg.type_id, effid);
// cards.push(card);
// } else {
// let card = new Card(localId ++, cfg.point, cfg.type_id, 0);
// cards.push(card);
// }
}
}
arrUtil.randomSort(cards);
return cards;
},
/**
*
* @param effectId
* @param preCardId
* @param options
*/
generateCardWithEffect(effectId: number, preCardId: number, options?: any): Card {
let numCfgMap: Map<number, SystemCardCfg> = global.$cfg.get(BaseConst.SYSTEMCARD);
let cfgs = [];
for (let [, cfg] of numCfgMap) {
if (cfg.type_id == 1) {
cfgs.push(cfg);
}
}
let cfg = arrUtil.randomOne(cfgs);
return new Card(preCardId + 1, cfg.point, cfg.type_id, effectId);
},
/**
* , id
* @param weightArr