forked from Mirrorlandia_minetest/minetest
Inventory: show error on invalid list names (#11368)
This commit is contained in:
parent
b10091be9b
commit
2db6b07de1
@ -298,6 +298,7 @@ public:
|
|||||||
void serialize(std::ostream &os, bool incremental = false) const;
|
void serialize(std::ostream &os, bool incremental = false) const;
|
||||||
void deSerialize(std::istream &is);
|
void deSerialize(std::istream &is);
|
||||||
|
|
||||||
|
// Adds a new list or clears and resizes an existing one
|
||||||
InventoryList * addList(const std::string &name, u32 size);
|
InventoryList * addList(const std::string &name, u32 size);
|
||||||
InventoryList * getList(const std::string &name);
|
InventoryList * getList(const std::string &name);
|
||||||
const InventoryList * getList(const std::string &name) const;
|
const InventoryList * getList(const std::string &name) const;
|
||||||
|
@ -1350,26 +1350,28 @@ void read_inventory_list(lua_State *L, int tableindex,
|
|||||||
{
|
{
|
||||||
if(tableindex < 0)
|
if(tableindex < 0)
|
||||||
tableindex = lua_gettop(L) + 1 + tableindex;
|
tableindex = lua_gettop(L) + 1 + tableindex;
|
||||||
|
|
||||||
// If nil, delete list
|
// If nil, delete list
|
||||||
if(lua_isnil(L, tableindex)){
|
if(lua_isnil(L, tableindex)){
|
||||||
inv->deleteList(name);
|
inv->deleteList(name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Otherwise set list
|
|
||||||
|
// Get Lua-specified items to insert into the list
|
||||||
std::vector<ItemStack> items = read_items(L, tableindex,srv);
|
std::vector<ItemStack> items = read_items(L, tableindex,srv);
|
||||||
int listsize = (forcesize != -1) ? forcesize : items.size();
|
size_t listsize = (forcesize > 0) ? forcesize : items.size();
|
||||||
|
|
||||||
|
// Create or clear list
|
||||||
InventoryList *invlist = inv->addList(name, listsize);
|
InventoryList *invlist = inv->addList(name, listsize);
|
||||||
int index = 0;
|
if (!invlist) {
|
||||||
for(std::vector<ItemStack>::const_iterator
|
luaL_error(L, "inventory list: cannot create list named '%s'", name);
|
||||||
i = items.begin(); i != items.end(); ++i){
|
return;
|
||||||
if(forcesize != -1 && index == forcesize)
|
|
||||||
break;
|
|
||||||
invlist->changeItem(index, *i);
|
|
||||||
index++;
|
|
||||||
}
|
}
|
||||||
while(forcesize != -1 && index < forcesize){
|
|
||||||
invlist->deleteItem(index);
|
for (size_t i = 0; i < items.size(); ++i) {
|
||||||
index++;
|
if (i == listsize)
|
||||||
|
break; // Truncate provided list of items
|
||||||
|
invlist->changeItem(i, items[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user