diff --git a/EQ2/source/WorldServer/Items/Items.cpp b/EQ2/source/WorldServer/Items/Items.cpp index 238795fef..d89301f85 100644 --- a/EQ2/source/WorldServer/Items/Items.cpp +++ b/EQ2/source/WorldServer/Items/Items.cpp @@ -3556,9 +3556,12 @@ bool EquipmentItemList::AddItem(int8 slot, Item* item){ Item* curItem = GetItem(slot); if (curItem) // existing item in slot + { + MEquipmentItems.unlock(); return false; + } - SetItem(slot, item); + SetItem(slot, item, true); if (item->details.unique_id == 0) { GetItem(slot)->details.unique_id = MasterItemList::NextUniqueID(); if (item->IsBag()) @@ -3581,13 +3584,17 @@ int8 EquipmentItemList::GetNumberOfItems(){ return ret; } -void EquipmentItemList::SetItem(int8 slot_id, Item* item){ - MEquipmentItems.lock(); +void EquipmentItemList::SetItem(int8 slot_id, Item* item, bool locked){ + if(!locked) + MEquipmentItems.lock(); + item->details.inv_slot_id = 0; item->details.slot_id = slot_id; item->details.index = slot_id; items[slot_id] = item; - MEquipmentItems.unlock(); + + if(!locked) + MEquipmentItems.unlock(); } vector<Item*>* EquipmentItemList::GetAllEquippedItems(){ diff --git a/EQ2/source/WorldServer/Items/Items.h b/EQ2/source/WorldServer/Items/Items.h index abd68fc9c..5478761d7 100644 --- a/EQ2/source/WorldServer/Items/Items.h +++ b/EQ2/source/WorldServer/Items/Items.h @@ -1031,7 +1031,7 @@ public: int8 GetNumberOfItems(); Item* GetItemFromUniqueID(int32 item_id); Item* GetItemFromItemID(int32 item_id); - void SetItem(int8 slot_id, Item* item); + void SetItem(int8 slot_id, Item* item, bool locked = false); void RemoveItem(int8 slot, bool delete_item = false); Item* GetItem(int8 slot_id); bool AddItem(int8 slot, Item* item);