diff options
Diffstat (limited to 'src/scripting')
-rw-r--r-- | src/scripting/lua.cpp | 22 | ||||
-rw-r--r-- | src/scripting/luascript.cpp | 8 |
2 files changed, 27 insertions, 3 deletions
diff --git a/src/scripting/lua.cpp b/src/scripting/lua.cpp index 5053070a..a416771f 100644 --- a/src/scripting/lua.cpp +++ b/src/scripting/lua.cpp @@ -161,6 +161,26 @@ static int on_get_special_recharge_cost(lua_State *s) return 0; } +static int on_mapvar_changed(lua_State *s) +{ + const char *key = luaL_checkstring(s, 1); + luaL_checktype(s, 2, LUA_TFUNCTION); + luaL_argcheck(s, key[0] != 0, 2, "empty variable name"); + MapComposite *m = checkCurrentMap(s); + m->setMapVariableCallback(key, getScript(s)); + return 0; +} + +static int on_worldvar_changed(lua_State *s) +{ + const char *key = luaL_checkstring(s, 1); + luaL_checktype(s, 2, LUA_TFUNCTION); + luaL_argcheck(s, key[0] != 0, 2, "empty variable name"); + MapComposite *m = checkCurrentMap(s); + m->setWorldVariableCallback(key, getScript(s)); + return 0; +} + static int get_item_class(lua_State *s) { LuaItemClass::push(s, checkItemClass(s, 1)); @@ -2139,6 +2159,8 @@ LuaScript::LuaScript(): { "on_craft", &on_craft }, { "on_use_special", &on_use_special }, { "on_get_special_recharge_cost", &on_get_special_recharge_cost }, + { "on_mapvar_changed", &on_mapvar_changed }, + { "on_worldvar_changed", &on_worldvar_changed }, { "get_item_class", &get_item_class }, { "get_monster_class", &get_monster_class }, { "get_status_effect", &get_status_effect }, diff --git a/src/scripting/luascript.cpp b/src/scripting/luascript.cpp index dfa64d0f..e45588b9 100644 --- a/src/scripting/luascript.cpp +++ b/src/scripting/luascript.cpp @@ -118,10 +118,11 @@ void LuaScript::push(const std::list<InventoryItem> &itemList) int LuaScript::execute() { assert(nbArgs >= 0); - assert(!mCurrentThread); - int res = lua_pcall(mCurrentState, nbArgs, 1, 1); + + const int tmpNbArgs = nbArgs; nbArgs = -1; + int res = lua_pcall(mCurrentState, tmpNbArgs, 1, 1); if (res || !(lua_isnil(mCurrentState, -1) || lua_isnumber(mCurrentState, -1))) { @@ -144,8 +145,9 @@ bool LuaScript::resume() assert(mCurrentThread); setMap(mCurrentThread->mMap); - int result = lua_resume(mCurrentState, nbArgs); + const int tmpNbArgs = nbArgs; nbArgs = -1; + int result = lua_resume(mCurrentState, tmpNbArgs); setMap(0); if (result == 0) // Thread is done |