Check for 'action' field in ABMs & LBMs
authorSmallJoker <mk939@ymail.com>
Sat, 27 Jul 2019 18:55:38 +0000 (20:55 +0200)
committerSmallJoker <mk939@ymail.com>
Sat, 27 Jul 2019 19:13:47 +0000 (21:13 +0200)
builtin/game/register.lua
src/script/cpp_api/s_env.cpp

index d111e5c27450b784d83c564cd158800d5169892a..51492e928b6f5c86c7095a6fdea3e37a2161628c 100644 (file)
@@ -79,6 +79,7 @@ end
 
 function core.register_abm(spec)
        -- Add to core.registered_abms
+       assert(type(spec.action) == "function", "Required field 'action' of type function")
        core.registered_abms[#core.registered_abms + 1] = spec
        spec.mod_origin = core.get_current_modname() or "??"
 end
@@ -86,6 +87,7 @@ end
 function core.register_lbm(spec)
        -- Add to core.registered_lbms
        check_modname_prefix(spec.name)
+       assert(type(spec.action) == "function", "Required field 'action' of type function")
        core.registered_lbms[#core.registered_lbms + 1] = spec
        spec.mod_origin = core.get_current_modname() or "??"
 end
index f8cef98b7332f98763ef853e6a4e43bd54dfdc62..ab3b5fe464702456d5a1a754054a3f2bf679145f 100644 (file)
@@ -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);
 
@@ -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);