diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Item/Item.cpp | 16 | ||||
-rw-r--r-- | src/server/game/Entities/Item/Item.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 2 |
4 files changed, 20 insertions, 4 deletions
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index 9a6af376e6d..19cf9beff21 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -1435,3 +1435,19 @@ void Item::ItemContainerDeleteLootMoneyAndLootItemsFromDB() ItemContainerDeleteLootMoneyFromDB(); ItemContainerDeleteLootItemsFromDB(); } + +void Item::SetCount(uint32 value) +{ + SetUInt32Value(ITEM_FIELD_STACK_COUNT, value); + + if (Player* player = GetOwner()) + { + if (TradeData* tradeData = player->GetTradeData()) + { + TradeSlots slot = tradeData->GetTradeSlotForItem(GetGUID()); + + if (slot != TRADE_SLOT_INVALID) + tradeData->SetItem(slot, this, true); + } + } +} diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h index a268334b212..1eb6530a996 100644 --- a/src/server/game/Entities/Item/Item.h +++ b/src/server/game/Entities/Item/Item.h @@ -262,7 +262,7 @@ class Item : public Object bool GemsFitSockets() const; uint32 GetCount() const { return GetUInt32Value(ITEM_FIELD_STACK_COUNT); } - void SetCount(uint32 value) { SetUInt32Value(ITEM_FIELD_STACK_COUNT, value); } + void SetCount(uint32 value); uint32 GetMaxStackCount() const { return GetTemplate()->GetMaxStackSize(); } uint8 GetGemCountWithID(uint32 GemID) const; uint8 GetGemCountWithLimitCategory(uint32 limitCategory) const; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 64263823caa..97c4a78fc92 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -324,13 +324,13 @@ Item* TradeData::GetSpellCastItem() const return m_spellCastItem ? m_player->GetItemByGuid(m_spellCastItem) : NULL; } -void TradeData::SetItem(TradeSlots slot, Item* item) +void TradeData::SetItem(TradeSlots slot, Item* item, bool update /*= false*/) { ObjectGuid itemGuid; if (item) itemGuid = item->GetGUID(); - if (m_items[slot] == itemGuid) + if (m_items[slot] == itemGuid && !update) return; m_items[slot] = itemGuid; diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 75f04cb0d7b..7c0700fa244 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1020,7 +1020,7 @@ class TradeData Item* GetItem(TradeSlots slot) const; bool HasItem(ObjectGuid itemGuid) const; TradeSlots GetTradeSlotForItem(ObjectGuid itemGuid) const; - void SetItem(TradeSlots slot, Item* item); + void SetItem(TradeSlots slot, Item* item, bool update = false); uint32 GetSpell() const { return m_spell; } void SetSpell(uint32 spell_id, Item* castItem = NULL); |