@@ -1,5 +1,5 @@
import { HANG_UP_CONSTS , ROLE_TERAPH , ROLE_SELECT , ABI_TYPE } from './../consts' ;
import BaseModel from './BaseModel' ;
import BaseModel from './BaseModel' ;
import { index , getModelForClass , prop , DocumentType , Ref , mongoose } from '@typegoose/typegoose' ;
import User from './User' ;
import { shouldRefresh , reduceCe } from '../pubUtils/util' ;
@@ -17,7 +17,7 @@ export class CeAttrDataRole {
ratioUp : number = 0 ;
@prop ( { required : true } )
fixUp : number = 0 ;
constructor ( id : number ) {
this . id = id ;
}
@@ -36,7 +36,7 @@ class TopHero {
class DungeonHero {
@prop ( { required : true } )
battleId : number ; // 关卡id
@prop ( { required : true , type : Number , default : [ ] } )
@prop ( { required : true , type : Number , default : [ ] } )
heroes : Array < number > ; // 武将id
}
@@ -56,7 +56,7 @@ export class WarStar {
star : number ; // 星级
}
export class Teraph {
export class Teraph {
@prop ( { required : true , default : 1 } )
id : number ; // 神像的id
@prop ( { required : true , default : 1 } )
@@ -85,19 +85,19 @@ export class Teraph{
public set attr ( value : Map < number , number > ) {
value . forEach ( ( val , id ) = > {
if ( id == ABI_TYPE . ABI_HP ) this . hp = val ;
if ( id == ABI_TYPE . ABI_ATK ) this . atk = val ;
if ( id == ABI_TYPE . ABI_DEF ) this . def = val ;
if ( id == ABI_TYPE . ABI_MDEF ) this . mdef = val ;
if ( id == ABI_TYPE . ABI_HP ) this . hp = val ;
if ( id == ABI_TYPE . ABI_ATK ) this . atk = val ;
if ( id == ABI_TYPE . ABI_DEF ) this . def = val ;
if ( id == ABI_TYPE . ABI_MDEF ) this . mdef = val ;
} ) ;
}
}
/**
* 角色字段接口
*/
@index ( { roleId : 1 } )
@index ( { serverId : 1 , roleId : 1 } )
@index ( { serverId : 1 , roleId : 1 } )
@index ( { towerLv : - 1 , towerUpTime : 1 } )
// @index({ userInfo.uid: 1, serverId: 1 })
export default class Role extends BaseModel {
@@ -133,19 +133,19 @@ export default class Role extends BaseModel {
@prop ( { required : true , type : Figure , default : getDefualtFigure ( 'spine' ) , _id : false } )
spines : Figure [ ] ; // 拥有的形象
public get head ( ) { // 虚拟字段head 当前头像
public get head() { // 虚拟字段head 当前头像
let curHead = this . heads ? . find ( cur = > cur . enable && ( ! cur . time || cur . time > nowSeconds ( ) ) ) ;
return curHead? curHead.id : EXTERIOR.EXTERIOR_FACE ;
}
public get frame ( ) { // 虚拟字段frame 当前相框
let curFrame = this . frames ? . find ( cur = > cur . enable && ( ! cur . time || cur . time > nowSeconds ( ) ) ) ;
return curFrame?curFrame.id : EXTERIOR.EXTERIOR_FACECASE ;
return curHead ? curHead.id : EXTERIOR.EXTERIOR_FACE ;
}
public get spine ( ) { // 虚拟字段spin e 当前形象
public get frame() { // 虚拟字段fram e 当前相框
let curFrame = this . frames ? . find ( cur = > cur . enable && ( ! cur . time || cur . time > nowSeconds ( ) ) ) ;
return curFrame ? curFrame.id : EXTERIOR.EXTERIOR_FACECASE ;
}
public get spine() { // 虚拟字段spine 当前形象
let curSpine = this . spines ? . find ( cur = > cur . enable && ( ! cur . time || cur . time > nowSeconds ( ) ) ) ;
return curSpine? curSpine.id : EXTERIOR.EXTERIOR_APPEARANCE ;
return curSpine ? curSpine.id : EXTERIOR.EXTERIOR_APPEARANCE ;
}
@prop ( { required : true , default : 0 } )
@@ -162,7 +162,7 @@ export default class Role extends BaseModel {
topLineup : Array < TopHero > ; // 总战力
@prop ( { required : true , default : 100 } )
tili : number ; // 体力值
@prop ( { required : false , set : ( val : boolean ) = > val , get : ( ) = > true } )
@prop ( { required : false , set : ( val : boolean ) = > val , get : ( ) = > true } )
isReducedCe : boolean ; // 如果战力没有缩过就会返回false, 缩过了就会返回true
@prop ( { required : true , default : 0 } )
@@ -190,7 +190,7 @@ export default class Role extends BaseModel {
@prop ( { required : true , type : WarStar , default : [ ] , _id : false } )
warStar : WarStar [ ] ; // 关卡星级
@prop ( { required : true , default : 1 } )
@prop ( { required : true , default : 1 } )
loginCnt : number ; // 登录次数
@prop ( { required : true , default : nowSeconds } )
createTime : number ; // 创建时间
@@ -208,16 +208,16 @@ export default class Role extends BaseModel {
@prop ( { required : true , default : new Date ( ) } )
towerUpTime : Date ; // 天梯爬到这一层的时间
@prop ( { required : true , default : HANG_UP_CONSTS . MAX_SPD_UP_CNT } )
@prop ( { required : true , default : HANG_UP_CONSTS . MAX_SPD_UP_CNT } )
hangUpSpdUpCnt : number ; // 挂机加速次数
@prop ( { required : true , default : new Date ( ) } )
@prop ( { required : true , default : new Date ( ) } )
lastSpdUpTime : Date ; // 最后一次挂机加速时间
@prop ( { required : true , default : 0 } )
@prop ( { required : true , default : 0 } )
towerTaskCnt : number ; // 刷新派遣任务的次数, 向上累加, 每天8个
@prop ( { required : false } )
@prop ( { required : false } )
towerTaskRefTime : Date ; // 刷新派遣任务的时间
@prop ( { required : true , default : 0 } )
@prop ( { required : true , default : 0 } )
towerTaskReCnt : number ; // 刷新派遣任务刷新次数
// 奇遇事件相关
@@ -241,14 +241,14 @@ export default class Role extends BaseModel {
dungeonRefTime : Date ; // 秘境刷新时间
@prop ( { required : true , type : DungeonHero , default : [ ] , _id : false } )
dungeonHeroes : DungeonHero [ ] ; // 秘境首通使用的武将
// 全局养成
@prop ( { required : true , default : 1 } )
title : number ; //爵位
//神像
@prop ( { required : true , type : Teraph , default : getInitialTeraph ( ) , _id : false } )
teraphs : Teraph [ ] ;
teraphs : Teraph [ ] ;
// 公会
@prop ( { required : true , default : false } )
hasGuild : boolean ; // 是否加入过公会
@@ -293,7 +293,7 @@ export default class Role extends BaseModel {
public static async findAllByUid ( uid : number , getters = false , virtuals = true ) {
const role : RoleType [ ] = await RoleModel . find ( { 'userInfo.uid' : uid } ) . select ( 'roleId roleName serverId head frame spine lv updatedAt' ) . lean ( { getters , virtuals } ) ;
const role : RoleType [ ] = await RoleModel . find ( { 'userInfo.uid' : uid } ) . select ( 'roleId roleName serverId head frame spine lv updatedAt' ) . lean ( { getters , virtuals } ) ;
return role ;
}
@@ -317,11 +317,11 @@ export default class Role extends BaseModel {
* @param getters 是否使用get方法, 如ce使用了自动缩小1w倍
*/
public static async findByRoleId ( roleId : string , select? : string , getters = false , virtuals = true ) {
const role : RoleType = await RoleModel . findOne ( { roleId } ) . select ( select ) . lean ( { getters , virtuals } ) ;
const role : RoleType = await RoleModel . findOne ( { roleId } ) . select ( select ) . lean ( { getters , virtuals } ) ;
return role ;
}
public static async createRole ( uid : number , serverId : number , roleInfo : { roleId : string ; roleName : string ; seqId : number ; code : string , lv? :number , exp? : number } , lean = true ) {
public static async createRole ( uid : number , serverId : number , roleInfo : { roleId : string ; roleName : string ; seqId : number ; code : string , lv? : number , exp? : number } , lean = true ) {
const user = await User . findUserByUid ( uid ) ;
if ( ! user ) return null ;
const doc = new RoleModel ( ) ;
@@ -331,9 +331,9 @@ export default class Role extends BaseModel {
return role ;
}
public static async findRoleByField ( field : string , value? : Array < number | string > , select? : string , getters = false ) {
public static async findRoleByField ( field : string , value? : Array < number | string > , select? : string , getters = false ) {
let searchObj = { } ;
if ( field != 'all' ) {
if ( field != 'all' ) {
searchObj [ field ] = {
$in : value
} ;
@@ -345,92 +345,92 @@ export default class Role extends BaseModel {
public static async setEventStatus ( roleId : string , eventStatus : number , lean = true ) {
let role : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { eventStatus } , { new : true } ) . lean ( lean ) ;
let role : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { eventStatus } , { new : true } ) . lean ( lean ) ;
return role ;
}
public static async towerLvUp ( roleId : string ) {
let role : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { $inc : { towerLv : 1 } , towerUpTime : new Date ( ) } , { new : true } ) . lean ( { getters : true , virtuals : true } ) ;
let role : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { $inc : { towerLv : 1 } , towerUpTime : new Date ( ) } , { new : true } ) . lean ( { getters : true , virtuals : true } ) ;
return role ;
}
public static async hangUpSpdUp ( roleId : string , cnt : number , curTime : Date , lean = true ) {
if ( cnt < 0 ) return null ;
const result = await RoleModel . findOne ( { roleId } ) . lean ( lean ) ;
const result = await RoleModel . findOne ( { roleId } ) . lean ( lean ) ;
const lastSpdUpTime = result ? . lastSpdUpTime ;
let role : RoleType ;
if ( ! lastSpdUpTime || ( shouldRefresh ( lastSpdUpTime , curTime , HANG_UP_CONSTS . REFRESH_TIME , 1 ) && cnt <= HANG_UP_CONSTS . MAX_SPD_UP_CNT ) ) {
role = await RoleModel . findOneAndUpdate ( { roleId } , { hangUpSpdUpCnt : HANG_UP_CONSTS.MAX_SPD_UP_CNT - cnt , lastSpdUpTime : curTime } , { new : true } ) . lean ( lean ) ;
role = await RoleModel . findOneAndUpdate ( { roleId } , { hangUpSpdUpCnt : HANG_UP_CONSTS.MAX_SPD_UP_CNT - cnt , lastSpdUpTime : curTime } , { new : true } ) . lean ( lean ) ;
} else {
role = await RoleModel . findOneAndUpdate ( { roleId , hangUpSpdUpCnt : { $gte : cnt } } , { $inc : { hangUpSpdUpCnt : - cnt } , lastSpdUpTime : curTime } , { new : true } ) . lean ( lean ) ;
role = await RoleModel . findOneAndUpdate ( { roleId , hangUpSpdUpCnt : { $gte : cnt } } , { $inc : { hangUpSpdUpCnt : - cnt } , lastSpdUpTime : curTime } , { new : true } ) . lean ( lean ) ;
}
return role ;
}
public static async increaseExpeditionPoint ( roleId : string , point : number , lean = true ) {
let role : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { $inc : { expeditionPoint : point } } , { new : true } ) . lean ( lean ) ;
let role : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { $inc : { expeditionPoint : point } } , { new : true } ) . lean ( lean ) ;
return role ;
}
public static async levelup ( roleId : string , lv : number , exp : number , lean = true ) {
let role : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { $set : { exp , lv } } , { new : true } ) . lean ( lean ) ;
let role : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { $set : { exp , lv } } , { new : true } ) . lean ( lean ) ;
return role ;
}
public static async deleteAccount ( roleId : string ) {
let result = await RoleModel . deleteMany ( { roleId } ) ;
let result = await RoleModel . deleteMany ( { roleId } ) ;
return result ;
}
public static async addCoin ( roleId : string , cnt : number , lean = true ) {
let result : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { $inc : { coin : cnt } } , { "new" : true , "upsert" : true } ) . lean ( lean ) ;
let result : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { $inc : { coin : cnt } } , { "new" : true , "upsert" : true } ) . lean ( lean ) ;
return result ;
}
public static async addGoldFree ( roleId : string , cnt : number , lean = true ) {
let result : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { $inc : { gold : cnt , giftGold : cnt } } , { "new" : true , "upsert" : true } ) . lean ( lean ) ;
let result : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { $inc : { gold : cnt , giftGold : cnt } } , { "new" : true , "upsert" : true } ) . lean ( lean ) ;
return result ;
}
public static async costCoin ( roleId : string , cnt : number , lean = true ) {
let result : RoleType = await RoleModel . findOneAndUpdate ( { roleId , coin : { $gte : cnt } } , { $inc : { coin : - cnt } } , { "new" : true } ) . lean ( lean ) ;
let result : RoleType = await RoleModel . findOneAndUpdate ( { roleId , coin : { $gte : cnt } } , { $inc : { coin : - cnt } } , { "new" : true } ) . lean ( lean ) ;
return result ;
}
public static async costGold ( roleId : string , cnt : number , lean = true ) {
let result : RoleType = await RoleModel . findOneAndUpdate ( { roleId , gold : { $gte : cnt } } , { $inc : { gold : - cnt , totalCost : cnt } } , { "new" : true } ) . lean ( lean ) ;
let result : RoleType = await RoleModel . findOneAndUpdate ( { roleId , gold : { $gte : cnt } } , { $inc : { gold : - cnt , totalCost : cnt } } , { "new" : true } ) . lean ( lean ) ;
return result ;
}
public static async pushWarStar ( roleId : string , battleId : number , warType : number , star : number , lean = true ) {
let result : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { $addToSet : { warStar : { id : battleId , warType , star } } } , { "new" : true , "upsert" : true } ) . lean ( lean ) ;
let result : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { $addToSet : { warStar : { id : battleId , warType , star } } } , { "new" : true , "upsert" : true } ) . lean ( lean ) ;
return result ;
}
public static async updateWarStar ( roleId : string , battleId : number , star : number , lean = true ) {
let result : RoleType = await RoleModel . findOneAndUpdate (
{ roleId , 'warStar.id' : battleId } ,
{ $set : { 'warStar.$.star' : star } } ,
{ "new" : true , "upsert" : true }
{ roleId , 'warStar.id' : battleId } ,
{ $set : { 'warStar.$.star' : star } } ,
{ "new" : true , "upsert" : true }
) . lean ( lean ) ;
return result ;
}
// 重置派遣次数
public static async resetTowerCnt ( roleId : string , curTime : Date , lean = true ) {
const role : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { towerTaskCnt : 0 , towerTaskRefTime : curTime , towerTaskReCnt : 0 } , { new : true } ) . lean ( lean ) ;
const role : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { towerTaskCnt : 0 , towerTaskRefTime : curTime , towerTaskReCnt : 0 } , { new : true } ) . lean ( lean ) ;
return role ;
}
// 刷新派遣任务次数增长
public static async increaseTowerCnt ( roleId : string , num : number , lean = true ) {
const role : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { $inc : { towerTaskCnt : num } } , { new : true } ) . lean ( lean ) ;
const role : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { $inc : { towerTaskCnt : num } } , { new : true } ) . lean ( lean ) ;
return role ;
}
// 派遣任务增加刷新次数
public static async increaseTowerRefCnt ( roleId : string , num : number , lean = true ) {
const role : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { $inc : { towerTaskReCnt : num } } , { new : true } ) . lean ( lean ) ;
const role : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { $inc : { towerTaskReCnt : num } } , { new : true } ) . lean ( lean ) ;
return role ;
}
@@ -439,9 +439,9 @@ export default class Role extends BaseModel {
let role : RoleType ;
if ( needRefresh ) {
role = await RoleModel . findOneAndUpdate ( { roleId } , { expeditionResetCnt : 1 , expeditionResetRefTime : curTime } , { new : true } ) . lean ( lean ) ;
role = await RoleModel . findOneAndUpdate ( { roleId } , { expeditionResetCnt : 1 , expeditionResetRefTime : curTime } , { new : true } ) . lean ( lean ) ;
} else {
role = await RoleModel . findOneAndUpdate ( { roleId } , { $inc : { expeditionResetCnt : 1 } } , { new : true } ) . lean ( lean ) ;
role = await RoleModel . findOneAndUpdate ( { roleId } , { $inc : { expeditionResetCnt : 1 } } , { new : true } ) . lean ( lean ) ;
}
return role ;
}
@@ -452,9 +452,9 @@ export default class Role extends BaseModel {
let role : RoleType ;
if ( needRefresh ) {
role = await RoleModel . findOneAndUpdate ( { roleId } , { dungeonCnt : 0 , dungeonRefTime : curTime , dungeonBuyCnt : inc } , { new : true } ) . lean ( lean ) ;
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 ) ;
role = await RoleModel . findOneAndUpdate ( { roleId } , { $inc : { dungeonBuyCnt : inc } } , { new : true } ) . lean ( lean ) ;
}
return role ;
}
@@ -463,9 +463,9 @@ export default class Role extends BaseModel {
public static async increaseDungeonCnt ( roleId : string , needRefresh : boolean , inc : number , curTime : Date , lean = true ) {
let role : RoleType ;
if ( needRefresh ) {
role = await RoleModel . findOneAndUpdate ( { roleId } , { dungeonCnt : inc , dungeonRefTime : curTime , dungeonBuyCnt : 0 } , { new : true } ) . lean ( lean ) ;
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 ) ;
role = await RoleModel . findOneAndUpdate ( { roleId } , { $inc : { dungeonCnt : inc } } , { new : true } ) . lean ( lean ) ;
}
return role ;
}
@@ -474,7 +474,7 @@ export default class Role extends BaseModel {
public static async getRank ( type : string , serverId : number , select? : string , page = 1 , limit = 200 ) {
let sortBy = { } ;
let condition = { } ;
switch ( type ) {
switch ( type ) {
case 'tower' :
sortBy = { towerLv : - 1 , towerUpTime : 1 } ; condition = { towerLv : { $gt : 0 } } ; break ;
case 'topLineup' :
@@ -494,19 +494,19 @@ export default class Role extends BaseModel {
default :
sortBy = { } ; break ;
}
const ranks : RoleType [ ] = await RoleModel . find ( { serverId , . . . condition } ) . select ( select ) . sort ( sortBy ) . limit ( limit ) . skip ( ( page - 1 ) * limit ) . lean ( { virtuals : true , getters : true } ) ;
const ranks : RoleType [ ] = await RoleModel . find ( { serverId , . . . condition } ) . select ( select ) . sort ( sortBy ) . limit ( limit ) . skip ( ( page - 1 ) * limit ) . lean ( { virtuals : true , getters : true } ) ;
return ranks ;
}
// 保存秘境首通队伍
public static async saveDungeonHero ( roleId : string , battleId : number , heroes : number [ ] , isSuccess : boolean ) {
if ( isSuccess ) {
if ( isSuccess ) {
let role = await Role . findByRoleId ( roleId ) ;
let dungeonHeroes = role && role . dungeonHeroes ;
let hasHero = dungeonHeroes && dungeonHeroes . find ( cur = > cur . battleId == battleId ) ;
if ( ! dungeonHeroes || ! hasHero ) {
role = await RoleModel . findOneAndUpdate ( { roleId } , { $push : { dungeonHeroes : { battleId , heroes } } , $set : { dungeonWarId : battleId , dungeonUpdatedAt : nowSeconds ( ) } } ) ;
let hasHero = dungeonHeroes && dungeonHeroes . find ( cur = > cur . battleId == battleId ) ;
if ( ! dungeonHeroes || ! hasHero ) {
role = await RoleModel . findOneAndUpdate ( { roleId } , { $push : { dungeonHeroes : { battleId , heroes } } , $set : { dungeonWarId : battleId , dungeonUpdatedAt : nowSeconds ( ) } } ) ;
}
return role ;
}
@@ -514,29 +514,29 @@ export default class Role extends BaseModel {
// 保存开启功能
public static async pushFuncs ( roleId : string , funcs : number [ ] , lean = true ) {
const recs : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { $push : { funcs : { $each : funcs } } } , { new : true } ) . lean ( lean ) ;
const recs : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { $push : { funcs : { $each : funcs } } } , { new : true } ) . lean ( lean ) ;
return recs
}
public static async updateRoleInfo ( roleId : string , roleUpdate :RoleUpdate , getters = false , virtuals = true ) {
public static async updateRoleInfo ( roleId : string , roleUpdate : RoleUpdate , getters = false , virtuals = true ) {
delete roleUpdate . _id ;
let result : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { $set :roleUpdate } , { new : true } ) . lean ( { getters , virtuals } ) ;
let result : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { $set : roleUpdate } , { new : true } ) . lean ( { getters , virtuals } ) ;
return result ;
}
public static async incRoleInfo ( roleId : string , inc : RoleInc , set : RoleUpdate , getters = false , virtuals = true ) {
delete set . _id ;
let result : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { $inc : inc , $set : set } , { new : true } ) . lean ( { getters , virtuals } ) ;
let result : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { $inc : inc , $set : set } , { new : true } ) . lean ( { getters , virtuals } ) ;
return result ;
}
public static async updateMainWarId ( roleId : string , mainWarId : number , mainUpdatedAt : number , getters = false , virtuals = true ) {
let result : RoleType = await RoleModel . findOneAndUpdate ( { roleId , mainWarId : { $lt : mainWarId } } , { $set : { mainWarId , mainUpdatedAt } } , { new : true } ) . lean ( { getters , virtuals } ) ;
let result : RoleType = await RoleModel . findOneAndUpdate ( { roleId , mainWarId : { $lt : mainWarId } } , { $set : { mainWarId , mainUpdatedAt } } , { new : true } ) . lean ( { getters , virtuals } ) ;
return result ;
}
public static async updateMainEliteWarId ( roleId : string , mail EliteWarId : number , mainEliteUpdatedAt : number , getters = false , virtuals = true ) {
let result : RoleType = await RoleModel . findOneAndUpdate ( { roleId , mail EliteWarId : { $lt : mail EliteWarId } } , { $set : { mail EliteWarId , mainEliteUpdatedAt } } , { new : true } ) . lean ( { getters , virtuals } ) ;
public static async updateMainEliteWarId ( roleId : string , main EliteWarId : number , mainEliteUpdatedAt : number , getters = false , virtuals = true ) {
let result : RoleType = await RoleModel . findOneAndUpdate ( { roleId , main EliteWarId : { $lt : main EliteWarId } } , { $set : { main EliteWarId , mainEliteUpdatedAt } } , { new : true } ) . lean ( { getters , virtuals } ) ;
return result ;
}
@@ -554,32 +554,32 @@ export default class Role extends BaseModel {
*/
public static async getInviteList ( time : number , serverId : number ) {
const result : RoleType [ ] = await RoleModel . find ( { loginTime : { $gt : time } , hasGuild : false , serverId } )
. select ( { roleId : 1 , roleName : 1 , ce : 1 , head : 1 , frame : 1 , lv : 1 , title : 1 , job : 1 , quitTime : 1 , _id : 0 } )
. sort ( { quitTime : - 1 , lv : - 1 , ce : - 1 } )
. limit ( 100 ) . lean ( { getters : true , virtuals : true } ) ;
. select ( { roleId : 1 , roleName : 1 , ce : 1 , head : 1 , frame : 1 , lv : 1 , title : 1 , job : 1 , quitTime : 1 , _id : 0 } )
. sort ( { quitTime : - 1 , lv : - 1 , ce : - 1 } )
. limit ( 100 ) . lean ( { getters : true , virtuals : true } ) ;
return result ;
}
// 获取好友推荐列表
public static async getRecommedList ( minLv : number , maxLv : number , time : number ) {
const result : RoleType [ ] = await RoleModel . find ( { loginTime : { $gt : time } , lv : { $gte : minLv , $lte : maxLv } } , { _id : 0 } )
. select ( ROLE_SELECT . SHOW_FRIEND_APPLY_LIST )
. sort ( { quitTime : - 1 , lv : - 1 , ce : - 1 } )
. limit ( 200 ) . lean ( { getters : true , virtuals : true } ) ;
. select ( ROLE_SELECT . SHOW_FRIEND_APPLY_LIST )
. sort ( { quitTime : - 1 , lv : - 1 , ce : - 1 } )
. limit ( 200 ) . lean ( { getters : true , virtuals : true } ) ;
return result ;
}
// 查询玩家
public static async searchByNameOrId ( value : string ) {
const result : RoleType [ ] = await RoleModel . find ( {
const result : RoleType [ ] = await RoleModel . find ( {
$or : [
{ roleName : { $regex : new RegExp ( value . toString ( ) , 'i' ) } } ,
{ roleId : value }
]
} , { _id : 0 } )
. select ( ROLE_SELECT . SHOW_FRIEND_APPLY_LIST )
. sort ( { quitTime : - 1 , lv : - 1 , ce : - 1 } )
. limit ( 200 ) . lean ( { getters : true , virtuals : true } ) ;
} , { _id : 0 } )
. select ( ROLE_SELECT . SHOW_FRIEND_APPLY_LIST )
. sort ( { quitTime : - 1 , lv : - 1 , ce : - 1 } )
. limit ( 200 ) . lean ( { getters : true , virtuals : true } ) ;
return result ;
}
@@ -598,31 +598,31 @@ export default class Role extends BaseModel {
// 增加好友数量
public static async increaseFriendCnt ( roleId : string , inc : number , max? : number ) {
let condition = { roleId } ;
if ( max ) {
condition [ 'friendCnt' ] = { $lte : max - inc } ;
if ( max ) {
condition [ 'friendCnt' ] = { $lte : max - inc } ;
}
const result : RoleType = await RoleModel . findOneAndUpdate ( condition , { $inc : { friendCnt : inc } } , { new : true } ) . lean ( { getters : true , virtuals : true } ) ;
const result : RoleType = await RoleModel . findOneAndUpdate ( condition , { $inc : { friendCnt : inc } } , { new : true } ) . lean ( { getters : true , virtuals : true } ) ;
return result ;
}
// 增加好友申请数量
public static async increaseFriendApplyCnt ( roleId : string , inc : number , max : number ) {
const result : RoleType = await RoleModel . findOneAndUpdate ( { roleId , recFrdApplyCnt : { $lte : max - inc } } , { $inc : { recFrdApplyCnt : inc } } , { new : true } ) . lean ( { getters : true , virtuals : true } ) ;
const result : RoleType = await RoleModel . findOneAndUpdate ( { roleId , recFrdApplyCnt : { $lte : max - inc } } , { $inc : { recFrdApplyCnt : inc } } , { new : true } ) . lean ( { getters : true , virtuals : true } ) ;
return result ;
}
// 增加黑名单数量
public static async increaseBlockCnt ( roleId : string , blockCnt : number , friendCnt : number , maxBlockCnt : number ) {
const result : RoleType = await RoleModel . findOneAndUpdate ( { roleId , blockCnt : { $lte : maxBlockCnt - blockCnt } } , { $inc : { blockCnt , friendCnt } } , { new : true } ) . lean ( { getters : true , virtuals : true } ) ;
const result : RoleType = await RoleModel . findOneAndUpdate ( { roleId , blockCnt : { $lte : maxBlockCnt - blockCnt } } , { $inc : { blockCnt , friendCnt } } , { new : true } ) . lean ( { getters : true , virtuals : true } ) ;
return result ;
}
public static async updatedRoleMailAt ( roleId : string , updatedMailAt : number , lean = true ) {
const result : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { $set : { updatedMailAt } } , { new : true } ) . lean ( lean ) ;
const result : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { $set : { updatedMailAt } } , { new : true } ) . lean ( lean ) ;
return result ;
}
public static async addFigure ( roleId : string , id : number , figure : Figure ) {
const result : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { $pull : { heads : { id : id } , $push : { heads : figure } } } , { new : true } ) . lean ( ) ;
const result : RoleType = await RoleModel . findOneAndUpdate ( { roleId } , { $pull : { heads : { id : id } , $push : { heads : figure } } } , { new : true } ) . lean ( ) ;
return result
}
@@ -637,25 +637,25 @@ export default class Role extends BaseModel {
const roles : RoleType [ ] = await RoleModel . find ( { serverId , updatedAt : { $gte : new Date ( yesterday ) } } )
. select ( 'topLineup' )
. sort ( { ce : - 1 } ) . lean ( ) ;
return roles [ Math . floor ( roles . length / 2 ) ]
return roles [ Math . floor ( roles . length / 2 ) ]
}
public static async receiveRankReward ( roleId : string , id : number ) {
const role : RoleType = await RoleModel . findOneAndUpdate ( { roleId , rankReceived : { $nin : [ id ] } } , { $push : { rankReceived : id } } , { new : true } ) . lean ( ) ;
const role : RoleType = await RoleModel . findOneAndUpdate ( { roleId , rankReceived : { $nin : [ id ] } } , { $push : { rankReceived : id } } , { new : true } ) . lean ( ) ;
return role ;
}
}
export const RoleModel = getModelForClass ( Role ) ;
export interface RoleType extends Pick < DocumentType < Role > , keyof Role > { } ;
export interface RoleType extends Pick < DocumentType < Role > , keyof Role > { } ;
export type RoleUpdate = Partial < RoleType > ; // 将所有字段变成可选项
export type RoleInc = Partial < Pick < DocumentType < Role > , 'heroNum' | 'blockCnt' | 'friendCnt' | 'gold' | 'coin' > > ;
export type RoleInc = Partial < Pick < DocumentType < Role > , 'heroNum' | 'blockCnt' | 'friendCnt' | 'gold' | 'coin' > > ;
// 初始化
function getInitialTeraph() {
let teraphs = new Array < Teraph > ( ) ;
for ( let i = ROLE_TERAPH . START ; i <= ROLE_TERAPH . END ; i ++ ) {
for ( let i = ROLE_TERAPH . START ; i <= ROLE_TERAPH . END ; i ++ ) {
let p = new Teraph ( i ) ;
teraphs . push ( p ) ;
}
@@ -664,7 +664,7 @@ function getInitialTeraph() {
function getDefualtFigure ( type : string ) {
let figures = new Array < Figure > ( ) ;
if ( type == 'head' ) {
if ( type == 'head' ) {
let figure = new Figure ( EXTERIOR . EXTERIOR_FACE , true , null , true ) ;
figures . push ( figure ) ;
} else if ( type == 'frame' ) {