diff --git a/game-server/app/services/pvpService.ts b/game-server/app/services/pvpService.ts index f1a1abd8a..632f8730a 100644 --- a/game-server/app/services/pvpService.ts +++ b/game-server/app/services/pvpService.ts @@ -1,7 +1,7 @@ /** * 体力系统 */ -import { PvpDefenseModel, Heroes, OppPlayers, Robot, PvpDefenseType, HeroScores } from '../db/PvpDefense'; +import { PvpDefenseModel, Heroes, OppPlayers, Robot, PvpDefenseType, HeroScores, pvpUpdateInter } from '../db/PvpDefense'; import { RoleType, RoleModel } from '../db/Role'; import { PVP_HERO_POS, ROBOT_NAME, REDIS_KEY, PVP_CONST } from '../consts'; import { setPvpDefResult } from '../services/timeTaskService'; @@ -338,7 +338,7 @@ export async function findPvpDefByRoleId(roleId: string) { return {pvpDefense: newPvpDefense, warId}; } let {challengeCnt, challengeRefTime} = refresh(pvpDefense.challengeCnt, pvpDefense.challengeRefTime, pvpDefense.seasonEndTime); - let { refOppCnt, refOppTime } = getRefOppCnt(pvpDefense.refOppCnt, pvpDefense.refOppTime); // 刷新次数 + let { refOppCnt, refOppTime, shouldRefOpp } = getRefOppCnt(pvpDefense.refOppCnt, pvpDefense.refOppTime); // 刷新次数 if (challengeCnt != pvpDefense.challengeCnt ||refOppCnt != pvpDefense.refOppCnt) { await PvpDefenseModel.updateInfo( roleId, { challengeCnt, challengeRefTime, refOppCnt}); pvpDefense.challengeCnt = challengeCnt; @@ -346,16 +346,18 @@ export async function findPvpDefByRoleId(roleId: string) { pvpDefense.refOppCnt = refOppCnt; pvpDefense.refOppTime = refOppTime; } - return {pvpDefense, warId}; + return {pvpDefense, warId, shouldRefOpp}; } // 获取刷新对手次数及消耗 export function getRefOppCnt(refOppCnt: number, refOppTime: Date) { let curTime = new Date(); - if(shouldRefresh(refOppTime, curTime, PVP_CONST.REFRESH_TIME)) { + let shouldRefOpp = shouldRefresh(refOppTime, curTime, PVP_CONST.REFRESH_TIME); + if(shouldRefOpp) { refOppCnt = 0; refOppTime = curTime; } return { + shouldRefOpp, refOppCnt, refOppTime, consume: gameData.pvpRefreshConsume.get(refOppCnt + 1) } @@ -376,15 +378,26 @@ export async function findPvpDefAllByRoleId(roleId: string) { pvpDefense.seasonEndTime = seasonEndTime; } let {challengeCnt, challengeRefTime} = refresh(pvpDefense.challengeCnt, pvpDefense.challengeRefTime, pvpDefense.seasonEndTime); - let { refOppCnt, refOppTime } = getRefOppCnt(pvpDefense.refOppCnt, pvpDefense.refOppTime); // 刷新次数 - if (challengeCnt != pvpDefense.challengeCnt || refOppCnt != pvpDefense.refOppCnt) { - await PvpDefenseModel.updateInfo( roleId, { challengeCnt, challengeRefTime, refOppCnt, refOppTime}); + let { refOppCnt, refOppTime, shouldRefOpp } = getRefOppCnt(pvpDefense.refOppCnt, pvpDefense.refOppTime); // 刷新次数 + if (challengeCnt != pvpDefense.challengeCnt || refOppCnt != pvpDefense.refOppCnt || shouldRefOpp) { + let update: pvpUpdateInter = { + challengeCnt, challengeRefTime, refOppCnt, refOppTime + }; + + if(shouldRefOpp) { + let role = pvpDefense.role; + let oppPlayers = await refreshEnemies(role, pvpDefense.score, pvpDefense.pLv); + update.oppPlayers = oppPlayers; + pvpDefense.oppPlayers = oppPlayers; + } + + await PvpDefenseModel.updateInfo( roleId, update); pvpDefense.challengeCnt = challengeCnt; pvpDefense.challengeRefTime = challengeRefTime; pvpDefense.refOppCnt = refOppCnt; pvpDefense.refOppTime = refOppTime; } - return {pvpDefense, warId}; + return {pvpDefense, warId, shouldRefOpp}; } // 获取机器人阵容 diff --git a/shared/db/PvpDefense.ts b/shared/db/PvpDefense.ts index 3d58e3660..c5da71537 100644 --- a/shared/db/PvpDefense.ts +++ b/shared/db/PvpDefense.ts @@ -5,7 +5,7 @@ import Role, { } from './Role'; import PvpDef, { } from './PvpDefense'; import { PVP_PLAYER_POS, PVP_HERO_POS } from '../consts'; -interface pvpUpdateInter { +export interface pvpUpdateInter { _id?: string; oppPlayers?: OppPlayers[]; hisScore?: number;