Enforce PLAYER_INVENTORY_SIZE in ObjectRef::l_inventory_set_list

master
Perttu Ahola 2011-12-02 02:01:46 +02:00
parent 09010410cf
commit a416cf7c45
1 changed files with 10 additions and 3 deletions

View File

@ -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;
}