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; }