✨ feat(gvg): 遗迹驻扎阵容优化
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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: '未找到该编队' },
|
||||
|
||||
Reference in New Issue
Block a user