Remove couple entities when out of range from players

Work around the entity flood bug caused by improper engine handling of
static_save=false
master
Gabriel Pérez-Cerezo 2020-10-12 15:41:27 +02:00
parent dcf5b8670e
commit 964b0a7ab6
2 changed files with 19 additions and 7 deletions

View File

@ -106,6 +106,10 @@ minetest.register_entity("advtrains:couple", {
end,
on_step=function(self, dtime)
return advtrains.pcall(function()
if advtrains.outside_range(self.object:getpos()) then
self.object:remove()
return
end
advtrains.atprint_context_tid=self.train_id_1
if not self.train_id_1 or not self.train_id_2 then atprint("Couple: train ids not set!") self.object:remove() return end

View File

@ -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