战力:修改战力公式

This commit is contained in:
luying
2021-09-01 17:12:00 +08:00
parent 159c354ae3
commit 2273ffe1e0
4 changed files with 18 additions and 6 deletions

View File

@@ -154,7 +154,7 @@ export async function matchPlayers(roleId: string, scale: number, range: number,
if(h) {
let { star, lv, attr: heroAttrs, ce } = h;
let dicHero = gameData.hero.get(hero.actorId);
let { attribute } = getPlayerAttribute(heroAttrs, roleAttrs);
let { attribute } = getPlayerAttribute(lv, heroAttrs, roleAttrs);
let heroInfo = {
actorId: hero.actorId,
actorName: dicHero.name,

View File

@@ -238,7 +238,7 @@ async function generPlayerOppHis(pvpdefense: PvpDefenseType, mapWarJson: DicWarJ
let heroInfo = new PvpHeroInfo();
heroInfo.setHeroInfo(dbHero);
heroInfo.setOutIndex(h.order);
let { attribute, ce } = getPlayerAttribute(dbHero.attr, role.attr);
let { attribute, ce } = getPlayerAttribute(dbHero.lv, dbHero.attr, role.attr);
heroInfo.setAttribute(attribute);
let enemy = new PvpEnemies(warJson, heroInfo, hs ? hs.score : 0, ce);
heroes.push(enemy);
@@ -525,8 +525,9 @@ export function getRobotAttribute(attribute: { id: number, val: number }[], ce:
* @param ceAttr hero表的ceAttr
* @param globalCeAttr role表中的globalCeAttr
*/
export function getPlayerAttribute(heroAttrs: CeAttrData[] = [], roleAttrs: CeAttrDataRole[] = []) {
export function getPlayerAttribute(lv: number, heroAttrs: CeAttrData[] = [], roleAttrs: CeAttrDataRole[] = []) {
let newAttribute = new AttributeCal();
newAttribute.setLv(lv);
newAttribute.setByDbData(roleAttrs, heroAttrs);
let attribute = newAttribute.getReduceAttributesToString();
let ce = newAttribute.calCelAndReduce();

View File

@@ -38,6 +38,11 @@ export class CeAttrDataRole {
export class AttributeCal {
attrs: Map<number, number> = new Map<number, number>();
ce?: number = 0;
lv: number = 1;
public setLv(lv: number) {
this.lv = lv;
}
public setByDbData(roleAttrs: CeAttrDataRole[], heroAttrs: CeAttrData[]) {
for(let { id, fixUp: roleFix, ratioUp: roleRatio } of roleAttrs) {
@@ -61,7 +66,7 @@ export class AttributeCal {
}
}
public setByWarJson( attributes: {id: number, val: number}[], ratio: number = 1) {
public setByWarJson(attributes: {id: number, val: number}[], ratio: number = 1) {
for(let {id, val} of attributes) {
if(ABI_TYPE_MAIN.includes(id)) {
this.attrs.set(id, Math.floor(val * ratio * HERO_CE_RATIO * HERO_CE_RATIO));
@@ -133,7 +138,11 @@ export class AttributeCal {
public calCe() {
let ce = gameData.ceRatio.reduce((pre, cur) => {
let { type, val } = cur;
return pre + val * (this.attrs.get(type)|| 0)
if(ABI_TYPE_MAIN.includes(type)) {
return pre + val * (this.attrs.get(type)|| 0)
} else {
return pre + val * (this.attrs.get(type)|| 0) * this.lv
}
}, 0);
return Math.floor(ce);
}

View File

@@ -30,6 +30,7 @@ export async function calPlayerCeAndSave(type: number, roleId: string, originHer
let heroAttrs = calPlayerCe(originHero, update, type, args); // 根据操作计算attr的增加
let newAttr = new AttributeCal();
newAttr.setLv(update.lv||originHero.lv);
newAttr.setByDbData(roleAttrs, heroAttrs);
let heroCe = newAttr.calCe(); // 计算最终战力
let incCe = heroCe - originHero.ce;
@@ -69,8 +70,9 @@ export async function reCalAllHeroCe(type: number, roleId: string, update: RoleU
let roleCe = 0; // 总战力加成
let allIncCe = 0;
for (let hero of heros) {
let { attr: heroAttrs } = hero;
let { attr: heroAttrs, lv } = hero;
let newAttr = new AttributeCal();
newAttr.setLv(lv);
newAttr.setByDbData(roleAttrs, heroAttrs);
let heroCe = newAttr.calCe(); // 计算最终战力
if(heroCe != hero.ce) {