diff --git a/game-server/app/servers/battle/handler/pvpHandler.ts b/game-server/app/servers/battle/handler/pvpHandler.ts index 4558f1a88..f25ad086d 100644 --- a/game-server/app/servers/battle/handler/pvpHandler.ts +++ b/game-server/app/servers/battle/handler/pvpHandler.ts @@ -424,6 +424,44 @@ export class PvpHandler { return resResult(STATUS.SUCCESS, pick(result, ['attack', 'oppPlayers', 'buyAttackCnt', 'setAttackCnt', 'challengeCnt', 'challengeRefTime'])); } + + // 只保存副将 + async saveAttackSub(msg: { heroes: { actorId: number, order: number, subHid: number }[] }, session: BackendSession) { + let { heroes } = msg; + let roleId = session.get('roleId'); + let serverId = session.get('serverId'); + + let pvpDefense = await PvpDefenseModel.findByRoleIdIncludeAll(roleId); + if(!pvpDefense) return resResult(STATUS.PVP_NOT_OPEN); + + // 更新挑战阵容 + let oldAttack = pvpDefense.attack?.heroes||[]; + let scores: number[] = []; + for(let { actorId, order, subHid } of heroes) { + let oldData = oldAttack.find(cur => cur.actorId == actorId); + if(!oldData || oldData.order != order) return resResult(STATUS.PVP_CAN_NOT_CHANGE_HERO); + + 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??[], []); + // 保存 + pvpDefense = await PvpDefenseModel.updateInfoAndInclude(roleId, { attack, lineupCe }); + // 返回 + let result = new PvpDataReturn(); + result.setPvpDefense(pvpDefense); + + return resResult(STATUS.SUCCESS, pick(result, ['attack'])); + } + + // 获取存档列表 async getSaveData(msg: {}, session: BackendSession) { let roleId = session.get('roleId'); diff --git a/game-server/app/services/checkParam.ts b/game-server/app/services/checkParam.ts index 93ebe811f..7e40d833b 100644 --- a/game-server/app/services/checkParam.ts +++ b/game-server/app/services/checkParam.ts @@ -735,6 +735,7 @@ export function checkRouteParam(route: string, msg: any) { break; } case "battle.pvpHandler.saveAttack": + case "battle.pvpHandler.saveAttackSub": { let { heroes } = msg; if (!checkNaturalArray(heroes)) return false; diff --git a/shared/consts/statusCode.ts b/shared/consts/statusCode.ts index e839a50c4..cee76c55b 100644 --- a/shared/consts/statusCode.ts +++ b/shared/consts/statusCode.ts @@ -194,6 +194,7 @@ export const STATUS = { PVP_BUY_ATTACK_CNT_NOT_ENOUGH: { code: 20808, simStr: '购买挑战阵容次数不足' }, PVP_SEASON_NOT_OPEN: { code: 20809, simStr: 'pvp赛季未开启' }, PVP_CAN_NOT_SAVE_DEFENSE: { code: 20810, simStr: '结算期不可保存防守阵容' }, + PVP_CAN_NOT_CHANGE_HERO: { code: 20811, simStr: '只可用于设置副将不可变更武将' }, // 军团 20900-20999 GUILD_AUTH_NOT_ENOUGH: { code: 20900, simStr: '权限不足' },