diff --git a/game-server/app/servers/battle/handler/pvpHandler.ts b/game-server/app/servers/battle/handler/pvpHandler.ts index cc333657f..db588c905 100644 --- a/game-server/app/servers/battle/handler/pvpHandler.ts +++ b/game-server/app/servers/battle/handler/pvpHandler.ts @@ -165,23 +165,7 @@ export class PvpHandler { if (challengeCnt == 0) { return resResult(STATUS.PVP_CHALLENGE_TIMES_NOT_ENOUGH); } - - // 对手记录更新 - await PvpHistoryOppModel.setStatus(roleId, oppRoleId, 1); - - let update: pvpUpdateInter = {}; - // 刷新对手 - const role = await RoleModel.findByRoleId(roleId, null, true); - let oppPlayers = await refreshEnemies(role, seasonNum, pvpDefense.score ,pvpDefense.attack.score, pvpDefense.attack.pLv||1); - update.oppPlayers = oppPlayers; - - // 减少挑战次数 - let refChallengeObj = refChallengeCnt(pvpDefense.challengeCnt, pvpDefense.challengeRefTime, seasonEndTime); - refChallengeObj.challengeCnt--; - update = {...update, ...refChallengeObj}; - - pvpDefense = await PvpDefenseModel.updateInfo(roleId, update); - let curOpp = oppPlayers.find(cur => cur.roleId == oppRoleId); + let curOpp = pvpDefense.oppPlayers.find(cur => cur.roleId == oppRoleId); if (!curOpp) return resResult(STATUS.PVP_ROLE_NOT_FOUND) const battleCode = genCode(8); // 关卡唯一值 @@ -198,6 +182,24 @@ export class PvpHandler { }, true); await checkTask(roleId, sid, TASK_TYPE.PVP, 1, true, {}); + // 对手记录更新 + await PvpHistoryOppModel.setStatus(roleId, oppRoleId, 1); + + let update: pvpUpdateInter = { + oppBeforePlayers: pvpDefense.oppPlayers + }; + // 刷新对手 + const role = await RoleModel.findByRoleId(roleId, null, true); + let oppPlayers = await refreshEnemies(role, seasonNum, pvpDefense.score ,pvpDefense.attack.score, pvpDefense.attack.pLv||1); + update.oppPlayers = oppPlayers; + + // 减少挑战次数 + let refChallengeObj = refChallengeCnt(pvpDefense.challengeCnt, pvpDefense.challengeRefTime, seasonEndTime); + refChallengeObj.challengeCnt--; + update = {...update, ...refChallengeObj}; + + pvpDefense = await PvpDefenseModel.updateInfoAndInclude(roleId, update); + let result = new PvpDataReturn(); // 返回对象 result.setPvpDefense(pvpDefense); let oppPlayersReturn = await getEnemies(pvpDefense.oppPlayers, pvpDefense.winStreakNum); @@ -246,7 +248,7 @@ export class PvpHandler { let { attackInfo, showHeroScores, updateParam } = myRecInfo update = { ...update, ...updateParam }; - let curOpp = pvpDefense.oppPlayers.find(cur => cur.roleId == oppRoleId && cur.pos == pos); + let curOpp = pvpDefense.oppBeforePlayers.find(cur => cur.roleId == oppRoleId && cur.pos == pos); if (!curOpp) return resResult(STATUS.PVP_ROLE_NOT_FOUND); const defenseInfo = await generPVPOppRecInfo(isSuccess, curOpp, oppHeroes, role.lv); diff --git a/shared/db/PvpDefense.ts b/shared/db/PvpDefense.ts index a9f0e5378..dea82034d 100644 --- a/shared/db/PvpDefense.ts +++ b/shared/db/PvpDefense.ts @@ -22,6 +22,8 @@ export default class PvpDefense extends BaseModel { lineupCe: LineupCe[]; @prop({ required: true, type: () => OppPlayer, default: [], _id: false }) oppPlayers: OppPlayer[]; + @prop({ required: true, type: () => OppPlayer, default: [], _id: false }) + oppBeforePlayers: OppPlayer[]; @prop({ required: true, type: () => HeroScore, default: [], _id: false }) heroScores: HeroScore[]; @@ -112,7 +114,8 @@ export default class PvpDefense extends BaseModel { const result: PvpDefenseType = await PvpDefenseModel.findOne({ roleId }) .populate('role', 'head frame spine topLineupCe roleId roleName lv globalCeAttr') .populate('heroes.hero') - .populate('oppPlayers.oppDef', 'oppRoleId pos roleName head frame spine heads frames spines rankLv title lv pLv defCe heroes warId buff').lean({ getters: true, virtuals: true }); + .populate('oppPlayers.oppDef', 'oppRoleId pos roleName head frame spine heads frames spines rankLv title lv pLv defCe heroes warId buff') + .populate('oppBeforePlayers.oppDef', 'oppRoleId pos roleName head frame spine heads frames spines rankLv title lv pLv defCe heroes warId buff').lean({ getters: true, virtuals: true }); return result; }