Revert "revert 50867e88 to a1aabfdd"

This reverts commit a112732226.
This commit is contained in:
luying
2021-07-12 14:47:43 +08:00
parent c4d5bf3edd
commit 30bd43d98e
17 changed files with 6675 additions and 3876 deletions

View File

@@ -7,6 +7,8 @@ export interface DicHeroStar {
// 唯一id
readonly id: number;
// 职业类型
readonly classType: number;
// 品质
readonly quality: number;
// 星级
@@ -20,7 +22,7 @@ export interface DicHeroStar {
type KeysEnum<T> = { [P in keyof Required<T>]: true };
const DicHeroStarKeys: KeysEnum<DicHeroStar> = {id: true, quality: true, star: true, advanceUpFragmentNum: true, ceAttr: true};
const DicHeroStarKeys: KeysEnum<DicHeroStar> = {id: true, classType: true, quality: true, star: true, advanceUpFragmentNum: true, ceAttr: true};
export const dicHeroStar = new Map<string, DicHeroStar>();
export function loadHeroStar() {
@@ -28,7 +30,8 @@ export function loadHeroStar() {
arr.forEach(o => {
o.ceAttr = parseCeAttr(o);
dicHeroStar.set(`${o.quality}_${o.star}`, _.pick(o, Object.keys(DicHeroStarKeys)));
o.classType = o.class_type;
dicHeroStar.set(`${o.classType}_${o.quality}_${o.star}`, _.pick(o, Object.keys(DicHeroStarKeys)));
});
arr = undefined;
}

View File

@@ -8,6 +8,8 @@ export interface DicHeroWake {
// 唯一id
readonly id: number;
// 职业类型
readonly classType: number;
// 品质
readonly quality: number;
// 彩星级
@@ -22,7 +24,7 @@ export interface DicHeroWake {
}
type KeysEnum<T> = { [P in keyof Required<T>]: true };
const DicHeroWakeKeys: KeysEnum<DicHeroWake> = {id: true, quality: true, star: true, fragmentNum: true, consume: true, ceAttr: true};
const DicHeroWakeKeys: KeysEnum<DicHeroWake> = {id: true, classType: true, quality: true, star: true, fragmentNum: true, consume: true, ceAttr: true};
export const dicHeroWake = new Map<string, DicHeroWake>();
export function loadHeroWake() {
@@ -31,7 +33,8 @@ export function loadHeroWake() {
arr.forEach(o => {
o.consume = parseGoodStr(o.consume);
o.ceAttr = parseCeAttr(o);
dicHeroWake.set(`${o.quality}_${o.star}`, _.pick(o, Object.keys(DicHeroWakeKeys)));
o.classType = o.class_type;
dicHeroWake.set(`${o.classType}_${o.quality}_${o.star}`, _.pick(o, Object.keys(DicHeroWakeKeys)));
});
arr = undefined;
}

View File

@@ -1,6 +1,6 @@
// 兵种表
import { readFileAndParse, parseNumberList, parseGoodStr} from '../util'
import { FILENAME, ABI_STAGE } from '../../consts'
import { readFileAndParse, parseNumberList, parseGoodStr, decodeArrayListStr} from '../util'
import { FILENAME, } from '../../consts'
import { RewardInter } from '../interface';
const _ = require('lodash');
@@ -24,12 +24,14 @@ export interface DicJob {
// 升阶消耗
readonly upGradeConsume: Array<RewardInter>;
// 每阶升级属性
readonly ceAttr: Map<number, number>
readonly ceAttr: Map<number, {id: number, attr: number}>;
// 一共有多少阶升级
readonly maxStage: number;
}
type KeysEnum<T> = { [P in keyof Required<T>]: true };
const DicJobKeys: KeysEnum<DicJob> = {jobid: true, name: true, grade: true, unlockLevel: true, job_class: true, type: true, seid: true,trainingConsume: true, upGradeConsume: true, ceAttr: true};
const DicJobKeys: KeysEnum<DicJob> = {jobid: true, name: true, grade: true, unlockLevel: true, job_class: true, type: true, seid: true,trainingConsume: true, upGradeConsume: true, ceAttr: true, maxStage: true};
export const dicJob = new Map<number, DicJob>();
export const jobClassMaxGrades = new Map<number, {grade:number, jobid:number}>();
@@ -42,8 +44,9 @@ export function loadJob() {
arr.forEach(o => {
o.seid = parseNumberList(o.seid);
o.trainingConsume = parseGoodStr(o.trainingConsume);
o.maxStage = o.trainingConsume.length;
o.upGradeConsume = parseGoodStr(o.upGradeConsume);
o.ceAttr = parseCeAttr(o);
o.ceAttr = parseCeAttr(o.maxStage, o.attr);
dicJob.set(o.jobid, _.pick(o, Object.keys(DicJobKeys)));
let jobClass = jobClassMaxGrades.get(o.job_class);
if (!jobClass || jobClass.grade < o.grade) {
@@ -55,11 +58,16 @@ export function loadJob() {
arr = undefined;
}
function parseCeAttr(elem) {
let ceAttr = new Map<number, number>();
ceAttr.set(ABI_STAGE.HP, elem.hp);
ceAttr.set(ABI_STAGE.ATK, elem.atk);
ceAttr.set(ABI_STAGE.DEF, elem.def);
ceAttr.set(ABI_STAGE.MDEF, elem.mdef);
return ceAttr;
function parseCeAttr(maxStage: number, str: string) {
let result = new Map<number, { id: number, attr: number }>();
if (!str) return result;
let decodeArr = decodeArrayListStr(str);
for (let i = 1; i <= maxStage; i++) {
let [id, attr] = decodeArr[i]||[i.toString(), "0"];
if (isNaN(parseInt(id)) || isNaN(parseInt(attr))) {
throw new Error('data table format wrong');
}
result.set(i, { id: parseInt(id), attr: parseFloat(attr) });
}
return result
}