diff --git a/game-server/app/servers/battle/handler/pvpHandler.ts b/game-server/app/servers/battle/handler/pvpHandler.ts index 168186022..8296e9328 100644 --- a/game-server/app/servers/battle/handler/pvpHandler.ts +++ b/game-server/app/servers/battle/handler/pvpHandler.ts @@ -1,7 +1,7 @@ import {Application, BackendSession, pinus} from 'pinus'; import { uniq, findWhere, findIndex } from 'underscore'; import { gameData, getPvpBoxs, getPLvByScore } from '../../../pubUtils/data'; -import { refreshEnemies, getEnemies, getLvByScore, defaultHeroes, comsumeChallengeCnt, refresh, findPvpDefByRoleId, checkRoleIsRobot, getRefOppCnt, findPvpDefAllByRoleId, generPVPOppRecInfo, generMyRecInfo } from '../../../services/pvpService'; +import { refreshEnemies, getEnemies, getLvByScore, defaultHeroes, comsumeChallengeCnt, refresh, findPvpDefByRoleId, checkRoleIsRobot, getRefOppCnt, findPvpDefAllByRoleId, generPVPOppRecInfo, generMyRecInfo, robotIdComBack } from '../../../services/pvpService'; import { RoleModel, RoleType } from '../../../db/Role'; import { STATUS } from '../../../consts/statusCode'; import { resResult, genCode } from '../../../pubUtils/util'; @@ -256,7 +256,7 @@ export class PvpHandler { const defenseInfo = await generPVPOppRecInfo(isSuccess, curOpp, oppHeroes, role.lv); // 战报记录 - await PvpRecordModel.createRec({roleId1: roleId, roleId2: oppRoleId, warId: BattleRecord.battleId, attackInfo, defenseInfo, createTime: nowSeconds()}); + await PvpRecordModel.createRec({roleId1: roleId, roleId2: robotIdComBack(oppRoleId), warId: BattleRecord.battleId, attackInfo, defenseInfo, createTime: nowSeconds()}); // 刷新对手 let newOppPlayers: Array = await refreshEnemies(role, score, pLv); @@ -405,7 +405,7 @@ export class PvpHandler { } heroes.sort((a, b) => b.score - a.score); let rank = await getMyRank(REDIS_KEY.PVP_RANK, 0, roleId);//去redis中获取排名 - result = new PlayerDetail({...role, heroes, rank}); + result = new PlayerDetail({...role, ...pvpDefense, heroes, rank}); } return resResult(STATUS.SUCCESS, result); diff --git a/game-server/app/services/pvpService.ts b/game-server/app/services/pvpService.ts index 8d98e8ba1..686cbcbe5 100644 --- a/game-server/app/services/pvpService.ts +++ b/game-server/app/services/pvpService.ts @@ -73,14 +73,19 @@ export async function getEnemies(oppPlayers: OppPlayers[], winStreakNum: number) roleId: oppDef.oppRoleId, defCe: reduceCe(oppDef.defCe), addScore: dicOpponent.score, - rankLv: 0, + rankLv: oppDef.rankLv, plusScore: getPlusScore(winStreakNum) }); } return result } -// 刷新对手 +/** + * @description 刷新对手三个人 + * @param role 数据库里我的role + * @param score 我的军功 + * @param pLv 我的排名 + */ export async function refreshEnemies(role: RoleType, score: number, pLv: number) { let system = await SystemConfigModel.findSystemConfig(); let mapWarJson = gameData.warJson.get(system.warId); @@ -104,6 +109,7 @@ export async function refreshEnemies(role: RoleType, score: number, pLv: number) } export async function matchPlayerByRank(oppPlayers: OppPlayers[], mapWarJson: DicWarJson[], roleId: string, pos: number) { + console.log('matchPlayerByRank', JSON.stringify(oppPlayers)) let ridRanks = new Array(); // 已经被使用了的排名 for(let { roleId: curRoleId } of oppPlayers) { let rankLv = await getMyRank(REDIS_KEY.PVP_RANK, 0, curRoleId); @@ -142,7 +148,7 @@ export async function matchPlayerByRank(oppPlayers: OppPlayers[], mapWarJson: Di let pvpHistoryOpp = await generPlayerOppHis(pvpdefense, mapWarJson, roleId, pos); oppPlayers.push({ - roleId: pvpdefense.roleId, + roleId: pvpHistoryOpp.oppRoleId, oppDef: pvpHistoryOpp._id, pos, isRobot: false, @@ -151,10 +157,12 @@ export async function matchPlayerByRank(oppPlayers: OppPlayers[], mapWarJson: Di } async function matchPlayer(oppPlayers: OppPlayers[], mapWarJson: DicWarJson[], roleId: string, pLv: number, dicOpp: DicPvpOpponent ) { + console.log('matchPlayer', JSON.stringify(oppPlayers)) + let { id: pos, minLv, maxLv } = dicOpp let range = await PvpDefenseModel.findByTeamLv(pLv + minLv, pLv + maxLv); range = range.filter(cur => { - return oppPlayers.findIndex(ccur => ccur.roleId == cur.roleId) != -1; + return oppPlayers.findIndex(ccur => ccur.roleId == makeRobotId(cur.roleId)) == -1; }); if(range.length <= 0) return false; @@ -169,7 +177,7 @@ async function matchPlayer(oppPlayers: OppPlayers[], mapWarJson: DicWarJson[], r } let pvpHistoryOpp = await generPlayerOppHis(result, mapWarJson, roleId, pos); oppPlayers.push({ - roleId: result.roleId, + roleId: pvpHistoryOpp.oppRoleId, oppDef: pvpHistoryOpp._id, pos, isRobot: false, @@ -205,12 +213,14 @@ async function generPlayerOppHis(result: PvpDefenseType, mapWarJson: DicWarJson[ } } let pvpHistoryOpp = await PvpHistoryOppModel.createPvpOpp({ - ...result, ...role, pos, rankLv, heroes, roleId, oppRoleId: result.roleId + ...result, ...role, pos, rankLv, heroes, roleId, oppRoleId: makeRobotId(result.roleId) }); return pvpHistoryOpp; } async function matchRobot(oppPlayers: OppPlayers[], mapWarJson: DicWarJson[], role: RoleType, pLv: number, dicOpp: DicPvpOpponent) { + console.log('matchRobot', JSON.stringify(oppPlayers)) + let { lv: myLv, topFiveCe: myCe, roleId } = role; let { id: pos, minLv, maxLv, ratio } = dicOpp; let range = gameData.pvpWar; @@ -269,6 +279,16 @@ export function checkRoleIsRobot(roleId: string) { return !!roleId.match(/_r/); } +// 将一般的roleId转为带_r的 +export function makeRobotId(roleId: string) { + return `${roleId}_r`; +} + +// 将一般的roleId去掉_r +export function robotIdComBack(robotRoleId: string) { + return robotRoleId.replace(/_r/, '') +} + // 根据连胜次数,获得加成的积分 export function getPlusScore(win: number) { let result = win - 1;