完善不同模式下卡组的生成

This commit is contained in:
zhl 2021-02-26 14:01:00 +08:00
parent f7517f16bc
commit 94ac572a64
2 changed files with 27 additions and 17 deletions

View File

@ -7,8 +7,8 @@ export class SystemCardCfg implements Cfg {
public point: number; public point: number;
public weight: string; public weight: string;
public weightArr: number[][]; public weightArr: number[][];
public baseUsage: boolean; public primaryaccess: number;
public advUsage: boolean; public intermediateaccess: number;
public decode(data: any) { public decode(data: any) {
this.id = data.id; this.id = data.id;
this.type_id = data.type_id; this.type_id = data.type_id;
@ -21,7 +21,7 @@ export class SystemCardCfg implements Cfg {
let subArr = str.split(':'); let subArr = str.split(':');
this.weightArr.push([parseInt(subArr[0]), parseInt(subArr[1])]); this.weightArr.push([parseInt(subArr[0]), parseInt(subArr[1])]);
} }
this.baseUsage = !!data.primaryaccess this.primaryaccess = data.primaryaccess
this.advUsage = !!data.intermediateaccess this.intermediateaccess = data.intermediateaccess
} }
} }

View File

@ -24,17 +24,17 @@ let gameUtil = {
let countMap: Map<number, number> = new Map() let countMap: Map<number, number> = new Map()
let localId = beginNum let localId = beginNum
for (let [, cfg] of numCfgMap) { for (let [, cfg] of numCfgMap) {
if ((advMode && cfg.advUsage) || (!advMode && cfg.baseUsage)) { let count = advMode ? cfg.intermediateaccess : cfg.primaryaccess
for (let i = 0; i < cfg.count; i++) {
let [effid, effType] = this.getRandomEffect(cfg.weightArr, effCfgMap, countMap) for (let i = 0; i < count; i++) {
let type = cfg.type_id let [effid, effType] = this.getRandomEffect(cfg.weightArr, effCfgMap, countMap, advMode)
// 如果效果的type_id为11, 说明是自选随从卡, 则将card的type改为11 let type = cfg.type_id
if (effType == EffectType.variable_unit) { // 如果效果的type_id为11, 说明是自选随从卡, 则将card的type改为11
type = CardType.variable_unit if (effType == EffectType.variable_unit) {
} type = CardType.variable_unit
let card = new Card(localId++, cfg.point, type, effid)
cards.push(card)
} }
let card = new Card(localId++, cfg.point, type, effid)
cards.push(card)
} }
} }
@ -106,13 +106,23 @@ let gameUtil = {
* @param weightArr * @param weightArr
* @param effCfgMap * @param effCfgMap
* @param countMap * @param countMap
* @param advMode
*/ */
getRandomEffect(weightArr: number[][], effCfgMap: Map<number, EffectCardCfg>, countMap: Map<number, number>): number[] { getRandomEffect(weightArr: number[][], effCfgMap: Map<number, EffectCardCfg>, countMap: Map<number, number>, advMode: boolean): number[] {
let total = 0 let total = 0
let tmpArr: number[][] = [] let tmpArr: number[][] = []
for (let data of weightArr) { 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 num = Math.random() * total
let effid let effid