diff --git a/game-server/app/servers/guild/handler/gvgFightHandler.ts b/game-server/app/servers/guild/handler/gvgFightHandler.ts index 59bc90aa9..e4cc09dcb 100644 --- a/game-server/app/servers/guild/handler/gvgFightHandler.ts +++ b/game-server/app/servers/guild/handler/gvgFightHandler.ts @@ -19,7 +19,7 @@ import { GVG } from "../../../pubUtils/dicParam"; import { RewardInter } from "../../../pubUtils/interface"; import { parseGoodStr, resResult } from "../../../pubUtils/util"; import { isHeroHidden } from "../../../services/dataService"; -import { calBreakGoods, checkHeroIsUsedInOtherVestige, checkVestige, checkVestigeOppStatus, checkVestigeRank, generateAttackHeroInfo, generateAttackInfo, generateDefenseInfo, getDayKeyInfo, getMyVestigeRank, getOppDetailData, getOppPlayerByRanks, getVestigeRecStatus, getVestigeRank, getVestigeUsedHeroes, isRobot, refreshVestigeOppRanks, saveScoreToRank, updateMyVestigeRank, saveVestigeRankSchedule, calVestigeLeagueBoxRewards, checkFightTime, savePlayerRank } from "../../../services/gvg/gvgFightService"; +import { calBreakGoods, checkHeroIsUsedInOtherVestige, checkVestige, checkVestigeOppStatus, checkVestigeRank, generateAttackHeroInfo, generateAttackInfo, generateDefenseInfo, getDayKeyInfo, getMyVestigeRank, getOppDetailData, getOppPlayerByRanks, getVestigeRecStatus, getVestigeRank, getVestigeUsedHeroes, isRobot, refreshVestigeOppRanks, saveScoreToRank, updateMyVestigeRank, saveVestigeRankSchedule, calVestigeLeagueBoxRewards, checkFightTime, savePlayerRank, checkHeroChangeInVestige } from "../../../services/gvg/gvgFightService"; import { addGVGReward, combinePushItem, handleGVGCost } from "../../../services/gvg/gvgItemService"; import { addGVGActive, getGVGActive } from "../../../services/gvg/gvgPrepareService"; import { addVestigeBattleEndRec } from "../../../services/gvg/gvgRecService"; @@ -87,7 +87,7 @@ export class GVGProduceHandler { } // 编辑阵容 - async saveLineup(msg: { vestigeId: number, lineup: [{ actorId: number, dataId: number, order: number, correspondingVar: number }] }, session: BackendSession) { + async saveLineup(msg: { vestigeId: number, lineup: { actorId: number, dataId: number, order: number, correspondingVar: number }[] }, session: BackendSession) { const roleId = session.get('roleId'); const serverId = session.get('serverId'); @@ -102,6 +102,7 @@ export class GVGProduceHandler { let myVestigeRank = await getMyVestigeRank(configId, groupKey, vestigeId, roleId); if(!myVestigeRank) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST); + if(heroes.length != 6) return resResult(STATUS.GVG_VESTIGE_DEFENSE_MEMBER_CNT); for(let { actorId } of heroes) { if(isHeroHidden(actorId)) return resResult(STATUS.HERO_IS_HIDDEN); @@ -110,6 +111,7 @@ export class GVGProduceHandler { if(!isOK) return resResult(STATUS.BATTLE_HERO_NOT_FOUND); // 检查武将是否在其他遗迹中使用了 if(await checkHeroIsUsedInOtherVestige(roleId, vestigeId, heroes)) return resResult(STATUS.GVG_VESTIGE_HERO_USED); + if(await checkHeroChangeInVestige(roleId, vestigeId, heroes)) return resResult(STATUS.GVG_VESTIGE_LINEUP_CHANGE); let lineup = heroes.map(hero => { let curHero = dbHeroes.find(cur => cur.hid == hero.actorId); diff --git a/game-server/app/servers/role/handler/heroHandler.ts b/game-server/app/servers/role/handler/heroHandler.ts index ecab1be50..032af8cff 100644 --- a/game-server/app/servers/role/handler/heroHandler.ts +++ b/game-server/app/servers/role/handler/heroHandler.ts @@ -31,6 +31,7 @@ import { PvpSaveDataModel } from '../../../db/PvpSaveData'; import { ArtifactModel } from '../../../db/Artifact'; import { GVGVestigeRankModel } from '../../../db/GVGVestigeRank'; import { GVGTeamModel } from '../../../db/GVGTeam'; +import { checkHeroIsUsedInOtherVestige } from '../../../services/gvg/gvgFightService'; export default function (app: Application) { new HandlerService(app, {}); @@ -774,6 +775,7 @@ export class HeroHandler { let dicHero = gameData.hero.get(subSkinId); if(!dicHero || dicHero.urType == 1) return resResult(STATUS.HERO_CAN_NOT_BE_SET_SUB); subHid = dicHero.actorId; + if(await checkHeroIsUsedInOtherVestige(roleId, 0, [{ actorId: subHid }])) return resResult(STATUS.GVG_SUBHERO_USED_IN_VESTIGE); let subHero = await HeroModel.findByHidAndRole(subHid, roleId); if(!subHero) return resResult(STATUS.HERO_NOT_FIND); diff --git a/game-server/app/services/gvg/gvgFightService.ts b/game-server/app/services/gvg/gvgFightService.ts index 6f1a28d85..359d21843 100644 --- a/game-server/app/services/gvg/gvgFightService.ts +++ b/game-server/app/services/gvg/gvgFightService.ts @@ -164,6 +164,18 @@ export async function checkHeroIsUsedInOtherVestige(roleId: string, curVestigeId return false; } +// 是否保存过阵容之后换了人了(保存过阵容之后只能换位置,不能再换武将) +export async function checkHeroChangeInVestige(roleId: string, curVestigeId: number, heroes: { actorId: number }[]) { + let myDatasInVestige = await GVGVestigeRankModel.findByRole(curVestigeId, roleId); + if(!myDatasInVestige || !myDatasInVestige.hasDefense) return false; + let usedHeroes = myDatasInVestige.lineup||[]; + for(let { actorId } of heroes) { + let hasHero = usedHeroes.find(cur => cur.actorId == actorId); + if(!hasHero) return true; + } + return true; +} + // 检查我的排名是否可以挑战对方的排名 export function checkVestigeRank(myRank: number, targetRank: number) { let dicRange = getGVGVestigeRange(myRank); diff --git a/shared/consts/statusCode.ts b/shared/consts/statusCode.ts index 8974b9e2b..f10d98bfa 100644 --- a/shared/consts/statusCode.ts +++ b/shared/consts/statusCode.ts @@ -358,7 +358,6 @@ export const STATUS = { GVG_NOT_ENTER_CITY_TIME: { code: 21342, simStr: '您此时不可进入城池' }, GVG_NOT_BATTLE_TIME: { code: 21343, simStr: '您此时只能进驻据点不可挑战' }, GVG_TECH_HAS_PROGRESS: { code: 21344, simStr: '该科技进度不为0' }, - // GVG征战中原 GVG_VESTIGE_ERR: { code: 21350, simStr: '今日未开放该遗迹' }, GVG_VESTIGE_TARGET_NOT_FOUND: { code: 21351, simStr: '对手未找到' }, @@ -372,6 +371,10 @@ export const STATUS = { GVG_RECEIVE_NO_RANK_REWARD: { code: 21368, simStr: '没有可领取的奖励' }, GVG_VESTIGE_TIME_OUT: { code: 21369, simStr: '今天遗迹已结算,不可再挑战' }, GVG_CANNOT_PREPARE: { code: 21370, simStr: '加入军团当天不可参与备战期' }, + GVG_VESTIGE_DEFENSE_MEMBER_CNT: { code: 21371, simStr: '驻扎阵容必须满6人' }, + GVG_VESTIGE_LINEUP_CHANGE: { code: 21364, simStr: '驻扎阵容保存后人员不可再变动' }, + GVG_SUBHERO_USED_IN_VESTIGE: { code: 21365, simStr: '该武将在遗迹阵容中被使用了不可设为副将' }, + // GVG激战期 GVG_BATTLE_TEAM_NOT_FOUND: { code: 21400, simStr: '未找到该编队' },