增加一个添加特定effect玩家手牌的方法
This commit is contained in:
parent
108b68f410
commit
5161ec738f
16
src/global.d.ts
vendored
16
src/global.d.ts
vendored
@ -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;
|
||||
|
||||
}
|
||||
|
@ -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});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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|点数
|
||||
|
@ -56,6 +56,10 @@ export class CardGameState extends Schema {
|
||||
* 点击重开的玩家数量
|
||||
*/
|
||||
restartCount = 0;
|
||||
/**
|
||||
* 当前牌局扩展卡库当前最大的card id
|
||||
*/
|
||||
maxCardId = 0;
|
||||
|
||||
updateGameState(val: number) {
|
||||
let preVal = this.gameState;
|
||||
|
@ -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 配表中的权重列表
|
||||
|
Loading…
x
Reference in New Issue
Block a user