战力计算,远征战力筛选

This commit is contained in:
luying
2020-11-12 18:21:05 +08:00
parent 40c16587b3
commit b0a0bbc71b
34 changed files with 22812 additions and 15964 deletions
+17 -7
View File
@@ -1,6 +1,7 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, Ref, mongoose } from '@typegoose/typegoose';
import Equip from './Equip';
import { updateCe } from '../pubUtils/util';
/**
* 英雄表
@@ -24,12 +25,14 @@ export default class Hero extends BaseModel {
exp: number; // 经验值
@prop({ required: true, default: 1 })
lv: number; // 武将等级
@prop({ required: true, default: 100 })
@prop({ required: true, default: 0 })
ce: number; // 武将战力
@prop({ required: true, default: 0 })
historyCe: number; // 武将历史最高战力
@prop({ required: true })
@prop({ required: true, default: 0 })
star: number; // 星级
@prop({ required: true })
@prop({ required: true, default: 0 })
fire: number; // 觉醒的火,在满星了之后会继续进行觉醒,显示类似6星1火
@prop({ required: true, default: 1 })
rank: number; // 阶数
@@ -70,26 +73,28 @@ export default class Hero extends BaseModel {
const hero = await HeroModel.findOneAndUpdate({ roleId, hid }, {$push: {equips: equipId}}, {new: true}).lean(lean);
if (hero) {
await Equip.putOn(hero.hid, equipId);
await updateCe(roleId, hero )
}
return hero;
}
public static async createHero(heroInfo: {roleId: string, roleName: string, hid: number, hName: string, seqId: number, lv?:number, ce: number}, lean = true) {
public static async createHero(heroInfo: {roleId: string, roleName: string, hid: number, star: number, hName: string, seqId: number, lv?:number, ce: number}, lean = true) {
const doc = new HeroModel();
const update = Object.assign(doc.toJSON(), heroInfo);
delete update._id;
const hero = await HeroModel.findOneAndUpdate({roleId: heroInfo.roleId, hid: heroInfo.hid}, update, {upsert: true, new: true}).lean(lean);
await updateCe(heroInfo.roleId, hero);
return hero;
}
public static async sumTopHeroCe(roleId: string, num: number) {
let ce = await HeroModel.aggregate([
{ $match : { roleId } },
{ $sort: {ce: -1} },
{ $sort: {historyCe: -1} },
{ $limit: num },
{ $group: { _id: null, ce: { $sum: '$ce' } } }
{ $group: { _id: null, historyCe: { $sum: '$historyCe' } } }
]);
return ce.length > 0?ce[0].ce:0;
return ce.length > 0?ce[0].historyCe:0;
}
public static async sumHeroCe(roleId: string) {
@@ -100,6 +105,11 @@ export default class Hero extends BaseModel {
return ce.length > 0?ce[0].ce:0;
}
public static async getTopHero(roleId: string, num: number, lean = true) {
const heroes = await HeroModel.find({roleId}).limit(num).sort({ce: -1}).lean(lean);
return heroes;
}
public static async deleteAccount(roleId: string, lean = true) {
let result = await HeroModel.deleteMany({roleId}).lean(lean);
return result||{};
+11
View File
@@ -4,6 +4,13 @@ import { index, getModelForClass, prop } from '@typegoose/typegoose';
import User from './User';
import { shouldRefresh } from '../pubUtils/util';
class TopHero {
@prop({ required: true })
hid: number; // 武将id
@prop({ required: true })
ce: number; // 战力
}
/**
* 角色字段接口
*/
@@ -37,6 +44,10 @@ export default class Role extends BaseModel {
lv: number; // 主公等级
@prop({ required: true, default: 0 })
ce: number; // 总战力
@prop({ required: true, default: 0 })
topFiveCe: number; // 最强5人战力
@prop({ required: true, type: TopHero, default: [] })
topFive: Array<TopHero>; // 总战力
@prop({ required: true, default: 100 })
tili: number; // 体力值