From: Perttu Ahola Date: Fri, 2 Dec 2011 00:01:46 +0000 (+0200) Subject: Enforce PLAYER_INVENTORY_SIZE in ObjectRef::l_inventory_set_list X-Git-Url: http://81.2.79.47:8989/gitweb/?a=commitdiff_plain;h=a416cf7c45d6e23811d4de5a460caf977771eb53;p=zefram%2Fminetest%2Fminetest_engine.git Enforce PLAYER_INVENTORY_SIZE in ObjectRef::l_inventory_set_list --- diff --git a/src/scriptapi.cpp b/src/scriptapi.cpp index 40e31bb9..359c1448 100644 --- a/src/scriptapi.cpp +++ b/src/scriptapi.cpp @@ -400,7 +400,7 @@ static void setfloatfield(lua_State *L, int table, */ 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(lua_isnil(L, tableindex)){ @@ -424,6 +424,8 @@ static void inventory_set_list_from_lua(Inventory *inv, const char *name, int index = 0; for(std::list::const_iterator i = items.begin(); i != items.end(); i++){ + if(forcesize != -1 && index == forcesize) + break; const std::string &itemstring = *i; InventoryItem *newitem = NULL; if(itemstring != "") @@ -433,6 +435,11 @@ static void inventory_set_list_from_lua(Inventory *inv, const char *name, delete olditem; 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, @@ -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); if(item == NULL){ - lua_pushnil(L); + lua_pushstring(L, ""); } else { lua_pushstring(L, item->getItemString().c_str()); } @@ -1970,7 +1977,7 @@ private: const char *name = lua_tostring(L, 2); // Do it 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; return 0; }