diff options
author | Elias Fleckenstein <eliasfleckenstein@web.de> | 2021-09-19 18:55:25 +0200 |
---|---|---|
committer | Elias Fleckenstein <eliasfleckenstein@web.de> | 2021-09-19 18:55:25 +0200 |
commit | 950d2c9b3e10cbace9236e820c8119d1abb9e01f (patch) | |
tree | c0d9c1ca33c0251667d0a8cb59f25de65996dc69 /src | |
parent | fb4815c660d6d9cfc9df76a3ba763095b9701925 (diff) | |
download | dragonfireclient-950d2c9b3e10cbace9236e820c8119d1abb9e01f.tar.xz |
Add ClientObjectRef:remove and return true in on_object_add callback to remove newly added object
Diffstat (limited to 'src')
-rw-r--r-- | src/client/content_cao.cpp | 7 | ||||
-rw-r--r-- | src/script/cpp_api/s_client.cpp | 5 | ||||
-rw-r--r-- | src/script/cpp_api/s_client.h | 2 | ||||
-rw-r--r-- | src/script/lua_api/l_clientobject.cpp | 1 |
4 files changed, 10 insertions, 5 deletions
diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp index be6608ab6..3a6ca3e29 100644 --- a/src/client/content_cao.cpp +++ b/src/client/content_cao.cpp @@ -822,8 +822,11 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr) setNodeLight(m_last_light); updateMeshCulling(); - if (m_client->modsLoaded()) - m_client->getScript()->on_object_add(m_id); + if (m_client->modsLoaded() && m_client->getScript()->on_object_add(m_id)) { + removeFromScene(false); + return; + } + if (m_client->modsLoaded()) m_client->getScript()->on_object_properties_change(m_id); diff --git a/src/script/cpp_api/s_client.cpp b/src/script/cpp_api/s_client.cpp index b0e7a073e..1ed273a30 100644 --- a/src/script/cpp_api/s_client.cpp +++ b/src/script/cpp_api/s_client.cpp @@ -323,7 +323,7 @@ void ScriptApiClient::on_object_hp_change(s16 id) runCallbacks(1, RUN_CALLBACKS_MODE_FIRST); } -void ScriptApiClient::on_object_add(s16 id) +bool ScriptApiClient::on_object_add(s16 id) { SCRIPTAPI_PRECHECKHEADER @@ -335,7 +335,8 @@ void ScriptApiClient::on_object_add(s16 id) push_objectRef(L, id); // Call functions - runCallbacks(1, RUN_CALLBACKS_MODE_FIRST); + runCallbacks(1, RUN_CALLBACKS_MODE_OR); + return readParam<bool>(L, -1); } bool ScriptApiClient::on_inventory_open(Inventory *inventory) diff --git a/src/script/cpp_api/s_client.h b/src/script/cpp_api/s_client.h index 2f9ce7aa3..6d1a05943 100644 --- a/src/script/cpp_api/s_client.h +++ b/src/script/cpp_api/s_client.h @@ -65,7 +65,7 @@ public: bool on_spawn_particle(struct ParticleParameters param); void on_object_properties_change(s16 id); void on_object_hp_change(s16 id); - void on_object_add(s16 id); + bool on_object_add(s16 id); bool on_inventory_open(Inventory *inventory); void open_enderchest(); diff --git a/src/script/lua_api/l_clientobject.cpp b/src/script/lua_api/l_clientobject.cpp index c093e754e..d3739639a 100644 --- a/src/script/lua_api/l_clientobject.cpp +++ b/src/script/lua_api/l_clientobject.cpp @@ -338,4 +338,5 @@ luaL_Reg ClientObjectRef::methods[] = {luamethod(ClientObjectRef, get_pos), luamethod(ClientObjectRef, get_hp), luamethod(ClientObjectRef, get_max_hp), luamethod(ClientObjectRef, punch), luamethod(ClientObjectRef, rightclick), + luamethod(ClientObjectRef, remove), luamethod(ClientObjectRef, set_nametag_images), {0, 0}}; |