diff --git a/game-server/app/servers/role/handler/heroHandler.ts b/game-server/app/servers/role/handler/heroHandler.ts index a5416bda8..6a7a5d7c3 100644 --- a/game-server/app/servers/role/handler/heroHandler.ts +++ b/game-server/app/servers/role/handler/heroHandler.ts @@ -14,7 +14,7 @@ import { PvpDefenseModel } from '../../../db/PvpDefense'; import { checkTask, checkTaskInHeroGiveFavor, checkTaskInHeroQUalityUp, checkTaskInHeroStarUp, checkTaskInHeroTrain, checkTaskInHeroWakeUp } from '../../../services/task/taskService'; import { isNumber, pick } from 'underscore'; import { updateEplaces } from '../../../services/equipService'; -import { addConnect, addConsumeToHero, calStarUpConsume, checkUnlockTalentCondition, getHeroNewEplace, initSkinTalent, updateSkinTalent } from '../../../services/roleService'; +import { addConnect, addConsumeToHero, calStarUpConsume, checkUnlockTalentCondition, getHeroNewEplace, getNewJob, initSkinTalent, updateSkinTalent } from '../../../services/roleService'; import { JewelModel, JewelType, jewelUpdate } from '../../../db/Jewel'; import { HERO, REBORN } from '../../../pubUtils/dicParam'; import { createHero, createHeroes } from '../../../services/role/createHero'; @@ -829,16 +829,26 @@ export class HeroHandler { let originHero = heroMap.get(originHid); let targetHero = heroMap.get(targetHid); - swapFields(originHero || {}, targetHero || {}, ['lv', 'job', 'jobStage']); + //交换 lv exp jobStage + swapFields(originHero || {}, targetHero || {}, ['lv', 'exp', 'jobStage']); + + //交换job + let originJob = originHero.job, targetJob = targetHero.job + originHero.job = getNewJob(originHero, targetJob); + targetHero.job = getNewJob(targetHero, originJob); + + //天赋树置空 if (originHero.skins || originHero.skins.length > 0) originHero.skins.forEach((cur) => { cur.talent = [], cur.usedTalentPoint = 0; }); if (targetHero.skins || targetHero.skins.length > 0) targetHero.skins.forEach((cur) => { cur.talent = [], cur.usedTalentPoint = 0; }); + //装备养成交换 let tempOriginEPlace = [], tempTargetEPlace = [] if (originHero.ePlace || targetHero.ePlace.length > 0) tempOriginEPlace = getHeroNewEplace(originHero, targetHero?.ePlace || []); if (targetHero.ePlace || originHero.ePlace.length > 0) tempTargetEPlace = getHeroNewEplace(targetHero, originHero?.ePlace || []); originHero.ePlace = tempOriginEPlace; targetHero.ePlace = tempTargetEPlace; + // 天晶地玉 let jewels: JewelType[] = []; let curJewels: jewelUpdate[] = []; for (let { jewel } of originHero.ePlace) { @@ -858,7 +868,7 @@ export class HeroHandler { let heroesRet: HeroType[] = []; for (let hero of [originHero, targetHero]) { - let result = await HeroModel.updateHeroInfo(roleId, hero.hid, { ...pick(hero, ['lv', 'job', 'jobStage', 'ePlace', 'skins']) }); + let result = await HeroModel.updateHeroInfo(roleId, hero.hid, { ...pick(hero, ['lv','exp', 'job', 'jobStage', 'ePlace', 'skins']) }); if (!result) return resResult(STATUS.HERO_NOT_FIND); heroesRet.push(result); } @@ -871,7 +881,7 @@ export class HeroHandler { let curHeroes = []; for (let hero of (heroes || [])) { const heroResult = new HeroParam(hero); - curHeroes.push({ ...pick(heroResult, ['seqId', 'hid', 'ce', 'lv', 'job', 'jobStage', 'ePlace', 'talent', 'usedTalentPoint', 'totalTalentPoint']) }); + curHeroes.push({ ...pick(heroResult, ['seqId', 'hid', 'ce','exp', 'lv', 'job', 'jobStage', 'ePlace', 'talent', 'usedTalentPoint', 'totalTalentPoint']) }); } return resResult(STATUS.SUCCESS, { curHeroes, curJewels }) diff --git a/game-server/app/services/roleService.ts b/game-server/app/services/roleService.ts index d1abeff26..338eccea7 100644 --- a/game-server/app/services/roleService.ts +++ b/game-server/app/services/roleService.ts @@ -4,7 +4,7 @@ import { DEFAULT_HEROES, LINEUP_NUM, ROLE_SELECT, TALENT_RELATION_TYPE, TERAPH_R import { DicTeraph } from '../pubUtils/dictionary/DicTeraph'; import { Teraph, RoleModel, RoleType, RoleUpdate } from '../db/Role'; import { SCHOOL } from '../pubUtils/dicParam'; -import { gameData, getEquipByJobClassAndEPlace, getHeroInitTalent, getHeroStarByQuality } from '../pubUtils/data'; +import { gameData, getEquipByJobClassAndEPlace, getHeroInitTalent, getHeroStarByQuality, getJobByGradeAndClass } from '../pubUtils/data'; import { SchoolModel } from '../db/School'; import { SclResultInter, SclPosInter, RewardInter, ItemInter } from '../pubUtils/interface'; import { Connect, EPlace, HeroModel, HeroSkin, HeroType, HeroUpdate, Talent } from '../db/Hero'; @@ -403,4 +403,11 @@ export function getHeroNewEplace(hero: HeroType, ePlace: EPlace[]) { newEplace.push({ ...eP, equipId: dicEquip.id }); } return newEplace; +} + +export function getNewJob(hero: HeroType, job: number) { + const dicHero = gameData.hero.get(hero.skinId); + let dicMyJob = gameData.job.get(job); + let dicNewJob = getJobByGradeAndClass(dicHero.jobClass, dicMyJob.grade); + return dicNewJob?.jobid || 0; } \ No newline at end of file