diff --git a/game-server/app/servers/battle/handler/pvpHandler.ts b/game-server/app/servers/battle/handler/pvpHandler.ts index cfcc0ffd0..8216bc109 100644 --- a/game-server/app/servers/battle/handler/pvpHandler.ts +++ b/game-server/app/servers/battle/handler/pvpHandler.ts @@ -84,7 +84,9 @@ export class PvpHandler { result.setPvpDefense(pvpDefense); result.calHasSaveDefense(); - let oppPlayersReturn = await getEnemies(pvpDefense.oppPlayers||[], pvpDefense.winStreakNum); + let groupId = await getPVPGroupIdOfServer(serverId); + let r = new Rank(REDIS_KEY.PVP_RANK, { seasonNum, groupId }); + let oppPlayersReturn = await getEnemies(r, pvpDefense.oppPlayers||[], pvpDefense.winStreakNum); result.setOppPlayers(oppPlayersReturn); // 赛季结算 let pvpSeasonResult = await PvpSeasonResultModel.getPvpSeasonResult(roleId); @@ -93,8 +95,6 @@ export class PvpHandler { await PvpSeasonResultModel.setShow(roleId); } // 排行榜 - let groupId = await getPVPGroupIdOfServer(serverId); - let r = new Rank(REDIS_KEY.PVP_RANK, { seasonNum, groupId }); let myRank = await r.getMyRank({ roleId });//去redis中获取排名 result.setMyRank(myRank); @@ -105,6 +105,7 @@ export class PvpHandler { async refreshOppPlayer(msg: {}, session: BackendSession) { let roleId = session.get('roleId'); let sid = session.get('sid'); + let serverId = session.get('serverId'); let pvpDefense = await PvpDefenseModel.findByRoleIdIncludeAll(roleId); if(!pvpDefense) return resResult(STATUS.PVP_NOT_OPEN); @@ -129,7 +130,11 @@ export class PvpHandler { let result = new PvpDataReturn(); // 返回对象 result.setPvpDefense(pvpDefense); - let oppPlayersReturn = await getEnemies(pvpDefense.oppPlayers, pvpDefense.winStreakNum); + + let groupId = await getPVPGroupIdOfServer(serverId); + let r = new Rank(REDIS_KEY.PVP_RANK, { seasonNum, groupId }); + + let oppPlayersReturn = await getEnemies(r, pvpDefense.oppPlayers, pvpDefense.winStreakNum); result.setOppPlayers(oppPlayersReturn); return resResult(STATUS.SUCCESS, pick(result, ['oppPlayers', 'refOppCnt', 'buyAttackCnt', 'setAttackCnt'])); @@ -217,7 +222,11 @@ export class PvpHandler { let result = new PvpDataReturn(); // 返回对象 result.setPvpDefense(pvpDefense); - let oppPlayersReturn = await getEnemies(pvpDefense.oppPlayers, pvpDefense.winStreakNum); + + let groupId = await getPVPGroupIdOfServer(serverId); + let r = new Rank(REDIS_KEY.PVP_RANK, { seasonNum, groupId }); + + let oppPlayersReturn = await getEnemies(r, pvpDefense.oppPlayers, pvpDefense.winStreakNum); result.setOppPlayers(oppPlayersReturn); return resResult(STATUS.SUCCESS, { @@ -232,7 +241,7 @@ export class PvpHandler { let roleId = session.get('roleId'); let roleName = session.get('roleName'); let sid = session.get('sid'); - + const serverId = session.get('serverId'); const { battleCode, isSuccess, myHeroes, oppHeroes } = msg; @@ -282,8 +291,6 @@ export class PvpHandler { let result = new PvpDataReturn(); // 返回对象 result.setPvpDefense(pvpDefense); - let oppPlayersReturn = await getEnemies(pvpDefense.oppPlayers, pvpDefense.winStreakNum); - result.setOppPlayers(oppPlayersReturn); if(seasonNum == pvpSeasonNum) { @@ -296,6 +303,11 @@ export class PvpHandler { if(defenseInfo && defenseInfo.score > 0) await r.setRankWithRoleInfo(defenseInfo.roleId, defenseInfo.score, pvpDefense.updatedAt.getTime(), null, true); } + let groupId = await getPVPGroupIdOfServer(serverId); + let r = new Rank(REDIS_KEY.PVP_RANK, { seasonNum, groupId }); + let oppPlayersReturn = await getEnemies(r, pvpDefense.oppPlayers, pvpDefense.winStreakNum); + result.setOppPlayers(oppPlayersReturn); + await checkTaskInPvpEnd(serverId, roleId, sid, isSuccess, pvpDefense.heroScores, pvpDefense.seasonWinNum); if(hisWinStreakNum < pvpDefense.hisWinStreakNum) { await unlockFigure(sid, roleId, [{ type: FIGURE_UNLOCK_CONDITION.PVP_WIN_SERIES, paramWinStreakNum: pvpDefense.hisWinStreakNum }]); @@ -313,6 +325,8 @@ export class PvpHandler { let { count } = msg; let roleId = session.get('roleId'); let sid = session.get('sid'); + let serverId = session.get('serverId'); + let seasonNum: number = this.app.get('pvpSeasonNum'); let pvpDefense = await PvpDefenseModel.findByRoleId(roleId); if(!pvpDefense) return resResult(STATUS.PVP_NOT_OPEN); @@ -346,7 +360,10 @@ export class PvpHandler { result.setPvpDefense(pvpDefense); let pickParam = ['buyAttackCnt', 'setAttackCnt', 'refOppCnt']; if(refOppObj.shouldRefOpp) { - let oppPlayersReturn = await getEnemies(pvpDefense.oppPlayers||[], pvpDefense.winStreakNum); + + let groupId = await getPVPGroupIdOfServer(serverId); + let r = new Rank(REDIS_KEY.PVP_RANK, { seasonNum, groupId }); + let oppPlayersReturn = await getEnemies(r, pvpDefense.oppPlayers||[], pvpDefense.winStreakNum); result.setOppPlayers(oppPlayersReturn); pickParam.push('oppPlayers'); } @@ -357,6 +374,7 @@ export class PvpHandler { async saveAttack(msg: { heroes: { actorId: number, order: number }[] }, session: BackendSession) { let { heroes } = msg; let roleId = session.get('roleId'); + let serverId = session.get('serverId'); let pvpDefense = await PvpDefenseModel.findByRoleIdIncludeAll(roleId); if(!pvpDefense) return resResult(STATUS.PVP_NOT_OPEN); @@ -392,7 +410,10 @@ export class PvpHandler { // 返回 let result = new PvpDataReturn(); result.setPvpDefense(pvpDefense); - let oppPlayersReturn = await getEnemies(pvpDefense.oppPlayers||[], pvpDefense.winStreakNum); + + let groupId = await getPVPGroupIdOfServer(serverId); + let r = new Rank(REDIS_KEY.PVP_RANK, { seasonNum, groupId }); + let oppPlayersReturn = await getEnemies(r, pvpDefense.oppPlayers||[], pvpDefense.winStreakNum); result.setOppPlayers(oppPlayersReturn); return resResult(STATUS.SUCCESS, pick(result, ['attack', 'oppPlayers', 'buyAttackCnt', 'setAttackCnt', 'challengeCnt', 'challengeRefTime'])); diff --git a/game-server/app/services/pvpService.ts b/game-server/app/services/pvpService.ts index ff8c78173..844aba7cf 100644 --- a/game-server/app/services/pvpService.ts +++ b/game-server/app/services/pvpService.ts @@ -36,7 +36,7 @@ import { findKeys } from './redisService'; * @param oppPlayers pvpDefense表中的oppPlayers字段,需要populate过的 * @param pLv 玩家本人的队伍等级 */ -export async function getEnemies(oppPlayers: OppPlayer[], winStreakNum: number) { +export async function getEnemies(r: Rank, oppPlayers: OppPlayer[], winStreakNum: number) { let result = new Array(); for (let oppPlayer of oppPlayers) { @@ -45,12 +45,13 @@ export async function getEnemies(oppPlayers: OppPlayer[], winStreakNum: number) let oppDef = oppPlayer.oppDef; // select 'oppRoleId pos roleName head frame spine rankLv pLv defCe' if (oppDef) delete oppDef.heroes; + let myRank = await r.getMyRank({ roleId: robotIdComBack(oppDef.oppRoleId) });//去redis中获取排名 result.push({ ...oppDef, roleId: oppDef.oppRoleId, defCe: oppDef.defCe, addScore: dicOpponent.score, - rankLv: oppDef.rankLv, + rankLv: myRank||0, plusScore: getPlusScore(winStreakNum) }); }