local util = require("util") ---- INIT ---- script.on_init(function() storage.entities = {} storage.power_entities = {} end) script.on_configuration_changed(function() storage.power_entities = {} -- ensures this field exists, but keeps old value storage.entities = {} end) ---- ON EVENT ---- script.on_event({defines.events.on_robot_built_entity, defines.events.on_built_entity}, function(event) if event.entity.name == "artillery-turret" or event.entity.name == "flamethrower-turret" then event.entity.disabled_by_script = true local id = event.entity.unit_number storage.entities[id] = event.entity storage.power_entities[id] = event.entity.surface.create_entity{ name = event.entity.name.."-power", position = event.entity.position, force = event.entity.force, direction = event.entity.direction, destructible = false} end end) script.on_event({defines.events.on_entity_died, defines.events.on_robot_pre_mined, defines.events.on_pre_player_mined_item, defines.events.on_space_platform_pre_mined}, function(event) local id = event.entity.unit_number if storage.power_entities[id] then storage.power_entities[id].destroy() storage.power_entities[id] = nil storage.entities[id] = nil end end) local refresh_rate = 20 -- how often to check whether an out-of-power turret should be re-enabled local energy_per_shot = util.parse_energy("8kJ") -- set to whatever you want script.on_event(defines.events.on_script_trigger_effect, function (event) if event.effect_id ~= "turret-consume-energy" then return end local turret = event.cause_entity -- or should it be event.source_entity? local id = turret.unit_number local interface = storage.power_entities[id] if interface.energy >= energy_per_shot then interface.energy = interface.energy - energy_per_shot else turret.disabled_by_script = true end end) script.on_nth_tick(refresh_rate, function(event) for id, interface in pairs(storage.power_entities) do local turret = storage.entities[id] if not turret.valid then interface.destroy() storage.power_entities[id] = nil storage.entities[id] = nil elseif turret.disabled_by_script and interface.energy >= energy_per_shot then interface.energy = interface.energy - energy_per_shot turret.disabled_by_script = false end end end)