diff --git a/game-server/app/servers/role/handler/heroHandler.ts b/game-server/app/servers/role/handler/heroHandler.ts index 115012103..fb0d9d794 100644 --- a/game-server/app/servers/role/handler/heroHandler.ts +++ b/game-server/app/servers/role/handler/heroHandler.ts @@ -7,7 +7,7 @@ import { HeroModel, Connect, HeroSkin, HeroUpdate, EPlace } from '../../../db/He import { CURRENCY_BY_TYPE, CURRENCY_TYPE, CONSUME_TYPE, HERO_GROW_MAX, HERO_SYSTEM_TYPE, ABI_STAGE, DEBUG_MAGIC_WORD, HERO_INITIAL_QUALITY, REDIS_KEY, TASK_TYPE, ITEM_CHANGE_REASON } from '../../../consts'; import { RoleModel } from '../../../db/Role'; import { ItemModel } from '../../../db/Item'; -import { gameData, getHeroExpByLv, getHeroStarByQuality, getHeroWakeByQuality, getHeroLvByExp, getMaxGradeByjobClass, getJobByGradeAndClass, getFriendShipById, getFavourLvByExp, reloadDicParam } from '../../../pubUtils/data'; +import { gameData, getHeroExpByLv, getHeroStarByQuality, getHeroWakeByQuality, getHeroLvByExp, getMaxGradeByjobClass, getJobByGradeAndClass, getFriendShipById, getFavourLvByExp, reloadDicParam, getEquipByJobClassAndEPlace } from '../../../pubUtils/data'; import { ItemInter, RewardInter } from '../../../pubUtils/interface'; import { getDropItems, FIGURE_UNLOCK_CONDITION } from '../../../consts/constModules/itemConst' import { pushComposeOrangeHero, pushHeroQualityUpMsg, pushHeroStarMax, pushHeroWakeUp } from '../../../services/chatService'; @@ -15,6 +15,7 @@ import { calculatetopLineup } from '../../../pubUtils/playerCe'; import { PvpDefenseModel } from '../../../db/PvpDefense'; import { checkTaskWithHero, checkTask, checkActivityTask } from '../../../services/taskService'; import { pick } from 'underscore'; +import { updateEplaces } from '../../../services/equipService'; export default function (app: Application) { new HandlerService(app, {}); @@ -593,29 +594,18 @@ export class HeroHandler { let dicMyJob = gameData.job.get(hero.job); let dicNewJob = getJobByGradeAndClass(dicHero.jobClass, dicMyJob.grade); - // let newEplace: EPlace[] = [], heroPutNum = 0, curEquips: {seqId: number, id: number, hid: number, ePlaceId: number}[] = []; - // for(let { id, equip, lv, refineLv } of hero.ePlace) { - // let e = equip; - // if(equip && !checkEquipCanPut({...hero, skinId: dicSkin.heroId}, e.id)) { - // await EquipModel.putOnOrOff(e._id, 0); - // heroPutNum -= 1; - // newEplace.push({ id, equip: null, lv, refineLv}); - // curEquips.push({ seqId: e.seqId, id: e.id, hid: 0, ePlaceId: id }); - // } else { - // newEplace.push({ id, equip: e?e._id: null, lv, refineLv}); - // } - // } + let oldEplace = hero.ePlace||[]; + let eplaceIds = new Map(); // 更新了的装备栏id + for(let { id } of oldEplace) { + let dicEquip = getEquipByJobClassAndEPlace(dicHero?.jobClass, id); + eplaceIds.set(id, { equipId: dicEquip.id }); + } + console.log('*****', eplaceIds) + let { newEplace } = updateEplaces(oldEplace, eplaceIds); - // if(heroPutNum < 0) { - // hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP, sid, roleId, hero, {}, oldEquipSeids); - // await checkTask(roleId, sid, TASK_TYPE.EQUIP_SUM, heroPutNum, true, {}); - // await checkActivityTask(serverId, sid, roleId, TASK_TYPE.EQUIP_SUM, heroPutNum); - // await checkTaskWithHero(roleId, sid, TASK_TYPE.EQUIP_BY_HERO, hero, [heroPutNum, oldCount]); - // } - - hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.SKIN, sid, roleId, hero, { skins: newHeroSkins, skinId: dicSkin.heroId, job: dicNewJob.jobid }); - return resResult(STATUS.SUCCESS, { curHero: pick(hero, ['hid', 'skins', 'skinId', 'job']) }); + hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.SKIN, sid, roleId, hero, { skins: newHeroSkins, skinId: dicSkin.heroId, job: dicNewJob.jobid, ePlace: newEplace }); + return resResult(STATUS.SUCCESS, { curHero: {...pick(hero, ['hid', 'skins', 'skinId', 'job']), ePlace: newEplace }}); } // ! debug接口 一键全武将 diff --git a/shared/pubUtils/playerCe.ts b/shared/pubUtils/playerCe.ts index 27247286a..02f763f03 100644 --- a/shared/pubUtils/playerCe.ts +++ b/shared/pubUtils/playerCe.ts @@ -523,7 +523,7 @@ export function calHeroJobAttr(originHero: HeroType, hero: HeroUpdate, addSeidLi */ export function calHeroWearSkinIncAttr(originHero: HeroType, update: HeroUpdate, addSeidList: number[], removeSeidList: number[]) { let { attr: heroAttrs, skinId: originSkinId } = originHero; - let { skinId = originSkinId } = update; + let { skinId = originSkinId, ePlace: newEplace } = update; calHeroStarIncAttr(originHero, update, HERO_SYSTEM_TYPE.SKIN, addSeidList, removeSeidList); let addSkin = gameData.fashionBySkinId.get(skinId); @@ -540,6 +540,12 @@ export function calHeroWearSkinIncAttr(originHero: HeroType, update: HeroUpdate, updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp } }); } originHero.attr = heroAttrs; + + let eplaceIds = newEplace.map(cur => cur.id); + calEquipStrengthIncAttr(originHero, update, eplaceIds); + calEquipQualityIncAttr(originHero, update, eplaceIds); + calEquipStarIncAttr(originHero, update, eplaceIds, addSeidList, removeSeidList); + return heroAttrs; } @@ -628,12 +634,17 @@ export function calEquipStrengthIncAttr(hero: HeroType, update: HeroUpdate, epla let oldEquip = oldEplace.find(cur => cur.id == eplaceId); let newEquip = newEplace.find(cur => cur.id == eplaceId); if(newEquip && oldEquip) { - let dicEquip = gameData.equipById.get(oldEquip.equipId); - for(let attr of dicEquip.attributeUp) { - updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: attr.num * (newEquip.lv - oldEquip.lv) * HERO_CE_RATIO } }); + let dicOldEquip = gameData.equipById.get(oldEquip.equipId); + let dicNewEquip = gameData.equipById.get(newEquip.equipId); + for(let attr of dicOldEquip.attributeUp) { + updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: -1 * attr.num * oldEquip.lv * HERO_CE_RATIO } }); + } + for(let attr of dicNewEquip.attributeUp) { + updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: attr.num * newEquip.lv * HERO_CE_RATIO } }); } } } + hero.attr = heroAttrs; return heroAttrs } @@ -654,6 +665,7 @@ export function calEquipQualityIncAttr(hero: HeroType, update: HeroUpdate, eplac } } } + hero.attr = heroAttrs; return heroAttrs } @@ -686,6 +698,7 @@ export function calEquipStarIncAttr(hero: HeroType, update: HeroUpdate, eplaceId // 套装属性 calEquipSuitIncAttr(hid, oldEplace, newEplace, addSeidList, removeSeidList); + hero.attr = heroAttrs; return heroAttrs; } diff --git a/shared/resource/jsons/dic_zyz_hero.json b/shared/resource/jsons/dic_zyz_hero.json index fb8ccb6ee..b0d2ff2e6 100644 --- a/shared/resource/jsons/dic_zyz_hero.json +++ b/shared/resource/jsons/dic_zyz_hero.json @@ -18012,8 +18012,8 @@ "camp": 2, "area": 0, "cost": 0, - "jobid": 200, - "jobClass": 2, + "jobid": 300, + "jobClass": 3, "skill": 19, "pieceId": 21019, "hp": 124,