mirror of
https://github.com/minetest/minetest.git
synced 2024-11-27 10:03:45 +01:00
Inventory: Fix wrong stack size behaviour and item loss (#6039)
Also fix itemFits and remove constness-nonsense
This commit is contained in:
parent
cad10ce3b7
commit
c08cc0533f
@ -584,7 +584,7 @@ bool PlayerDatabasePostgreSQL::loadPlayer(RemotePlayer *player, PlayerSAO *sao)
|
|||||||
if (itemStr.length() > 0) {
|
if (itemStr.length() > 0) {
|
||||||
ItemStack stack;
|
ItemStack stack;
|
||||||
stack.deSerialize(itemStr);
|
stack.deSerialize(itemStr);
|
||||||
invList->addItem(pg_to_uint(results2, row2, 0), stack);
|
invList->changeItem(pg_to_uint(results2, row2, 0), stack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PQclear(results2);
|
PQclear(results2);
|
||||||
|
@ -565,7 +565,7 @@ bool PlayerDatabaseSQLite3::loadPlayer(RemotePlayer *player, PlayerSAO *sao)
|
|||||||
if (itemStr.length() > 0) {
|
if (itemStr.length() > 0) {
|
||||||
ItemStack stack;
|
ItemStack stack;
|
||||||
stack.deSerialize(itemStr);
|
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);
|
sqlite3_reset(m_stmt_player_load_inventory_items);
|
||||||
|
@ -254,11 +254,8 @@ std::string ItemStack::getItemString() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ItemStack ItemStack::addItem(const ItemStack &newitem_,
|
ItemStack ItemStack::addItem(ItemStack newitem, IItemDefManager *itemdef)
|
||||||
IItemDefManager *itemdef)
|
|
||||||
{
|
{
|
||||||
ItemStack newitem = newitem_;
|
|
||||||
|
|
||||||
// If the item is empty or the position invalid, bail out
|
// If the item is empty or the position invalid, bail out
|
||||||
if(newitem.empty())
|
if(newitem.empty())
|
||||||
{
|
{
|
||||||
@ -267,7 +264,7 @@ ItemStack ItemStack::addItem(const ItemStack &newitem_,
|
|||||||
// If this is an empty item, it's an easy job.
|
// If this is an empty item, it's an easy job.
|
||||||
else if(empty())
|
else if(empty())
|
||||||
{
|
{
|
||||||
const u16 stackMax = getStackMax(itemdef);
|
const u16 stackMax = newitem.getStackMax(itemdef);
|
||||||
|
|
||||||
*this = newitem;
|
*this = newitem;
|
||||||
|
|
||||||
@ -303,11 +300,10 @@ ItemStack ItemStack::addItem(const ItemStack &newitem_,
|
|||||||
return newitem;
|
return newitem;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ItemStack::itemFits(const ItemStack &newitem_,
|
bool ItemStack::itemFits(ItemStack newitem,
|
||||||
ItemStack *restitem,
|
ItemStack *restitem,
|
||||||
IItemDefManager *itemdef) const
|
IItemDefManager *itemdef) const
|
||||||
{
|
{
|
||||||
ItemStack newitem = newitem_;
|
|
||||||
|
|
||||||
// If the item is empty or the position invalid, bail out
|
// If the item is empty or the position invalid, bail out
|
||||||
if(newitem.empty())
|
if(newitem.empty())
|
||||||
@ -317,7 +313,7 @@ bool ItemStack::itemFits(const ItemStack &newitem_,
|
|||||||
// If this is an empty item, it's an easy job.
|
// If this is an empty item, it's an easy job.
|
||||||
else if(empty())
|
else if(empty())
|
||||||
{
|
{
|
||||||
const u16 stackMax = getStackMax(itemdef);
|
const u16 stackMax = newitem.getStackMax(itemdef);
|
||||||
|
|
||||||
// If the item fits fully, delete it
|
// If the item fits fully, delete it
|
||||||
if (newitem.count <= stackMax) {
|
if (newitem.count <= stackMax) {
|
||||||
|
@ -143,13 +143,12 @@ struct ItemStack
|
|||||||
// If cannot be added at all, returns the item back.
|
// If cannot be added at all, returns the item back.
|
||||||
// If can be added partly, decremented item is returned back.
|
// If can be added partly, decremented item is returned back.
|
||||||
// If can be added fully, empty item is returned.
|
// If can be added fully, empty item is returned.
|
||||||
ItemStack addItem(const ItemStack &newitem,
|
ItemStack addItem(ItemStack newitem, IItemDefManager *itemdef);
|
||||||
IItemDefManager *itemdef);
|
|
||||||
|
|
||||||
// Checks whether newitem could be added.
|
// Checks whether newitem could be added.
|
||||||
// If restitem is non-NULL, it receives the part of newitem that
|
// If restitem is non-NULL, it receives the part of newitem that
|
||||||
// would be left over after adding.
|
// would be left over after adding.
|
||||||
bool itemFits(const ItemStack &newitem,
|
bool itemFits(ItemStack newitem,
|
||||||
ItemStack *restitem, // may be NULL
|
ItemStack *restitem, // may be NULL
|
||||||
IItemDefManager *itemdef) const;
|
IItemDefManager *itemdef) const;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user