巅峰演武:赛季优化修改
This commit is contained in:
+23
-11
@@ -7,6 +7,7 @@ import { COUNTER } from '../consts';
|
||||
import { PVP } from '../pubUtils/dicParam';
|
||||
|
||||
@index({ roleId: 1 })
|
||||
@index({ score: 1 })
|
||||
export default class PvpDefense extends BaseModel {
|
||||
@prop({ required: true })
|
||||
serverId: number; // 区 id
|
||||
@@ -17,6 +18,8 @@ export default class PvpDefense extends BaseModel {
|
||||
@prop({ ref: 'Role', type: mongoose.Schema.Types.ObjectId })
|
||||
role: Ref<Role>;
|
||||
@prop({ required: true, default: null, _id: false })
|
||||
hasDefense: boolean;
|
||||
@prop({ required: true, default: null, _id: false })
|
||||
defense: Defense;
|
||||
@prop({ required: true, default: null, _id: false })
|
||||
attack: Attack;
|
||||
@@ -58,8 +61,6 @@ export default class PvpDefense extends BaseModel {
|
||||
seasonNum: number;
|
||||
@prop({ required: true, default: 0 })
|
||||
seasonWinNum: number; // 本赛季胜利次数
|
||||
@prop({ required: true, default: true })
|
||||
isFirstEntry: boolean;
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
defenseScoreCnt: number;
|
||||
@@ -129,7 +130,7 @@ export default class PvpDefense extends BaseModel {
|
||||
}
|
||||
|
||||
public static async findByTeamLv(seasonNum: number, min: number, max: number) {
|
||||
const result: PvpDefenseType[] = await PvpDefenseModel.find({ seasonNum, 'defense.pLv': { $gte: min, $lte: max } })
|
||||
const result: PvpDefenseType[] = await PvpDefenseModel.find({ seasonNum, hasDefense: true, 'defense.pLv': { $gte: min, $lte: max } })
|
||||
.populate('role', '_id head frame spine heads frames spines topLineupCe roleId roleName lv globalCeAttr title')
|
||||
.populate('heroes.hero')
|
||||
.populate('oppPlayers.oppDef', 'oppRoleId pos roleName head frame spine heads frames spines rankLv pLv title lv defCe heroes warId buff')
|
||||
@@ -137,6 +138,25 @@ export default class PvpDefense extends BaseModel {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async findNeighborByScore(seasonNum: number, score: number) {
|
||||
const beforeData: PvpDefenseType[] = await PvpDefenseModel.find({
|
||||
seasonNum, hasDefense: true, score: { $lt: score }
|
||||
}).sort({ score: -1 }).limit(10)
|
||||
.populate('role', '_id head frame spine heads frames spines topLineupCe roleId roleName lv globalCeAttr title')
|
||||
.populate('heroes.hero')
|
||||
.populate('oppPlayers.oppDef', 'oppRoleId pos roleName head frame spine heads frames spines rankLv pLv title lv defCe heroes warId buff')
|
||||
.lean({ getters: true, virtuals: true });
|
||||
const afterData: PvpDefenseType[] = await PvpDefenseModel.find({
|
||||
seasonNum, hasDefense: true, score: { $gt: score }
|
||||
}).sort({ score: 1 }).limit(10)
|
||||
.populate('role', '_id head frame spine heads frames spines topLineupCe roleId roleName lv globalCeAttr title')
|
||||
.populate('heroes.hero')
|
||||
.populate('oppPlayers.oppDef', 'oppRoleId pos roleName head frame spine heads frames spines rankLv pLv title lv defCe heroes warId buff')
|
||||
.lean({ getters: true, virtuals: true });
|
||||
|
||||
return [...beforeData, ...afterData];
|
||||
}
|
||||
|
||||
public static async updateInfoAndInclude(roleId: string, update: pvpUpdateInter) {
|
||||
delete update._id;
|
||||
let result: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({roleId}, {$set:update}, {new: true})
|
||||
@@ -162,14 +182,6 @@ export default class PvpDefense extends BaseModel {
|
||||
return ranks;
|
||||
}
|
||||
|
||||
public static async resetScores(roleId: string, newSeasonNum: number, newScore: number, newHeroScores: HeroScore[]) {
|
||||
let result: PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({roleId}, {$set: { seasonNum: newSeasonNum, score: newScore, heroScores: newHeroScores, challengeCnt: PVP.PVP_CHALLENGE_COUNTS, challengeRefTime: 0, winStreakNum: 0 }}, {new: true})
|
||||
.populate('role', 'roleId roleName head frame spine heads frames spines title lv vLv')
|
||||
.populate('oppPlayers.oppDef', 'oppRoleId pos roleName head frame spine heads frames spines rankLv pLv title lv defCe heroes warId buff').lean({ getters: true, virtuals: true })
|
||||
.lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async deleteHero(roleId: string, hid: number) {
|
||||
let result:PvpDefenseType = await PvpDefenseModel.findOneAndUpdate({roleId}, {$pull:{lineupCe: {hid}, heroScores: {hid}}, $set: {defense: null, attack: null}}, {new: true}).lean();
|
||||
return result;
|
||||
|
||||
Reference in New Issue
Block a user