Inventory: Fix wrong stack size behaviour and item loss (#6039)
authorSmallJoker <SmallJoker@users.noreply.github.com>
Sun, 25 Jun 2017 09:39:39 +0000 (11:39 +0200)
committerGitHub <noreply@github.com>
Sun, 25 Jun 2017 09:39:39 +0000 (11:39 +0200)
Also fix itemFits and remove constness-nonsense

src/database-postgresql.cpp
src/database-sqlite3.cpp
src/inventory.cpp
src/inventory.h

index ac25afd4838b8765b2ed68bd4e5c7236645d533f..3c54f48d1e8318a50e43e4cba82153b4eb127933 100644 (file)
@@ -584,7 +584,7 @@ bool PlayerDatabasePostgreSQL::loadPlayer(RemotePlayer *player, PlayerSAO *sao)
                        if (itemStr.length() > 0) {
                                ItemStack stack;
                                stack.deSerialize(itemStr);
-                               invList->addItem(pg_to_uint(results2, row2, 0), stack);
+                               invList->changeItem(pg_to_uint(results2, row2, 0), stack);
                        }
                }
                PQclear(results2);
index 22765c8d22cb4e4446080c3295d434810ec80b82..77451fadbe79ae7a410d72b13f3899ab8932b71e 100644 (file)
@@ -565,7 +565,7 @@ bool PlayerDatabaseSQLite3::loadPlayer(RemotePlayer *player, PlayerSAO *sao)
                        if (itemStr.length() > 0) {
                                ItemStack stack;
                                stack.deSerialize(itemStr);
-                               invList->addItem(sqlite_to_uint(m_stmt_player_load_inventory_items, 0), stack);
+                               invList->changeItem(sqlite_to_uint(m_stmt_player_load_inventory_items, 0), stack);
                        }
                }
                sqlite3_reset(m_stmt_player_load_inventory_items);
index 24eebba808c156f6d21f39484101386b0ab9196d..4da380a249b06f58700b3b895b1080c63093c851 100644 (file)
@@ -254,11 +254,8 @@ std::string ItemStack::getItemString() const
 }
 
 
-ItemStack ItemStack::addItem(const ItemStack &newitem_,
-               IItemDefManager *itemdef)
+ItemStack ItemStack::addItem(ItemStack newitem, IItemDefManager *itemdef)
 {
-       ItemStack newitem = newitem_;
-
        // If the item is empty or the position invalid, bail out
        if(newitem.empty())
        {
@@ -267,7 +264,7 @@ ItemStack ItemStack::addItem(const ItemStack &newitem_,
        // If this is an empty item, it's an easy job.
        else if(empty())
        {
-               const u16 stackMax = getStackMax(itemdef);
+               const u16 stackMax = newitem.getStackMax(itemdef);
 
                *this = newitem;
 
@@ -303,11 +300,10 @@ ItemStack ItemStack::addItem(const ItemStack &newitem_,
        return newitem;
 }
 
-bool ItemStack::itemFits(const ItemStack &newitem_,
+bool ItemStack::itemFits(ItemStack newitem,
                ItemStack *restitem,
                IItemDefManager *itemdef) const
 {
-       ItemStack newitem = newitem_;
 
        // If the item is empty or the position invalid, bail out
        if(newitem.empty())
@@ -317,7 +313,7 @@ bool ItemStack::itemFits(const ItemStack &newitem_,
        // If this is an empty item, it's an easy job.
        else if(empty())
        {
-               const u16 stackMax = getStackMax(itemdef);
+               const u16 stackMax = newitem.getStackMax(itemdef);
 
                // If the item fits fully, delete it
                if (newitem.count <= stackMax) {
index 04c8156c8f8d9518b270ba93f457b2429687e8cb..2f8757f1cc333edab10ebf1f85dab9b2e7a49436 100644 (file)
@@ -143,13 +143,12 @@ struct ItemStack
        // If cannot be added at all, returns the item back.
        // If can be added partly, decremented item is returned back.
        // If can be added fully, empty item is returned.
-       ItemStack addItem(const ItemStack &newitem,
-                       IItemDefManager *itemdef);
+       ItemStack addItem(ItemStack newitem, IItemDefManager *itemdef);
 
        // Checks whether newitem could be added.
        // If restitem is non-NULL, it receives the part of newitem that
        // would be left over after adding.
-       bool itemFits(const ItemStack &newitem,
+       bool itemFits(ItemStack newitem,
                        ItemStack *restitem,  // may be NULL
                        IItemDefManager *itemdef) const;