diff options
author | Andrei Karas <akaras@inbox.ru> | 2015-07-15 02:37:23 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2015-07-15 02:37:23 +0300 |
commit | 5fc61f321cbe6c8f4a4e6529c27603302f3d5eba (patch) | |
tree | 7b5561a239e10bb6437b94a681f66c524c4d8d91 | |
parent | 4761556e5e4cf8471ab65c65c2b3fd4003ac5ba0 (diff) | |
download | manaplus-5fc61f321cbe6c8f4a4e6529c27603302f3d5eba.tar.gz manaplus-5fc61f321cbe6c8f4a4e6529c27603302f3d5eba.tar.bz2 manaplus-5fc61f321cbe6c8f4a4e6529c27603302f3d5eba.tar.xz manaplus-5fc61f321cbe6c8f4a4e6529c27603302f3d5eba.zip |
Update existing item after inserting card.
-rw-r--r-- | src/gui/popups/itempopup.cpp | 5 | ||||
-rw-r--r-- | src/gui/popups/itempopup.h | 2 | ||||
-rw-r--r-- | src/item.cpp | 12 | ||||
-rw-r--r-- | src/item.h | 2 | ||||
-rw-r--r-- | src/net/eathena/inventoryhandler.cpp | 25 |
5 files changed, 39 insertions, 7 deletions
diff --git a/src/gui/popups/itempopup.cpp b/src/gui/popups/itempopup.cpp index 2374f693b..33b2eba91 100644 --- a/src/gui/popups/itempopup.cpp +++ b/src/gui/popups/itempopup.cpp @@ -330,6 +330,11 @@ void ItemPopup::mouseMoved(MouseEvent &event) // When the mouse moved on top of the popup, hide it setVisible(Visible_false); + resetPopup(); +} + +void ItemPopup::resetPopup() +{ mLastName.clear(); mLastColor = 1; mLastId = 0; diff --git a/src/gui/popups/itempopup.h b/src/gui/popups/itempopup.h index 6072bc90c..fb3feefa2 100644 --- a/src/gui/popups/itempopup.h +++ b/src/gui/popups/itempopup.h @@ -68,6 +68,8 @@ class ItemPopup final : public Popup void mouseMoved(MouseEvent &event) override final; + void resetPopup(); + private: std::string getCardsString(const int *const cards); diff --git a/src/item.cpp b/src/item.cpp index d42a11859..7fa816c86 100644 --- a/src/item.cpp +++ b/src/item.cpp @@ -160,3 +160,15 @@ void Item::setCards(const int *const cards, const int size) for (int f = 0; f < sz; f ++) mCards[f] = cards[f]; } + +void Item::addCard(const int card) +{ + for (int f = 0; f < maxCards; f ++) + { + if (!mCards[f]) + { + mCards[f] = card; + return; + } + } +} diff --git a/src/item.h b/src/item.h index f14258321..815160c32 100644 --- a/src/item.h +++ b/src/item.h @@ -211,6 +211,8 @@ class Item notfinal int getType() const A_WARN_UNUSED { return mType; } + void addCard(const int card); + int mId; /**< Item type id. */ unsigned char mColor; int mQuantity; /**< Number of items. */ diff --git a/src/net/eathena/inventoryhandler.cpp b/src/net/eathena/inventoryhandler.cpp index c73425874..015ff3c2c 100644 --- a/src/net/eathena/inventoryhandler.cpp +++ b/src/net/eathena/inventoryhandler.cpp @@ -30,6 +30,8 @@ #include "enums/resources/notifytypes.h" +#include "gui/popups/itempopup.h" + #include "gui/widgets/createwidget.h" #include "gui/windows/insertcarddialog.h" @@ -810,7 +812,7 @@ void InventoryHandler::processPlayerUseCard(Net::MessageIn &msg) void InventoryHandler::processPlayerInsertCard(Net::MessageIn &msg) { - msg.readInt16("item index"); + const int itemIndex = msg.readInt16("item index") - INVENTORY_OFFSET; const int cardIndex = msg.readInt16("card index") - INVENTORY_OFFSET; if (msg.readUInt8("flag")) { @@ -820,12 +822,21 @@ void InventoryHandler::processPlayerInsertCard(Net::MessageIn &msg) { NotifyManager::notify(NotifyTypes::CARD_INSERT_SUCCESS); Inventory *const inv = PlayerInfo::getInventory(); - Item *const item = inv->getItem(cardIndex); - if (!item) - return; - item->increaseQuantity(-1); - if (item->getQuantity() == 0) - inv->removeItemAt(cardIndex); + Item *const card = inv->getItem(cardIndex); + int cardId = 0; + if (card) + { + cardId = card->getId(); + card->increaseQuantity(-1); + if (card->getQuantity() == 0) + inv->removeItemAt(cardIndex); + } + Item *const item = inv->getItem(itemIndex); + if (item) + { + item->addCard(cardId); + itemPopup->resetPopup(); + } } } |