summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/localplayer.cpp35
-rw-r--r--src/localplayer.h18
-rw-r--r--src/net/tmwa/inventoryhandler.cpp7
3 files changed, 48 insertions, 12 deletions
diff --git a/src/localplayer.cpp b/src/localplayer.cpp
index e58ec63ba..1fadc51c1 100644
--- a/src/localplayer.cpp
+++ b/src/localplayer.cpp
@@ -1308,20 +1308,39 @@ void LocalPlayer::stopAttack()
mLastTarget = -1;
}
-void LocalPlayer::pickedUp(const ItemInfo &itemInfo, int amount)
+void LocalPlayer::pickedUp(const ItemInfo &itemInfo, int amount,
+ unsigned char fail)
{
- if (!amount)
+ if (fail)
{
- if (config.getBoolValue("showpickupchat"))
+ const char* msg;
+ switch (fail)
{
- localChatTab->chatLog(_("Unable to pick up item."),
- BY_SERVER);
+ case PICKUP_BAD_ITEM:
+ msg = N_("Tried to pick up nonexistent item.");
+ break;
+ case PICKUP_TOO_HEAVY: msg = N_("Item is too heavy.");
+ break;
+ case PICKUP_TOO_FAR: msg = N_("Item is too far away");
+ break;
+ case PICKUP_INV_FULL: msg = N_("Inventory is full.");
+ break;
+ case PICKUP_STACK_FULL: msg = N_("Stack is too big.");
+ break;
+ case PICKUP_DROP_STEAL:
+ msg = N_("Item belongs to someone else.");
+ break;
+ default:
+ msg = N_("Unknown problem picking up item.");
+ break;
}
- if (mMap && config.getValue("showpickupparticle", 0))
+ if (config.getBoolValue("showpickupchat"))
+ localChatTab->chatLog(_(msg), BY_SERVER);
+
+ if (mMap && config.getBoolValue("showpickupparticle"))
{
// Show pickup notification
- addMessageToQueue(_("Unable to pick up item."),
- UserPalette::PICKUP_INFO);
+ addMessageToQueue(_(msg), UserPalette::PICKUP_INFO);
}
}
else
diff --git a/src/localplayer.h b/src/localplayer.h
index b9495b6ca..c7e6e7838 100644
--- a/src/localplayer.h
+++ b/src/localplayer.h
@@ -50,6 +50,21 @@ class AwayListener : public gcn::ActionListener
};
/**
+ * Reasons an item can fail to be picked up.
+ */
+enum
+{
+ PICKUP_OKAY,
+ PICKUP_BAD_ITEM,
+ PICKUP_TOO_HEAVY,
+ PICKUP_TOO_FAR,
+ PICKUP_INV_FULL,
+ PICKUP_STACK_FULL,
+ PICKUP_DROP_STEAL
+};
+
+
+/**
* The local player character.
*/
class LocalPlayer : public Being, public ActorSpriteListener,
@@ -194,7 +209,8 @@ class LocalPlayer : public Being, public ActorSpriteListener,
/**
* Shows item pickup notifications.
*/
- void pickedUp(const ItemInfo &itemInfo, int amount);
+ void pickedUp(const ItemInfo &itemInfo, int amount,
+ unsigned char fail);
int getLevel() const;
diff --git a/src/net/tmwa/inventoryhandler.cpp b/src/net/tmwa/inventoryhandler.cpp
index 7c6da139e..27e44b70c 100644
--- a/src/net/tmwa/inventoryhandler.cpp
+++ b/src/net/tmwa/inventoryhandler.cpp
@@ -280,15 +280,16 @@ void InventoryHandler::handleMessage(Net::MessageIn &msg)
{
const ItemInfo &itemInfo = ItemDB::get(itemId);
- if (msg.readInt8() > 0)
+ unsigned char err = msg.readInt8();
+ if (err)
{
if (player_node)
- player_node->pickedUp(itemInfo, 0);
+ player_node->pickedUp(itemInfo, 0, err);
}
else
{
if (player_node)
- player_node->pickedUp(itemInfo, amount);
+ player_node->pickedUp(itemInfo, amount, PICKUP_OKAY);
if (inventory)
{