forked from Mirrorlandia_minetest/minetest
Enforce PLAYER_INVENTORY_SIZE in ObjectRef::l_inventory_set_list
This commit is contained in:
parent
09010410cf
commit
a416cf7c45
@ -400,7 +400,7 @@ static void setfloatfield(lua_State *L, int table,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
static void inventory_set_list_from_lua(Inventory *inv, const char *name,
|
static void inventory_set_list_from_lua(Inventory *inv, const char *name,
|
||||||
lua_State *L, int tableindex, IGameDef *gamedef)
|
lua_State *L, int tableindex, IGameDef *gamedef, int forcesize=-1)
|
||||||
{
|
{
|
||||||
// If nil, delete list
|
// If nil, delete list
|
||||||
if(lua_isnil(L, tableindex)){
|
if(lua_isnil(L, tableindex)){
|
||||||
@ -424,6 +424,8 @@ static void inventory_set_list_from_lua(Inventory *inv, const char *name,
|
|||||||
int index = 0;
|
int index = 0;
|
||||||
for(std::list<std::string>::const_iterator
|
for(std::list<std::string>::const_iterator
|
||||||
i = items.begin(); i != items.end(); i++){
|
i = items.begin(); i != items.end(); i++){
|
||||||
|
if(forcesize != -1 && index == forcesize)
|
||||||
|
break;
|
||||||
const std::string &itemstring = *i;
|
const std::string &itemstring = *i;
|
||||||
InventoryItem *newitem = NULL;
|
InventoryItem *newitem = NULL;
|
||||||
if(itemstring != "")
|
if(itemstring != "")
|
||||||
@ -433,6 +435,11 @@ static void inventory_set_list_from_lua(Inventory *inv, const char *name,
|
|||||||
delete olditem;
|
delete olditem;
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
while(forcesize != -1 && index < forcesize){
|
||||||
|
InventoryItem *olditem = invlist->changeItem(index, NULL);
|
||||||
|
delete olditem;
|
||||||
|
index++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void inventory_get_list_to_lua(Inventory *inv, const char *name,
|
static void inventory_get_list_to_lua(Inventory *inv, const char *name,
|
||||||
@ -455,7 +462,7 @@ static void inventory_get_list_to_lua(Inventory *inv, const char *name,
|
|||||||
lua_pushvalue(L, table_insert);
|
lua_pushvalue(L, table_insert);
|
||||||
lua_pushvalue(L, table);
|
lua_pushvalue(L, table);
|
||||||
if(item == NULL){
|
if(item == NULL){
|
||||||
lua_pushnil(L);
|
lua_pushstring(L, "");
|
||||||
} else {
|
} else {
|
||||||
lua_pushstring(L, item->getItemString().c_str());
|
lua_pushstring(L, item->getItemString().c_str());
|
||||||
}
|
}
|
||||||
@ -1970,7 +1977,7 @@ private:
|
|||||||
const char *name = lua_tostring(L, 2);
|
const char *name = lua_tostring(L, 2);
|
||||||
// Do it
|
// Do it
|
||||||
inventory_set_list_from_lua(&player->inventory, name, L, 3,
|
inventory_set_list_from_lua(&player->inventory, name, L, 3,
|
||||||
player->getEnv()->getGameDef());
|
player->getEnv()->getGameDef(), PLAYER_INVENTORY_SIZE);
|
||||||
player->m_inventory_not_sent = true;
|
player->m_inventory_not_sent = true;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user