From 2273ffe1e01ee219bae844cd41e5a0e1d01fa524 Mon Sep 17 00:00:00 2001 From: luying Date: Wed, 1 Sep 2021 17:12:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=98=E5=8A=9B=EF=BC=9A=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=88=98=E5=8A=9B=E5=85=AC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game-server/app/services/expeditionService.ts | 2 +- game-server/app/services/pvpService.ts | 5 +++-- shared/domain/roleField/attribute.ts | 13 +++++++++++-- shared/pubUtils/playerCe.ts | 4 +++- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/game-server/app/services/expeditionService.ts b/game-server/app/services/expeditionService.ts index cb31ac9c5..8bcd16a54 100644 --- a/game-server/app/services/expeditionService.ts +++ b/game-server/app/services/expeditionService.ts @@ -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, diff --git a/game-server/app/services/pvpService.ts b/game-server/app/services/pvpService.ts index dcbdfb3ae..a9ce54331 100644 --- a/game-server/app/services/pvpService.ts +++ b/game-server/app/services/pvpService.ts @@ -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(); diff --git a/shared/domain/roleField/attribute.ts b/shared/domain/roleField/attribute.ts index 37373a7cf..74666da81 100644 --- a/shared/domain/roleField/attribute.ts +++ b/shared/domain/roleField/attribute.ts @@ -38,6 +38,11 @@ export class CeAttrDataRole { export class AttributeCal { attrs: Map = new Map(); 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); } diff --git a/shared/pubUtils/playerCe.ts b/shared/pubUtils/playerCe.ts index 0b1aae7b5..44b4e9de1 100644 --- a/shared/pubUtils/playerCe.ts +++ b/shared/pubUtils/playerCe.ts @@ -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) {