✨ feat(gvg): 遗迹驻扎阵容优化
This commit is contained in:
@@ -19,7 +19,7 @@ import { GVG } from "../../../pubUtils/dicParam";
|
|||||||
import { RewardInter } from "../../../pubUtils/interface";
|
import { RewardInter } from "../../../pubUtils/interface";
|
||||||
import { parseGoodStr, resResult } from "../../../pubUtils/util";
|
import { parseGoodStr, resResult } from "../../../pubUtils/util";
|
||||||
import { isHeroHidden } from "../../../services/dataService";
|
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 { addGVGReward, combinePushItem, handleGVGCost } from "../../../services/gvg/gvgItemService";
|
||||||
import { addGVGActive, getGVGActive } from "../../../services/gvg/gvgPrepareService";
|
import { addGVGActive, getGVGActive } from "../../../services/gvg/gvgPrepareService";
|
||||||
import { addVestigeBattleEndRec } from "../../../services/gvg/gvgRecService";
|
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 roleId = session.get('roleId');
|
||||||
const serverId = session.get('serverId');
|
const serverId = session.get('serverId');
|
||||||
@@ -102,6 +102,7 @@ export class GVGProduceHandler {
|
|||||||
|
|
||||||
let myVestigeRank = await getMyVestigeRank(configId, groupKey, vestigeId, roleId);
|
let myVestigeRank = await getMyVestigeRank(configId, groupKey, vestigeId, roleId);
|
||||||
if(!myVestigeRank) return resResult(STATUS.GVG_LEAGUE_NOT_EXIST);
|
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) {
|
for(let { actorId } of heroes) {
|
||||||
if(isHeroHidden(actorId)) return resResult(STATUS.HERO_IS_HIDDEN);
|
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(!isOK) return resResult(STATUS.BATTLE_HERO_NOT_FOUND);
|
||||||
// 检查武将是否在其他遗迹中使用了
|
// 检查武将是否在其他遗迹中使用了
|
||||||
if(await checkHeroIsUsedInOtherVestige(roleId, vestigeId, heroes)) return resResult(STATUS.GVG_VESTIGE_HERO_USED);
|
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 lineup = heroes.map(hero => {
|
||||||
let curHero = dbHeroes.find(cur => cur.hid == hero.actorId);
|
let curHero = dbHeroes.find(cur => cur.hid == hero.actorId);
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import { PvpSaveDataModel } from '../../../db/PvpSaveData';
|
|||||||
import { ArtifactModel } from '../../../db/Artifact';
|
import { ArtifactModel } from '../../../db/Artifact';
|
||||||
import { GVGVestigeRankModel } from '../../../db/GVGVestigeRank';
|
import { GVGVestigeRankModel } from '../../../db/GVGVestigeRank';
|
||||||
import { GVGTeamModel } from '../../../db/GVGTeam';
|
import { GVGTeamModel } from '../../../db/GVGTeam';
|
||||||
|
import { checkHeroIsUsedInOtherVestige } from '../../../services/gvg/gvgFightService';
|
||||||
|
|
||||||
export default function (app: Application) {
|
export default function (app: Application) {
|
||||||
new HandlerService(app, {});
|
new HandlerService(app, {});
|
||||||
@@ -774,6 +775,7 @@ export class HeroHandler {
|
|||||||
let dicHero = gameData.hero.get(subSkinId);
|
let dicHero = gameData.hero.get(subSkinId);
|
||||||
if(!dicHero || dicHero.urType == 1) return resResult(STATUS.HERO_CAN_NOT_BE_SET_SUB);
|
if(!dicHero || dicHero.urType == 1) return resResult(STATUS.HERO_CAN_NOT_BE_SET_SUB);
|
||||||
subHid = dicHero.actorId;
|
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);
|
let subHero = await HeroModel.findByHidAndRole(subHid, roleId);
|
||||||
if(!subHero) return resResult(STATUS.HERO_NOT_FIND);
|
if(!subHero) return resResult(STATUS.HERO_NOT_FIND);
|
||||||
|
|||||||
@@ -164,6 +164,18 @@ export async function checkHeroIsUsedInOtherVestige(roleId: string, curVestigeId
|
|||||||
return false;
|
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) {
|
export function checkVestigeRank(myRank: number, targetRank: number) {
|
||||||
let dicRange = getGVGVestigeRange(myRank);
|
let dicRange = getGVGVestigeRange(myRank);
|
||||||
|
|||||||
@@ -358,7 +358,6 @@ export const STATUS = {
|
|||||||
GVG_NOT_ENTER_CITY_TIME: { code: 21342, simStr: '您此时不可进入城池' },
|
GVG_NOT_ENTER_CITY_TIME: { code: 21342, simStr: '您此时不可进入城池' },
|
||||||
GVG_NOT_BATTLE_TIME: { code: 21343, simStr: '您此时只能进驻据点不可挑战' },
|
GVG_NOT_BATTLE_TIME: { code: 21343, simStr: '您此时只能进驻据点不可挑战' },
|
||||||
GVG_TECH_HAS_PROGRESS: { code: 21344, simStr: '该科技进度不为0' },
|
GVG_TECH_HAS_PROGRESS: { code: 21344, simStr: '该科技进度不为0' },
|
||||||
|
|
||||||
// GVG征战中原
|
// GVG征战中原
|
||||||
GVG_VESTIGE_ERR: { code: 21350, simStr: '今日未开放该遗迹' },
|
GVG_VESTIGE_ERR: { code: 21350, simStr: '今日未开放该遗迹' },
|
||||||
GVG_VESTIGE_TARGET_NOT_FOUND: { code: 21351, 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_RECEIVE_NO_RANK_REWARD: { code: 21368, simStr: '没有可领取的奖励' },
|
||||||
GVG_VESTIGE_TIME_OUT: { code: 21369, simStr: '今天遗迹已结算,不可再挑战' },
|
GVG_VESTIGE_TIME_OUT: { code: 21369, simStr: '今天遗迹已结算,不可再挑战' },
|
||||||
GVG_CANNOT_PREPARE: { code: 21370, 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激战期
|
||||||
GVG_BATTLE_TEAM_NOT_FOUND: { code: 21400, simStr: '未找到该编队' },
|
GVG_BATTLE_TEAM_NOT_FOUND: { code: 21400, simStr: '未找到该编队' },
|
||||||
|
|||||||
Reference in New Issue
Block a user