diff options
author | xinef1 <w.szyszko2@gmail.com> | 2017-03-20 18:34:20 +0100 |
---|---|---|
committer | funjoker <funjoker109@gmail.com> | 2020-04-24 17:18:49 +0200 |
commit | ca4720662defef6f664489b222a00ae664855968 (patch) | |
tree | 88c4b7b3e949c40c8462aeaf34b5de8b2eebe1b5 /src | |
parent | e44d0c88734f8dcfd15655224ed6c674dffe1da6 (diff) |
Core/Items: Fixed durability problems for wrapped item (#19003)
(cherry picked from commit 81d011170d48e7d4cce7892897d24528254615af)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Item/Item.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Entities/Item/Item.h | 1 | ||||
-rw-r--r-- | src/server/game/Handlers/SpellHandler.cpp | 1 |
3 files changed, 5 insertions, 1 deletions
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index 57be82a51ef..8b7eea39e98 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -844,7 +844,9 @@ bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field* fie SetDurability(durability); // update max durability (and durability) if need SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::MaxDurability), proto->MaxDurability); - if (durability > proto->MaxDurability) + + // do not overwrite durability for wrapped items + if (durability > proto->MaxDurability && !HasItemFlag(ITEM_FIELD_FLAG_WRAPPED)) { SetDurability(proto->MaxDurability); need_save = true; diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h index 13f0cb7de66..c4c5ee62d5a 100644 --- a/src/server/game/Entities/Item/Item.h +++ b/src/server/game/Entities/Item/Item.h @@ -258,6 +258,7 @@ class TC_GAME_API Item : public Object bool IsNotEmptyBag() const; bool IsBroken() const { return *m_itemData->MaxDurability > 0 && *m_itemData->Durability == 0; } void SetDurability(uint32 durability) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Durability), durability); } + void SetMaxDurability(uint32 maxDurability) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::MaxDurability), maxDurability); } bool CanBeTraded(bool mail = false, bool trade = false) const; void SetInTrade(bool b = true) { mb_in_trade = b; } bool IsInTrade() const { return mb_in_trade; } diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp index bf2f9dc3cd5..1ae93079145 100644 --- a/src/server/game/Handlers/SpellHandler.cpp +++ b/src/server/game/Handlers/SpellHandler.cpp @@ -228,6 +228,7 @@ void WorldSession::HandleOpenWrappedItemCallback(uint16 pos, ObjectGuid itemGuid item->SetGiftCreator(ObjectGuid::Empty); item->SetEntry(entry); item->SetItemFlags(ItemFieldFlags(flags)); + item->SetMaxDurability(item->GetTemplate()->MaxDurability); item->SetState(ITEM_CHANGED, GetPlayer()); GetPlayer()->SaveInventoryAndGoldToDB(trans); |