Lua: allow obj chain iteration
This commit is contained in:
10
doc/lua.adoc
10
doc/lua.adoc
@@ -1068,11 +1068,17 @@ Example:
|
|||||||
=== next
|
=== next
|
||||||
|
|
||||||
Get the next object in the object chain.
|
Get the next object in the object chain.
|
||||||
|
When called without an object, returns the first object in the object chain.
|
||||||
|
When called with an object, an optional boolean parameter can be given. When
|
||||||
|
it is true, and the object is on the map, the next object at the same location
|
||||||
|
is returned. Otherwise the normal object chain is followed.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
local o = obj.at(x, y);
|
local first = obj.next();
|
||||||
local o2 = o:next();
|
local second = first:next();
|
||||||
|
local o_at_xy = obj.at(x, y);
|
||||||
|
local next_at_xy = o_at_xy:next(true);
|
||||||
|
|
||||||
|
|
||||||
=== totable
|
=== totable
|
||||||
|
|||||||
21
src/nhlobj.c
21
src/nhlobj.c
@@ -399,15 +399,28 @@ l_obj_placeobj(lua_State *L)
|
|||||||
|
|
||||||
/* Get the next object in the object chain */
|
/* Get the next object in the object chain */
|
||||||
/* local o = obj.at(x, y);
|
/* local o = obj.at(x, y);
|
||||||
local o2 = o:next();
|
local o2 = o:next(true);
|
||||||
|
local firstobj = obj.next();
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
l_obj_nextobj(lua_State *L)
|
l_obj_nextobj(lua_State *L)
|
||||||
{
|
{
|
||||||
struct _lua_obj *lo = l_obj_check(L, 1);
|
int argc = lua_gettop(L);
|
||||||
|
|
||||||
if (lo && lo->obj)
|
if (argc == 0) {
|
||||||
(void) l_obj_push(L, lo->obj->where == OBJ_FLOOR ? lo->obj->nexthere : lo->obj->nobj);
|
(void) l_obj_push(L, fobj);
|
||||||
|
} else {
|
||||||
|
struct _lua_obj *lo = l_obj_check(L, 1);
|
||||||
|
boolean use_nexthere = FALSE;
|
||||||
|
|
||||||
|
if (argc == 2)
|
||||||
|
use_nexthere = lua_toboolean(L, 2);
|
||||||
|
|
||||||
|
if (lo && lo->obj)
|
||||||
|
(void) l_obj_push(L, (use_nexthere && lo->obj->where == OBJ_FLOOR)
|
||||||
|
? lo->obj->nexthere
|
||||||
|
: lo->obj->nobj);
|
||||||
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user