Files
ZYZ/shared/db/GVGTeam.ts

101 lines
3.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// GVGTeam 数据库表,存储 GVG 队伍信息
import BaseModel from "./BaseModel";
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
import { genCode } from "../pubUtils/util";
import { LineupHero } from './../domain/roleField/hero';
@index({ roleId: 1, teamId: 1 })
@index({ teamCode: 1 })
export default class GVGTeam extends BaseModel {
@prop({ required: true })
roleId: string; // 玩家id
@prop({ required: true })
teamCode: string; // 玩家队伍唯一标识
@prop({ required: true })
teamId: number; // 队伍id1-3玩家的第几个队伍
@prop({ required: true })
leagueCode: string; // 联军
@prop({ required: false })
areaId: number;
@prop({ required: false })
cityId: number;
@prop({ required: false })
pointId: number;
@prop({ required: true })
head: number; // 头像
@prop({ required: true })
spine: number; // 形象
@prop({ required: true })
frame: number; // 相框
@prop({ required: true, default: 0 })
durability: number; // 耐久
@prop({ required: true, default: 0 })
restartTime: number; // 修整期倒计时
@prop({ required: true, default: 0 })
attackTime: number; // 进攻冷却时间
@prop({ required: true, default: 0 })
moveTime: number; // 移动冷却时间
@prop({ required: true, default: 0 })
defenseTime: number; // 防守保护时间
@prop({ required: true })
lineup: [LineupHero]
// 创建队伍
public static async createTeam(roleId: string, leagueCode: string, teamId: number, head: number, spine: number, frame: number, lineup: [LineupHero]) {
const doc = new GVGTeamModel();
const teamCode = genCode(8);
const update = Object.assign(doc.toJSON(), { roleId, leagueCode, teamId, teamCode, head, spine, frame, lineup });
const team: GVGTeamType | null = await GVGTeamModel.findOneAndUpdate({ teamCode }, { $setOnInsert: update }, { upsert: true, new: true }).lean();
return team;
}
// 保存队伍
public static async saveTeam(roleId: string, leagueCode: string, teamId: number, head: number, spine: number, frame: number, lineup: [LineupHero]) {
let team: GVGTeamType = await GVGTeamModel.findOne({ roleId, teamId }).lean();
if (!team) {
team = await this.createTeam(roleId, leagueCode, teamId, head, spine, frame, lineup);
return team;
}
const update = { head, spine, frame };
if (lineup && lineup.length > 0) {
update['lineup'] = lineup;
}
team = await GVGTeamModel.findOneAndUpdate({ roleId, teamId }, { update }, { new: true }).lean();
return team;
}
// 查找角色队伍数
public static async getTeamCnt(roleId: string) {
const teams: GVGTeamType[] = await GVGTeamModel.find({ roleId }).select('teamCode').lean();
return teams.length;
}
// 玩家切换城池更新队伍信息
public static async resetTeamsLoc(roleId: string, cityId: number, areaId: number) {
const res = await GVGTeamModel.updateMany({ roleId }, { cityId, areaId, pointId: 0 }).lean();
return !!res['ok'];
}
}
export const GVGTeamModel = getModelForClass(GVGTeam);
export interface GVGTeamType extends Pick<DocumentType<GVGTeam>, keyof GVGTeam> {
id: number;
};