From 94ac572a6407061605ed0d6295d01476dae1a775 Mon Sep 17 00:00:00 2001 From: zhl Date: Fri, 26 Feb 2021 14:01:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E4=B8=8D=E5=90=8C=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E4=B8=8B=E5=8D=A1=E7=BB=84=E7=9A=84=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/cfg/parsers/SystemCardCfg.ts | 8 +++---- src/utils/game.util.ts | 36 ++++++++++++++++++++------------ 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/src/cfg/parsers/SystemCardCfg.ts b/src/cfg/parsers/SystemCardCfg.ts index eff160a..8d29e57 100644 --- a/src/cfg/parsers/SystemCardCfg.ts +++ b/src/cfg/parsers/SystemCardCfg.ts @@ -7,8 +7,8 @@ export class SystemCardCfg implements Cfg { public point: number; public weight: string; public weightArr: number[][]; - public baseUsage: boolean; - public advUsage: boolean; + public primaryaccess: number; + public intermediateaccess: number; public decode(data: any) { this.id = data.id; this.type_id = data.type_id; @@ -21,7 +21,7 @@ export class SystemCardCfg implements Cfg { let subArr = str.split(':'); this.weightArr.push([parseInt(subArr[0]), parseInt(subArr[1])]); } - this.baseUsage = !!data.primaryaccess - this.advUsage = !!data.intermediateaccess + this.primaryaccess = data.primaryaccess + this.intermediateaccess = data.intermediateaccess } } diff --git a/src/utils/game.util.ts b/src/utils/game.util.ts index d24d645..981e8f4 100644 --- a/src/utils/game.util.ts +++ b/src/utils/game.util.ts @@ -24,17 +24,17 @@ let gameUtil = { let countMap: Map = new Map() let localId = beginNum for (let [, cfg] of numCfgMap) { - if ((advMode && cfg.advUsage) || (!advMode && cfg.baseUsage)) { - for (let i = 0; i < cfg.count; i++) { - let [effid, effType] = this.getRandomEffect(cfg.weightArr, effCfgMap, countMap) - let type = cfg.type_id - // 如果效果的type_id为11, 说明是自选随从卡, 则将card的type改为11 - if (effType == EffectType.variable_unit) { - type = CardType.variable_unit - } - let card = new Card(localId++, cfg.point, type, effid) - cards.push(card) + let count = advMode ? cfg.intermediateaccess : cfg.primaryaccess + + for (let i = 0; i < count; i++) { + let [effid, effType] = this.getRandomEffect(cfg.weightArr, effCfgMap, countMap, advMode) + let type = cfg.type_id + // 如果效果的type_id为11, 说明是自选随从卡, 则将card的type改为11 + if (effType == EffectType.variable_unit) { + type = CardType.variable_unit } + let card = new Card(localId++, cfg.point, type, effid) + cards.push(card) } } @@ -106,13 +106,23 @@ let gameUtil = { * @param weightArr 配表中的权重列表 * @param effCfgMap 配表中的所有效果卡的配置 * @param countMap 当前已生成的效果卡数量 + * @param advMode */ - getRandomEffect(weightArr: number[][], effCfgMap: Map, countMap: Map): number[] { + getRandomEffect(weightArr: number[][], effCfgMap: Map, countMap: Map, advMode: boolean): number[] { let total = 0 let tmpArr: number[][] = [] for (let data of weightArr) { - total += data[1] - tmpArr.push([data[0], total]) + // 把配表中不希望在该模式下使用的卡剔除 + let effid = data[0] + let effCfg = effCfgMap.get(effid) + if (!effCfg) { + error(`config of ${effid} not found`) + continue + } + if ((advMode && effCfg.intermediateaccess) || (!advMode && effCfg.primaryaccess)) { + total += data[1] + tmpArr.push([effid, total]) + } } let num = Math.random() * total let effid