秘境本挑战次数
This commit is contained in:
@@ -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||{};
|
||||
|
||||
@@ -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||{};
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user