Enforce PLAYER_INVENTORY_SIZE in ObjectRef::l_inventory_set_list

This commit is contained in:
Perttu Ahola 2011-12-02 02:01:46 +02:00
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;
} }