From 942ab270b0ff5bb3c793b70abd41d3ac030d8a99 Mon Sep 17 00:00:00 2001 From: luying Date: Thu, 14 Jan 2021 19:02:30 +0800 Subject: [PATCH] =?UTF-8?q?fix=20pvp=E6=AF=8F=E5=A4=A9=E7=AC=AC=E4=B8=80?= =?UTF-8?q?=E6=AC=A1=E7=99=BB=E5=BD=95=E9=A1=B5=E9=9D=A2=E5=88=B7=E6=96=B0?= =?UTF-8?q?=E5=AF=B9=E6=89=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game-server/app/services/pvpService.ts | 29 +++++++++++++++++++------- shared/db/PvpDefense.ts | 2 +- 2 files changed, 22 insertions(+), 9 deletions(-) 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;