From 5a4d8ffad3b172eae67844deda6b65273b7c9757 Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Sun, 10 Apr 2011 15:16:27 +0300 Subject: implemented rats in new system to verify that it works --- src/server.cpp | 47 +++++++++++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 22 deletions(-) (limited to 'src/server.cpp') diff --git a/src/server.cpp b/src/server.cpp index 4334d77c7..04d204a2a 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -2045,28 +2045,26 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) dout_server<<"Player inventory has no free space"<m_removed) + return; /* Create the inventory item */ - InventoryItem *item = NULL; - // If it is an item-object, take the item from it - if(obj->getType() == ACTIVEOBJECT_TYPE_ITEM - && obj->m_removed == false) - { - item = ((ItemSAO*)obj)->createInventoryItem(); - } + InventoryItem *item = obj->createPickedUpItem(); if(item) { // Add to inventory and send inventory ilist->addItem(item); SendInventory(player->peer_id); + + // Remove object from environment + obj->m_removed = true; } } - - // Remove object from environment - obj->m_removed = true; } } else if(command == TOSERVER_GROUND_ACTION) @@ -2448,15 +2446,9 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) pos.Z += BS*0.2*(float)myrand_range(-1000,1000)/1000.0; /* - Create an ItemSAO + Create the object */ - // Get item string - std::ostringstream os(std::ios_base::binary); - item->serialize(os); - dout_server<<"Item string is \""<createSAO(&m_env, 0, pos); if(obj == NULL) { @@ -2471,11 +2463,22 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) dout_server<<"Placed object"<inventory.getList("main"); - if(g_settings.getBool("creative_mode") == false && ilist) + // If item has count<=1, delete it + if(item->getCount() <= 1) { - // Remove from inventory and send inventory - ilist->deleteItem(item_i); + InventoryList *ilist = player->inventory.getList("main"); + if(g_settings.getBool("creative_mode") == false && ilist) + { + // Remove from inventory and send inventory + ilist->deleteItem(item_i); + // Send inventory + SendInventory(peer_id); + } + } + // Else decrement it + else + { + item->remove(1); // Send inventory SendInventory(peer_id); } -- cgit v1.2.3