形象:头像相框形象字段

This commit is contained in:
luying
2021-03-11 19:29:50 +08:00
parent b2566f3fb6
commit 09a7a8b89b
30 changed files with 290 additions and 166 deletions
+58 -38
View File
@@ -4,8 +4,10 @@ import { index, getModelForClass, prop, DocumentType, Ref, mongoose } from '@typ
import User from './User';
import { shouldRefresh, reduceCe } from '../pubUtils/util';
import { initRoleAtrr } from '../pubUtils/playerCe';
import Hero,{} from '../db/Hero';
import { nowSeconds } from '../pubUtils/timeUtil';
import { Head, Frame } from '../domain/dbGeneral';
import { FIGURE } from '../pubUtils/dicParam';
import Hero from './Hero';
// role表属性格式
export class CeAttrDataRole {
@@ -22,20 +24,20 @@ export class CeAttrDataRole {
}
class TopHero {
@prop({ required: true })
hid: number; // 武将id
@prop({ required: true })
ce: number; // 战力
@prop({ ref: Hero, type: mongoose.Schema.Types.ObjectId })
hero: Ref<Hero>;
@prop({ required: true })
hid: number; // 武将id
@prop({ required: true })
ce: number; // 战力
@prop({ ref: Hero, type: mongoose.Schema.Types.ObjectId })
hero: Ref<Hero>;
}
class DungeonHero {
@prop({ required: true })
battleId: number; // 关卡id
@prop({ required: true, type: Number, default:[] })
heroes: Array<number>; // 武将id
@prop({ required: true })
battleId: number; // 关卡id
@prop({ required: true, type: Number, default:[] })
heroes: Array<number>; // 武将id
}
class PayRecord {
@@ -90,15 +92,7 @@ export class Teraph{
});
}
}
// 初始化
function getInitialTeraph() {
let teraphs = new Array<Teraph>();
for(let i = ROLE_TERAPH.START; i <= ROLE_TERAPH.END; i++) {
let p = new Teraph(i);
teraphs.push(p);
}
return teraphs;
}
/**
* 角色字段接口
*/
@@ -126,10 +120,26 @@ export default class Role extends BaseModel {
blocked: boolean; // 是否屏蔽
@prop({ required: true })
code: string; // 邀请码
@prop({ required: true, default: 19 })
headHid: number; // 头像所用武将 Id,默认赵云
@prop({ required: true, default: 19 })
sHid: number; // 形象所用武将 Id,默认赵云
@prop({ required: true, type: Number, default: [] })
showLineup: number[]; // 展示阵容
@prop({ required: true, type: Head, default: [] })
heads: Head[]; // 拥有头像列表
@prop({ required: true, type: Head, default: [] })
frames: Frame[]; // 拥有相框列表
@prop({ required: true, default: FIGURE.DEFAULT_SPINE })
spine: number; // 显示形象
public get head () { // 虚拟字段head 当前头像
let curHead = this.heads?.find(cur => cur.enable && cur.time > nowSeconds());
return curHead?curHead.id: FIGURE.DEFAULT_HEAD;
}
public get frame () { // 虚拟字段frame 当前相框
let curFrame = this.frames?.find(cur => cur.enable && cur.time > nowSeconds());
return curFrame?curFrame.id: FIGURE.DEFAULT_FRAME;
}
@prop({ required: true, default: 0 })
exp: number; // 经验值
@@ -221,14 +231,14 @@ export default class Role extends BaseModel {
@prop({ required: true, default: new Date() })
dungeonRefTime: Date; // 秘境刷新时间
@prop({ required: true, type: DungeonHero, default: [], _id: false })
dungeonHeroes: Array<DungeonHero>; // 秘境首通使用的武将
dungeonHeroes: DungeonHero[]; // 秘境首通使用的武将
// 全局养成
@prop({ required: true, default: 1 })
title: number; //爵位
//神像
@prop({ required: true, type: Teraph, default: getInitialTeraph(), _id: false })
teraphs:Array<Teraph>;
teraphs: Teraph[];
// 公会
@prop({ required: true, default: false })
@@ -255,7 +265,7 @@ export default class Role extends BaseModel {
}
public static async findByUid(uid: number, serverId: number, select?: string, getters = false) {
const role: RoleType = await RoleModel.findOneAndUpdate({ 'userInfo.uid': uid, serverId }, { loginTime: nowSeconds(), quitTime: nowSeconds() }, { new: true }).select(select).lean({ getters });
const role: RoleType = await RoleModel.findOneAndUpdate({ 'userInfo.uid': uid, serverId }, { loginTime: nowSeconds(), quitTime: nowSeconds() }, { new: true }).select(select).lean({ getters, virtuals: true });
return role;
}
@@ -288,7 +298,7 @@ export default class Role extends BaseModel {
};
}
const user: RoleType[] = await RoleModel.find(searchObj).select(select).lean({ getters });
const user: RoleType[] = await RoleModel.find(searchObj).select(select).lean({ getters, virtuals: true });
return user;
}
@@ -298,8 +308,8 @@ export default class Role extends BaseModel {
return role;
}
public static async towerLvUp(roleId: string, lean = true) {
let role: RoleType = await RoleModel.findOneAndUpdate({roleId}, {$inc: {towerLv: 1}, towerUpTime: new Date()}, {new: true}).lean(lean);
public static async towerLvUp(roleId: string) {
let role: RoleType = await RoleModel.findOneAndUpdate({roleId}, {$inc: {towerLv: 1}, towerUpTime: new Date()}, {new: true}).lean({ virtuals: true });
return role;
}
@@ -420,18 +430,18 @@ export default class Role extends BaseModel {
}
// 获取排行榜
public static async getRank(type: string, serverId: number, fields: Array<string>, page = 1, limit = 100, lean = true) {
public static async getRank(type: string, serverId: number, fields: string[], page = 1, limit = 100) {
let sortBy = {};
if(type == 'tower') {
sortBy['towerLv'] = -1;
sortBy['towerUpTime'] = 1;
}
const ranks: RoleType[] = await RoleModel.find({serverId}).select(fields.join(' ')).sort(sortBy).limit(limit).skip((page - 1) * limit).lean(lean);
const ranks: RoleType[] = await RoleModel.find({serverId}).select(fields.join(' ')).sort(sortBy).limit(limit).skip((page - 1) * limit).lean({ virtuals: true });
return ranks;
}
// 保存秘境首通队伍
public static async saveDungeonHero(roleId: string, battleId: number, heroes: Array<number>, isSuccess: boolean) {
public static async saveDungeonHero(roleId: string, battleId: number, heroes: number[], isSuccess: boolean) {
if(isSuccess) {
let role = await Role.findByRoleId(roleId);
let dungeonHeroes = role && role.dungeonHeroes;
@@ -444,7 +454,7 @@ export default class Role extends BaseModel {
}
// 保存开启功能
public static async pushFuncs(roleId: string, funcs: Array<number>, lean = true) {
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);
return recs
}
@@ -469,9 +479,9 @@ export default class Role extends BaseModel {
*/
public static async getInviteList(time: number, serverId: number) {
const result = await RoleModel.find({ loginTime: { $gt: time }, hasGuild: false, serverId })
.select({roleId: 1, roleName: 1,ce: 1,headHid: 1,sHid: 1,lv: 1,title: 1,job: 1,quitTime: 1, _id: 0})
.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});
.limit(100).lean({getters: true, virtuals: true});
return result;
}
@@ -480,7 +490,7 @@ export default class Role extends BaseModel {
const result = 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 });
.limit(200).lean({ getters: true, virtuals: true });
return result;
}
@@ -494,7 +504,7 @@ export default class Role extends BaseModel {
}, { _id: 0 })
.select(ROLE_SELECT.SHOW_FRIEND_APPLY_LIST)
.sort({quitTime: -1, lv: -1, ce: -1})
.limit(200).lean({ getters: true });
.limit(200).lean({ getters: true, virtuals: true });
return result;
}
@@ -542,3 +552,13 @@ export const RoleModel = getModelForClass(Role);
export interface RoleType extends Pick<DocumentType<Role>, keyof Role>{};
export type RoleUpdate = Partial<RoleType>; // 将所有字段变成可选项
// 初始化
function getInitialTeraph() {
let teraphs = new Array<Teraph>();
for(let i = ROLE_TERAPH.START; i <= ROLE_TERAPH.END; i++) {
let p = new Teraph(i);
teraphs.push(p);
}
return teraphs;
}