diff options
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index b8cf9aa206d..ea4881957b5 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -12246,6 +12246,8 @@ void Player::RemoveItem(uint8 bag, uint8 slot, bool update) } } } + else + m_items[slot] = nullptr; SetGuidValue(PLAYER_FIELD_INV_SLOT_HEAD + (slot * 2), ObjectGuid::Empty); @@ -12352,11 +12354,13 @@ void Player::DestroyItem(uint8 bag, uint8 slot, bool update) // equipment and equipped bags can have applied bonuses if (slot < INVENTORY_SLOT_BAG_END) { - // item set bonuses applied only at equip and removed at unequip, and still active for broken items if (pProto->ItemSet) RemoveItemsSetItem(this, pProto); + // clear m_items so weapons for example can be registered as unequipped + m_items[slot] = nullptr; + _ApplyItemMods(pItem, slot, false); } @@ -12382,7 +12386,9 @@ void Player::DestroyItem(uint8 bag, uint8 slot, bool update) SetVisibleItemSlot(slot, nullptr); } - m_items[slot] = nullptr; + // clear for rest of items (ie nonequippable) + if (slot >= INVENTORY_SLOT_BAG_END) + m_items[slot] = nullptr; } else if (Bag* pBag = GetBagByPos(bag)) pBag->RemoveItem(slot, update); |