✨ feat(gvg): 准备期征战中原初始
This commit is contained in:
@@ -5,6 +5,7 @@ import { index, getModelForClass, prop, DocumentType, } from '@typegoose/typegoo
|
||||
import { getFutureTime, nowSeconds } from '../pubUtils/timeUtil';
|
||||
import { genCode } from '../pubUtils/util';
|
||||
import { GVG } from '../pubUtils/dicParam';
|
||||
import { GVG_RESOURCE_TYPE } from '../consts';
|
||||
|
||||
@index({ leagueCode: 1, configId: 1 })
|
||||
@index({ fieldId: 1 })
|
||||
@@ -138,9 +139,10 @@ export default class GVGLeagueFarm extends BaseModel {
|
||||
public static async lockMineOrForestry(configId: number, leagueCode: string, farmId: number, type: number, roleId: string, fieldId: number, itemId: number) {
|
||||
// 先创建
|
||||
await GVGLeagueFarmModel.findOneAndUpdate({ configId, leagueCode, farmId, fieldId }, { $setOnInsert: { unlockTime: 0, itemId: 0, type } }, { upsert: true });
|
||||
let unlockTime = nowSeconds() + type == GVG_RESOURCE_TYPE.MINERAL? GVG.GVG_MINE_LOCK_TIME: GVG.GVG_FORESTRY_LOCK_TIME;
|
||||
const result: GVGLeagueFarmType = await GVGLeagueFarmModel.findOneAndUpdate(
|
||||
{ configId, leagueCode, farmId, fieldId, $or:[{ unlockTime: { $lt: nowSeconds() } }, {lockRoleId: roleId}] },
|
||||
{ $set: { unlockTime: nowSeconds() + GVG.GVG_FARM_LOCK_TIME, lockRoleId: roleId, itemId } },
|
||||
{ $set: { unlockTime, lockRoleId: roleId, itemId } },
|
||||
{ new: true }).lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ import { getZeroPointD } from '../pubUtils/timeUtil';
|
||||
import { TASK_FUN_TYPE } from '../consts';
|
||||
import { UpdateTaskParam } from '../domain/roleField/task';
|
||||
|
||||
@index({ leagueCode: 1, roleId: 1, configId: 1, status: 1 })
|
||||
@index({ leagueCode: 1, roleId: 1, configId: 1 })
|
||||
export default class GVGUserTask extends BaseModel {
|
||||
|
||||
@prop({ required: true, default: '' })
|
||||
|
||||
46
shared/db/GVGVestige.ts
Normal file
46
shared/db/GVGVestige.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
||||
import { getZeroPoint } from '../pubUtils/timeUtil';
|
||||
|
||||
class Vestige {
|
||||
@prop({ required: true })
|
||||
vestigeId: number; // 遗迹点
|
||||
|
||||
@prop({ required: true })
|
||||
position: string; // 遗迹点位置
|
||||
}
|
||||
|
||||
@index({ groupId: 1, day: 1 })
|
||||
export default class GVGVestige extends BaseModel {
|
||||
|
||||
@prop({ required: true })
|
||||
groupId: number; // 战区id
|
||||
|
||||
@prop({ required: true })
|
||||
type: number; // 1-单服 2-跨服
|
||||
|
||||
@prop({ required: true, type: Vestige, _id: false })
|
||||
vestiges: Vestige[]; // 今天的遗迹点
|
||||
|
||||
@prop({ required: true })
|
||||
day: number; // 每天5点
|
||||
|
||||
public static async getVestigate(groupId: number) {
|
||||
let day = getZeroPoint();
|
||||
let result: GVGVestigeType = await GVGVestigeModel.findOne({ groupId, day }).lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async initTodayVestigate(groupId: number, type: number, vestiges: Vestige[]) {
|
||||
let day = getZeroPoint();
|
||||
let result: GVGVestigeType = await GVGVestigeModel.findOneAndUpdate({ groupId, day }, { $setOnInsert: { type, vestiges } }, { new: true, upsert: true }).lean();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
export const GVGVestigeModel = getModelForClass(GVGVestige);
|
||||
|
||||
export interface GVGVestigeType extends Pick<DocumentType<GVGVestige>, keyof GVGVestige> {
|
||||
id: number;
|
||||
};
|
||||
export type GVGVestigeUpdate = Partial<GVGVestigeType>; // 将所有字段变成可选项
|
||||
44
shared/db/GVGVestigeRank.ts
Normal file
44
shared/db/GVGVestigeRank.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType, mongoose, Ref } from '@typegoose/typegoose';
|
||||
import Role from './Role';
|
||||
|
||||
@index({ groupId: 1, vestigeId: 1 })
|
||||
export default class GVGVestige extends BaseModel {
|
||||
|
||||
@prop({ required: true })
|
||||
configId: number; // 赛期
|
||||
|
||||
@prop({ required: true })
|
||||
day: number; // 每天5点
|
||||
|
||||
@prop({ required: true })
|
||||
groupId: number; // 战区id
|
||||
|
||||
@prop({ required: true })
|
||||
vestigeId: number; // 遗迹id
|
||||
|
||||
@prop({ required: true })
|
||||
roleId: string; // 玩家
|
||||
|
||||
@prop({ ref: 'Role', type: mongoose.Schema.Types.ObjectId })
|
||||
role: Ref<Role>;
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
rank: number; // 排名
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
oldRank: number; // 交换前排名
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
historyRank: number; // 历史最高排名
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
locked: number; // 是否被挑战
|
||||
}
|
||||
|
||||
export const GVGVestigeModel = getModelForClass(GVGVestige);
|
||||
|
||||
export interface GVGVestigeType extends Pick<DocumentType<GVGVestige>, keyof GVGVestige> {
|
||||
id: number;
|
||||
};
|
||||
export type GVGVestigeUpdate = Partial<GVGVestigeType>; // 将所有字段变成可选项
|
||||
Reference in New Issue
Block a user