✨ feat(好友): 展示阵容优化
This commit is contained in:
@@ -688,15 +688,22 @@ export class FriendHandler {
|
|||||||
|
|
||||||
let result: PlayerDetail;
|
let result: PlayerDetail;
|
||||||
|
|
||||||
let dbHeroes = await HeroModel.findByRole(oppoRoleId);
|
let dbHeroes = await HeroModel.findAndSortByCe(oppoRoleId);
|
||||||
let role = await RoleModel.findByRoleId(oppoRoleId, null, true);
|
let role = await RoleModel.findByRoleId(oppoRoleId, null, true);
|
||||||
if(!role) return resResult(STATUS.ROLE_NOT_FOUND);
|
if(!role) return resResult(STATUS.ROLE_NOT_FOUND);
|
||||||
|
|
||||||
let { topLineup, topLineupCe, towerLv, showLineup } = role;
|
let { topLineupCe, towerLv, showLineup } = role;
|
||||||
|
|
||||||
let heroes = new Array<PlayerDetailHero>();
|
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) {
|
for (let hid of showLineup) {
|
||||||
let curHero = dbHeroes.find(cur => cur.hid == hid);
|
let curHero = dbHeroes.find(cur => cur.hid == hid);
|
||||||
if (curHero) {
|
if (curHero) {
|
||||||
@@ -705,22 +712,13 @@ export class FriendHandler {
|
|||||||
heroes.push(hero);
|
heroes.push(hero);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
result.setShowLineup(heroes);
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let ladder = await LadderMatchModel.findByRoleId(oppoRoleId);
|
|
||||||
|
|
||||||
result = new PlayerDetail(oppoRoleId, heroes);
|
|
||||||
result.setPlayer(role);
|
result.setPlayer(role);
|
||||||
result.setCe(topLineupCe);
|
result.setCe(topLineupCe);
|
||||||
|
|
||||||
|
let ladder = await LadderMatchModel.findByRoleId(oppoRoleId);
|
||||||
result.setWarStar(role.warStar, ladder?.rank||0, towerLv - 1);
|
result.setWarStar(role.warStar, ladder?.rank||0, towerLv - 1);
|
||||||
|
|
||||||
return resResult(STATUS.SUCCESS, result);
|
return resResult(STATUS.SUCCESS, result);
|
||||||
|
|||||||
@@ -100,6 +100,7 @@ export class EPlace {
|
|||||||
|
|
||||||
@index({ seqId: 1 })
|
@index({ seqId: 1 })
|
||||||
@index({ roleId: 1, hid: 1 })
|
@index({ roleId: 1, hid: 1 })
|
||||||
|
@index({ roleId: 1, ce: -1 })
|
||||||
export default class Hero extends BaseModel {
|
export default class Hero extends BaseModel {
|
||||||
|
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
@@ -182,6 +183,11 @@ export default class Hero extends BaseModel {
|
|||||||
return heros;
|
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) {
|
public static async findBySeqIdRange(seqIds: Array<number>, roleId: string, lean = true) {
|
||||||
const hero: HeroType[] = await HeroModel.find({ seqId: { $in: seqIds }, roleId }).lean(lean);
|
const hero: HeroType[] = await HeroModel.find({ seqId: { $in: seqIds }, roleId }).lean(lean);
|
||||||
return hero;
|
return hero;
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ export class PlayerDetailHero {
|
|||||||
quality: number;
|
quality: number;
|
||||||
score: number = 0;
|
score: number = 0;
|
||||||
isDefense: boolean;
|
isDefense: boolean;
|
||||||
|
ce: number;
|
||||||
|
|
||||||
setPvpHeroInfo?(hero: PvpEnemies|PvpOtherHeroes) {
|
setPvpHeroInfo?(hero: PvpEnemies|PvpOtherHeroes) {
|
||||||
this.actorId = hero.actorId;
|
this.actorId = hero.actorId;
|
||||||
@@ -38,7 +39,7 @@ export class PlayerDetailHero {
|
|||||||
this.colorStar = hero.colorStar;
|
this.colorStar = hero.colorStar;
|
||||||
this.quality = hero.quality;
|
this.quality = hero.quality;
|
||||||
this.skinId = hero.skinId;
|
this.skinId = hero.skinId;
|
||||||
|
this.ce = hero.ce;
|
||||||
}
|
}
|
||||||
|
|
||||||
setPvpDefense?(pvpDefense: PvpDefenseType) {
|
setPvpDefense?(pvpDefense: PvpDefenseType) {
|
||||||
@@ -105,6 +106,7 @@ export class PlayerDetail {
|
|||||||
defCe?: number = 0;
|
defCe?: number = 0;
|
||||||
|
|
||||||
heroes: PlayerDetailHero[];
|
heroes: PlayerDetailHero[];
|
||||||
|
showLineup: PlayerDetailHero[] = [];
|
||||||
rank?:number = 0;
|
rank?:number = 0;
|
||||||
|
|
||||||
battle?: PlayerDetailBattle = new PlayerDetailBattle([], 0, 0);
|
battle?: PlayerDetailBattle = new PlayerDetailBattle([], 0, 0);
|
||||||
@@ -115,6 +117,10 @@ export class PlayerDetail {
|
|||||||
this.rank = rank;
|
this.rank = rank;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setShowLineup(showLineup: PlayerDetailHero[]) {
|
||||||
|
this.showLineup = showLineup;
|
||||||
|
}
|
||||||
|
|
||||||
setRobot(pvpHistoryOpp: PvpHistoryOppType) {
|
setRobot(pvpHistoryOpp: PvpHistoryOppType) {
|
||||||
if(pvpHistoryOpp.roleName) this.roleName = pvpHistoryOpp.roleName;
|
if(pvpHistoryOpp.roleName) this.roleName = pvpHistoryOpp.roleName;
|
||||||
if(pvpHistoryOpp.lv) this.lv = pvpHistoryOpp.lv;
|
if(pvpHistoryOpp.lv) this.lv = pvpHistoryOpp.lv;
|
||||||
|
|||||||
Reference in New Issue
Block a user