Add InvRef:get_list() and InvRef:set_list() and fix some things (untested)
authorPerttu Ahola <celeron55@gmail.com>
Tue, 6 Dec 2011 14:22:08 +0000 (16:22 +0200)
committerPerttu Ahola <celeron55@gmail.com>
Mon, 2 Jan 2012 00:59:14 +0000 (02:59 +0200)
src/scriptapi.cpp

index f30aab41cd3226255f4639c0c0d53b42ba2d7449..101e0789458d8f302c7a5fafed5a27020582a68a 100644 (file)
@@ -1042,6 +1042,7 @@ private:
                Inventory *inv = getinv(L, ref);
                if(newsize == 0){
                        inv->deleteList(listname);
+                       reportInventoryChange(L, ref);
                        return 0;
                }
                InventoryList *list = inv->getList(listname);
@@ -1050,6 +1051,7 @@ private:
                } else {
                        list = inv->addList(listname, newsize);
                }
+               reportInventoryChange(L, ref);
                return 0;
        }
 
@@ -1085,9 +1087,37 @@ private:
                bool success = (olditem != newitem);
                delete olditem;
                lua_pushboolean(L, success);
+               reportInventoryChange(L, ref);
                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:
        InvRef(const InventoryLocation &loc):
                m_loc(loc)
@@ -1154,6 +1184,8 @@ const luaL_reg InvRef::methods[] = {
        method(InvRef, set_size),
        method(InvRef, get_stack),
        method(InvRef, set_stack),
+       method(InvRef, get_list),
+       method(InvRef, set_list),
        {0,0}
 };