diff --git a/game-server/app/servers/role/handler/equipHandler.ts b/game-server/app/servers/role/handler/equipHandler.ts index 7fc53abe2..cf5c58748 100644 --- a/game-server/app/servers/role/handler/equipHandler.ts +++ b/game-server/app/servers/role/handler/equipHandler.ts @@ -357,15 +357,13 @@ export class EquipHandler { // if (_.indexOf(classId, job_class) < 0) // return resResult(STATUS.EQUIP_NOT_EQUIPED_HERO); if (!!equip.hid) - return resResult(STATUS.EQUIP_IS_EQUIPED); - let ePlace = await HeroModel.getHeroEquip(roleId, hid); - if (!ePlace) - return resResult(STATUS.HERO_NOT_FIND); + return resResult(STATUS.EQUIP_IS_EQUIPED); let index = _.findIndex(hero.ePlace, {id: ePlaceId}); if (index < 0) - return resResult(STATUS.WRONG_PARMS); - if (!!ePlace[index].equip) { - let lastEquip = await EquipModel.updateEquipInfo(ePlace[index].equip.seqId, {hid:0, ePlaceId: 0}); + return resResult(STATUS.WRONG_PARMS); + let objectId = hero.ePlace[index].equip; + if (!!objectId) { + let lastEquip = await EquipModel.updateEquipInfobyObjectId(objectId, {hid:0, ePlaceId: 0}); curEquips.push({ seqId: lastEquip.seqId, hid: lastEquip.hid, @@ -381,15 +379,11 @@ export class EquipHandler { } else if (type == 2) { if (!equip.hid) return resResult(STATUS.EQUIP_NOT_EQUIPED); - let ePlace = await HeroModel.getHeroEquip(roleId, hid); - if (!ePlace) - return resResult(STATUS.HERO_NOT_FIND); - let index = _.findIndex(ePlace, {id: ePlaceId}); + let index = _.findIndex(hero.ePlace, {id: ePlaceId}); if (index < 0) return resResult(STATUS.WRONG_PARMS); - if (!ePlace[index].equip||ePlace[index].equip.seqId != eid) - return resResult(STATUS.WRONG_PARMS); - await HeroModel.unloadHeroAndEquip(roleId, hid, eid); + hero.ePlace[index].equip = null; + await HeroModel.updateHeroInfo(roleId, hid, {ePlace:hero.ePlace}); equip = await EquipModel.updateEquipInfo(eid, {hid:0, ePlaceId: 0}); curEquips.push({ seqId: equip.seqId, diff --git a/shared/db/Equip.ts b/shared/db/Equip.ts index e15b446ea..5d2479042 100644 --- a/shared/db/Equip.ts +++ b/shared/db/Equip.ts @@ -132,6 +132,12 @@ export default class Equip extends BaseModel { let result: EquipType = await EquipModel.findOneAndUpdate({roleId, seqId, 'randSe.id': id}, {$set: {'randSe.$.locked': lock}}, {new: true, upsert: false}).select('seqId id randSe').lean(); return result; } + + public static async updateEquipInfobyObjectId(_id: string, equipUpdate: equipUpdate, lean = true) { + delete equipUpdate._id; + let result: EquipType = await EquipModel.findOneAndUpdate({_id}, {$set: equipUpdate}, {new: true}).lean(lean); + return result; + } } export const EquipModel = getModelForClass(Equip); diff --git a/shared/db/Hero.ts b/shared/db/Hero.ts index 4f1b8eafd..9a2a26d9c 100644 --- a/shared/db/Hero.ts +++ b/shared/db/Hero.ts @@ -1,7 +1,7 @@ import BaseModel from './BaseModel'; import { CeAttr } from './generalField'; import { index, getModelForClass, prop, Ref, mongoose, DocumentType } from '@typegoose/typegoose'; -import Equip, { EquipType } from './Equip'; +import Equip, { } from './Equip'; import { CounterModel } from './Counter'; import { COUNTER, EQUIP_TYPE } from '../consts'; @@ -211,7 +211,7 @@ export default class Hero extends BaseModel { } public static async getHeroEquip(roleId: string, hid: number, lean = true) { - let result: EquipType = await HeroModel.findOne({ roleId, hid }).populate('ePlace.equip').select('ePlace.equip').lean(lean); + let result: HeroType = await HeroModel.findOne({ roleId, hid }).populate('ePlace.equip').select('ePlace.equip').lean(lean); return result; }