diff --git a/game-server/app/servers/battle/handler/pvpHandler.ts b/game-server/app/servers/battle/handler/pvpHandler.ts index 0d1429d00..3ae6f673f 100644 --- a/game-server/app/servers/battle/handler/pvpHandler.ts +++ b/game-server/app/servers/battle/handler/pvpHandler.ts @@ -2,7 +2,7 @@ import { Application, BackendSession, pinus, HandlerService, } from 'pinus'; import { uniq, findWhere, findIndex } from 'underscore'; import { gameData, getPvpBoxs, getPLvByScore } from '../../../pubUtils/data'; -import { refreshEnemies, getEnemies, getLvByScore, defaultHeroes, comsumeChallengeCnt, refresh, findPvpDefByRoleId, getRefOppCnt, findPvpDefAllByRoleId, generPVPOppRecInfo, generMyRecInfo } from '../../../services/pvpService'; +import { refreshEnemies, getEnemies, getLvByScore, defaultHeroes, comsumeChallengeCnt, refresh, findPvpDefByRoleId, getRefOppCnt, findPvpDefAllByRoleId, generPVPOppRecInfo, generMyRecInfo, initPvpInfo } from '../../../services/pvpService'; import { RoleModel, RoleType } from '../../../db/Role'; import { STATUS } from '../../../consts/statusCode'; import { resResult, genCode, checkRoleIsRobot, robotIdComBack } from '../../../pubUtils/util'; @@ -105,6 +105,10 @@ export class PvpHandler { async getData(msg: {}, session: BackendSession) { let roleId = session.get('roleId'); let { pvpDefense, warId, seasonEndTime } = await findPvpDefAllByRoleId(roleId); + if(!pvpDefense) { + let role = await RoleModel.findByRoleId(roleId); + pvpDefense = await initPvpInfo(role); + } let oppPlayers = await getEnemies(pvpDefense.oppPlayers, pvpDefense.winStreakNum); let { isDefaultHero, heroes, score, pLv, winStreakNum, refOppCnt, challengeCnt, challengeRefTime, receivedBox, hisScore, heroScores, isFirstEntry, seasonNum } = pvpDefense; if (isFirstEntry) { diff --git a/game-server/app/servers/role/handler/roleHandler.ts b/game-server/app/servers/role/handler/roleHandler.ts index ed6051e8d..8e7cb436e 100644 --- a/game-server/app/servers/role/handler/roleHandler.ts +++ b/game-server/app/servers/role/handler/roleHandler.ts @@ -19,7 +19,6 @@ import { updateUserInfo } from '../../../services/redisService'; import { checkTaskWithHero, checkTask, checkTaskWithArgs, checkActivityTask } from '../../../services/taskService'; import { getGoldObject, getCoinObject } from '../../../pubUtils/itemUtils'; import { RScriptRecordModel } from '../../../db/RScriptRecord'; -import { checkPvp } from '../../../services/pvpService'; import { SkinModel, SkinUpdate } from '../../../db/Skin'; import { CreateHeroes } from '../../../pubUtils/roleUtil'; import { Figure } from '../../../domain/dbGeneral'; @@ -73,8 +72,6 @@ export class RoleHandler { let warInfo = gameData.war.get(battleId); await RScriptRecordModel.setScript(roleId, battleId, warInfo.warType, 2, SCRIPT.SCRIPT_NAME); - await checkPvp(role); - console.log('******** initRole end', Date.now()); return resResult(STATUS.SUCCESS, { roleId, roleName, heroes diff --git a/game-server/app/services/playerEventService.ts b/game-server/app/services/playerEventService.ts index 97e147798..eb614693e 100644 --- a/game-server/app/services/playerEventService.ts +++ b/game-server/app/services/playerEventService.ts @@ -1,5 +1,5 @@ -import { checkPvp, findPvpDefByRoleId } from '../services/pvpService' +import { findPvpDefByRoleId } from '../services/pvpService' import { getFuncsSwitch, gameData } from '../pubUtils/data'; import { FUNCS_ID, FUNC_OPT_TYPE } from '../consts/constModules/sysConst'; import { RoleModel } from '../db/Role'; @@ -19,10 +19,6 @@ export async function eventOnPlayerLvUp(roleId: string, lv: number, addFuncs: Ar if (dicFunSwitch && lv >= dicFunSwitch.param) { addFuncs.push(id); - if(id == FUNCS_ID.PVP) { - let role = await RoleModel.findByRoleId(roleId, null, true); - await checkPvp(role); - } } } diff --git a/game-server/app/services/pvpService.ts b/game-server/app/services/pvpService.ts index 055564bad..0d66b4474 100644 --- a/game-server/app/services/pvpService.ts +++ b/game-server/app/services/pvpService.ts @@ -46,7 +46,7 @@ export async function initPvpInfo(role: RoleType) { let oppPlayers: Array = await refreshEnemies(role, 0, 1); let { seasonNum } = await PVPConfigModel.findCurPVPConfig(); let challengeCnt = PVP.PVP_CHALLENGE_COUNTS; - let result = await PvpDefenseModel.createPvpDefense({ roleId: role.roleId, roleName: role.roleName, role: role._id, heroes, oppPlayers, defCe, seasonNum, challengeCnt }); + let result = await PvpDefenseModel.createPvpDefenseAndPopulate({ roleId: role.roleId, roleName: role.roleName, role: role._id, heroes, oppPlayers, defCe, seasonNum, challengeCnt }); //加入排行榜 let r = new Rank(REDIS_KEY.PVP_RANK, {}); @@ -428,6 +428,7 @@ export function comsumeChallengeCnt(challengeCnt: number, challengeRefTime: numb export async function findPvpDefByRoleId(roleId: string) { let pvpDefense = await PvpDefenseModel.findByRoleIdIncludeAll(roleId); let { warId, seasonNum, seasonEndTime } = await PVPConfigModel.findCurPVPConfig(); + if(!pvpDefense) return { pvpDefense, warId } let oldSeasonNum = await CounterModel.getCounter(COUNTER.PVP_SEASON_NUM); let { seasonEndTime: oldSeasonEndTime } = await PVPConfigModel.findPVPConfig(oldSeasonNum); if (pvpDefense.seasonNum !== seasonNum && oldSeasonEndTime < nowSeconds()) { @@ -467,6 +468,7 @@ export function getRefOppCnt(refOppCnt: number, refOppTime: Date) { export async function findPvpDefAllByRoleId(roleId: string) { let pvpDefense = await PvpDefenseModel.findByRoleIdIncludeAll(roleId); let { warId, seasonNum, seasonEndTime } = await PVPConfigModel.findCurPVPConfig(); + if(!pvpDefense) return { pvpDefense, warId } let oldSeasonNum = await CounterModel.getCounter(COUNTER.PVP_SEASON_NUM); let { seasonEndTime: oldSeasonEndTime } = await PVPConfigModel.findPVPConfig(oldSeasonNum); diff --git a/shared/db/PvpDefense.ts b/shared/db/PvpDefense.ts index 78f67adbd..1f3608632 100644 --- a/shared/db/PvpDefense.ts +++ b/shared/db/PvpDefense.ts @@ -113,10 +113,20 @@ export default class PvpDefense extends BaseModel { return result; } - public static async createPvpDefense(params: { roleId: string, roleName: string, role: string, heroes: Array, oppPlayers: Array, defCe: number, seasonNum: number,challengeCnt: number }, lean = true) { + public static async createPvpDefense(params: pvpUpdateInter) { const doc = new PvpDefenseModel(); const update = Object.assign(doc.toJSON(), params); - const defense: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({ roleId: params.roleId }, update, { upsert: true, new: true }).lean(lean); + const defense: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({ roleId: params.roleId }, update, { upsert: true, new: true }).lean(); + return defense; + + } + + public static async createPvpDefenseAndPopulate(params: pvpUpdateInter) { + const doc = new PvpDefenseModel(); + const update = Object.assign(doc.toJSON(), params); + const defense: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({ roleId: params.roleId }, update, { upsert: true, new: true }) + .populate('oppPlayers.oppDef', 'oppRoleId pos roleName head frame spine rankLv pLv title lv defCe heroes') + .lean(); return defense; }