Factorio: Inventory Spill Traps (#4457)

This commit is contained in:
Fabian Dill
2025-01-26 22:14:39 +01:00
committed by GitHub
parent 90417e0022
commit 8622cb6204
4 changed files with 59 additions and 12 deletions

View File

@@ -48,3 +48,40 @@ function fire_entity_at_entities(entity_name, entities, speed)
target=target, speed=speed}
end
end
function spill_character_inventory(character)
if not (character and character.valid) then
return false
end
-- grab attrs once pre-loop
local position = character.position
local surface = character.surface
local inventories_to_spill = {
defines.inventory.character_main, -- Main inventory
defines.inventory.character_trash, -- Logistic trash slots
}
for _, inventory_type in pairs(inventories_to_spill) do
local inventory = character.get_inventory(inventory_type)
if inventory and inventory.valid then
-- Spill each item stack onto the ground
for i = 1, #inventory do
local stack = inventory[i]
if stack and stack.valid_for_read then
local spilled_items = surface.spill_item_stack{
position = position,
stack = stack,
enable_looted = false, -- do not mark for auto-pickup
force = nil, -- do not mark for auto-deconstruction
allow_belts = true, -- do mark for putting it onto belts
}
if #spilled_items > 0 then
stack.clear() -- only delete if spilled successfully
end
end
end
end
end
end