aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsfan5 <sfan5@live.de>2022-06-14 12:39:01 +0200
committersfan5 <sfan5@live.de>2022-06-15 17:20:07 +0200
commite9e721b9371445d5b96455092079833df3d961b9 (patch)
treec04a9c8c75d0aca93b77b1841b33d090e1bd0f00
parent992f501159b2fc6c5878d86cc477413250b4efa2 (diff)
downloadminetest-e9e721b9371445d5b96455092079833df3d961b9.tar.gz
minetest-e9e721b9371445d5b96455092079833df3d961b9.tar.bz2
minetest-e9e721b9371445d5b96455092079833df3d961b9.zip
Fix entity related bugs
* Make minetest.add_entity() binary-safe * Fix on_death pushing dummy ObjectRef instead of nil
-rw-r--r--src/script/cpp_api/s_entity.cpp7
-rw-r--r--src/script/lua_api/l_env.cpp2
2 files changed, 6 insertions, 3 deletions
diff --git a/src/script/cpp_api/s_entity.cpp b/src/script/cpp_api/s_entity.cpp
index 9368bec76..852a27ddc 100644
--- a/src/script/cpp_api/s_entity.cpp
+++ b/src/script/cpp_api/s_entity.cpp
@@ -244,7 +244,7 @@ bool ScriptApiEntity::luaentity_Punch(u16 id,
{
SCRIPTAPI_PRECHECKHEADER
- //infostream<<"scriptapi_luaentity_step: id="<<id<<std::endl;
+ assert(puncher);
int error_handler = PUSH_ERROR_HANDLER(L);
@@ -294,7 +294,10 @@ bool ScriptApiEntity::luaentity_run_simple_callback(u16 id,
}
luaL_checktype(L, -1, LUA_TFUNCTION);
lua_pushvalue(L, object); // self
- objectrefGetOrCreate(L, sao); // killer reference
+ if (sao)
+ objectrefGetOrCreate(L, sao); // sao reference
+ else
+ lua_pushnil(L);
setOriginFromTable(object);
PCALL_RES(lua_pcall(L, 2, 1, error_handler));
diff --git a/src/script/lua_api/l_env.cpp b/src/script/lua_api/l_env.cpp
index 7640f2782..ee49fd6bd 100644
--- a/src/script/lua_api/l_env.cpp
+++ b/src/script/lua_api/l_env.cpp
@@ -640,7 +640,7 @@ int ModApiEnvMod::l_add_entity(lua_State *L)
v3f pos = checkFloatPos(L, 1);
const char *name = luaL_checkstring(L, 2);
- const char *staticdata = luaL_optstring(L, 3, "");
+ std::string staticdata = readParam<std::string>(L, 3, "");
ServerActiveObject *obj = new LuaEntitySAO(env, pos, name, staticdata);
int objectid = env->addActiveObject(obj);