diff --git a/game-server/app/servers/battle/handler/pvpHandler.ts b/game-server/app/servers/battle/handler/pvpHandler.ts index af1c0fa68..92a8fd43a 100644 --- a/game-server/app/servers/battle/handler/pvpHandler.ts +++ b/game-server/app/servers/battle/handler/pvpHandler.ts @@ -354,14 +354,14 @@ export class PvpHandler { let seasonEndTime: number = this.app.get('pvpSeasonEndTime'); let refChallengeObj = refChallengeCnt(pvpDefense.challengeCnt, pvpDefense.challengeRefTime, seasonEndTime); // 更新挑战阵容 - let score = 0; + let scores: number[] = []; for(let { actorId } of heroes) { let heroScore = pvpDefense.heroScores.find(cur => cur.hid == actorId); if(heroScore) { - score += heroScore.score; + scores.push(heroScore.score); } } - let attack = new Attack(heroes, score); + let attack = new Attack(heroes, scores); let lineupCe = await generPvpLineupCe(roleId, pvpDefense.lineupCe, attack.heroes, []); // 刷对手 let role = pvpDefense.role; @@ -391,11 +391,11 @@ export class PvpHandler { let seasonEndTime: number = this.app.get('pvpSeasonEndTime'); let refChallengeObj = refChallengeCnt(pvpDefense.challengeCnt, pvpDefense.challengeRefTime, seasonEndTime); // 更新防守阵容 - let score = 0, heroIdMap = new Map(), hids: number[] = []; + let scores: number[] = [], heroIdMap = new Map(), hids: number[] = []; for(let { actorId } of heroes) { let heroScore = pvpDefense.heroScores.find(cur => cur.hid == actorId); if(heroScore) { - score += heroScore.score; + scores.push(heroScore.score); } // 记录hero的objectId,用于存defense.heroes.hero if(pvpDefense.defense && pvpDefense.defense.heroes) { @@ -417,7 +417,7 @@ export class PvpHandler { let defenseHeroes = heroes.map(cur => { return new DefenseHero(cur, heroIdMap.get(cur.actorId)); }); - let defense = new Defense(defenseHeroes, score, warId, buff); + let defense = new Defense(defenseHeroes, scores, warId, buff); let lineupCe = await generPvpLineupCe(roleId, pvpDefense.lineupCe, defense.heroes, dbHeroes); pvpDefense = await PvpDefenseModel.updateInfoAndInclude(roleId, { ...refChallengeObj, defense, lineupCe }); diff --git a/game-server/app/services/pvpService.ts b/game-server/app/services/pvpService.ts index 31805a464..ab8e17e31 100644 --- a/game-server/app/services/pvpService.ts +++ b/game-server/app/services/pvpService.ts @@ -6,7 +6,7 @@ import { PVP_HERO_POS, REDIS_KEY, PVP_CONST, COUNTER, TASK_TYPE, MAIL_TYPE, TA_E import { dicPvpOpponent, DicPvpOpponent } from "../pubUtils/dictionary/DicPvpOpponent"; import { getRandSingleIndex, genCode, shouldRefresh, getChineseName, makeRobotId, robotIdComBack, getRandSingleEelm } from '../pubUtils/util'; import { pvpEndParamInter, RewardInter } from '../pubUtils/interface'; -import { gameData, getPLvByScore, getPvpHeroRewardsByScore, getPvpRankRewardsByRank, getPvpDifficultByScore } from "../pubUtils/data"; +import { gameData, getPLvByScore, getPvpHeroRewardsByScore, getPvpRankRewardsByRank, getPvpDifficultByScore, getPlvAndScore } from "../pubUtils/data"; import { PVP } from '../pubUtils/dicParam'; import { PVPConfigModel, PVPConfigType } from '../db/SystemConfig' import { nowSeconds, getTimeFun } from '../pubUtils/timeUtil'; @@ -414,7 +414,6 @@ export async function generMyRecInfo(pvpDefense: PvpDefenseType, role: RoleType, const dicOpp = gameData.pvpOpponent.get(pos); const plusScore = getPlusScore(winStreakNum); - let pLv = getLvByScore(heroScores); let myHeroRecords: HeroesRecord[] = []; // 存入rec里面的数据 let showHeroScores = new Array<{ hid: number, addScore: number, plusScore: number, score: number }>(); @@ -449,7 +448,7 @@ export async function generMyRecInfo(pvpDefense: PvpDefenseType, role: RoleType, } let attackInfo = new PvpRecordPlayerInfo(); - attackInfo.setByRole(role, myHeroRecords, isSuccess, isSuccess ? addSumScore : 0, pLv) + attackInfo.setByRole(role, myHeroRecords, isSuccess, isSuccess ? addSumScore : 0, attack.pLv); let newAttack = calLineupScore(attack, heroScores); let newDefense = calLineupScore(defense, heroScores); @@ -463,14 +462,14 @@ export async function generMyRecInfo(pvpDefense: PvpDefenseType, role: RoleType, function calLineupScore(lineup: Attack|Defense, heroScores: HeroScore[]) { if(!lineup) return lineup; - let score = 0; + let scores: number[] = []; for(let { actorId } of lineup.heroes) { let hs = heroScores.find(cur => cur.hid == actorId); if(hs) { - score += hs.score; + scores.push(hs.score); } } - let pLv = getPLvByScore(score); + let { pLv, score } = getPlvAndScore(scores); return {...lineup, score, pLv} } diff --git a/shared/domain/battleField/pvp.ts b/shared/domain/battleField/pvp.ts index a45cf4d02..009cbfc5c 100644 --- a/shared/domain/battleField/pvp.ts +++ b/shared/domain/battleField/pvp.ts @@ -4,7 +4,7 @@ import Hero from '../../db/Hero'; import { PvpDefenseType } from '../../db/PvpDefense'; import PvpHistoryOpp from '../../db/PvpHistoryOpp'; import { PvpSeasonResultType } from '../../db/PvpSeasonResult'; -import { getPLvByScore } from '../../pubUtils/data'; +import { getPlvAndScore } from '../../pubUtils/data'; import { RewardInter } from '../../pubUtils/interface'; @@ -43,10 +43,12 @@ export class Defense { @prop({ required: true }) pLv: number; // 防守阵容的等级 - constructor(heroes: DefenseHero[], score: number, warId: number, buff: number) { + constructor(heroes: DefenseHero[], scores: number[], warId: number, buff: number) { this.heroes = heroes; + this.score = scores.reduce((pre, cur) => pre + cur, 0); + let {pLv, score} = getPlvAndScore(scores); + this.pLv = pLv, this.score = score; - this.pLv = getPLvByScore(score); this.warId = warId; this.buff = buff; } @@ -69,10 +71,12 @@ export class Attack { @prop({ required: true }) pLv: number; // 防守阵容的等级 - constructor(heroes: AttackHero[], score: number) { + constructor(heroes: AttackHero[], scores: number[]) { this.heroes = heroes; + this.score = scores.reduce((pre, cur) => pre + cur, 0); + let {pLv, score} = getPlvAndScore(scores); + this.pLv = pLv; this.score = score; - this.pLv = getPLvByScore(score); } } diff --git a/shared/pubUtils/data.ts b/shared/pubUtils/data.ts index 6aad89c32..fe4f93202 100644 --- a/shared/pubUtils/data.ts +++ b/shared/pubUtils/data.ts @@ -461,6 +461,13 @@ export function getPLvByScore(score: number) { return lv; } +export function getPlvAndScore(scores: number[] = []) { + if(scores.length <= 0) scores = [0]; + let maxScore = Math.max(...scores); // 等级:军功最高者的军功*6 + let score = scores.reduce((pre, cur) => pre + cur, 0); + return { score, pLv: getPLvByScore(maxScore)}; +} + export function getPvpHeroRewardsByScore(score: number) { for (let item of gameData.pvpHeroRewards) { if ((item.max >= score || item.max == -1) && score >= item.min) {