summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Schilling <ablu.erikschilling@googlemail.com>2011-07-28 20:27:13 +0200
committerYohann Ferreira <yohann_dot_ferreira_at_orange_dot_efer>2011-08-03 20:16:47 +0200
commit23f2c4c4ac4f81f0410f26bfcb7fde8c640be684 (patch)
treea22b485016ffac08ba47be02deff1cc3eead04b8
parent17e800c6edd889c6b7b4826adb944ab32a45f1b2 (diff)
downloadmanaserv-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.lua9
-rw-r--r--src/scripting/lua.cpp25
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 },