fix 合成战力

This commit is contained in:
luying
2020-12-12 18:25:10 +08:00
parent 9bf50e2d14
commit 6c8f91a316
3 changed files with 32 additions and 34 deletions
+18 -27
View File
@@ -23,24 +23,22 @@ export function calPlayerCe(hero: any, type: number, args: Array<number>) {
let removeSeidList = new Array<number>();
if (type == HERO_SYSTEM_TYPE.STAR) {
reIncAttr = calHeroStarIncAttr(hero, addSeidList, removeSeidList); // 返回 计算后的值
reIncAttr = calHeroStarIncAttr(hero, args, addSeidList, removeSeidList); // args: 升的星盘
} else if (type == HERO_SYSTEM_TYPE.TRAIN) {
reIncAttr = calHeroTrainIncAttr(hero);
}
addSeidEffect(reIncAttr, addSeidList, removeSeidList); // 处理加值
if(!hero.ceAttr) hero.ceAttr = new CeAttr();
for (let attrName in reIncAttr) {
for (let attrName in reIncAttr) {
let originalAttrData: CeAttrData = hero.ceAttr[attrName]||new CeAttrData();
let oldCe = originalAttrData.fixUp * HERO_CE_RATIO + originalAttrData.base *(HERO_CE_RATIO + originalAttrData.ratioUp)
if(!hero.ceAttr[attrName]) hero.ceAttr[attrName] = new CeAttrData();
for (let attrKey in reIncAttr[attrName]) {
hero.ceAttr[attrName][attrKey] = parseInt(reIncAttr[attrName][attrKey]);
}
incArr[attrName] = reIncAttr[attrName].fixUp * HERO_CE_RATIO + reIncAttr[attrName].base *(HERO_CE_RATIO + reIncAttr[attrName].ratioUp) - oldCe; //计算属性
incCe += incArr[attrName] * getAttrCeRatio[attrName];
incCe += incArr[attrName] * getAttrCeRatio(attrName);
}
hero.ce += incCe;
return incCe;
@@ -70,44 +68,29 @@ export async function calPlayerCeAndSave(sid: string, roleId: string, heros: Arr
return heros;
}
export function calHeroStarIncAttr (hero: Hero, addSeidList: Array<number>, removeSeidList: Array<number>) {
export function calHeroStarIncAttr (hero: Hero, args: Array<number>, addSeidList: Array<number>, removeSeidList: Array<number>) {
let {star, starStage, quality, colorStar, colorStarStage, ceAttr} = hero;
let res = {};
const dicHero = getHeroInfoById(hero.hid);
const isWake = colorStar > 0; // 是否觉醒,只要激活了觉醒,彩星就会 > 1
let attrs = new Array<number>(); // 有升级的属性 1-hp 2-atk 3-def 4-mdef 5-agi 6-luk
if(isWake) {
if(colorStar == 1 && colorStarStage == ABI_STAGE.START) { // 当第一次觉醒时,一口气修改全部属性
for(let stage = ABI_STAGE.START + 1; stage <= ABI_STAGE.END; stage++) {
attrs.push(stage)
};
colorStar = colorStar -1; // 当第一次觉醒时,存的是1,读表的是上一行0
} else { // 觉醒一次,相应的属性
if(colorStarStage == ABI_STAGE.START) { // 当升一级的时候,存储会存0,但加的是6,读表读的是上一行
colorStarStage = ABI_STAGE.END; colorStar = colorStar -1;
}
attrs.push(colorStarStage);
}
if(colorStarStage == ABI_STAGE.START) colorStar = colorStar -1;
} else {
if(starStage == ABI_STAGE.START) { // 当升一级的时候,存储会存0,但加的是6,读表读的是上一行
starStage = ABI_STAGE.END; star = star -1;
}
attrs.push(starStage);
if(starStage == ABI_STAGE.START) star = star -1;
}
const dicStar = isWake? getHeroWake(quality, colorStar): getHeroStar(quality, star); // 星级表
for(let stage of attrs) {
for(let stage of args) {
let targetAttrId = getFieldByStage(stage, hero.job); // 转换为17维的属性id
let targetAttrId = getFieldByStage(stage, hero.job); // 转换为17维的属性id
let heroAttr = dicHero.baseAbilityArr[targetAttrId]; // 武将表hp等
let heroUpAttr = dicHero.baseAbilityUpArr[targetAttrId]; // 武将表hp_up等
let starUp = dicStar.ceAttr.get(stage);
let newBase = heroAttr + hero.lv * (heroUpAttr + starUp);
let field = getAtrrNameById(targetAttrId);
let ceAttrData: CeAttrData = ceAttr[field]; // 存表中的属性下的base,fixup,ratioup
let ceAttrData: CeAttrData = ceAttr[field]||new CeAttrData(); // 存表中的属性下的base,fixup,ratioup
let {ratioUp = 0, fixUp = 0} = ceAttrData;
res[field] = { base: newBase, ratioUp, fixUp}; // base变动,增量为△base * ratio + 0
}
@@ -115,9 +98,17 @@ export function calHeroStarIncAttr (hero: Hero, addSeidList: Array<number>, remo
return res;//属性增量可以是多个
}
export function getAllAttrStage () {
let attrs = new Array<number>(); // 有升级的属性 1-hp 2-atk 3-def 4-mdef 5-agi 6-luk
for(let stage = ABI_STAGE.START + 1; stage <= ABI_STAGE.END; stage++) {
attrs.push(stage)
};
return attrs;
}
export function calHeroTrainIncAttr(hero: any) {
let res = {};
let attrName: string = getAttrNameByJobStage[hero.jobStage];
let attrName: string = getAttrNameByJobStage(hero.jobStage);
res[attrName] = {fixUp: hero.CeAttr[attrName].fixUp, base: hero.CeAttr[attrName].base, ratioUp: hero.CeAttr[attrName].ratioUp};
let currentJob = getJobInfoById(hero.job);
if (currentJob.grade > 1) {