装备:删除装备前,从武将身上卸下

This commit is contained in:
luying
2021-08-06 11:48:26 +08:00
parent 2769901ca2
commit 763d66b7ed
2 changed files with 30 additions and 7 deletions

View File

@@ -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<ItemInter>) {
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<ItemI
}
//检查装备是否存在
if (equips.length > 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<ItemI
}
//删除装备
if (equips.length > 0) {
if (resEquips.length > 0) {
let heroMap = new Map<number, { hero: HeroType, equips: EquipType[]}>();
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);
}

View File

@@ -136,7 +136,7 @@ export default class Equip extends BaseModel {
}
public static async getEquips(ids: Array<number>) {
let result = await EquipModel.find({ seqId: { $in: ids } });
let result: EquipType[] = await EquipModel.find({ seqId: { $in: ids } });
return result;
}