✨ feat(gvg): 准备期:千机阁以及获取物品
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user