feat(gvg): 准备期:千机阁以及获取物品

This commit is contained in:
luying
2023-01-09 17:19:47 +08:00
parent 0530f931bc
commit 098a7c85c6
28 changed files with 744 additions and 106 deletions

View File

@@ -1,14 +1,21 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType, } from '@typegoose/typegoose';
import { LEAGUE_JOB } from '../consts';
import { GVG } from '../pubUtils/dicParam';
class Tech {
export class Tech {
@prop({ required: true, default: 0 })
id: number;
@prop({ required: true, default: 0 })
progress: number; // 贡献
@prop({ required: true, default: 0 })
status: number; // 0-已解锁 1-已激活
maxProgress: number; // 贡献
constructor(id: number, maxProgress: number) {
this.id = id;
this.progress = 0;
this.maxProgress = maxProgress;
}
}
class DonateRec {
@@ -29,6 +36,13 @@ class Resource {
wood: number; // 木堆
}
class GuildActive {
@prop({ required: true, default: '' })
guildCode: string; // 军团
@prop({ required: true, default: 0 })
active: number;
}
@index({ leagueCode: 1, configId: 1 })
export default class GVGLeaguePrepare extends BaseModel {
@@ -50,8 +64,14 @@ export default class GVGLeaguePrepare extends BaseModel {
@prop({ required: true, default: 0 })
fighterCnt: number; // 选择外政人数
@prop({ required: true, default: [], type: Number, _id: false })
activeTech: number[]; // 已激活完了的
@prop({ required: true, default: [], type: Tech, _id: false })
tech: Tech[]; // 千机阁
techQueue: Tech[]; // 千机阁
@prop({ required: true, default: 0 })
techQueueCnt: number; // 千机阁队列数量
@prop({ required: true, default: [], type: DonateRec, _id: false })
donateRec: DonateRec[]; // 捐献记录
@@ -59,6 +79,9 @@ export default class GVGLeaguePrepare extends BaseModel {
@prop({ required: true, default: {food: 0, mineral: 0, wood: 0}, type: Resource, _id: false })
resources: Resource
@prop({ required: true, default: [], type: GuildActive, _id: false })
guildActive: GuildActive[]; // 军团活跃
public static async initData(configId: number, leagueCode: string, maxMemberCnt: number) {
const doc = new GVGLeaguePrepareModel();
const update = Object.assign(doc.toJSON(), { maxMemberCnt });
@@ -83,6 +106,24 @@ export default class GVGLeaguePrepare extends BaseModel {
return result;
}
}
public static async unlockTech(configId: number, leagueCode: string, techId: number, maxProgress: number) {
const result: GVGLeaguePrepareType = await GVGLeaguePrepareModel.findOneAndUpdate({
configId, leagueCode, techQueueCnt: { $lt: GVG.GVG_LEAGUE_TECH_LIST } }, { $push: { techQueue: new Tech(techId, maxProgress) }, $inc: { techQueueCnt: 1 } }, { new: true }).lean();
return result;
}
public static async addProgress(configId: number, leagueCode: string, techId: number, addProgress: number) {
const result: GVGLeaguePrepareType = await GVGLeaguePrepareModel.findOneAndUpdate({
configId, leagueCode, 'techQueue.id': techId }, { $inc: { 'techQueue.$.progress': addProgress } }, { new: true }).lean();
return result;
}
public static async activate(configId: number, leagueCode: string, techId: number) {
const result: GVGLeaguePrepareType = await GVGLeaguePrepareModel.findOneAndUpdate({
configId, leagueCode }, { $push: { activeTech: techId}, $pull: { techQueue: { id: techId } } }, { new: true }).lean();
return result;
}
}
export const GVGLeaguePrepareModel = getModelForClass(GVGLeaguePrepare);