diff --git a/game-server/app/servers/battle/handler/pvpHandler.ts b/game-server/app/servers/battle/handler/pvpHandler.ts index 32d478a47..4558f1a88 100644 --- a/game-server/app/servers/battle/handler/pvpHandler.ts +++ b/game-server/app/servers/battle/handler/pvpHandler.ts @@ -373,7 +373,7 @@ export class PvpHandler { return resResult(STATUS.SUCCESS, pick(result, pickParam)); } - async saveAttack(msg: { heroes: { actorId: number, order: number }[] }, session: BackendSession) { + async saveAttack(msg: { heroes: { actorId: number, order: number, subHid: number }[] }, session: BackendSession) { let { heroes } = msg; let roleId = session.get('roleId'); let serverId = session.get('serverId'); @@ -395,12 +395,15 @@ export class PvpHandler { let refChallengeObj = await refChallengeCnt(pvpDefense.challengeCnt, pvpDefense.challengeRefTime, seasonEndTime, roleId, session.get('vipStartTime')); // 更新挑战阵容 let scores: number[] = []; - for(let { actorId } of heroes) { + for(let { actorId, subHid } of heroes) { if(isHeroHidden(actorId)) return resResult(STATUS.HERO_IS_HIDDEN); let heroScore = pvpDefense.heroScores.find(cur => cur.hid == actorId); if(heroScore) { scores.push(heroScore.score); } + let dicHero = gameData.hero.get(actorId); + if(subHid && (!dicHero || dicHero.urType != 1)) return resResult(STATUS.HERO_CAN_NOT_SET_SUB); + if(subHid && heroes.findIndex(hero => hero.actorId == subHid) != -1) return resResult(STATUS.HERO_SUB_DUPLICATE); } let attack = new Attack(heroes, scores); let lineupCe = await generPvpLineupCe(roleId, pvpDefense.lineupCe, attack.heroes, pvpDefense.defense?.heroes??[], []); diff --git a/shared/domain/battleField/pvp.ts b/shared/domain/battleField/pvp.ts index 9621bbe5f..6f5c8af2b 100644 --- a/shared/domain/battleField/pvp.ts +++ b/shared/domain/battleField/pvp.ts @@ -73,6 +73,8 @@ export class AttackHero { actorId: number; // 武将id @prop({ required: true }) order: number; + @prop({ required: false }) + subHid: number; } // 挑战阵容