✨ feat(gvg): 征战中原锁定对手

This commit is contained in:
luying
2023-02-17 10:58:06 +08:00
parent 4035645772
commit b727249106
12 changed files with 635 additions and 36 deletions
+76
View File
@@ -0,0 +1,76 @@
// 征战中原对手锁
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { OppPlayerInfo } from '../domain/gvgField/gvgDb';
import { genCode } from '../pubUtils/util';
import { VESTIGE_STATUS } from '../consts';
class LeagueGood {
@prop({ required: true })
itemType: number;
@prop({ required: true })
id: number;
@prop({ required: true })
count: number
}
@index({ day: 1, groupId: 1, vestigeId: 1, rank: 1 })
export default class GVGVestigeRec extends BaseModel {
@prop({ required: true })
battleCode: string; // 唯一code
@prop({ required: true })
attackRoleId: string; // 攻方玩家id
@prop({ required: true })
defenseRoleId: string; // 守方玩家id
@prop({ required: true })
groupId: number; // 战区id
@prop({ required: true })
vestigeId: number; // 遗迹id
@prop({ required: true })
status: number; // 1-出兵中 2-挑战中 3-挑战完毕 4-取消
@prop({ required: true })
checkTime: number; // 开始出兵的时间,13位时间戳
@prop({ required: true })
battleTime: number; // 开始挑战的时间,13位时间
@prop({ required: true })
endTime: number; // 结束时间,13位时间戳
@prop({ required: true, type: () => OppPlayerInfo, default: {}, _id: false })
attackInfo: OppPlayerInfo; // 攻方信息
@prop({ required: true, type: () => OppPlayerInfo, default: {}, _id: false })
defenseInfo: OppPlayerInfo; // 守方信息
@prop({ required: true, type: () => LeagueGood, default: [], _id: false })
leagueGoods: LeagueGood[]; // 奖励
@prop({ required: true, default: false })
hasRpl: boolean; // 是否存在对应录像
public static async createRec(configId: number, vestigeId: number, groupId: number, attackInfo: OppPlayerInfo, defenseInfo: OppPlayerInfo, leagueGoods: LeagueGood[]) {
const battleCode = genCode(10);
const result: GVGVestigeRecType = await GVGVestigeRecModel.findOneAndUpdate({ battleCode }, {
$set: { configId, vestigeId, groupId, attackRoleId: attackInfo.roleId, defenseRoleId: defenseInfo.roleId, status: VESTIGE_STATUS.CHECK, checkTime: Date.now(), attackInfo, defenseInfo, leagueGoods }
}, { new: true, upsert: true }).lean();
return result;
}
}
export const GVGVestigeRecModel = getModelForClass(GVGVestigeRec);
export interface GVGVestigeRecType extends Pick<DocumentType<GVGVestigeRec>, keyof GVGVestigeRec> {
id: number;
};
export type GVGVestigeRecUpdate = Partial<GVGVestigeRecType>; // 将所有字段变成可选项