Fix entity related bugs

* Make minetest.add_entity() binary-safe
* Fix on_death pushing dummy ObjectRef instead of nil
This commit is contained in:
sfan5 2022-06-14 12:39:01 +02:00
parent 992f501159
commit e9e721b937
2 changed files with 6 additions and 3 deletions

@ -244,7 +244,7 @@ bool ScriptApiEntity::luaentity_Punch(u16 id,
{ {
SCRIPTAPI_PRECHECKHEADER SCRIPTAPI_PRECHECKHEADER
//infostream<<"scriptapi_luaentity_step: id="<<id<<std::endl; assert(puncher);
int error_handler = PUSH_ERROR_HANDLER(L); 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); luaL_checktype(L, -1, LUA_TFUNCTION);
lua_pushvalue(L, object); // self lua_pushvalue(L, object); // self
objectrefGetOrCreate(L, sao); // killer reference if (sao)
objectrefGetOrCreate(L, sao); // sao reference
else
lua_pushnil(L);
setOriginFromTable(object); setOriginFromTable(object);
PCALL_RES(lua_pcall(L, 2, 1, error_handler)); PCALL_RES(lua_pcall(L, 2, 1, error_handler));

@ -640,7 +640,7 @@ int ModApiEnvMod::l_add_entity(lua_State *L)
v3f pos = checkFloatPos(L, 1); v3f pos = checkFloatPos(L, 1);
const char *name = luaL_checkstring(L, 2); 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); ServerActiveObject *obj = new LuaEntitySAO(env, pos, name, staticdata);
int objectid = env->addActiveObject(obj); int objectid = env->addActiveObject(obj);