forked from mtcontrib/pipeworks
Fix crash when deleting luaentities with //clearobjects.
This commit is contained in:
parent
bedcf4d646
commit
4eeb6950c4
@ -18,3 +18,5 @@ pipeworks.enable_mese_sand_tube = true
|
||||
pipeworks.enable_one_way_tube = true
|
||||
pipeworks.enable_priority_tube = true
|
||||
pipeworks.enable_cyclic_mode = true
|
||||
|
||||
pipeworks.delete_item_on_clearobject = true
|
@ -149,8 +149,8 @@ local entitydef_default = {
|
||||
_remove_attached = function(self, index)
|
||||
local master = self._attached_entities_master
|
||||
local entity = self._attached_entities[index]
|
||||
local ent = entity.entity
|
||||
entity.entity = nil
|
||||
local ent = entity and entity.entity
|
||||
if entity then entity.entity = nil end
|
||||
if index == master then
|
||||
self:_detach_all()
|
||||
local newmaster
|
||||
@ -315,10 +315,11 @@ minetest.register_globalstep(function(dtime)
|
||||
end
|
||||
for id, entity in pairs(luaentity.entities) do
|
||||
local master = entity._attached_entities_master
|
||||
if master then
|
||||
local master_def = entity._attached_entities[master]
|
||||
local master_entity = master_def.entity
|
||||
entity._pos = vector.subtract(master_entity:getpos(), master_def.offset)
|
||||
local master_def = master and entity._attached_entities[master]
|
||||
local master_entity = master_def and master_def.entity
|
||||
local master_entity_pos = master_entity and master_entity:getpos()
|
||||
if master_entity_pos then
|
||||
entity._pos = vector.subtract(master_entity_pos, master_def.offset)
|
||||
entity._velocity = master_entity:getvelocity()
|
||||
entity._acceleration = master_entity:getacceleration()
|
||||
else
|
||||
@ -330,9 +331,21 @@ minetest.register_globalstep(function(dtime)
|
||||
entity._velocity,
|
||||
vector.multiply(entity._acceleration, dtime))
|
||||
end
|
||||
if master and not master_entity_pos then -- The entity has somehow been cleared
|
||||
if pipeworks.delete_item_on_clearobject then
|
||||
entity:remove()
|
||||
else
|
||||
entity:_remove_attached(master)
|
||||
entity:_add_loaded()
|
||||
if entity.on_step then
|
||||
entity:on_step(dtime)
|
||||
end
|
||||
end
|
||||
else
|
||||
entity:_add_loaded()
|
||||
if entity.on_step then
|
||||
entity:on_step(dtime)
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
Loading…
Reference in New Issue
Block a user