Skip to content

Commit 905157c

Browse files
committed
fix: Fixed mining a dome would void any robots inside the regulator. Resolves #243
1 parent ebe67b5 commit 905157c

File tree

1 file changed

+27
-4
lines changed

1 file changed

+27
-4
lines changed

scripts/pressure-dome.lua

+27-4
Original file line numberDiff line numberDiff line change
@@ -693,18 +693,41 @@ local function delete_invalid_entities_from_contained_entities_list(pressure_dom
693693
end
694694
end
695695

696-
local function cleanup_dome_for_deletion(pressure_dome_data)
696+
local function cleanup_dome_for_deletion(pressure_dome_data, buffer)
697697
unplace_tiles(pressure_dome_data)
698698

699699
for _, collision_box in pairs(pressure_dome_data.collision_boxes) do
700700
collision_box.destroy()
701701
end
702702
pressure_dome_data.collision_boxes = {}
703703

704-
if pressure_dome_data.regulator then
704+
local regulator = pressure_dome_data.regulator
705+
if regulator and regulator.valid then
706+
-- Drop stored robots onto the floor or buffer inventory.
707+
-- https://github.com/notnotmelon/maraxsis/issues/243
708+
local surface = pressure_dome_data.surface
709+
for i = 1, regulator.get_max_inventory_index() do
710+
local inventory = regulator.get_inventory(i)
711+
for k = 1, #inventory do
712+
local stack = inventory[k]
713+
if buffer and surface.valid then
714+
buffer.insert(stack)
715+
elseif surface.valid then
716+
surface.spill_item_stack{
717+
position = pressure_dome_data.position,
718+
stack = stack,
719+
enable_looted = true,
720+
force = regulator.force_index,
721+
allow_belts = false,
722+
use_start_position_on_failure = true,
723+
}
724+
end
725+
end
726+
end
727+
705728
pressure_dome_data.regulator.destroy()
706-
pressure_dome_data.regulator = nil
707729
end
730+
pressure_dome_data.regulator = nil
708731

709732
if pressure_dome_data.regulator_fluidbox then
710733
pressure_dome_data.regulator_fluidbox.destroy()
@@ -804,7 +827,7 @@ maraxsis.on_event(maraxsis.events.on_destroyed(), function(event)
804827

805828
if render_object_id and storage.pressure_domes[render_object_id] then
806829
local pressure_dome_data = storage.pressure_domes[render_object_id]
807-
cleanup_dome_for_deletion(pressure_dome_data)
830+
cleanup_dome_for_deletion(pressure_dome_data, event.buffer)
808831
storage.pressure_domes[render_object_id] = nil
809832
if event.name == defines.events.on_entity_died then
810833
on_dome_died(event, pressure_dome_data)

0 commit comments

Comments
 (0)