From fdd06a5fe715bd0bef2541f6cc4e1fd036c76e82 Mon Sep 17 00:00:00 2001 From: luying Date: Wed, 12 Apr 2023 11:41:05 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(=E5=A5=BD=E5=8F=8B):=20?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E9=98=B5=E5=AE=B9=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/servers/role/handler/friendHandler.ts | 28 +++++++++---------- shared/db/Hero.ts | 6 ++++ shared/domain/battleField/guild.ts | 8 +++++- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/game-server/app/servers/role/handler/friendHandler.ts b/game-server/app/servers/role/handler/friendHandler.ts index c56a87a70..27e5c689a 100644 --- a/game-server/app/servers/role/handler/friendHandler.ts +++ b/game-server/app/servers/role/handler/friendHandler.ts @@ -688,15 +688,22 @@ export class FriendHandler { let result: PlayerDetail; - let dbHeroes = await HeroModel.findByRole(oppoRoleId); + let dbHeroes = await HeroModel.findAndSortByCe(oppoRoleId); let role = await RoleModel.findByRoleId(oppoRoleId, null, true); if(!role) return resResult(STATUS.ROLE_NOT_FOUND); - let { topLineup, topLineupCe, towerLv, showLineup } = role; + let { topLineupCe, towerLv, showLineup } = role; let heroes = new Array(); + for (let curHero of dbHeroes.slice(0, 18)) { + let hero = new PlayerDetailHero(); + hero.setByDbHero(curHero); + heroes.push(hero); + } - if (showLineup && showLineup.length) { // 设置过展示阵容 + result = new PlayerDetail(oppoRoleId, heroes); + if (showLineup) { // 设置过展示阵容 + let heroes = new Array(); for (let hid of showLineup) { let curHero = dbHeroes.find(cur => cur.hid == hid); if (curHero) { @@ -705,22 +712,13 @@ export class FriendHandler { heroes.push(hero); } } - } else { - for (let { hid } of topLineup) { - let curHero = dbHeroes.find(cur => cur.hid == hid); - if (curHero) { - let hero = new PlayerDetailHero(); - hero.setByDbHero(curHero); - heroes.push(hero); - } - } + result.setShowLineup(heroes); } - let ladder = await LadderMatchModel.findByRoleId(oppoRoleId); - - result = new PlayerDetail(oppoRoleId, heroes); result.setPlayer(role); result.setCe(topLineupCe); + + let ladder = await LadderMatchModel.findByRoleId(oppoRoleId); result.setWarStar(role.warStar, ladder?.rank||0, towerLv - 1); return resResult(STATUS.SUCCESS, result); diff --git a/shared/db/Hero.ts b/shared/db/Hero.ts index 19bfcaa94..1072bca9b 100644 --- a/shared/db/Hero.ts +++ b/shared/db/Hero.ts @@ -100,6 +100,7 @@ export class EPlace { @index({ seqId: 1 }) @index({ roleId: 1, hid: 1 }) +@index({ roleId: 1, ce: -1 }) export default class Hero extends BaseModel { @prop({ required: true }) @@ -182,6 +183,11 @@ export default class Hero extends BaseModel { return heros; } + public static async findAndSortByCe(roleId: string) { + const heroes: HeroType[] = await HeroModel.find({ roleId }).sort({ ce: -1 }).lean(); + return heroes + } + public static async findBySeqIdRange(seqIds: Array, roleId: string, lean = true) { const hero: HeroType[] = await HeroModel.find({ seqId: { $in: seqIds }, roleId }).lean(lean); return hero; diff --git a/shared/domain/battleField/guild.ts b/shared/domain/battleField/guild.ts index 2db198d3b..545d4c7b9 100644 --- a/shared/domain/battleField/guild.ts +++ b/shared/domain/battleField/guild.ts @@ -18,6 +18,7 @@ export class PlayerDetailHero { quality: number; score: number = 0; isDefense: boolean; + ce: number; setPvpHeroInfo?(hero: PvpEnemies|PvpOtherHeroes) { this.actorId = hero.actorId; @@ -38,7 +39,7 @@ export class PlayerDetailHero { this.colorStar = hero.colorStar; this.quality = hero.quality; this.skinId = hero.skinId; - + this.ce = hero.ce; } setPvpDefense?(pvpDefense: PvpDefenseType) { @@ -105,6 +106,7 @@ export class PlayerDetail { defCe?: number = 0; heroes: PlayerDetailHero[]; + showLineup: PlayerDetailHero[] = []; rank?:number = 0; battle?: PlayerDetailBattle = new PlayerDetailBattle([], 0, 0); @@ -115,6 +117,10 @@ export class PlayerDetail { this.rank = rank; } + setShowLineup(showLineup: PlayerDetailHero[]) { + this.showLineup = showLineup; + } + setRobot(pvpHistoryOpp: PvpHistoryOppType) { if(pvpHistoryOpp.roleName) this.roleName = pvpHistoryOpp.roleName; if(pvpHistoryOpp.lv) this.lv = pvpHistoryOpp.lv;