diff --git a/src/rooms/RoomExtMethod.ts b/src/rooms/RoomExtMethod.ts index 397c140..bbe16f7 100644 --- a/src/rooms/RoomExtMethod.ts +++ b/src/rooms/RoomExtMethod.ts @@ -182,7 +182,9 @@ Object.defineProperties(Room.prototype, { for (let i = 0; i < realCount; i++) { let cardId = 1000 + (this.state.maxCardId ++ ); let card = gameUtil.generateCardWithEffect(effectId, cardId, options); - tmpCards.push(card); + if (card) { + tmpCards.push(card); + } } diff --git a/src/utils/game.util.ts b/src/utils/game.util.ts index afa4443..0bc636e 100644 --- a/src/utils/game.util.ts +++ b/src/utils/game.util.ts @@ -47,14 +47,25 @@ let gameUtil = { */ generateCardWithEffect(effectId: number, preCardId: number, options?: any): Card { let numCfgMap: Map = global.$cfg.get(BaseConst.SYSTEMCARD); + const effectMap = global.$cfg.get(BaseConst.EFFECTCARD); let cfgs = []; - for (let [, cfg] of numCfgMap) { - if (cfg.weight.indexOf(effectId + '') >= 0) { - cfgs.push(cfg); - } + const effectCfg = effectMap.get(effectId); + if (!effectCfg) { + return null; } - let cfg: SystemCardCfg = cfgs.randomOne(); - return new Card(preCardId + 1, cfg.point, cfg.type_id, effectId); + if (effectCfg.type_id == EffectType.unit) { + let point = Math.random2(1, 11) | 0; + return new Card(preCardId + 1, point, CardType.variable_unit, effectId); + } else { + for (let [, cfg] of numCfgMap) { + if (cfg.weight.indexOf(effectId + '') >= 0) { + cfgs.push(cfg); + } + } + let cfg: SystemCardCfg = cfgs.randomOne(); + return new Card(preCardId + 1, cfg.point, cfg.type_id, effectId); + } + }, /** * 获取随机的随从 @@ -201,9 +212,10 @@ let gameUtil = { * @param fromplayer */ addCardToPlayer(room: Room, player: Player, cards: Card[], fromplayer?: Player) { + const effectMap = global.$cfg.get(BaseConst.EFFECTCARD); for (let card of cards) { // 如果card的type == 11, 说明是自选随从卡, 则替换成玩家牌组中的卡 - if (card.type == CardType.variable_unit) { + if (card.type == CardType.variable_unit && effectMap.get(card.effect).type_id == EffectType.variable_unit) { card.effect = this.getRandomServant(player); } player.cards.set(card.id + '', card); @@ -219,6 +231,7 @@ let gameUtil = { * @param targetCards */ changeCard(cardArr: Card[], player: Player, targetCards: Card[]): Card[] { + const effectMap = global.$cfg.get(BaseConst.EFFECTCARD); let cards: Card[] = []; for (let card of targetCards) { player.cards.delete(card.id + ''); @@ -228,7 +241,7 @@ let gameUtil = { let count = targetCards.length; for (let i = 0; i < count; i++) { let card = cardArr.pop(); - if (card.type == CardType.variable_unit) { + if (card.type == CardType.variable_unit && effectMap.get(card.effect).type_id == EffectType.variable_unit) { card.effect = this.getRandomServant(player); } cards.push(card);