90 lines
3.0 KiB
TypeScript
90 lines
3.0 KiB
TypeScript
import BaseModel from './BaseModel';
|
|
import { index, getModelForClass, prop } from '@typegoose/typegoose';
|
|
|
|
export class RoleStatus {
|
|
@prop({ required: true })
|
|
roleId: string;
|
|
@prop({ required: true })
|
|
isCap: boolean;
|
|
@prop({ required: true, default: 0 })
|
|
damageNum: number;
|
|
// 战斗状态 0-挑战中 1-挑战成功 2-挑战失败
|
|
@prop({ required: true, default: 0 })
|
|
battleStatus: number;
|
|
// 队伍中每个玩家的战斗编号
|
|
@prop({ required: false, default: '' })
|
|
battleCode: string;
|
|
// 玩家所用阵容
|
|
@prop({ required: false, type: Number, default: [] })
|
|
heroes: Array<number>;
|
|
// 阵亡武将
|
|
@prop({ required: false, default: [] })
|
|
killed: Array<number>;
|
|
// 是否情谊助阵
|
|
@prop({ required: false, default: false })
|
|
isFrd: boolean;
|
|
// 头像
|
|
@prop({ required: true, default: 1 })
|
|
headHid: number;
|
|
// 前五战力
|
|
@prop({ required: true, default: 0 })
|
|
topFiveCe: number;
|
|
}
|
|
|
|
@index({ teamCode: 1 })
|
|
@index({ roleIds: 1 })
|
|
@index({ blueprtId: 1, status: 1, pub: 1})
|
|
export default class ComBattleTeam extends BaseModel {
|
|
|
|
// 队伍唯一编号
|
|
@prop({ required: true })
|
|
teamCode: string;
|
|
|
|
@prop({ required: true, type: String, default: [] })
|
|
roleIds: Array<string>
|
|
|
|
// 队伍是否开放加入
|
|
@prop({ required: true, default: true })
|
|
pub: boolean;
|
|
|
|
// 对应藏宝图 Id
|
|
@prop({ required: true })
|
|
blueprtId: number;
|
|
|
|
// 战斗状态 0:未开始,1:已开始,2:胜利,3:失败
|
|
@prop({ required: true, default: 0 })
|
|
status: number;
|
|
|
|
@prop({ required: true, type: RoleStatus, default: [] })
|
|
roleStatus: Array<RoleStatus>;
|
|
|
|
// 队长 roleId
|
|
@prop({ required: true })
|
|
capId: string;
|
|
|
|
// 战力限制
|
|
@prop({ required: true, default: 0 })
|
|
ceLimit: number;
|
|
|
|
public static async createTeam(teamData: {teamCode: string, roleIds: Array<string>, pub: boolean, blueprtId: number, status: number, roleStatus: Array<RoleStatus>, capId: string}, lean = true) {
|
|
const team = await ComBattleTeamModel.findOneAndUpdate({ teamCode: teamData.teamCode }, {$set :{...teamData}}, {upsert: true, new: true}).lean(lean);
|
|
return team;
|
|
}
|
|
|
|
public static async addRole(teamCode: string, roleStatus: RoleStatus, lean = true) {
|
|
const team = await ComBattleTeamModel.findOneAndUpdate({ teamCode: teamCode }, {$push: {roleIds: roleStatus.roleId, roleStatus}}, {upsert: true, new: true}).lean(lean);
|
|
return team;
|
|
}
|
|
|
|
public static async findTeamByCapAndStatus(roleId: string, status: number, lean = true) {
|
|
const teams = await ComBattleTeamModel.find({capId: roleId, status}).lean(lean);
|
|
return teams;
|
|
}
|
|
|
|
public static async getTeamByBlueprt(blueprtIds: Array<number>, status: number, pub = true, limit = 50, lean = true) {
|
|
const teams = await ComBattleTeamModel.find({blueprtId: {$in: blueprtIds}, status, pub}).limit(limit).lean(lean);
|
|
return teams;
|
|
}
|
|
}
|
|
|
|
export const ComBattleTeamModel = getModelForClass(ComBattleTeam); |