Files
ZYZ/game-server/app/servers/battle/handler/friendBattleHandler.ts
2023-09-12 16:23:54 +08:00

61 lines
2.8 KiB
TypeScript

import { Application, BackendSession, pinus, HandlerService, } from 'pinus';
import { LadderMatchModel } from '../../../db/LadderMatch';
import { HeroModel, HeroType } from '../../../db/Hero';
import { ArtifactModel } from '../../../db/Artifact';
import { getHeroesAttributes } from '../../../services/playerCeService';
import { gameData } from '../../../pubUtils/data';
import { LadderOppDetailHeroReturn } from '../../../domain/battleField/ladder';
import { resResult } from '../../../pubUtils/util';
import { STATUS } from '../../../consts/statusCode';
import { RoleType } from '../../../db/Role';
import { FRIEND_BATTLE_DISPATCH_JSONID } from '../../../consts';
import { getLadderDefCe } from '../../../services/redisService';
export default function (app: Application) {
new HandlerService(app, {});
return new FriendBattleHandler(app);
}
export class FriendBattleHandler {
constructor(private app: Application) {
}
async getFriendOpp(msg: { roleId: string }, session: BackendSession) {
const { roleId: targetRoleId, } = msg;
let hisLadderData = await LadderMatchModel.findByRoleIdAndInclude(targetRoleId);
if (!hisLadderData || !hisLadderData.defense || !hisLadderData.defense.heroes) return resResult(STATUS.LADDER_NOT_OPEN);
let artifactSeids = [], subHids: number[] = [];
for (let { hero, subHid } of hisLadderData.defense.heroes) {
let dbHero = <HeroType>hero;
if (dbHero) artifactSeids.push(dbHero.artifact);
if (subHid) subHids.push(subHid);
}
let artifacts = await ArtifactModel.findbySeqIds(targetRoleId, artifactSeids);
let subHeroes = await HeroModel.findByHidRange(subHids, targetRoleId, 'hid skinId');
let attrByHid = await getHeroesAttributes(targetRoleId);
let dicWarJson = gameData.warJson.get(FRIEND_BATTLE_DISPATCH_JSONID);
let result: LadderOppDetailHeroReturn[] = [];
for (let obj of hisLadderData.defense.heroes) {
const { dataId, subHid, actorId } = obj;
let warJson = dicWarJson.find(cur => cur.dataId == dataId);
if (warJson) {
let subHero = subHeroes.find(sub => sub.hid == subHid);
let rec = new LadderOppDetailHeroReturn(warJson, obj, artifacts, subHero);
let attr = attrByHid.get(actorId);
if (attr) {
rec.setAttribute(attr.getAttributesToString());
}
result.push(rec);
}
}
const role = <RoleType>hisLadderData.role;
const title = role?.title || 1;
const combo = hisLadderData.defense.combo || [];
const defCe = await getLadderDefCe(targetRoleId);
return resResult(STATUS.SUCCESS, { title, combo, defCe, heroes: result })
}
}