军团活动:诸侯混战城门血量
This commit is contained in:
@@ -37,7 +37,7 @@ export class CeAttrDataRole {
|
||||
}
|
||||
}
|
||||
|
||||
class TopHero {
|
||||
export class TopHero {
|
||||
@prop({ required: true })
|
||||
hid: number; // 武将id
|
||||
@prop({ required: true })
|
||||
@@ -696,12 +696,12 @@ export default class Role extends BaseModel {
|
||||
}
|
||||
|
||||
// 获取战力在中位数的玩家
|
||||
public static async getMedianRole(serverId: number) {
|
||||
public static async getActivePlayers(serverId: number) {
|
||||
let yesterday = <Date>getTimeFunD().getBeforeDayWithHour(1);
|
||||
const roles: RoleType[] = await RoleModel.find({ serverId, updatedAt: { $gte: yesterday } })
|
||||
.select('topLineup')
|
||||
.select('topLineup topLineupCe')
|
||||
.sort({ ce: -1 }).lean();
|
||||
return roles[Math.floor(roles.length / 2)]
|
||||
return roles
|
||||
}
|
||||
|
||||
public static async receiveRankReward(roleId: string, ids: number[]) {
|
||||
|
||||
73
shared/db/ServerRecords.ts
Normal file
73
shared/db/ServerRecords.ts
Normal file
@@ -0,0 +1,73 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose';
|
||||
import { RoleType, TopHero } from './Role';
|
||||
import { getZeroPoint } from '../pubUtils/timeUtil';
|
||||
|
||||
export class ActivePlayer {
|
||||
@prop({ required: true })
|
||||
roleId: string;
|
||||
@prop({ required: true })
|
||||
topLineupCe: number;
|
||||
@prop({ required: true, type: TopHero, default: [], _id: false })
|
||||
topLineup: Array<TopHero>; // 总战力
|
||||
|
||||
constructor(role: RoleType) {
|
||||
this.roleId = role.roleId;
|
||||
this.topLineupCe = role.topLineupCe;
|
||||
this.topLineup = role.topLineup;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 游戏字段接口
|
||||
*/
|
||||
@index({ serverId: 1, date: 1 })
|
||||
@modelOptions({ schemaOptions: { id: false } })
|
||||
export default class ServerRecord extends BaseModel {
|
||||
|
||||
@prop({ required: true, default: 1 })
|
||||
serverId: number; // 小区id
|
||||
|
||||
@prop({ required: true, default: 1 })
|
||||
today: number; // 天
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
activePlayerCe: number; // 前一天活跃玩家前十的最强6人战力和
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
activePlayerCnt: number; // 前一天活跃玩家人数
|
||||
|
||||
@prop({ required: true, type: ActivePlayer, _id: false })
|
||||
activePlayers: ActivePlayer[]; // 前一天的活跃玩家
|
||||
|
||||
@prop({ required: true, type: String, default: [] })
|
||||
activeGuildCodes: string[]; // 前一天参与军团活动的军团
|
||||
|
||||
public static async updateData(serverId: number, update: ServerRecordUpdate) {
|
||||
let today = getZeroPoint();
|
||||
const doc = new ServerRecordModel();
|
||||
let rec: ServerRecordType = await ServerRecordModel.findOneAndUpdate({ serverId, today }, { $set: { ...doc.toJSON(), ...update } }, { new: true, upsert: true }).lean();
|
||||
return rec;
|
||||
}
|
||||
|
||||
public static async addActiveGuild(serverId: number, guildCode: string) {
|
||||
let tomorrow = getZeroPoint() + 86400;
|
||||
let rec: ServerRecordType = await ServerRecordModel.findOneAndUpdate({ serverId, today: tomorrow }, { $addToSet: [guildCode] }, { new: true, upsert: true }).lean();
|
||||
return rec;
|
||||
}
|
||||
|
||||
public static async findTodayData(serverId: number) {
|
||||
let today = getZeroPoint();
|
||||
let rec: ServerRecordType = await ServerRecordModel.findOne({ serverId, today }).lean();
|
||||
return rec;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export const ServerRecordModel = getModelForClass(ServerRecord);
|
||||
|
||||
export interface ServerRecordType extends Pick<DocumentType<ServerRecord>, keyof ServerRecord> {
|
||||
id: number;
|
||||
};
|
||||
export type ServerRecordUpdate = Partial<ServerRecordType>; // 将所有字段变成可选项
|
||||
@@ -25,6 +25,7 @@ export class Maintenance {
|
||||
hasNotify: boolean; // 是否有维护通知
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 游戏字段接口
|
||||
*/
|
||||
@@ -86,9 +87,6 @@ export default class Serverlist extends BaseModel {
|
||||
@prop({ required: true, default: 0 })
|
||||
playerCnt: number; // 当前玩家人数
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
medianCe: number; // 中位数武将战力、缩小10000倍后的结果
|
||||
|
||||
@prop({ required: true, type: Maintenance, _id: false })
|
||||
maintenance: Maintenance
|
||||
|
||||
|
||||
Reference in New Issue
Block a user