summaryrefslogtreecommitdiff
path: root/src/server.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server.cpp')
-rw-r--r--src/server.cpp31
1 files changed, 18 insertions, 13 deletions
diff --git a/src/server.cpp b/src/server.cpp
index 6a0c13040..154603a47 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -2470,22 +2470,27 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
dout_server<<"Placed object"<<std::endl;
- // If item has count<=1, delete it
- if(item->getCount() <= 1)
+ if(g_settings.getBool("creative_mode") == false)
{
- InventoryList *ilist = player->inventory.getList("main");
- if(g_settings.getBool("creative_mode") == false && ilist)
+ // Delete the right amount of items from the slot
+ u16 dropcount = item->getDropCount();
+
+ // Delete item if all gone
+ if(item->getCount() <= dropcount)
{
- // Remove from inventory and send inventory
- ilist->deleteItem(item_i);
- // Send inventory
- SendInventory(peer_id);
+ if(item->getCount() < dropcount)
+ dstream<<"WARNING: Server: dropped more items"
+ <<" than the slot contains"<<std::endl;
+
+ InventoryList *ilist = player->inventory.getList("main");
+ if(ilist)
+ // Remove from inventory and send inventory
+ ilist->deleteItem(item_i);
}
- }
- // Else decrement it
- else
- {
- item->remove(1);
+ // Else decrement it
+ else
+ item->remove(dropcount);
+
// Send inventory
SendInventory(peer_id);
}