@@ -693,18 +693,41 @@ local function delete_invalid_entities_from_contained_entities_list(pressure_dom
693
693
end
694
694
end
695
695
696
- local function cleanup_dome_for_deletion (pressure_dome_data )
696
+ local function cleanup_dome_for_deletion (pressure_dome_data , buffer )
697
697
unplace_tiles (pressure_dome_data )
698
698
699
699
for _ , collision_box in pairs (pressure_dome_data .collision_boxes ) do
700
700
collision_box .destroy ()
701
701
end
702
702
pressure_dome_data .collision_boxes = {}
703
703
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
+
705
728
pressure_dome_data .regulator .destroy ()
706
- pressure_dome_data .regulator = nil
707
729
end
730
+ pressure_dome_data .regulator = nil
708
731
709
732
if pressure_dome_data .regulator_fluidbox then
710
733
pressure_dome_data .regulator_fluidbox .destroy ()
@@ -804,7 +827,7 @@ maraxsis.on_event(maraxsis.events.on_destroyed(), function(event)
804
827
805
828
if render_object_id and storage .pressure_domes [render_object_id ] then
806
829
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 )
808
831
storage .pressure_domes [render_object_id ] = nil
809
832
if event .name == defines .events .on_entity_died then
810
833
on_dome_died (event , pressure_dome_data )
0 commit comments