feat(好友): 展示阵容优化

This commit is contained in:
luying
2023-04-12 11:41:05 +08:00
parent 5a71e19f03
commit fdd06a5fe7
3 changed files with 26 additions and 16 deletions

View File

@@ -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<PlayerDetailHero>();
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<PlayerDetailHero>();
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);

View File

@@ -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<number>, roleId: string, lean = true) {
const hero: HeroType[] = await HeroModel.find({ seqId: { $in: seqIds }, roleId }).lean(lean);
return hero;

View File

@@ -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;