From e17c1cb70c27a2262ad684403fc5500962226699 Mon Sep 17 00:00:00 2001 From: Jude Brown Date: Thu, 5 Nov 2009 11:39:54 +1000 Subject: Fix up MDEFN closures, add random monster teleport wrapper. MDEFN was currently hardcoded to wrap l_mons_do_dismiss, fixed (greensnark). Provide a wrapper for instant random teleport of monsters (restricted to dlua). --- crawl-ref/source/l_mons.cc | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'crawl-ref/source/l_mons.cc') diff --git a/crawl-ref/source/l_mons.cc b/crawl-ref/source/l_mons.cc index 65d72c4ab4..8ace3eb119 100644 --- a/crawl-ref/source/l_mons.cc +++ b/crawl-ref/source/l_mons.cc @@ -33,7 +33,7 @@ void push_monster(lua_State *ls, monsters *mons) static int l_mons_##name(lua_State *ls, monsters *mons, const char *attrs) \ { \ lua_pushlightuserdata(ls, mons); \ - lua_pushcclosure(ls, l_mons_do_dismiss, 1); \ + lua_pushcclosure(ls, l_mons_##closure, 1); \ return (1); \ } @@ -115,6 +115,22 @@ static int l_mons_do_dismiss(lua_State *ls) MDEFN(dismiss, do_dismiss) +static int l_mons_do_random_teleport(lua_State *ls) +{ + // We should only be able to teleport monsters from dlua. + ASSERT_DLUA; + + monsters *mons = + util_get_userdata(ls, lua_upvalueindex(1)); + if (mons->alive()) + { + mons->teleport(true); + } + return (0); +} + +MDEFN(random_teleport, do_random_teleport) + MDEF(experience) { ASSERT_DLUA; @@ -137,6 +153,7 @@ static MonsAccessor mons_attrs[] = { "meat", l_mons_meat }, { "dismiss", l_mons_dismiss }, { "experience", l_mons_experience }, + { "random_teleport", l_mons_random_teleport } }; static int monster_get(lua_State *ls) -- cgit v1.2.3-54-g00ecf