演武场和练兵场

This commit is contained in:
mamengke01
2021-01-22 09:44:01 +08:00
parent 7efcc637b3
commit 5da371a17d
17 changed files with 887 additions and 69 deletions

90
shared/db/GuildTrain.ts Normal file
View File

@@ -0,0 +1,90 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType, Ref } from '@typegoose/typegoose';
class TrainBox {
}
class TrainScript {
@prop({ required: true })
hid: number;
@prop({ required: true })
progress: number;
@prop({ required: true })
time: number;
@prop({ required: true, default: [], type: TrainBox})
trainBoxs: Array<TrainBox>;
}
class Rank {
@prop({ required: true })
roleId: string;
@prop({ required: true })
score: number;
}
class Report {
@prop({ required: true })
roleId: string;
@prop({ required: true })
trainId: number;//挑战的试炼关
@prop({ required: true })
hid: number;//据点
@prop({ required: true })
score: number;
@prop({ required: true })
time: number;
@prop({ required: true })
isSuccessed: boolean;
@prop({ required: true })
type: number;//1表示普通战报 2表示系统战报即被成功压制
}
@index({guildCode:1, trainId:1})
export default class GuildTrain extends BaseModel {
@prop({ required: true })
guildCode: string;
@prop({ required: true })
trainId: number;
@prop({ required: true })
isComplete: boolean;
@prop({ required: true, default: [], type: TrainScript})
trainScripts: Array<TrainScript>;
@prop({ required: true, default: [], type: Rank })
ranks: Array<Rank>;
@prop({ required: true, default: [], type: Report })
reports: Array<Report>;
@prop({ required: true, default: false})
locked: boolean;
public static async findGuildTrain(guildCode: string, locked = false, lean = true) {
const guildTrain: GuildTrainType[] = await GuildTrainModel.findOne({ guildCode, locked }).lean(lean);
return guildTrain;
}
public static async findTrainByTrainIdNotLock(guildCode: string, trainId: number, locked = false, lean = true) {
const guildTrain: GuildTrainType = await GuildTrainModel.findOne({ guildCode, trainId, locked }).lean(lean);
return guildTrain;
}
public static async updateGuildTrain(guildCode: string, trainId: number, update: GuildTrainTypeParam, lean = true) {
const guildTrain: GuildTrainType = await GuildTrainModel.findOneAndUpdate({ guildCode, trainId}, { $set: update }).lean(lean);
return guildTrain;
}
public static async updateGuildTrainProgress(guildCode: string, trainId: number, hid:number, progress: number, ranks:Array<Rank>, reports: Array<Report>, isComplete: boolean,lean = true) {
const guildTrain: GuildTrainType = await GuildTrainModel.findOneAndUpdate({ guildCode, trainId, 'trainScripts.hid':hid},
{ $set: {'trainScripts.$.progress': progress, ranks, reports, isComplete} }).lean(lean);
return guildTrain;
}
public static async openGuildTrain() {
// const bossScript: BossScriptType = await BossScriptModel.findOneAndUpdate({ guildCode },{ranks:[], time: nowSeconds(), bossHp, warId, $inc: { recordNum: 1 }}, {new: true, upsert: true}).lean(lean);
}
}
export const GuildTrainModel = getModelForClass(GuildTrain);
export interface GuildTrainType extends Pick<DocumentType<GuildTrain>, keyof GuildTrain> { };
export type GuildTrainTypeParam = Partial<GuildTrainType>; // 将所有字段变成可选项