diff options
author | Erik Schilling <ablu.erikschilling@googlemail.com> | 2011-07-28 20:27:13 +0200 |
---|---|---|
committer | Yohann Ferreira <yohann_dot_ferreira_at_orange_dot_efer> | 2011-08-03 20:16:47 +0200 |
commit | 23f2c4c4ac4f81f0410f26bfcb7fde8c640be684 (patch) | |
tree | a22b485016ffac08ba47be02deff1cc3eead04b8 | |
parent | 17e800c6edd889c6b7b4826adb944ab32a45f1b2 (diff) | |
download | manaserv-23f2c4c4ac4f81f0410f26bfcb7fde8c640be684.tar.gz manaserv-23f2c4c4ac4f81f0410f26bfcb7fde8c640be684.tar.bz2 manaserv-23f2c4c4ac4f81f0410f26bfcb7fde8c640be684.tar.xz manaserv-23f2c4c4ac4f81f0410f26bfcb7fde8c640be684.zip |
Added monster_remove lua function.
mana.monster_remove(monster) can now be used to remove a monster
from a map.
Resolves: Mana-Mantis #352.
Reviewed-by: Bertram.
-rw-r--r-- | example/serverdata/scripts/maps/desert.lua | 9 | ||||
-rw-r--r-- | src/scripting/lua.cpp | 25 |
2 files changed, 34 insertions, 0 deletions
diff --git a/example/serverdata/scripts/maps/desert.lua b/example/serverdata/scripts/maps/desert.lua index 7449192d..23b95350 100644 --- a/example/serverdata/scripts/maps/desert.lua +++ b/example/serverdata/scripts/maps/desert.lua @@ -89,6 +89,15 @@ function Tamer(npc, ch, list) mana.get_distance(npc, ch))) mana.being_say(npc, "I will now spawn a monster for your training session.") + -- Remove monsters in the area + for i, b in ipairs(mana.get_beings_in_rectangle( + mana.posX(npc) - 3 * TILESIZE, mana.posY(npc) - 3 * TILESIZE, + 6 * TILESIZE, 6 * TILESIZE)) do + if mana.being_type(b) == TYPE_MONSTER then + mana.monster_remove(b) + end + end + local m1 = mana.monster_create(1, mana.posX(ch), mana.posY(ch)) schedule_in(0.5, function() mana.being_say(m1, "Roaaarrrr!!!") end) end diff --git a/src/scripting/lua.cpp b/src/scripting/lua.cpp index 553c8593..c3a38bf9 100644 --- a/src/scripting/lua.cpp +++ b/src/scripting/lua.cpp @@ -1019,6 +1019,30 @@ static int monster_create(lua_State *s) } /** + * mana.monster_remove(mob) + * Remove a monster object without kill event. + * return whether the monster was enqueued for removal. + */ +static int monster_remove(lua_State *s) +{ + if (!lua_islightuserdata(s, 1)) + { + lua_pushboolean(s, false); + return 1; + } + + bool monsterEnqueued = false; + Monster *m = dynamic_cast<Monster *>((Thing *)lua_touserdata(s, 1)); + if (m) + { + GameState::enqueueRemove(m); + monsterEnqueued = true; + } + lua_pushboolean(s, monsterEnqueued); + return 1; +} + +/** * mana.monster_load_script(mob, scriptfilename) * loads a LUA script given for mob */ @@ -1951,6 +1975,7 @@ LuaScript::LuaScript(): { "chr_take_special", &chr_take_special }, { "exp_for_level", &exp_for_level }, { "monster_create", &monster_create }, + { "monster_remove", &monster_remove }, { "monster_load_script", &monster_load_script }, { "being_apply_status", &being_apply_status }, { "being_remove_status", &being_remove_status }, |