Files
ZYZ/shared/db/ComBattleTeam.ts
liangtongchuan 77fc465809 寻宝战斗内状态同步接口;
修改寻宝组队bug
2020-11-19 20:25:10 +08:00

124 lines
4.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.
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 })
totalDmg: 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;
// 是否准备
@prop({ required: true, default: false })
isReady: boolean;
}
@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失败4已领奖
@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 updateHeroes(teamCode: string, roleId: string, heroes: Array<number>, lean = true) {
const team = await ComBattleTeamModel.findOneAndUpdate({ teamCode, 'roleStatus.roleId': roleId}, {$set: {'roleStatus.$.heroes': heroes}}, {new: true}).lean(lean);
return team;
}
public static async updateResult(teamCode: string, roleId: string, isSuccess: boolean, lean = true) {
let team = await ComBattleTeamModel.findOne({teamCode}).select('status roleStatus');
if (isSuccess === true) {
team.status = 2;
team.roleStatus.forEach(st => {
if (st.battleStatus !== 2) {
st.battleStatus = 1;
}
})
} else if (isSuccess === false) {
let loseCnt = 1;
team.roleStatus.forEach(st => {
if (st.battleStatus === 2 && st.roleId !== roleId) {
loseCnt += 1;
} else if (st.roleId === roleId && !st.battleStatus) {
st.battleStatus = 2;
}
});
if (loseCnt === team.roleStatus.length) {
team.status = 3;
}
}
await team.save();
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);