From 13650db78f4abbb1851f6362e58a2918bdaf54dd Mon Sep 17 00:00:00 2001 From: luying Date: Wed, 19 Oct 2022 13:53:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=85=E5=B3=B0=E6=BC=94=E6=AD=A6=EF=BC=9A?= =?UTF-8?q?=E8=B5=9B=E5=AD=A3id=E5=9C=A8=E6=8E=92=E8=A1=8C=E6=A6=9C?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= 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 | 4 ++-- shared/db/PvpDefense.ts | 11 +++++------ 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/game-server/app/servers/battle/handler/pvpHandler.ts b/game-server/app/servers/battle/handler/pvpHandler.ts index ac8412326..f857d578a 100644 --- a/game-server/app/servers/battle/handler/pvpHandler.ts +++ b/game-server/app/servers/battle/handler/pvpHandler.ts @@ -38,17 +38,17 @@ export class PvpHandler { async getData(msg: {}, session: BackendSession) { let roleId = session.get('roleId'); - let pvpDefense = await PvpDefenseModel.findByRoleIdIncludeAll(roleId); - if(!pvpDefense) { - let role = await RoleModel.findByRoleId(roleId); - pvpDefense = await PvpDefenseModel.createPvpDefense({ serverId: role.serverId, roleId: role.roleId, roleName: role.roleName, role: role._id }); - } - // 如果没有发过,将上赛季的奖励发下 - pvpDefense = await sendLastSeasonRewardIfNotSent(pvpDefense); let seasonNum: number = this.app.get('pvpSeasonNum'); let seasonStartTime: number = this.app.get('pvpSeasonStartTime'); let seasonEndTime: number = this.app.get('pvpSeasonEndTime'); let seasonRewardTime: number = this.app.get('pvpSeasonRewardTime'); + let pvpDefense = await PvpDefenseModel.findByRoleIdIncludeAll(roleId); + if(!pvpDefense) { + let role = await RoleModel.findByRoleId(roleId); + pvpDefense = await PvpDefenseModel.createPvpDefense(seasonNum, { serverId: role.serverId, roleId: role.roleId, roleName: role.roleName, role: role._id }); + } + // 如果没有发过,将上赛季的奖励发下 + pvpDefense = await sendLastSeasonRewardIfNotSent(pvpDefense); let update: pvpUpdateInter = { }; let result = new PvpDataReturn(); // 返回对象 diff --git a/game-server/app/services/pvpService.ts b/game-server/app/services/pvpService.ts index c8fc13254..fc18934e7 100644 --- a/game-server/app/services/pvpService.ts +++ b/game-server/app/services/pvpService.ts @@ -625,13 +625,13 @@ async function sendUnreceivedPvpBox(roleId: string, seasonNum: number, seasonWin async function resetPvpScores(pvpDefense: PvpDefenseType, pvpSeasonResult: PvpSeasonResultType) { let { roleId, attack } = pvpDefense; - let { newHeroScores, newScore } = pvpSeasonResult; + let { newHeroScores, newScore, seasonNum } = pvpSeasonResult; let initCount = await getVipPvpChallengeMaxCnt(roleId) let newAttack = calLineupScore(attack, newHeroScores); pvpDefense = await PvpDefenseModel.updateInfoAndInclude(roleId, { - heroScores: newHeroScores, score: newScore, attack: newAttack, defense: null, hasDefense: false, + heroScores: newHeroScores, score: newScore, attack: newAttack, defense: null, hasDefense: false, rankSeasonNum: seasonNum + 1, challengeCnt: initCount, challengeRefTime: 0, winStreakNum: 0, seasonWinNum: 0, receivedBox: [] }); diff --git a/shared/db/PvpDefense.ts b/shared/db/PvpDefense.ts index b3c129ebb..075003f23 100644 --- a/shared/db/PvpDefense.ts +++ b/shared/db/PvpDefense.ts @@ -2,8 +2,6 @@ import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType, Ref, mongoose } from '@typegoose/typegoose'; import Role, { } from './Role'; import { Defense, Attack, LineupCe, OppPlayer, HeroScore, } from '../domain/battleField/pvp'; -import { CounterModel } from './Counter'; -import { COUNTER } from '../consts'; import { PVP } from '../pubUtils/dicParam'; @index({ roleId: 1 }) @@ -61,6 +59,8 @@ export default class PvpDefense extends BaseModel { seasonNum: number; @prop({ required: true, default: 0 }) seasonWinNum: number; // 本赛季胜利次数 + @prop({ required: true, default: 1 }) + rankSeasonNum: number; @prop({ required: true, default: 0 }) defenseScoreCnt: number; @@ -80,11 +80,10 @@ export default class PvpDefense extends BaseModel { return result; } - public static async createPvpDefense(params: pvpUpdateInter) { - let seasonNum = await CounterModel.getCounter(COUNTER.PVP_SEASON_NUM); + public static async createPvpDefense(seasonNum: number, params: pvpUpdateInter) { const doc = new PvpDefenseModel(); - const update = Object.assign(doc.toJSON(), params, { seasonNum, challengeCnt: PVP.PVP_CHALLENGE_COUNTS }); + const update = Object.assign(doc.toJSON(), params, { rankSeasonNum: seasonNum, challengeCnt: PVP.PVP_CHALLENGE_COUNTS }); const defense: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({ roleId: params.roleId }, update, { upsert: true, new: true }) .populate('role') .lean(); @@ -176,7 +175,7 @@ export default class PvpDefense extends BaseModel { public static async getRank(seasonNum: number, page = 1, limit = 1000) { let sortBy = { score: -1, updatedAt: 1 }; - const ranks: PvpDefenseType[] = await PvpDefenseModel.find({seasonNum, score: { $gt: 0 }}).select('roleId role score updatedAt') + const ranks: PvpDefenseType[] = await PvpDefenseModel.find({rankSeasonNum: seasonNum, score: { $gt: 0 }}).select('roleId role score updatedAt') .populate('role', 'roleId roleName head frame spine heads frames spines title lv vLv updatedAt') .sort(sortBy).limit(limit).skip((page - 1) * limit).lean({ getters: true, virtuals: true }); return ranks;