武将:升阶

This commit is contained in:
luying
2021-07-06 20:14:50 +08:00
parent ed534aa715
commit 70cb181222
4 changed files with 16 additions and 15 deletions

View File

@@ -24,12 +24,14 @@ export interface DicJob {
// 升阶消耗
readonly upGradeConsume: Array<RewardInter>;
// 每阶升级属性
readonly ceAttr: Map<number, {id: number, attr: 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.attr);
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,12 +58,12 @@ export function loadJob() {
arr = undefined;
}
function parseCeAttr(str: string) {
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 = 0; i < decodeArr.length; i++) {
let [id, attr] = decodeArr[i];
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');
}

View File

@@ -444,16 +444,16 @@ export function calHeroTrainIncAttr(originHero: HeroType, update: HeroUpdate) {
let dicJob = gameData.job.get(job);
if (dicJob.grade > 1) {
if (dicJob.grade >= 1) {
let jobGradeAndClass = getJobByGradeAndClass(dicJob.job_class, dicJob.grade - 1);
let lastJob = gameData.job.get(jobGradeAndClass.jobid);
let targetAttrId = dicJob.ceAttr.get(jobStage).id;
let inc = (dicJob.ceAttr.get(jobStage).attr - lastJob.ceAttr.get(jobStage).attr) * HERO_CE_RATIO;
updateHeroAttr(heroAttrs, targetAttrId, { inc: { fixUp: inc } })
updateHeroAttr(heroAttrs, targetAttrId, { inc: { fixUp: inc } });
} else {
let targetAttrId = dicJob.ceAttr.get(jobStage).id;
let inc = dicJob.ceAttr.get(jobStage).attr * HERO_CE_RATIO;
updateHeroAttr(heroAttrs, targetAttrId, { inc: { fixUp: inc } })
updateHeroAttr(heroAttrs, targetAttrId, { inc: { fixUp: inc } });
}
return heroAttrs;
}

View File

@@ -1838,7 +1838,7 @@
{
"jobid": 700,
"name": "名医0阶",
"grade": 1,
"grade": 0,
"unlockLevel": 1,
"job_class": 7,
"type": 2,