From 763d66b7edcb3da6afdd4e8c30a7ef338d3f08e1 Mon Sep 17 00:00:00 2001 From: luying Date: Fri, 6 Aug 2021 11:48:26 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A3=85=E5=A4=87=EF=BC=9A=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E8=A3=85=E5=A4=87=E5=89=8D=EF=BC=8C=E4=BB=8E=E6=AD=A6=E5=B0=86?= =?UTF-8?q?=E8=BA=AB=E4=B8=8A=E5=8D=B8=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game-server/app/services/rewardService.ts | 35 +++++++++++++++++++---- shared/db/Equip.ts | 2 +- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/game-server/app/services/rewardService.ts b/game-server/app/services/rewardService.ts index 60e3266d3..8fc6ee6b8 100644 --- a/game-server/app/services/rewardService.ts +++ b/game-server/app/services/rewardService.ts @@ -1,9 +1,9 @@ -import { ITID, CONSUME_TYPE, ITEM_TABLE, REDIS_KEY, TASK_TYPE, CURRENCY, CURRENCY_TYPE, MAIL_TYPE, HANDLE_REWARD_TYPE } from './../consts'; -import { EquipModel } from './../db/Equip'; +import { ITID, CONSUME_TYPE, ITEM_TABLE, REDIS_KEY, TASK_TYPE, CURRENCY, CURRENCY_TYPE, MAIL_TYPE, HANDLE_REWARD_TYPE, HERO_SYSTEM_TYPE } from './../consts'; +import { EquipModel, EquipType } from './../db/Equip'; import { resResult } from '../pubUtils/util'; import { RoleModel, RoleType } from '../db/Role'; import { setAp } from './actionPointService'; -import { pushCalPlayerCe, pushCalAllHeroCe } from './playerCeService'; +import { pushCalPlayerCe, pushCalAllHeroCe, calPlayerCeAndSave } from './playerCeService'; import { ItemModel } from '../db/Item'; import { STATUS } from '../consts/statusCode'; import { pinus } from 'pinus'; @@ -14,18 +14,20 @@ import { uniq } from 'underscore'; import { HeroModel, HeroType } from '../db/Hero'; import { Figure } from '../domain/dbGeneral'; import { Rank } from './rankService'; -import { checkActivityTask, pushActivityUpdate, pushTaskUpdate } from './taskService'; +import { checkActivityTask, checkTaskWithHero, pushActivityUpdate, pushTaskUpdate } from './taskService'; import { CreateHeroParam } from '../domain/roleField/hero'; import { HeroSkin } from '../db/Hero'; import { errlogger } from '../util/logger'; import { BAG } from '../pubUtils/dicParam'; import { sendMailByContent } from './mailService'; +import { calEquipSeids } from '../pubUtils/playerCe'; export async function handleCost(roleId: string, sid: string, goods: Array) { let uids = [{ uid: roleId, sid }]; let { items, equips, gold, coin } = sortItems(goods, HANDLE_REWARD_TYPE.COST); let equipSeqIds = equips.map(cur => cur.seqId); + let resEquips: EquipType[] = []; // 检查货币是否充足 let role = await RoleModel.findByRoleId(roleId); @@ -36,7 +38,7 @@ export async function handleCost(roleId: string, sid: string, goods: Array 0) { - let resEquips = await EquipModel.getEquips(equipSeqIds); + resEquips = await EquipModel.getEquips(equipSeqIds); if (resEquips.length < equips.length) return false; } @@ -48,7 +50,28 @@ export async function handleCost(roleId: string, sid: string, goods: Array 0) { + if (resEquips.length > 0) { + let heroMap = new Map(); + for(let equip of resEquips) { + if(equip.hid > 0) { + if(!heroMap.has(equip.hid)) { + let hero = await HeroModel.findByHidAndRoleWithEquip(equip.hid, roleId); + heroMap.set(equip.hid, { hero, equips: [] }); + } + heroMap.get(equip.hid).equips.push(equip); + } + } + for(let [_hid, {hero, equips} ] of heroMap) { + let args = calEquipSeids(hero); + for(let equip of equips) { + hero = await HeroModel.removeEquip(roleId, hero.hid, equip.ePlaceId, equip._id); + } + + await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP, sid, roleId, hero, {}, args); + await checkTaskWithHero(roleId, sid, null, TASK_TYPE.EQUIP_BY_HERO, hero, [-1]); + } + + await EquipModel.deleteEquips(roleId, equipSeqIds); pinus.app.get('channelService').pushMessageByUids('onEquipDel', resResult(STATUS.SUCCESS, { equips }), uids); } diff --git a/shared/db/Equip.ts b/shared/db/Equip.ts index 9168f7375..12805acd6 100644 --- a/shared/db/Equip.ts +++ b/shared/db/Equip.ts @@ -136,7 +136,7 @@ export default class Equip extends BaseModel { } public static async getEquips(ids: Array) { - let result = await EquipModel.find({ seqId: { $in: ids } }); + let result: EquipType[] = await EquipModel.find({ seqId: { $in: ids } }); return result; }