diff --git a/game-server/app/servers/battle/handler/pvpHandler.ts b/game-server/app/servers/battle/handler/pvpHandler.ts index 7cf0c17e9..ecfaf610b 100644 --- a/game-server/app/servers/battle/handler/pvpHandler.ts +++ b/game-server/app/servers/battle/handler/pvpHandler.ts @@ -18,13 +18,13 @@ import { pick } from "underscore"; import { HeroModel } from '../../../db/Hero'; import PvpHistoryOpp, { PvpHistoryOppModel } from '../../../db/PvpHistoryOpp'; import { BattleRecordModel } from '../../../db/BattleRecord'; -import { PvpRecordModel } from '../../../db/PvpRecord'; +import { PvpRecordModel, PvpRecordParam, PvpRecordType } from '../../../db/PvpRecord'; import { pvpEndParamInter } from '../../../pubUtils/interface'; import { getSeconds, nowSeconds } from '../../../pubUtils/timeUtil'; import { PlayerDetail, PlayerDetailHero } from '../../../domain/battleField/guild'; import { PvpSaveDataModel } from '../../../db/PvpSaveData'; import { PVPConfigModel } from '../../../db/PvpConfig'; -import { getAllServerName } from '../../../services/redisService'; +import { getAllServerName, getServerName } from '../../../services/redisService'; import { RoleRankInfo } from '../../../domain/rank'; export default function (app: Application) { @@ -257,7 +257,7 @@ export class PvpHandler { let curOpp = pvpDefense.oppBeforePlayers.find(cur => cur.roleId == oppRoleId && cur.pos == pos); if (!curOpp) return resResult(STATUS.PVP_ROLE_NOT_FOUND); - const defenseInfo = await generPVPOppRecInfo(isSuccess, curOpp, oppHeroes, role.lv); + const defenseInfo = await generPVPOppRecInfo(isSuccess, curOpp, oppHeroes, serverId); // 战报记录 await PvpRecordModel.createRec({ roleId1: roleId, roleId2: robotIdComBack(oppRoleId), warId: BattleRecord.battleId, attackInfo, defenseInfo, createTime: nowSeconds() }); @@ -498,6 +498,7 @@ export class PvpHandler { async getPlayerDetail(msg: { roleId: string }, session: BackendSession) { let roleId = session.get('roleId'); + let serverId = session.get('serverId'); let { roleId: oppoRoleId } = msg; let isRobot = checkRoleIsRobot(oppoRoleId); @@ -525,6 +526,7 @@ export class PvpHandler { } result = new PlayerDetail(pvpHistoryOpp.oppRoleId, heroes, pvpHistoryOpp.rankLv); result.setRobot(pvpHistoryOpp); + result.setServerName(await getServerName(serverId)); } else { // 查询对方pvpDefense let pvpDefense = await PvpDefenseModel.findByRoleId(oppoRoleId); let dbHeroes = await HeroModel.findByRole(oppoRoleId); @@ -545,6 +547,7 @@ export class PvpHandler { result = new PlayerDetail(oppoRoleId, heroes, rank); result.setPlayer(role); result.setPvpDefense(pvpDefense); + result.setServerName(await getServerName(role.serverId)); } return resResult(STATUS.SUCCESS, result); @@ -583,6 +586,13 @@ export class PvpHandler { async getRec(msg: {}, session: BackendSession) { let roleId = session.get('roleId'); let pvpRecords = await PvpRecordModel.getRecByRoleId(roleId); + let serverNames = await getAllServerName(); + for(let record of pvpRecords) { + console.log('#####', record.defenseInfo.serverId, serverNames, serverNames[record.defenseInfo.serverId]) + if(record.defenseInfo) record.defenseInfo['serverName'] = serverNames[record.defenseInfo.serverId]; + if(record.attackInfo) record.attackInfo['serverName'] = serverNames[record.attackInfo.serverId]; + } + return resResult(STATUS.SUCCESS, { list: pvpRecords }); } diff --git a/game-server/app/services/pvpService.ts b/game-server/app/services/pvpService.ts index 53662b7f1..80ef09210 100644 --- a/game-server/app/services/pvpService.ts +++ b/game-server/app/services/pvpService.ts @@ -500,7 +500,7 @@ export function calLineupScore(lineup: Attack|Defense, heroScores: HeroScore[]) } // 获取对手战报记录 -export async function generPVPOppRecInfo(isSuccess: boolean, curOpp: OppPlayer, oppHeroes: pvpEndParamInter[], myLv: number) { +export async function generPVPOppRecInfo(isSuccess: boolean, curOpp: OppPlayer, oppHeroes: pvpEndParamInter[], serverId: number) { let oppHeroRecords = new Array(); let oppRole = curOpp.oppDef; if (!oppRole) { console.error('opp role not found') } @@ -547,7 +547,7 @@ export async function generPVPOppRecInfo(isSuccess: boolean, curOpp: OppPlayer, } let defenseInfo = new PvpRecordPlayerInfo(); - defenseInfo.setByHistoryOpp(oppRole, oppHeroRecords, !isSuccess, isSuccess ? 0 : addSumScore) + defenseInfo.setByHistoryOpp(oppRole, oppHeroRecords, !isSuccess, isSuccess ? 0 : addSumScore, serverId) return defenseInfo } diff --git a/shared/db/PvpRecord.ts b/shared/db/PvpRecord.ts index 1af75a61c..1840bab43 100644 --- a/shared/db/PvpRecord.ts +++ b/shared/db/PvpRecord.ts @@ -57,6 +57,8 @@ export class HeroesRecord { } export class PvpRecordPlayerInfo { + @prop({ required: true }) + serverId: number; // 区服id @prop({ required: true }) roleId: string; // 角色 id @prop({ required: true }) @@ -92,9 +94,10 @@ export class PvpRecordPlayerInfo { this.isSuccess = isSuccess; this.score = score; this.heroes = heroes; + this.serverId = role.serverId; } - setByHistoryOpp(oppRole: PvpHistoryOppType, oppHeroRecords: HeroesRecord[], isSuccess: boolean, score: number) { + setByHistoryOpp(oppRole: PvpHistoryOppType, oppHeroRecords: HeroesRecord[], isSuccess: boolean, score: number, serverId: number) { this.roleId = robotIdComBack(oppRole.oppRoleId); this.roleName = oppRole.roleName; this.lv = oppRole.pLv; @@ -106,6 +109,7 @@ export class PvpRecordPlayerInfo { this.heroes = oppHeroRecords; this.isSuccess = isSuccess; this.score = score; + this.serverId = serverId; } } @@ -140,7 +144,7 @@ export default class PvpRecord extends BaseModel { public static async getRecByRoleId( roleId: string, limit = 15, lean = true) { await this.delPvpRecords(); - const result: PvpRecord[] = await PvpRecordModel.find({ $or:[{roleId1: roleId}, {roleId2: roleId}] }).limit(limit).sort({createTime: -1}).lean(lean); + const result: PvpRecord[] = await PvpRecordModel.find({ $or:[{roleId1: roleId}, {roleId2: roleId}] }).select('-_id -__v -createdAt -updatedAt').limit(limit).sort({createTime: -1}).lean(lean); return result; } @@ -153,4 +157,5 @@ export default class PvpRecord extends BaseModel { export const PvpRecordModel = getModelForClass(PvpRecord); -export interface PvpRecordType extends Pick, keyof PvpRecord> { }; \ No newline at end of file +export interface PvpRecordType extends Pick, keyof PvpRecord> { }; +export type PvpRecordParam = Partial; \ No newline at end of file diff --git a/shared/domain/battleField/guild.ts b/shared/domain/battleField/guild.ts index f5e93f652..2db198d3b 100644 --- a/shared/domain/battleField/guild.ts +++ b/shared/domain/battleField/guild.ts @@ -92,6 +92,8 @@ export class PlayerDetail { roleId: string; roleName: string; lv: number; + + serverName: string; title?: number = 1; ipLocation: string = ''; head?: number = EXTERIOR.EXTERIOR_FACE; @@ -135,6 +137,10 @@ export class PlayerDetail { this.ipLocation = role.fixedIpLocation||role.ipLocation||'未知'; } + setServerName(serverName: string) { + this.serverName = serverName; + } + setCe(ce: number) { this.defCe = ce; }