From 964b0a7ab6e7e5756adef4f126f229995bd9210c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20P=C3=A9rez-Cerezo?= Date: Mon, 12 Oct 2020 15:41:27 +0200 Subject: Remove couple entities when out of range from players Work around the entity flood bug caused by improper engine handling of static_save=false --- advtrains/wagons.lua | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'advtrains/wagons.lua') diff --git a/advtrains/wagons.lua b/advtrains/wagons.lua index 6b59293..5564fa5 100644 --- a/advtrains/wagons.lua +++ b/advtrains/wagons.lua @@ -15,6 +15,20 @@ advtrains.wagon_prototypes = {} advtrains.wagon_objects = {} local unload_wgn_range = advtrains.wagon_load_range + 32 +function advtrains.outside_range(pos) -- returns true if the object is outside of unload_wgn_range of any player + -- this is part of a workaround until mintest core devs decide to fix a bug with static_save=false. + local outofrange = true + if not pos then + return true + end + for _,p in pairs(minetest.get_connected_players()) do + if vector.distance(p:get_pos(),pos)<=unload_wgn_range then + outofrange = false + break + end + end + return outofrange +end local setting_show_ids = minetest.settings:get_bool("advtrains_show_ids") @@ -511,13 +525,7 @@ function wagon:on_step(dtime) end end if not players_in then - local outofrange = true - for _,p in pairs(minetest.get_connected_players()) do - if vector.distance(p:get_pos(),pos)<=unload_wgn_range then - outofrange = false - end - end - if outofrange then + if advtrains.outside_range(pos) then --atdebug("wagon",self.id,"unloading (too far away)") self.object:remove() end -- cgit v1.2.3