diff --git a/game-server/app/servers/battle/handler/pvpHandler.ts b/game-server/app/servers/battle/handler/pvpHandler.ts index af960c407..aa3004c4b 100644 --- a/game-server/app/servers/battle/handler/pvpHandler.ts +++ b/game-server/app/servers/battle/handler/pvpHandler.ts @@ -95,9 +95,9 @@ export class PvpHandler { await PvpDefenseModel.updateInfo(roleId, {isFirstEntry:false}); } let pvpSeasonResult = await PvpSeasonResultModel.getPvpSeasonResult(roleId); - + let flag = false; if (!!pvpSeasonResult) { - var { oldSeasonData, show } = pvpSeasonResult; + var { oldSeasonData, show, heroGoods, rankGoods} = pvpSeasonResult; if ( oldSeasonData.seasonEndTime > nowSeconds()) { seasonEndTime = oldSeasonData.seasonEndTime; heroScores = oldSeasonData.heroScores; @@ -107,17 +107,20 @@ export class PvpHandler { challengeCnt = oldSeasonData.challengeCnt; challengeRefTime = oldSeasonData.challengeRefTime; } else if(show) { - await PvpSeasonResultModel.updatePvpSeasonResult(roleId, {show: false}) + await PvpSeasonResultModel.updatePvpSeasonResult(roleId, {show: false}); + flag = true; } } let myRank = await getMyRank(REDIS_KEY.PVP_RANK, 0, roleId);//去redis中获取排名 - let data = {warId, seasonNum, seasonEndTime, myRank, oppPlayers, heroes: heroes.map(cur => { + let data:any = {warId, seasonNum, seasonEndTime, myRank, oppPlayers, heroes: heroes.map(cur => { let {actorId, dataId, order} = cur; return { actorId, dataId, order } - }), score, pLv, winStreakNum, refOppCnt, challengeCnt, challengeRefTime, receivedBox, hisScore, heroScores, isFirstEntry, isDefaultHero, oldSeasonData, show } - + }), score, pLv, winStreakNum, refOppCnt, challengeCnt, challengeRefTime, receivedBox, hisScore, heroScores, isFirstEntry, isDefaultHero } + // if (show) { + data.resultRecord = { oldSeasonData, heroGoods, rankGoods } + // } return resResult(STATUS.SUCCESS, data); } diff --git a/game-server/app/services/timeTaskService.ts b/game-server/app/services/timeTaskService.ts index b7b88e437..e68aad4b9 100644 --- a/game-server/app/services/timeTaskService.ts +++ b/game-server/app/services/timeTaskService.ts @@ -94,9 +94,12 @@ export async function checkResult(pvpDefense: PvpDefenseType, seasonNum: number, let oldPLv = getLvByScore(pvpDefense.heroScores); let { winStreakNum, challengeCnt, challengeRefTime } = pvpDefense; let pvpRankReward = getScore(pvpRankRewards, rankLv); + let rankGoods = []; if(pvpRankReward) { goods = goods.concat(pvpRankReward.reward); + rankGoods = pvpRankReward.reward; } + let heroGoods = []; let score = 0; for (let i = 0; i < pvpDefense.heroScores.length; i++) { let heroScore = pvpDefense.heroScores[i]; @@ -104,6 +107,13 @@ export async function checkResult(pvpDefense: PvpDefenseType, seasonNum: number, if(pvpHeroReward) { goods = goods.concat(pvpHeroReward.reward); heroScore.score = pvpHeroReward.heroscore; + if (!!pvpHeroReward.reward[0]) { + heroGoods.push({ + hid: heroScore.hid, + id: pvpHeroReward.reward[0].id, + count: pvpHeroReward.reward[0].count, + }); + } } score += heroScore.score; } @@ -111,7 +121,7 @@ export async function checkResult(pvpDefense: PvpDefenseType, seasonNum: number, await PvpSeasonResultModel.updatePvpSeasonResult(pvpDefense.roleId, { oldSeasonData:{refOppCnt: pvpDefense.refOppCnt, rankLv, score: pvpDefense.score, pLv: oldPLv, heroScores: deepCopy(pvpDefense.heroScores), winStreakNum, seasonNum: pvpDefense.seasonNum, challengeCnt, challengeRefTime, seasonEndTime: pvpDefense.seasonEndTime - }, goods}); + }, heroGoods, rankGoods, show: true}); return { rankLv, score, pLv, heroScores: pvpDefense.heroScores, winStreakNum:0, seasonNum, challengeCnt:PVP.PVP_CHALLENGE_COUNTS, challengeRefTime:0, seasonEndTime, goods}; } diff --git a/shared/db/PvpSeasonResult.ts b/shared/db/PvpSeasonResult.ts index 6862519bb..35bdc8cfd 100644 --- a/shared/db/PvpSeasonResult.ts +++ b/shared/db/PvpSeasonResult.ts @@ -6,17 +6,31 @@ class RewardInter { @prop({ required: true }) count: number; } + +class HeroRewardInter { + @prop({ required: true }) + hid: number; + @prop({ required: true }) + id: number; + @prop({ required: true }) + count: number; +} export class HeroScores { @prop({ required: true }) hid: number; @prop({ required: true }) score: number; + @prop({ required: true }) + goodId: number; + @prop({ required: true }) + count: number; } export interface pvpUpdate { - goods?:Array; + rankGoods?:Array; oldSeasonData?: SeasonData; show?: boolean; + heroGoods?:Array; } class SeasonData { @@ -56,15 +70,18 @@ export default class PvpSeasonResult extends BaseModel { @prop({ required: true }) roleId: string; - @prop({ required: true, type: RewardInter, default: [], _id: false}) - goods: Array; - @prop({ required: true, type: SeasonData, _id: false}) oldSeasonData: SeasonData; - @prop({ required: true, default: true, _id: false}) + @prop({ required: true, default: true }) show: boolean; + @prop({ required: true, type: HeroRewardInter, default: [], _id: false}) + heroGoods: Array; + + @prop({ required: true, type: RewardInter, default: [], _id: false}) + rankGoods: Array; + public static async updatePvpSeasonResult(roleId: string, update: pvpUpdate , lean = true) { let result: PvpSeasonResultType = await PvpSeasonResultModel.findOneAndUpdate({roleId}, {$set: update}, {upsert: true, new: true}).lean(lean); return result;