summaryrefslogtreecommitdiff
path: root/src/scripting/lua.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/scripting/lua.cpp')
-rw-r--r--src/scripting/lua.cpp27
1 files changed, 15 insertions, 12 deletions
diff --git a/src/scripting/lua.cpp b/src/scripting/lua.cpp
index 59e7d2e1..9bd35ddd 100644
--- a/src/scripting/lua.cpp
+++ b/src/scripting/lua.cpp
@@ -1681,10 +1681,10 @@ static int chr_set_quest(lua_State *s)
}
/**
- * mana.trigger_create(int x, int y, int width, int height,
- * string function, int id)
- * Creates a trigger area. Whenever an actor enters this area, a Lua function
- * is called.
+ * mana.trigger_create(int x, int y, int width, int height, function, int id,
+ * boolean once)
+ * Creates a trigger area. Whenever an actor enters this area, the given Lua
+ * function is called.
*/
static int trigger_create(lua_State *s)
{
@@ -1692,8 +1692,7 @@ static int trigger_create(lua_State *s)
const int y = luaL_checkint(s, 2);
const int width = luaL_checkint(s, 3);
const int height = luaL_checkint(s, 4);
- //TODO: Turn the function string to a lua function pointer
- const char *function = luaL_checkstring(s, 5);
+ luaL_checktype(s, 5, LUA_TFUNCTION);
const int id = luaL_checkint(s, 6);
if (!lua_isboolean(s, 7))
@@ -1703,12 +1702,6 @@ static int trigger_create(lua_State *s)
}
Script *script = getScript(s);
- bool once = lua_toboolean(s, 7);
-
- LOG_INFO("Created script trigger at " << x << ":" << y
- << " (" << width << "x" << height << ") function: " << function
- << " (" << id << ")");
-
MapComposite *m = script->getMap();
if (!m)
@@ -1717,10 +1710,20 @@ static int trigger_create(lua_State *s)
return 0;
}
+ const bool once = lua_toboolean(s, 7);
+
+ Script::Ref function;
+ lua_pushvalue(s, 5);
+ script->assignCallback(function);
+ lua_pop(s, 1);
+
ScriptAction *action = new ScriptAction(script, function, id);
Rectangle r = { x, y, width, height };
TriggerArea *area = new TriggerArea(m, r, action, once);
+ LOG_INFO("Created script trigger at " << x << "," << y
+ << " (" << width << "x" << height << ") id: " << id);
+
bool ret = GameState::insert(area);
lua_pushboolean(s, ret);
return 1;