]> git.lizzy.rs Git - minetest.git/blobdiff - src/script/cpp_api/s_env.cpp
Merge pull request #8776 from osjc/FixGetNode
[minetest.git] / src / script / cpp_api / s_env.cpp
index c9b65209650e3f2b6e7d606308036ced91b25436..ab3b5fe464702456d5a1a754054a3f2bf679145f 100644 (file)
@@ -116,12 +116,12 @@ void ScriptApiEnv::initializeEnvironment(ServerEnvironment *env)
                        while (lua_next(L, table)) {
                                // key at index -2 and value at index -1
                                luaL_checktype(L, -1, LUA_TSTRING);
-                               trigger_contents.emplace_back(lua_tostring(L, -1));
+                               trigger_contents.emplace_back(readParam<std::string>(L, -1));
                                // removes value, keeps key for next iteration
                                lua_pop(L, 1);
                        }
                } else if (lua_isstring(L, -1)) {
-                       trigger_contents.emplace_back(lua_tostring(L, -1));
+                       trigger_contents.emplace_back(readParam<std::string>(L, -1));
                }
                lua_pop(L, 1);
 
@@ -133,12 +133,12 @@ void ScriptApiEnv::initializeEnvironment(ServerEnvironment *env)
                        while (lua_next(L, table)) {
                                // key at index -2 and value at index -1
                                luaL_checktype(L, -1, LUA_TSTRING);
-                               required_neighbors.emplace_back(lua_tostring(L, -1));
+                               required_neighbors.emplace_back(readParam<std::string>(L, -1));
                                // removes value, keeps key for next iteration
                                lua_pop(L, 1);
                        }
                } else if (lua_isstring(L, -1)) {
-                       required_neighbors.emplace_back(lua_tostring(L, -1));
+                       required_neighbors.emplace_back(readParam<std::string>(L, -1));
                }
                lua_pop(L, 1);
 
@@ -151,6 +151,10 @@ void ScriptApiEnv::initializeEnvironment(ServerEnvironment *env)
                bool simple_catch_up = true;
                getboolfield(L, current_abm, "catch_up", simple_catch_up);
 
+               lua_getfield(L, current_abm, "action");
+               luaL_checktype(L, current_abm + 1, LUA_TFUNCTION);
+               lua_pop(L, 1);
+
                LuaABM *abm = new LuaABM(L, id, trigger_contents, required_neighbors,
                        trigger_interval, trigger_chance, simple_catch_up);
 
@@ -185,12 +189,12 @@ void ScriptApiEnv::initializeEnvironment(ServerEnvironment *env)
                        while (lua_next(L, table)) {
                                // key at index -2 and value at index -1
                                luaL_checktype(L, -1, LUA_TSTRING);
-                               trigger_contents.insert(lua_tostring(L, -1));
+                               trigger_contents.insert(readParam<std::string>(L, -1));
                                // removes value, keeps key for next iteration
                                lua_pop(L, 1);
                        }
                } else if (lua_isstring(L, -1)) {
-                       trigger_contents.insert(lua_tostring(L, -1));
+                       trigger_contents.insert(readParam<std::string>(L, -1));
                }
                lua_pop(L, 1);
 
@@ -200,6 +204,10 @@ void ScriptApiEnv::initializeEnvironment(ServerEnvironment *env)
                bool run_at_every_load = getboolfield_default(L, current_lbm,
                        "run_at_every_load", false);
 
+               lua_getfield(L, current_lbm, "action");
+               luaL_checktype(L, current_lbm + 1, LUA_TFUNCTION);
+               lua_pop(L, 1);
+
                LuaLBM *lbm = new LuaLBM(L, id, trigger_contents, name,
                        run_at_every_load);