From 5d03e49c138ad45486452a5ecaebf162a4882c71 Mon Sep 17 00:00:00 2001 From: Tiger Wang Date: Thu, 16 Jan 2014 18:44:11 +0000 Subject: [PATCH] Possibly did what xoft wanted --- src/Item.cpp | 19 +++++++++++++++++++ src/Item.h | 3 +++ src/UI/SlotArea.cpp | 13 +++---------- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/Item.cpp b/src/Item.cpp index 9170006b6..58b3d41c9 100644 --- a/src/Item.cpp +++ b/src/Item.cpp @@ -99,6 +99,25 @@ bool cItem::IsFullStack(void) const +void cItem::CustomCopy(cItem & a_OtherItem, bool a_CopyType, bool a_CopyCount, bool a_CopyDamage, bool a_CopyEnchantments, bool a_CopyCustomName, bool a_CopyLore) +{ + if (a_CopyType) + m_ItemType = a_OtherItem.m_ItemType; + if (a_CopyCount) + m_ItemCount = a_OtherItem.m_ItemCount; + if (a_CopyDamage) + m_ItemDamage = a_OtherItem.m_ItemDamage; + if (a_CopyEnchantments) + m_Enchantments = a_OtherItem.m_Enchantments; + if (a_CopyCustomName) + m_CustomName = a_OtherItem.m_CustomName; + if (a_CopyLore) + m_Lore = a_OtherItem.m_Lore; +} + + + + char cItem::GetMaxStackSize(void) const { diff --git a/src/Item.h b/src/Item.h index a59ab0348..97c4c2ba2 100644 --- a/src/Item.h +++ b/src/Item.h @@ -134,6 +134,9 @@ public: bool IsCustomNameEmpty(void) const { return (m_CustomName.empty()); } bool IsLoreEmpty(void) const { return (m_Lore.empty()); } + + /** Copies specified internal variables from another item to this item */ + void CustomCopy(cItem & a_OtherItem, bool a_CopyType, bool a_CopyCount, bool a_CopyDamage, bool a_CopyEnchantments, bool a_CopyCustomName, bool a_CopyLore); /// Returns a copy of this item with m_ItemCount set to 1. Useful to preserve enchantments etc. on stacked items diff --git a/src/UI/SlotArea.cpp b/src/UI/SlotArea.cpp index df3687fda..318c099e9 100644 --- a/src/UI/SlotArea.cpp +++ b/src/UI/SlotArea.cpp @@ -87,11 +87,8 @@ void cSlotArea::Clicked(cPlayer & a_Player, int a_SlotNum, eClickAction a_ClickA { DraggingItem.m_ItemCount = (char)(((float)Slot.m_ItemCount) / 2.f + 0.5f); Slot.m_ItemCount -= DraggingItem.m_ItemCount; - DraggingItem.m_ItemType = Slot.m_ItemType; - DraggingItem.m_ItemDamage = Slot.m_ItemDamage; - DraggingItem.m_Enchantments = Slot.m_Enchantments; - DraggingItem.m_CustomName = Slot.m_CustomName; - DraggingItem.m_Lore = Slot.m_Lore; + + DraggingItem.CustomCopy(Slot, true, false, true, true, true, true); if (Slot.m_ItemCount <= 0) { @@ -104,14 +101,10 @@ void cSlotArea::Clicked(cPlayer & a_Player, int a_SlotNum, eClickAction a_ClickA cItemHandler * Handler = ItemHandler(Slot.m_ItemType); if ((DraggingItem.m_ItemCount > 0) && (Slot.m_ItemCount < Handler->GetMaxStackSize())) { - Slot.m_ItemType = DraggingItem.m_ItemType; Slot.m_ItemCount++; - Slot.m_ItemDamage = DraggingItem.m_ItemDamage; DraggingItem.m_ItemCount--; - Slot.m_Enchantments = DraggingItem.m_Enchantments; - Slot.m_CustomName = DraggingItem.m_CustomName; - Slot.m_Lore = DraggingItem.m_Lore; + Slot.CustomCopy(DraggingItem, true, false, true, true, true, true); } if (DraggingItem.m_ItemCount <= 0) {