diff options
author | Jude Brown <bookofjude@users.sourceforge.net> | 2009-11-05 11:39:54 +1000 |
---|---|---|
committer | Jude Brown <bookofjude@users.sourceforge.net> | 2009-11-05 11:49:30 +1000 |
commit | e17c1cb70c27a2262ad684403fc5500962226699 (patch) | |
tree | 83b18677e5eea956ce8b203987a555f8591a0b81 /crawl-ref/source/l_mons.cc | |
parent | a9553d73ed4212fedbdb6a1fa40c545de1f97dc2 (diff) | |
download | crawl-ref-e17c1cb70c27a2262ad684403fc5500962226699.tar.gz crawl-ref-e17c1cb70c27a2262ad684403fc5500962226699.zip |
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).
Diffstat (limited to 'crawl-ref/source/l_mons.cc')
-rw-r--r-- | crawl-ref/source/l_mons.cc | 19 |
1 files changed, 18 insertions, 1 deletions
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<monsters>(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) |