From 0c5cb1daac9ffa29688900d896d5f69a1da29bc6 Mon Sep 17 00:00:00 2001 From: luying Date: Thu, 24 Dec 2020 20:13:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=A3=85=E5=A4=87=E4=B8=80?= =?UTF-8?q?=E9=94=AE=E5=BC=BA=E5=8C=96=E5=88=B0=E6=8C=87=E5=AE=9A=E7=AD=89?= =?UTF-8?q?=E7=BA=A7=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/servers/role/handler/equipHandler.ts | 58 +++++++++++++++++++ shared/db/Equip.ts | 2 +- 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/game-server/app/servers/role/handler/equipHandler.ts b/game-server/app/servers/role/handler/equipHandler.ts index dd4f2e6cc..e62b4da40 100644 --- a/game-server/app/servers/role/handler/equipHandler.ts +++ b/game-server/app/servers/role/handler/equipHandler.ts @@ -147,6 +147,64 @@ export class EquipHandler { } + // 装备栏一键强化至相应等级 + public async strengthenAll(msg: { hid: number, lv: number }, session: BackendSession) { + let roleId: string = session.get('roleId'); + // let roleName: string = session.get('roleName'); + let sid: string = session.get('sid'); + + let { hid, lv: maxLv } = msg; // lv: 升到哪一级 + let hero = await HeroModel.findByHidAndRoleWithEquip(hid, roleId); + if (!hero) return resResult(STATUS.HERO_NOT_FIND); + + let { ePlace, lv: playerLv } = hero; // 装备栏 + let strengthenArr = ePlace.filter(cur => cur.equip); + + if (strengthenArr.length <= 0) { + return resResult(STATUS.ROLE_EQUIP_PLACE_NOT_ENOUGH); + } + let minLv = strengthenArr[0].lv; // 从最低装备的等级开始 + for (let { lv } of strengthenArr) { + if (lv < minLv) minLv = lv; + } + + let { coin } = await Role.findByRoleId(roleId); + + if (maxLv > playerLv) { + return resResult(STATUS.ROLE_EQUIP_REACH_MAX); + } + let costCoin = 0; // 消耗铜币 + for (let i = minLv; i < maxLv; i++) { + for (let s of strengthenArr) { + if (s.lv == i) { + let cost = gameData.strengthenCost.get(i + 1); + costCoin += cost; + + s.lv++; + } + } + } + + if (costCoin > coin) { + return resResult(STATUS.ROLE_COIN_NOT_ENOUGH); + } + + let result = await handleCost(roleId, sid, [{ + id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.COIN), + count: costCoin + }]); + if (!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH); + + hero.ePlace = ePlace; + + await calPlayerCeAndSave(sid, roleId, [hero], HERO_SYSTEM_TYPE.EQUIP_BASE); + const curHero = { + hid, + ePlace: strengthenArr + } + return resResult(STATUS.SUCCESS, { curHero }); + + } // 装备栏精炼 public async refine(msg: { hid: number, ePlaceId: number, material: { id: number, count: number }[] }, session: BackendSession) { let roleId: string = session.get('roleId'); diff --git a/shared/db/Equip.ts b/shared/db/Equip.ts index 9076349ea..0051c0bc0 100644 --- a/shared/db/Equip.ts +++ b/shared/db/Equip.ts @@ -87,7 +87,7 @@ export default class Equip extends BaseModel { const equip: EquipType = await EquipModel.findOneAndUpdate({ seqId }, update, {upsert: true, new: true}).lean(lean); if(equipInfo.hid > 0) { await HeroModel.findOneAndUpdate( - { roleId: equipInfo.roleId, hid: equipInfo.hid, 'ePlace.id': 1 }, + { roleId: equipInfo.roleId, hid: equipInfo.hid, 'ePlace.id': equipInfo.ePlaceId }, {$set: {'ePlace.$.equip': equip._id}}, {new: true}).lean(lean); }