修改有转换卡牌技能的英雄的效果卡转换逻辑

This commit is contained in:
zhl 2020-12-11 11:35:50 +08:00
parent 798de1f7d6
commit fa949dd70c
2 changed files with 41 additions and 31 deletions

View File

@ -4,6 +4,7 @@ import {Client} from "colyseus";
import {TurnEndCommand} from "./TurnEndCommand";
import {singleton} from "../../common/Singleton";
import {GameEnv} from "../../cfg/GameEnv";
import gameUtil from "../../utils/game.util";
/**
*
@ -21,37 +22,28 @@ export class SelectPetCommand extends Command<CardGameState, {client: Client,
let moreAp = 0;
let count = 0;
let targetCard;
let hasEffectSkill = this.room.battleMan.hasTransEffCardSkill(player);
let effectRate = this.room.battleMan.getTransEffCardRate(player);
// 检查效果卡, 并从玩家手牌中移除
let eff_cnt = 0; // 效果卡数量
let dbpt_cnt = 0; // 点数翻倍卡数量
let transCount = 0;
for (let cardId of effCards) {
if (!player.cards.has(cardId + '')) {
continue;
}
let card = player.cards.get(cardId + '');
let needRemove = false;
if (hasEffectSkill) {
needRemove = true;
if (card.type === 3) {
dbpt_cnt ++;
} else {
eff_cnt ++;
}
if (card.type === 3) {
dbpt_cnt ++;
} else if (card.type === 2){
eff_cnt ++;
} else {
if (card.type === 3) {
dbpt_cnt ++;
needRemove = true;
} else if (card.type === 2) {
eff_cnt ++;
needRemove = true;
}
}
if (needRemove) {
player.cards.delete(cardId + '');
player.cardSet.delete(cardId + '');
transCount ++;
}
}
gameUtil.deleteCardFromPlayer(player, effCards);
if (effectRate && transCount) {
eff_cnt += (transCount / effectRate | 0);
}
for (let card of this.state.cards.values()) {
ap += card.number;
count ++;

View File

@ -22,7 +22,7 @@ let gameUtil = {
for (let [, cfg] of numCfgMap) {
for (let i = 0; i < cfg.count; i++) {
let effid = this.getRandomEffect(cfg.weightArr, effCfgMap, countMap);
let card = new Card(localId ++, cfg.point, cfg.type_id, effid);
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);
@ -47,7 +47,7 @@ let gameUtil = {
*/
getRandomEffect(weightArr: number[][], effCfgMap: Map<number, EffectCardCfg>, countMap: Map<number, number>) {
let total = 0;
let tmpArr:number[][] = [];
let tmpArr: number[][] = [];
for (let data of weightArr) {
total += data[1];
tmpArr.push([data[0], total]);
@ -55,7 +55,7 @@ let gameUtil = {
let num = Math.random() * total;
let effid;
for (let data of tmpArr) {
if (data[1] >= num ) {
if (data[1] >= num) {
let count = countMap.has(data[0]) ? countMap.get(data[0]) : 0;
if (count < effCfgMap.get(data[0]).count) {
effid = effCfgMap.get(data[0]).id;
@ -125,14 +125,32 @@ let gameUtil = {
* @param count
*/
removeCard(player: Player, count: number): Card[] {
let cards = [];
let cardArr: Card[] = [...player.cards.values()];
cards = arrUtil.randomGet(cardArr, count);
for (let card of cards) {
player.cards.delete(card.id + '');
player.cardSet.delete(card.id + '');
}
return cards;
let cards = [];
let cardArr: Card[] = [...player.cards.values()];
cards = arrUtil.randomGet(cardArr, count);
this.deleteCardFromPlayer(player, cards);
return cards;
},
/**
*
* @param player
* @param cards
*/
deleteCardFromPlayer(player: Player, cards: Card[] | string[] | number[]) {
for (let card of cards) {
let cardId = '';
if (typeof card == 'string') {
cardId = card;
} else if (typeof card == 'number') {
cardId = card + '';
} else {
cardId = (card as Card).id + '';
}
if (player.cards.has(cardId)) {
player.cards.delete(cardId);
player.cardSet.delete(cardId);
}
}
},
/**
*