From f2fd4432625ee5cf0380bdd006cd1f15d053b12f Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Wed, 30 Jun 2021 20:39:38 +0200 Subject: [PATCH] Inventory: Make addList() consistent (#11382) Fixes list clearing for inv:set_list() using same size, since 2db6b07. addList() now clears the list in all cases. Use setSize() to resize without clearing. --- src/inventory.cpp | 15 ++++++--------- src/inventory.h | 2 +- src/script/common/c_content.cpp | 4 ++-- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/inventory.cpp b/src/inventory.cpp index fc1aaf371..b3bed623a 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -938,19 +938,16 @@ void Inventory::deSerialize(std::istream &is) InventoryList * Inventory::addList(const std::string &name, u32 size) { setModified(); + + // Remove existing lists s32 i = getListIndex(name); - if(i != -1) - { - if(m_lists[i]->getSize() != size) - { - delete m_lists[i]; - m_lists[i] = new InventoryList(name, size, m_itemdef); - m_lists[i]->setModified(); - } + if (i != -1) { + delete m_lists[i]; + m_lists[i] = new InventoryList(name, size, m_itemdef); + m_lists[i]->setModified(); return m_lists[i]; } - //don't create list with invalid name if (name.find(' ') != std::string::npos) return nullptr; diff --git a/src/inventory.h b/src/inventory.h index fbf995fab..6c84f5fd1 100644 --- a/src/inventory.h +++ b/src/inventory.h @@ -298,7 +298,7 @@ public: void serialize(std::ostream &os, bool incremental = false) const; void deSerialize(std::istream &is); - // Adds a new list or clears and resizes an existing one + // Creates a new list if none exists or truncates existing lists InventoryList * addList(const std::string &name, u32 size); InventoryList * getList(const std::string &name); const InventoryList * getList(const std::string &name) const; diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp index f8cc40927..a0b45982a 100644 --- a/src/script/common/c_content.cpp +++ b/src/script/common/c_content.cpp @@ -1359,9 +1359,9 @@ void read_inventory_list(lua_State *L, int tableindex, // Get Lua-specified items to insert into the list std::vector items = read_items(L, tableindex,srv); - size_t listsize = (forcesize > 0) ? forcesize : items.size(); + size_t listsize = (forcesize >= 0) ? forcesize : items.size(); - // Create or clear list + // Create or resize/clear list InventoryList *invlist = inv->addList(name, listsize); if (!invlist) { luaL_error(L, "inventory list: cannot create list named '%s'", name);