Files
ZYZ/game-server/app/servers/role/handler/teamHandler.ts
2023-04-17 19:40:40 +08:00

80 lines
3.1 KiB
TypeScript

import { Application, BackendSession, ChannelService, HandlerService } from "pinus";
import { STATUS, TEAM_TYPE } from "../../../consts";
import { gameData } from "../../../pubUtils/data";
import { resResult } from "../../../pubUtils/util";
import { PVPConfigModel } from "../../../db/PvpConfig";
import { PvpSaveDataModel } from "../../../db/PvpSaveData";
import { LadderMatchModel } from "../../../db/LadderMatch";
import { GVGVestigeRankModel } from "../../../db/GVGVestigeRank";
import { GVGTeamModel } from "../../../db/GVGTeam";
import { PvpDefenseModel } from "../../../db/PvpDefense";
export default function (app: Application) {
new HandlerService(app, {});
return new TeamHandler(app);
}
export class TeamHandler {
channelService: ChannelService;
constructor(private app: Application) {
}
// 获取每个编队里的武将
async getTeamHeroes(msg: { }, session: BackendSession) {
const roleId = session.get('roleId');
const teams: { type: number, heroes: number[] }[] = [];
let pvpConfig = await PVPConfigModel.findCurPVPConfig();
if(pvpConfig) {
let saveDatas = await PvpSaveDataModel.findByRoleId(roleId);
let heroes: number[] = [];
for(let warId of (pvpConfig.warIds||[])) {
let dicWar = gameData.war.get(warId);
if(dicWar && dicWar.selectView == 1) {
let curSaveData = saveDatas.find(cur => cur.warId == warId);
let defenseHeroes = curSaveData?.heroes||[];
for(let { actorId } of defenseHeroes) heroes.push(actorId);
}
}
let pvpDefense = await PvpDefenseModel.findByRoleId(roleId);
if(pvpDefense && pvpDefense.attack) {
let attackHeroes = pvpDefense.attack.heroes||[];
for(let { actorId } of attackHeroes) heroes.push(actorId);
}
teams.push({ type: TEAM_TYPE.PVP, heroes });
}
let ladderData = await LadderMatchModel.findByRoleId(roleId);
if(ladderData && ladderData.defense) {
let heroes: number[] = [];
let defenseHeroes = ladderData.defense?.heroes||[];
for(let { actorId } of defenseHeroes) heroes.push(actorId);
teams.push({ type: TEAM_TYPE.LADDER, heroes });
}
let vestigeData = await GVGVestigeRankModel.findAllByRole(roleId);
if(vestigeData) {
let heroes: number[] = [];
for(let { lineup = [] } of vestigeData) {
for(let { actorId } of lineup) heroes.push(actorId);
}
teams.push({ type: TEAM_TYPE.VESTIGE, heroes });
}
let gvgBattleTeams = await GVGTeamModel.findByRole(roleId, '-_id lineup');
if(gvgBattleTeams) {
let heroes: number[] = [];
for(let { lineup = [] } of gvgBattleTeams) {
for(let { actorId } of lineup) heroes.push(actorId);
}
teams.push({ type: TEAM_TYPE.GVG_BATTLE, heroes });
}
return resResult(STATUS.SUCCESS, { teams });
}
}