diff options
Diffstat (limited to 'src/scriptapi.cpp')
-rw-r--r-- | src/scriptapi.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/scriptapi.cpp b/src/scriptapi.cpp index 40e31bb9f..359c14482 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<std::string>::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; } |