C++11 cleanup inventorymanager (#6077)
authorVincent Glize <vincentglize@hotmail.fr>
Sat, 1 Jul 2017 12:07:40 +0000 (14:07 +0200)
committerLoïc Blot <nerzhul@users.noreply.github.com>
Sat, 1 Jul 2017 12:07:40 +0000 (14:07 +0200)
* C++11 cleanup inventorymanager

src/guiFormSpecMenu.cpp
src/inventorymanager.cpp
src/inventorymanager.h
src/network/serverpackethandler.cpp

index 0592f4e1bfde539b416894043d046f6b293e0efc..a2a336b8471419176501eb749be269051ae3cc04 100644 (file)
@@ -3526,7 +3526,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
 
                // Possibly send inventory action to server
                if (move_amount > 0) {
-                       // Send IACTION_MOVE
+                       // Send IAction::Move
 
                        assert(m_selected_item && m_selected_item->isValid());
                        assert(s.isValid());
@@ -3563,7 +3563,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
                                m_selected_content_guess = ItemStack(); // Clear
                        }
 
-                       infostream << "Handing IACTION_MOVE to manager" << std::endl;
+                       infostream << "Handing IAction::Move to manager" << std::endl;
                        IMoveAction *a = new IMoveAction();
                        a->count = move_amount;
                        a->from_inv = m_selected_item->inventoryloc;
@@ -3599,7 +3599,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
                                ItemStack stack_from = list_from->getItem(s.i);
                                assert(shift_move_amount <= stack_from.count);
                                if (m_client->getProtoVersion() >= 25) {
-                                       infostream << "Handing IACTION_MOVE to manager" << std::endl;
+                                       infostream << "Handing IAction::Move to manager" << std::endl;
                                        IMoveAction *a = new IMoveAction();
                                        a->count = shift_move_amount;
                                        a->from_inv = s.inventoryloc;
@@ -3617,7 +3617,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
                                                        && shift_move_amount > 0; slot_to++) {
                                                list_to->itemFits(slot_to, stack_from, &leftover);
                                                if (leftover.count < stack_from.count) {
-                                                       infostream << "Handing IACTION_MOVE to manager" << std::endl;
+                                                       infostream << "Handing IAction::Move to manager" << std::endl;
                                                        IMoveAction *a = new IMoveAction();
                                                        a->count = MYMIN(shift_move_amount,
                                                                (u32) (stack_from.count - leftover.count));
@@ -3637,7 +3637,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
                } else if (drop_amount > 0) {
                        m_selected_content_guess = ItemStack(); // Clear
 
-                       // Send IACTION_DROP
+                       // Send IAction::Drop
 
                        assert(m_selected_item && m_selected_item->isValid());
                        assert(inv_selected);
@@ -3650,7 +3650,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
                        assert(drop_amount > 0 && drop_amount <= m_selected_amount);
                        m_selected_amount -= drop_amount;
 
-                       infostream << "Handing IACTION_DROP to manager" << std::endl;
+                       infostream << "Handing IAction::Drop to manager" << std::endl;
                        IDropAction *a = new IDropAction();
                        a->count = drop_amount;
                        a->from_inv = m_selected_item->inventoryloc;
@@ -3660,12 +3660,12 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
                } else if (craft_amount > 0) {
                        m_selected_content_guess = ItemStack(); // Clear
 
-                       // Send IACTION_CRAFT
+                       // Send IAction::Craft
 
                        assert(s.isValid());
                        assert(inv_s);
 
-                       infostream << "Handing IACTION_CRAFT to manager" << std::endl;
+                       infostream << "Handing IAction::Craft to manager" << std::endl;
                        ICraftAction *a = new ICraftAction();
                        a->count = craft_amount;
                        a->craft_inv = s.inventoryloc;
index c976bd037e557a5676c0642b2c7dcc3153084cf9..fe37bcd83d4815c1939d346177c9f63d63a60030 100644 (file)
@@ -43,7 +43,7 @@ std::string InventoryLocation::dump() const
 
 void InventoryLocation::serialize(std::ostream &os) const
 {
-       switch(type){
+       switch (type) {
        case InventoryLocation::UNDEFINED:
                os<<"undefined";
                break;
@@ -68,21 +68,14 @@ void InventoryLocation::deSerialize(std::istream &is)
 {
        std::string tname;
        std::getline(is, tname, ':');
-       if(tname == "undefined")
-       {
+       if (tname == "undefined") {
                type = InventoryLocation::UNDEFINED;
-       }
-       else if(tname == "current_player")
-       {
+       } else if (tname == "current_player") {
                type = InventoryLocation::CURRENT_PLAYER;
-       }
-       else if(tname == "player")
-       {
+       } else if (tname == "player") {
                type = InventoryLocation::PLAYER;
                std::getline(is, name, '\n');
-       }
-       else if(tname == "nodemeta")
-       {
+       } else if (tname == "nodemeta") {
                type = InventoryLocation::NODEMETA;
                std::string pos;
                std::getline(is, pos, '\n');
@@ -90,14 +83,10 @@ void InventoryLocation::deSerialize(std::istream &is)
                p.X = stoi(fn.next(","));
                p.Y = stoi(fn.next(","));
                p.Z = stoi(fn.next(","));
-       }
-       else if(tname == "detached")
-       {
+       } else if (tname == "detached") {
                type = InventoryLocation::DETACHED;
                std::getline(is, name, '\n');
-       }
-       else
-       {
+       } else {
                infostream<<"Unknown InventoryLocation type=\""<<tname<<"\""<<std::endl;
                throw SerializationError("Unknown InventoryLocation type");
        }
@@ -113,12 +102,12 @@ void InventoryLocation::deSerialize(std::string s)
        InventoryAction
 */
 
-InventoryAction * InventoryAction::deSerialize(std::istream &is)
+InventoryAction *InventoryAction::deSerialize(std::istream &is)
 {
        std::string type;
        std::getline(is, type, ' ');
 
-       InventoryAction *a = NULL;
+       InventoryAction *a = nullptr;
 
        if (type == "Move") {
                a = new IMoveAction(is, false);
@@ -126,7 +115,7 @@ InventoryAction * InventoryAction::deSerialize(std::istream &is)
                a = new IMoveAction(is, true);
        } else if (type == "Drop") {
                a = new IDropAction(is);
-       } else if(type == "Craft") {
+       } else if (type == "Craft") {
                a = new ICraftAction(is);
        }
 
@@ -137,12 +126,10 @@ InventoryAction * InventoryAction::deSerialize(std::istream &is)
        IMoveAction
 */
 
-IMoveAction::IMoveAction(std::istream &is, bool somewhere)
+IMoveAction::IMoveAction(std::istream &is, bool somewhere) :
+               move_somewhere(somewhere)
 {
        std::string ts;
-       move_somewhere = somewhere;
-       caused_by_move_somewhere = false;
-       move_count = 0;
 
        std::getline(is, ts, ' ');
        count = stoi(ts);
@@ -265,7 +252,7 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
        */
 
        int try_take_count = count;
-       if(try_take_count == 0)
+       if (try_take_count == 0)
                try_take_count = list_from->getItem(from_i).count;
 
        int src_can_take_count = 0xffff;
@@ -274,28 +261,23 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
        /* Query detached inventories */
 
        // Move occurs in the same detached inventory
-       if(from_inv.type == InventoryLocation::DETACHED &&
+       if (from_inv.type == InventoryLocation::DETACHED &&
                        to_inv.type == InventoryLocation::DETACHED &&
-                       from_inv.name == to_inv.name)
-       {
+                       from_inv.name == to_inv.name) {
                src_can_take_count = PLAYER_TO_SA(player)->detached_inventory_AllowMove(
                                from_inv.name, from_list, from_i,
                                to_list, to_i, try_take_count, player);
                dst_can_put_count = src_can_take_count;
-       }
-       else
-       {
+       } else {
                // Destination is detached
-               if(to_inv.type == InventoryLocation::DETACHED)
-               {
+               if (to_inv.type == InventoryLocation::DETACHED) {
                        ItemStack src_item = list_from->getItem(from_i);
                        src_item.count = try_take_count;
                        dst_can_put_count = PLAYER_TO_SA(player)->detached_inventory_AllowPut(
                                        to_inv.name, to_list, to_i, src_item, player);
                }
                // Source is detached
-               if(from_inv.type == InventoryLocation::DETACHED)
-               {
+               if (from_inv.type == InventoryLocation::DETACHED) {
                        ItemStack src_item = list_from->getItem(from_i);
                        src_item.count = try_take_count;
                        src_can_take_count = PLAYER_TO_SA(player)->detached_inventory_AllowTake(
@@ -307,28 +289,23 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
 
        // Both endpoints are nodemeta
        // Move occurs in the same nodemeta inventory
-       if(from_inv.type == InventoryLocation::NODEMETA &&
+       if (from_inv.type == InventoryLocation::NODEMETA &&
                        to_inv.type == InventoryLocation::NODEMETA &&
-                       from_inv.p == to_inv.p)
-       {
+                       from_inv.p == to_inv.p) {
                src_can_take_count = PLAYER_TO_SA(player)->nodemeta_inventory_AllowMove(
                                from_inv.p, from_list, from_i,
                                to_list, to_i, try_take_count, player);
                dst_can_put_count = src_can_take_count;
-       }
-       else
-       {
+       } else {
                // Destination is nodemeta
-               if(to_inv.type == InventoryLocation::NODEMETA)
-               {
+               if (to_inv.type == InventoryLocation::NODEMETA) {
                        ItemStack src_item = list_from->getItem(from_i);
                        src_item.count = try_take_count;
                        dst_can_put_count = PLAYER_TO_SA(player)->nodemeta_inventory_AllowPut(
                                        to_inv.p, to_list, to_i, src_item, player);
                }
                // Source is nodemeta
-               if(from_inv.type == InventoryLocation::NODEMETA)
-               {
+               if (from_inv.type == InventoryLocation::NODEMETA) {
                        ItemStack src_item = list_from->getItem(from_i);
                        src_item.count = try_take_count;
                        src_can_take_count = PLAYER_TO_SA(player)->nodemeta_inventory_AllowTake(
@@ -340,17 +317,16 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
 
        /* Modify count according to collected data */
        count = try_take_count;
-       if(src_can_take_count != -1 && count > src_can_take_count)
+       if (src_can_take_count != -1 && count > src_can_take_count)
                count = src_can_take_count;
-       if(dst_can_put_count != -1 && count > dst_can_put_count)
+       if (dst_can_put_count != -1 && count > dst_can_put_count)
                count = dst_can_put_count;
        /* Limit according to source item count */
-       if(count > list_from->getItem(from_i).count)
+       if (count > list_from->getItem(from_i).count)
                count = list_from->getItem(from_i).count;
 
        /* If no items will be moved, don't go further */
-       if(count == 0)
-       {
+       if (count == 0) {
                infostream<<"IMoveAction::apply(): move was completely disallowed:"
                                <<" count="<<old_count
                                <<" from inv=\""<<from_inv.dump()<<"\""
@@ -403,7 +379,7 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
                }
        }
        // If destination is infinite, reset it's stack and take count from source
-       if(dst_can_put_count == -1){
+       if (dst_can_put_count == -1) {
                list_to->deleteItem(to_i);
                list_to->addItem(to_i, to_stack_was);
                list_from->deleteItem(from_i);
@@ -426,19 +402,17 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
        // If we are inside the move somewhere loop, we don't need to report
        // anything if nothing happened (perhaps we don't need to report
        // anything for caused_by_move_somewhere == true, but this way its safer)
-       if (caused_by_move_somewhere && move_count == 0) {
+       if (caused_by_move_somewhere && move_count == 0)
                return;
-       }
 
        /*
                Record rollback information
        */
-       if(!ignore_rollback && gamedef->rollback())
-       {
+       if (!ignore_rollback && gamedef->rollback()) {
                IRollbackManager *rollback = gamedef->rollback();
 
                // If source is not infinite, record item take
-               if(src_can_take_count != -1){
+               if (src_can_take_count != -1) {
                        RollbackAction action;
                        std::string loc;
                        {
@@ -451,7 +425,7 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
                        rollback->reportAction(action);
                }
                // If destination is not infinite, record item put
-               if(dst_can_put_count != -1){
+               if (dst_can_put_count != -1) {
                        RollbackAction action;
                        std::string loc;
                        {
@@ -472,25 +446,20 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
        /* Detached inventories */
 
        // Both endpoints are same detached
-       if(from_inv.type == InventoryLocation::DETACHED &&
+       if (from_inv.type == InventoryLocation::DETACHED &&
                        to_inv.type == InventoryLocation::DETACHED &&
-                       from_inv.name == to_inv.name)
-       {
+                       from_inv.name == to_inv.name) {
                PLAYER_TO_SA(player)->detached_inventory_OnMove(
                                from_inv.name, from_list, from_i,
                                to_list, to_i, count, player);
-       }
-       else
-       {
+       } else {
                // Destination is detached
-               if(to_inv.type == InventoryLocation::DETACHED)
-               {
+               if (to_inv.type == InventoryLocation::DETACHED) {
                        PLAYER_TO_SA(player)->detached_inventory_OnPut(
                                        to_inv.name, to_list, to_i, src_item, player);
                }
                // Source is detached
-               if(from_inv.type == InventoryLocation::DETACHED)
-               {
+               if (from_inv.type == InventoryLocation::DETACHED) {
                        PLAYER_TO_SA(player)->detached_inventory_OnTake(
                                        from_inv.name, from_list, from_i, src_item, player);
                }
@@ -499,31 +468,27 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
        /* Node metadata inventories */
 
        // Both endpoints are same nodemeta
-       if(from_inv.type == InventoryLocation::NODEMETA &&
+       if (from_inv.type == InventoryLocation::NODEMETA &&
                        to_inv.type == InventoryLocation::NODEMETA &&
-                       from_inv.p == to_inv.p)
-       {
+                       from_inv.p == to_inv.p) {
                PLAYER_TO_SA(player)->nodemeta_inventory_OnMove(
                                from_inv.p, from_list, from_i,
                                to_list, to_i, count, player);
-       }
-       else{
+       } else {
                // Destination is nodemeta
-               if(to_inv.type == InventoryLocation::NODEMETA)
-               {
+               if (to_inv.type == InventoryLocation::NODEMETA) {
                        PLAYER_TO_SA(player)->nodemeta_inventory_OnPut(
                                        to_inv.p, to_list, to_i, src_item, player);
                }
                // Source is nodemeta
-               else if(from_inv.type == InventoryLocation::NODEMETA)
-               {
+               else if (from_inv.type == InventoryLocation::NODEMETA) {
                        PLAYER_TO_SA(player)->nodemeta_inventory_OnTake(
                                        from_inv.p, from_list, from_i, src_item, player);
                }
        }
 
        mgr->setInventoryModified(from_inv, false);
-       if(inv_from != inv_to)
+       if (inv_from != inv_to)
                mgr->setInventoryModified(to_inv, false);
 }
 
@@ -534,18 +499,18 @@ void IMoveAction::clientApply(InventoryManager *mgr, IGameDef *gamedef)
 
        Inventory *inv_from = mgr->getInventory(from_inv);
        Inventory *inv_to = mgr->getInventory(to_inv);
-       if(!inv_from || !inv_to)
+       if (!inv_from || !inv_to)
                return;
 
        InventoryLocation current_player;
        current_player.setCurrentPlayer();
        Inventory *inv_player = mgr->getInventory(current_player);
-       if(inv_from != inv_player || inv_to != inv_player)
+       if (inv_from != inv_player || inv_to != inv_player)
                return;
 
        InventoryList *list_from = inv_from->getList(from_list);
        InventoryList *list_to = inv_to->getList(to_list);
-       if(!list_from || !list_to)
+       if (!list_from || !list_to)
                return;
 
        if (!move_somewhere)
@@ -554,7 +519,7 @@ void IMoveAction::clientApply(InventoryManager *mgr, IGameDef *gamedef)
                list_from->moveItemSomewhere(from_i, list_to, count);
 
        mgr->setInventoryModified(from_inv);
-       if(inv_from != inv_to)
+       if (inv_from != inv_to)
                mgr->setInventoryModified(to_inv);
 }
 
@@ -582,7 +547,7 @@ void IDropAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
 {
        Inventory *inv_from = mgr->getInventory(from_inv);
 
-       if(!inv_from){
+       if (!inv_from) {
                infostream<<"IDropAction::apply(): FAIL: source inventory not found: "
                                <<"from_inv=\""<<from_inv.dump()<<"\""<<std::endl;
                return;
@@ -593,13 +558,12 @@ void IDropAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
        /*
                If a list doesn't exist or the source item doesn't exist
        */
-       if(!list_from){
+       if (!list_from) {
                infostream<<"IDropAction::apply(): FAIL: source list not found: "
                                <<"from_inv=\""<<from_inv.dump()<<"\""<<std::endl;
                return;
        }
-       if(list_from->getItem(from_i).empty())
-       {
+       if (list_from->getItem(from_i).empty()) {
                infostream<<"IDropAction::apply(): FAIL: source item not found: "
                                <<"from_inv=\""<<from_inv.dump()<<"\""
                                <<", from_list=\""<<from_list<<"\""
@@ -617,13 +581,12 @@ void IDropAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
        */
 
        int take_count = list_from->getItem(from_i).count;
-       if(count != 0 && count < take_count)
+       if (count != 0 && count < take_count)
                take_count = count;
        int src_can_take_count = take_count;
 
        // Source is detached
-       if(from_inv.type == InventoryLocation::DETACHED)
-       {
+       if (from_inv.type == InventoryLocation::DETACHED) {
                ItemStack src_item = list_from->getItem(from_i);
                src_item.count = take_count;
                src_can_take_count = PLAYER_TO_SA(player)->detached_inventory_AllowTake(
@@ -631,15 +594,14 @@ void IDropAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
        }
 
        // Source is nodemeta
-       if(from_inv.type == InventoryLocation::NODEMETA)
-       {
+       if (from_inv.type == InventoryLocation::NODEMETA) {
                ItemStack src_item = list_from->getItem(from_i);
                src_item.count = take_count;
                src_can_take_count = PLAYER_TO_SA(player)->nodemeta_inventory_AllowTake(
                                from_inv.p, from_list, from_i, src_item, player);
        }
 
-       if(src_can_take_count != -1 && src_can_take_count < take_count)
+       if (src_can_take_count != -1 && src_can_take_count < take_count)
                take_count = src_can_take_count;
 
        int actually_dropped_count = 0;
@@ -649,22 +611,21 @@ void IDropAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
        // Drop the item
        ItemStack item1 = list_from->getItem(from_i);
        item1.count = take_count;
-       if(PLAYER_TO_SA(player)->item_OnDrop(item1, player,
-                               player->getBasePosition() + v3f(0,1,0)))
-       {
+       if (PLAYER_TO_SA(player)->item_OnDrop(item1, player,
+                               player->getBasePosition() + v3f(0,1,0))) {
                actually_dropped_count = take_count - item1.count;
 
-               if(actually_dropped_count == 0){
+               if (actually_dropped_count == 0) {
                        infostream<<"Actually dropped no items"<<std::endl;
                        return;
                }
 
                // If source isn't infinite
-               if(src_can_take_count != -1){
+               if (src_can_take_count != -1) {
                        // Take item from source list
                        ItemStack item2 = list_from->takeItem(from_i, actually_dropped_count);
 
-                       if(item2.count != actually_dropped_count)
+                       if (item2.count != actually_dropped_count)
                                errorstream<<"Could not take dropped count of items"<<std::endl;
 
                        mgr->setInventoryModified(from_inv, false);
@@ -684,15 +645,13 @@ void IDropAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
        */
 
        // Source is detached
-       if(from_inv.type == InventoryLocation::DETACHED)
-       {
+       if (from_inv.type == InventoryLocation::DETACHED) {
                PLAYER_TO_SA(player)->detached_inventory_OnTake(
                                from_inv.name, from_list, from_i, src_item, player);
        }
 
        // Source is nodemeta
-       if(from_inv.type == InventoryLocation::NODEMETA)
-       {
+       if (from_inv.type == InventoryLocation::NODEMETA) {
                PLAYER_TO_SA(player)->nodemeta_inventory_OnTake(
                                from_inv.p, from_list, from_i, src_item, player);
        }
@@ -700,12 +659,11 @@ void IDropAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
        /*
                Record rollback information
        */
-       if(!ignore_src_rollback && gamedef->rollback())
-       {
+       if (!ignore_src_rollback && gamedef->rollback()) {
                IRollbackManager *rollback = gamedef->rollback();
 
                // If source is not infinite, record item take
-               if(src_can_take_count != -1){
+               if (src_can_take_count != -1) {
                        RollbackAction action;
                        std::string loc;
                        {
@@ -726,20 +684,20 @@ void IDropAction::clientApply(InventoryManager *mgr, IGameDef *gamedef)
        // to make lag less apparent.
 
        Inventory *inv_from = mgr->getInventory(from_inv);
-       if(!inv_from)
+       if (!inv_from)
                return;
 
        InventoryLocation current_player;
        current_player.setCurrentPlayer();
        Inventory *inv_player = mgr->getInventory(current_player);
-       if(inv_from != inv_player)
+       if (inv_from != inv_player)
                return;
 
        InventoryList *list_from = inv_from->getList(from_list);
-       if(!list_from)
+       if (!list_from)
                return;
 
-       if(count == 0)
+       if (count == 0)
                list_from->changeItem(from_i, ItemStack());
        else
                list_from->takeItem(from_i, count);
@@ -881,7 +839,7 @@ void ICraftAction::clientApply(InventoryManager *mgr, IGameDef *gamedef)
 
 
 // Crafting helper
-bool getCraftingResult(Inventory *inv, ItemStackresult,
+bool getCraftingResult(Inventory *inv, ItemStack &result,
                std::vector<ItemStack> &output_replacements,
                bool decrementInput, IGameDef *gamedef)
 {
@@ -891,28 +849,26 @@ bool getCraftingResult(Inventory *inv, ItemStack& result,
 
        // Get the InventoryList in which we will operate
        InventoryList *clist = inv->getList("craft");
-       if(!clist)
+       if (!clist)
                return false;
 
        // Mangle crafting grid to an another format
        CraftInput ci;
        ci.method = CRAFT_METHOD_NORMAL;
        ci.width = clist->getWidth() ? clist->getWidth() : 3;
-       for(u16 i=0; i<clist->getSize(); i++)
+       for (u16 i=0; i < clist->getSize(); i++)
                ci.items.push_back(clist->getItem(i));
 
        // Find out what is crafted and add it to result item slot
        CraftOutput co;
        bool found = gamedef->getCraftDefManager()->getCraftResult(
                        ci, co, output_replacements, decrementInput, gamedef);
-       if(found)
+       if (found)
                result.deSerialize(co.item, gamedef->getItemDefManager());
 
-       if(found && decrementInput)
-       {
+       if (found && decrementInput) {
                // CraftInput has been changed, apply changes in clist
-               for(u16 i=0; i<clist->getSize(); i++)
-               {
+               for (u16 i=0; i < clist->getSize(); i++) {
                        clist->changeItem(i, ci.items[i]);
                }
        }
index 35fcf4b99dbf6f40d4b08cc975521360ba2f45a2..916b3ea31f36fc83d8cc03afa27e02dd3c301436 100644 (file)
@@ -117,15 +117,17 @@ public:
        virtual void inventoryAction(InventoryAction *a){}
 };
 
-#define IACTION_MOVE 0
-#define IACTION_DROP 1
-#define IACTION_CRAFT 2
+enum class IAction : u16 {
+       Move,
+       Drop,
+       Craft
+};
 
 struct InventoryAction
 {
-       static InventoryAction * deSerialize(std::istream &is);
+       static InventoryAction *deSerialize(std::istream &is);
 
-       virtual u16 getType() const = 0;
+       virtual IAction getType() const = 0;
        virtual void serialize(std::ostream &os) const = 0;
        virtual void apply(InventoryManager *mgr, ServerActiveObject *player,
                        IGameDef *gamedef) = 0;
@@ -136,35 +138,27 @@ struct InventoryAction
 struct IMoveAction : public InventoryAction
 {
        // count=0 means "everything"
-       u16 count;
+       u16 count = 0;
        InventoryLocation from_inv;
        std::string from_list;
-       s16 from_i;
+       s16 from_i = -1;
        InventoryLocation to_inv;
        std::string to_list;
-       s16 to_i;
-       bool move_somewhere;
+       s16 to_i = -1;
+       bool move_somewhere = false;
 
        // treat these as private
        // related to movement to somewhere
-       bool caused_by_move_somewhere;
-       u32 move_count;
+       bool caused_by_move_somewhere = false;
+       u32 move_count = 0;
 
-       IMoveAction()
-       {
-               count = 0;
-               from_i = -1;
-               to_i = -1;
-               move_somewhere = false;
-               caused_by_move_somewhere = false;
-               move_count = 0;
-       }
+       IMoveAction() {}
 
        IMoveAction(std::istream &is, bool somewhere);
 
-       u16 getType() const
+       IAction getType() const
        {
-               return IACTION_MOVE;
+               return IAction::Move;
        }
 
        void serialize(std::ostream &os) const
@@ -191,22 +185,18 @@ struct IMoveAction : public InventoryAction
 struct IDropAction : public InventoryAction
 {
        // count=0 means "everything"
-       u16 count;
+       u16 count = 0;
        InventoryLocation from_inv;
        std::string from_list;
-       s16 from_i;
+       s16 from_i = -1;
 
-       IDropAction()
-       {
-               count = 0;
-               from_i = -1;
-       }
+       IDropAction() {}
 
        IDropAction(std::istream &is);
 
-       u16 getType() const
+       IAction getType() const
        {
-               return IACTION_DROP;
+               return IAction::Drop;
        }
 
        void serialize(std::ostream &os) const
@@ -226,19 +216,16 @@ struct IDropAction : public InventoryAction
 struct ICraftAction : public InventoryAction
 {
        // count=0 means "everything"
-       u16 count;
+       u16 count = 0;
        InventoryLocation craft_inv;
 
-       ICraftAction()
-       {
-               count = 0;
-       }
+       ICraftAction() {}
 
        ICraftAction(std::istream &is);
 
-       u16 getType() const
+       IAction getType() const
        {
-               return IACTION_CRAFT;
+               return IAction::Craft;
        }
 
        void serialize(std::ostream &os) const
@@ -254,7 +241,7 @@ struct ICraftAction : public InventoryAction
 };
 
 // Crafting helper
-bool getCraftingResult(Inventory *inv, ItemStackresult,
+bool getCraftingResult(Inventory *inv, ItemStack &result,
                std::vector<ItemStack> &output_replacements,
                bool decrementInput, IGameDef *gamedef);
 
index da421b36d32e81231d26c942ac9608eee5aa3ae9..a2882b2e70198eec089eb3c910750c10d6722166 100644 (file)
@@ -908,7 +908,7 @@ void Server::handleCommand_InventoryAction(NetworkPacket* pkt)
        std::istringstream is(datastring, std::ios_base::binary);
        // Create an action
        InventoryAction *a = InventoryAction::deSerialize(is);
-       if (a == NULL) {
+       if (!a) {
                infostream << "TOSERVER_INVENTORY_ACTION: "
                                << "InventoryAction::deSerialize() returned NULL"
                                << std::endl;
@@ -927,7 +927,7 @@ void Server::handleCommand_InventoryAction(NetworkPacket* pkt)
        /*
                Handle restrictions and special cases of the move action
        */
-       if (a->getType() == IACTION_MOVE) {
+       if (a->getType() == IAction::Move) {
                IMoveAction *ma = (IMoveAction*)a;
 
                ma->from_inv.applyCurrentPlayer(player->getName());
@@ -982,7 +982,7 @@ void Server::handleCommand_InventoryAction(NetworkPacket* pkt)
        /*
                Handle restrictions and special cases of the drop action
        */
-       else if (a->getType() == IACTION_DROP) {
+       else if (a->getType() == IAction::Drop) {
                IDropAction *da = (IDropAction*)a;
 
                da->from_inv.applyCurrentPlayer(player->getName());
@@ -1018,7 +1018,7 @@ void Server::handleCommand_InventoryAction(NetworkPacket* pkt)
        /*
                Handle restrictions and special cases of the craft action
        */
-       else if (a->getType() == IACTION_CRAFT) {
+       else if (a->getType() == IAction::Craft) {
                ICraftAction *ca = (ICraftAction*)a;
 
                ca->craft_inv.applyCurrentPlayer(player->getName());