Add InvRef:get_list() and InvRef:set_list() and fix some things (untested)

This commit is contained in:
Perttu Ahola 2011-12-06 16:22:08 +02:00
parent e0b4890794
commit 270a482740

@ -1042,6 +1042,7 @@ private:
Inventory *inv = getinv(L, ref); Inventory *inv = getinv(L, ref);
if(newsize == 0){ if(newsize == 0){
inv->deleteList(listname); inv->deleteList(listname);
reportInventoryChange(L, ref);
return 0; return 0;
} }
InventoryList *list = inv->getList(listname); InventoryList *list = inv->getList(listname);
@ -1050,6 +1051,7 @@ private:
} else { } else {
list = inv->addList(listname, newsize); list = inv->addList(listname, newsize);
} }
reportInventoryChange(L, ref);
return 0; return 0;
} }
@ -1085,9 +1087,37 @@ private:
bool success = (olditem != newitem); bool success = (olditem != newitem);
delete olditem; delete olditem;
lua_pushboolean(L, success); lua_pushboolean(L, success);
reportInventoryChange(L, ref);
return 1; return 1;
} }
// get_list(self, listname) -> list or nil
static int l_get_list(lua_State *L)
{
InvRef *ref = checkobject(L, 1);
const char *listname = luaL_checkstring(L, 2);
Inventory *inv = getinv(L, ref);
inventory_get_list_to_lua(inv, listname, L);
return 1;
}
// set_list(self, listname, list)
static int l_set_list(lua_State *L)
{
InvRef *ref = checkobject(L, 1);
const char *listname = luaL_checkstring(L, 2);
Inventory *inv = getinv(L, ref);
InventoryList *list = inv->getList(listname);
if(list)
inventory_set_list_from_lua(inv, listname, L, 3,
get_server(L), list->getSize());
else
inventory_set_list_from_lua(inv, listname, L, 3,
get_server(L));
reportInventoryChange(L, ref);
return 0;
}
public: public:
InvRef(const InventoryLocation &loc): InvRef(const InventoryLocation &loc):
m_loc(loc) m_loc(loc)
@ -1154,6 +1184,8 @@ const luaL_reg InvRef::methods[] = {
method(InvRef, set_size), method(InvRef, set_size),
method(InvRef, get_stack), method(InvRef, get_stack),
method(InvRef, set_stack), method(InvRef, set_stack),
method(InvRef, get_list),
method(InvRef, set_list),
{0,0} {0,0}
}; };