From b82d525f7fdb2646c829334f84f44a62bf80d150 Mon Sep 17 00:00:00 2001 From: zhangxk Date: Fri, 13 Oct 2023 17:03:06 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9E=20fix(=E5=B7=85=E5=B3=B0=E6=BC=94?= =?UTF-8?q?=E6=AD=A6):=20=E4=BF=AE=E6=94=B9=E7=AD=89=E7=BA=A7=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E3=80=812=E5=80=8D=E7=A2=BE=E5=8E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/servers/battle/handler/pvpHandler.ts | 14 +++++++------- game-server/app/services/pvpService.ts | 15 +++++++++------ shared/db/PvpRecord.ts | 5 +++++ shared/domain/battleField/pvp.ts | 16 ++++++++++++---- shared/pubUtils/data.ts | 8 +++++--- 5 files changed, 38 insertions(+), 20 deletions(-) diff --git a/game-server/app/servers/battle/handler/pvpHandler.ts b/game-server/app/servers/battle/handler/pvpHandler.ts index eaabd6c6d..23cc33b78 100644 --- a/game-server/app/servers/battle/handler/pvpHandler.ts +++ b/game-server/app/servers/battle/handler/pvpHandler.ts @@ -409,7 +409,7 @@ export class PvpHandler { if(subHid && (!dicHero || dicHero.urType != 1)) return resResult(STATUS.HERO_CAN_NOT_SET_SUB); if(subHid && heroes.findIndex(hero => hero.actorId == subHid) != -1) return resResult(STATUS.HERO_SUB_DUPLICATE); } - let attack = new Attack(heroes, scores); + let attack = new Attack(heroes, scores, pvpDefense.heroScores); let lineupCe = await generPvpLineupCe(roleId, pvpDefense.lineupCe, attack.heroes, pvpDefense.defense?.heroes??[], []); // 刷对手 let role = pvpDefense.role; @@ -454,7 +454,7 @@ export class PvpHandler { if(subHid && (!dicHero || dicHero.urType != 1)) return resResult(STATUS.HERO_CAN_NOT_SET_SUB); if(subHid && heroes.findIndex(hero => hero.actorId == subHid) != -1) return resResult(STATUS.HERO_SUB_DUPLICATE); } - let attack = new Attack(heroes, scores); + let attack = new Attack(heroes, scores, pvpDefense.heroScores); let lineupCe = await generPvpLineupCe(roleId, pvpDefense.lineupCe, attack.heroes, pvpDefense.defense?.heroes??[], []); // 保存 pvpDefense = await PvpDefenseModel.updateInfoAndInclude(roleId, { attack, lineupCe }); @@ -543,7 +543,7 @@ export class PvpHandler { let defenseHeroes = heroes.map(cur => { return new DefenseHero(cur, heroIdMap.get(cur.actorId)); }); - let defense = new Defense(defenseHeroes, scores, warId, buff, combo); + let defense = new Defense(defenseHeroes, scores, warId, buff, combo, pvpDefense.heroScores); let lineupCe = await generPvpLineupCe(roleId, pvpDefense.lineupCe, pvpDefense.attack?.heroes??[], defense.heroes, dbHeroes); await PvpSaveDataModel.createSaveData(roleId, warId, buff, defenseHeroes); pvpDefense = await PvpDefenseModel.updateInfoAndInclude(roleId, { ...refChallengeObj, defense, lineupCe, hasDefense: true, seasonNum }); @@ -763,7 +763,7 @@ export class PvpHandler { if (!curOpp) return resResult(STATUS.PVP_ROLE_NOT_FOUND); let oppDef = curOpp.oppDef; // 战力检测 - if (attackCe <= oppDef.defCe) return resResult(STATUS.PVP_SWEEP_NOT_CE); + if (attackCe <= oppDef.defCe * 2) return resResult(STATUS.PVP_SWEEP_NOT_CE); // 对手记录更新 await PvpHistoryOppModel.setStatus(oppDef._id.toString(), 1); @@ -784,15 +784,15 @@ export class PvpHandler { let update: pvpUpdateInter = {}; const myHeroes: pvpEndParamInter[] = heroes.map(hid => { return { hid, damage: 0, heal: 0, underDamage: 0 } }) const myRecInfo = await generMyRecInfo(pvpDefense, role, true, curOpp.pos, myHeroes); - let { attackInfo, showHeroScores, updateParam } = myRecInfo + let { attackInfo, showHeroScores, updateParam } = myRecInfo; update = { ...update, ...updateParam }; const oppHeroes: pvpEndParamInter[] = oppDef.heroes.map(cur => { return { hid: cur.actorId, damage: 0, heal: 0, underDamage: 0 } }) const defenseInfo = await generPVPOppRecInfo(true, curOpp, oppHeroes, serverId); - - update = { ...update, oppBeforePlayers: pvpDefense.oppPlayers }; + await PvpRecordModel.updateByRec(battleCode, {roleId1:roleId, roleId2:oppRoleId, warId, attackInfo, defenseInfo, createTime: nowSeconds(), timeout: false }); + // 刷新对手 let oppPlayers = await refreshEnemies(role, seasonNum, pvpDefense.score, pvpDefense.attack.score, pvpDefense.attack.pLv || 1); update.oppPlayers = oppPlayers; diff --git a/game-server/app/services/pvpService.ts b/game-server/app/services/pvpService.ts index c0c66016a..066969d9f 100644 --- a/game-server/app/services/pvpService.ts +++ b/game-server/app/services/pvpService.ts @@ -511,13 +511,16 @@ export async function generMyRecInfo(pvpDefense: PvpDefenseType, role: RoleType, } export function calLineupScore(lineup: Attack|Defense, heroScores: HeroScore[]) { - if(!lineup) return lineup; + // if(!lineup) return lineup; let scores: number[] = []; - for(let { actorId } of lineup.heroes) { - let hs = heroScores.find(cur => cur.hid == actorId); - if(hs) { - scores.push(hs.score); - } + // for(let { actorId } of lineup.heroes) { + // let hs = heroScores.find(cur => cur.hid == actorId); + // if(hs) { + // scores.push(hs.score); + // } + // } + for(let {score} of heroScores){ + scores.push(score); } let { pLv, score } = getPlvAndScore(scores); return {...lineup, score, pLv} diff --git a/shared/db/PvpRecord.ts b/shared/db/PvpRecord.ts index 7d0402ba0..bfe92f286 100644 --- a/shared/db/PvpRecord.ts +++ b/shared/db/PvpRecord.ts @@ -157,6 +157,11 @@ export default class PvpRecord extends BaseModel { return result; } + public static async updateByRec(battleCode: string, param: {roleId1: string, roleId2: string, warId: number, attackInfo: PvpRecordPlayerInfo, defenseInfo: PvpRecordPlayerInfo, createTime: number, timeout?: boolean }) { + const result = await PvpRecordModel.findOneAndUpdate({ battleCode }, param, { new: true, upsert: true }).lean(); + return result; + } + public static async getRecByRoleId( roleId: string, limit = 15, lean = true) { // await this.delPvpRecords(); let t = getTimeFun().getBeforeDayWithHour(3); diff --git a/shared/domain/battleField/pvp.ts b/shared/domain/battleField/pvp.ts index f5d11f70d..ff8d80018 100644 --- a/shared/domain/battleField/pvp.ts +++ b/shared/domain/battleField/pvp.ts @@ -65,10 +65,14 @@ export class Defense { @prop({ required: true, type: () => Combo, _id: false }) combo: Combo[]; // 防守阵容的等级 - constructor(heroes: DefenseHero[], scores: number[], warId: number, buff: number, combo: Combo[]) { + constructor(heroes: DefenseHero[], scores: number[], warId: number, buff: number, combo: Combo[], heroScores:HeroScore[]) { this.heroes = heroes; this.score = scores.reduce((pre, cur) => pre + cur, 0); - let {pLv, score} = getPlvAndScore(scores); + let newScores: number[] = []; + for(let {score} of heroScores){ + newScores.push(score); + } + let {pLv, score} = getPlvAndScore(newScores); this.pLv = pLv, this.score = score; this.warId = warId; @@ -96,10 +100,14 @@ export class Attack { @prop({ required: true }) pLv: number; // 防守阵容的等级 - constructor(heroes: AttackHero[], scores: number[]) { + constructor(heroes: AttackHero[], scores: number[], heroScores:HeroScore[]) { this.heroes = heroes; this.score = scores.reduce((pre, cur) => pre + cur, 0); - let {pLv, score} = getPlvAndScore(scores); + let newScores: number[] = []; + for(let {score} of heroScores){ + newScores.push(score); + } + let {pLv, score} = getPlvAndScore(newScores); this.pLv = pLv; this.score = score; } diff --git a/shared/pubUtils/data.ts b/shared/pubUtils/data.ts index 9b403ceee..65aefb6c7 100644 --- a/shared/pubUtils/data.ts +++ b/shared/pubUtils/data.ts @@ -13,7 +13,7 @@ import { dicTower, loadTower } from "./dictionary/DicTower"; import { dicTowerTask, loadTowerTask } from "./dictionary/DicTowerTask"; import { dicWar, dicWarPvp, dicDailyWarByType, loadWar, dicHeroIdByWar, dicComBattleReward } from "./dictionary/DicWar"; import { dicWarJson, loadWarJson } from "./dictionary/DicWarJson"; -import { AUCTION_TIME, BOSS_HP_RATIO_TYPE } from "../consts"; +import { AUCTION_TIME, BOSS_HP_RATIO_TYPE, LINEUP_NUM } from "../consts"; import { dicFashions, dicFashionsByHeroId, loadFashions } from "./dictionary/DicFashions"; import { friendShipByIndex, friendShips, friendShipsByLv, friendShipsMax, loadFriendShip } from "./dictionary/DicFriendShip"; import { dicHeroQualityUp, loadHeroQualityUp } from "./dictionary/DicHeroQualityUp"; @@ -645,9 +645,11 @@ export function getPlvAndScore(scores: number[] = []) { return b - a; } }); - let maxScore = scores.slice(0, 6).reduce((acc, curr) => acc + curr, 0); + let maxScore = scores.slice(0, LINEUP_NUM).reduce((acc, curr) => acc + curr, 0); let score = scores.reduce((pre, cur) => pre + cur, 0); - return { score, pLv: getPLvByScore(maxScore * param.PVP.PVP_LINEUP_HEROS) }; + // return { score, pLv: getPLvByScore(maxScore * param.PVP.PVP_LINEUP_HEROS) }; + return { score, pLv: getPLvByScore(maxScore) }; + } export function getPvpHeroRewardsByScore(score: number) {