summaryrefslogtreecommitdiff
path: root/src/net/eathena
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/eathena')
-rw-r--r--src/net/eathena/inventoryrecv.cpp34
1 files changed, 25 insertions, 9 deletions
diff --git a/src/net/eathena/inventoryrecv.cpp b/src/net/eathena/inventoryrecv.cpp
index 17e79b4da..c17db75d1 100644
--- a/src/net/eathena/inventoryrecv.cpp
+++ b/src/net/eathena/inventoryrecv.cpp
@@ -22,8 +22,10 @@
#include "net/eathena/inventoryrecv.h"
+#include "actormanager.h"
#include "notifymanager.h"
#include "itemcolormanager.h"
+#include "itemsoundmanager.h"
#include "being/localplayer.h"
@@ -1456,20 +1458,34 @@ void InventoryRecv::processPlayerInventoryUse(Net::MessageIn &msg)
? PlayerInfo::getInventory() : nullptr;
const int index = msg.readInt16("index") - INVENTORY_OFFSET;
- msg.readItemId("item id");
- msg.readInt32("id?");
+ const int itemId = msg.readItemId("item id");
+ const BeingId id = msg.readBeingId("account id");
const int amount = msg.readInt16("amount");
- msg.readUInt8("type");
+ const uint8_t flag = msg.readUInt8("type");
+ Being *const dstBeing = actorManager->findBeing(id);
- if (inventory != nullptr)
+ if (dstBeing == localPlayer)
{
- if (Item *const item = inventory->getItem(index))
+ if (flag == 0)
{
- if (amount != 0)
- item->setQuantity(amount);
- else
- inventory->removeItemAt(index);
+ NotifyManager::notify(NotifyTypes::USE_FAILED);
+ return;
}
+ if (inventory != nullptr)
+ {
+ if (Item *const item = inventory->getItem(index))
+ {
+ if (amount != 0)
+ item->setQuantity(amount);
+ else
+ inventory->removeItemAt(index);
+ }
+ }
+ }
+ else
+ {
+ // +++ here can count left items in other player slot + id + amount
+ ItemSoundManager::playSfx(dstBeing, itemId, ItemSoundEvent::USE);
}
BLOCK_END("InventoryRecv::processPlayerInventoryUse")
}