秘境本挑战次数

This commit is contained in:
luying
2020-11-13 18:06:53 +08:00
parent 9574bada4f
commit ada3cfe849
18 changed files with 439 additions and 82 deletions

View File

@@ -110,6 +110,13 @@ export default class Hero extends BaseModel {
return heroes;
}
public static async updateCe(roleId: string, hid: number, ce: number, oldCe: number, historyCe: number, lean = true) {
let distance = ce - oldCe;
let historyDistance = ce > historyCe ?ce - historyCe: 0;
let result = await HeroModel.findOneAndUpdate({roleId, hid}, {$inc:{ce: distance, historyCe: historyDistance}}).lean(lean);
return result||{};
}
public static async deleteAccount(roleId: string, lean = true) {
let result = await HeroModel.deleteMany({roleId}).lean(lean);
return result||{};

View File

@@ -71,6 +71,12 @@ export default class PvpDefense extends BaseModel {
}
public static async updateCe(roleId: string, hid: number, ce: number, oldCe: number, lean = true) {
let distance = ce - oldCe;
const rec = await PvpDefenseModel.findOneAndUpdate({roleId, 'heroes.actorId': hid}, {$inc: {ce: distance}}).lean(lean);
return rec
}
public static async deleteAccount(roleId: string, lean = true) {
let result = await PvpDefenseModel.deleteMany({roleId}).lean(lean);
return result||{};

View File

@@ -3,6 +3,7 @@ import BaseModel from './BaseModel';
import { index, getModelForClass, prop } from '@typegoose/typegoose';
import User from './User';
import { shouldRefresh } from '../pubUtils/util';
import { HeroModel } from './Hero';
class TopHero {
@prop({ required: true })
@@ -137,6 +138,13 @@ export default class Role extends BaseModel {
@prop({ required: true, default: new Date() })
expeditionResetRefTime: Date; // 远征重置次数刷新时间
// 秘境相关
@prop({ required: true, default: 0 })
dungeonCnt: number; // 秘境挑战次数
@prop({ required: true, default: 0 })
dungeonBuyCnt: number; // 秘境购买次数
@prop({ required: true, default: new Date() })
dungeonRefTime: Date; // 秘境刷新时间
public static async findByUid(uid: number, serverId: number, lean = true) {
const role = await RoleModel.findOne({ 'userInfo.uid': uid, serverId }).lean(lean);
@@ -285,6 +293,30 @@ export default class Role extends BaseModel {
return role;
}
// 购买次数
public static async buyCnt(roleId: string, needRefresh: boolean, inc: number, curTime: Date, lean = true) { console.log('&*&*&*&*&')
let role = null;
if (needRefresh) {
role = await RoleModel.findOneAndUpdate({roleId}, {dungeonCnt: 0, dungeonRefTime: curTime, dungeonBuyCnt: inc}, {new: true}).lean(lean);
} else {
role = await RoleModel.findOneAndUpdate({roleId}, {$inc: {dungeonBuyCnt: inc}}, {new: true}).lean(lean);
}
return role;
}
// 增加次数
public static async increaseDungeonCnt(roleId: string, needRefresh: boolean, inc: number, curTime: Date, lean = true) {
let role = null;
if (needRefresh) {
role = await RoleModel.findOneAndUpdate({roleId}, {dungeonCnt: inc, dungeonRefTime: curTime, dungeonBuyCnt: 0}, {new: true}).lean(lean);
} else {
role = await RoleModel.findOneAndUpdate({roleId}, {$inc: {dungeonCnt: inc}}, {new: true}).lean(lean);
}
return role;
}
// 获取排行榜
public static async getRank(type: string, fields: Array<string>, page = 1, limit = 100, lean = true) {
let sortBy = {};
@@ -295,6 +327,42 @@ export default class Role extends BaseModel {
const ranks = await RoleModel.find().select(fields.join(' ')).sort(sortBy).limit(limit).skip((page - 1) * limit).lean(lean);
return ranks;
}
public static async updateSumCe(roleId: string, hid: number, ce: number, oldCe: number, lean = true) {
let role = await RoleModel.findByRoleId(roleId);
let topFive = role?.topFive||new Array();
let distance = ce - oldCe;
topFive.sort((a, b) => {return b.ce - a.ce}); // 0-5最大-最小
let index = topFive.findIndex(cur => cur.hid == hid);
if(index == -1) { // 不在最强列表
if(topFive.length < 5) { // 不满5人
topFive.push({hid, ce});
} else if(topFive.length == 5){
if(ce > topFive[topFive.length - 1].ce) { // 跻身最强6人
topFive.pop();
topFive.push({hid, ce});
} else {
topFive[index].ce = ce;
}
} else {
topFive.splice(5, topFive.length - 5);
}
} else { // 原来就是最强5人
if(ce < topFive[topFive.length - 1].ce) { // 滑出最强
let heroes = await HeroModel.getTopHero(roleId, 5);
topFive = heroes.map(cur => {return {hid: cur.hid, ce: cur.ce}});
} else {
topFive[index].ce = ce;
}
}
let topFiveCe = topFive.reduce((pre, cur) => {
return pre + cur.ce
}, 0);
await RoleModel.findOneAndUpdate({roleId}, { topFive, topFiveCe, $inc: {ce: distance} }).lean(lean);
}
}
export const RoleModel = getModelForClass(Role);