diff --git a/scripts/init.lua b/scripts/init.lua index d7124fc..991499e 100644 --- a/scripts/init.lua +++ b/scripts/init.lua @@ -21,8 +21,6 @@ end local function init() - global.version = 12 -- important for migrations - global.random = game.create_random_generator() global.lightEffects = {} diff --git a/scripts/migration.lua b/scripts/migration.lua index 003ab3e..e81b4e4 100644 --- a/scripts/migration.lua +++ b/scripts/migration.lua @@ -7,372 +7,18 @@ local splitty = require(rpath .. "gui.util").splitty local Setting = require(rpath .. "setting") -local function on_settings_changed() +local function on_configuration_changed() for _,reactor in pairs(global.reactors) do --updating signals for removed fuel cell mods if reactor.entity.valid == true then if reactor.entity.get_fuel_inventory().is_empty() then - reactor.signals.parameters["uranium-fuel-cells"].signal = {type="item", name="uranium-fuel-cell"} - reactor.signals.parameters["uranium-fuel-cells"].count = 0 + reactor.signals.parameters["uranium-fuel-cells"] = {signal=SIGNAL_URANIUM_FUEL_CELLS, count=0, index=8} end end reactor.signals.parameters["used-uranium-fuel-cells"] = nil - --if reactor.entity.get_burnt_result_inventory().is_empty() then - -- reactor.signals.parameters["used-uranium-fuel-cells"].signal = {type="item", name="used-up-uranium-fuel-cell"} - -- reactor.signals.parameters["used-uranium-fuel-cells"].count = 0 - --end reactor.signals.parameters["neighbour-bonus"] = {signal=SIGNAL_NEIGHBOUR_BONUS, count=0, index=13} end technology.init() end - -local function migration() - --msg("RealisticReactors - current mod version: "..global.version) - --game.players[1].print("on_configuration_changed. global.version: "..global.version) - if not global.version or global.version < 1 then - for i,reactor in pairs(global.reactors) do - reactor.signals.parameters["coolant-temperature"] = nil - reactor.signals.parameters["neighbour-bonus"] = nil - --fluid signal removal - --reactor.signals.parameters["coolant-amount"] = nil - - if not reactor.efficiency then - reactor.efficiency = 100 - end - if not reactor.signals.parameters["power-output"] then - reactor.signals.parameters["power-output"] = {signal=SIGNAL_REACTOR_POWER_OUTPUT,count=0,index=7} - end - if not reactor.signals.parameters["efficiency"] then - reactor.signals.parameters["efficiency"] = {signal=SIGNAL_REACTOR_EFFICIENCY,count=0,index=10} - end - - --2 - reactor.displayer = reactor.core.surface.create_entity{name = "realistic-reactor-normal", position = {reactor.core.position.x, reactor.core.position.y}, force = reactor.core.force.name, create_build_effect_smoke = false} - if not reactor.core.get_fuel_inventory().is_empty() then - reactor.displayer.get_fuel_inventory().insert(reactor.core.get_fuel_inventory()[1]) - end - - --3 - reactor.fuel_last_tick = reactor.core.burner.remaining_burning_fuel - if reactor.core.get_fuel_inventory().is_empty() then - reactor.cells_last_tick = 0 - else - reactor.cells_last_tick = reactor.core.get_fuel_inventory()[1].count - end - reactor.displayer.active = reactor.core.active - reactor.displayer.minable = reactor.core.minable - - --4 - reactor.power = reactor.core.surface.create_entity{ - name = REACTOR_POWER_NAME, - position = reactor.core.position, - force = reactor.core.force, - create_build_effect_smoke = false, - } - reactor.power.destructible=false - reactor.power.energy = 17000000 - reactor.signals.parameters["coolant-amount"] = {signal=SIGNAL_COOLANT_AMOUNT, count=0, index=6} - - --5 (removed, was the old implementation of bonus cells) - --6 - reactor.signals.parameters["cell-bonus"] = {signal=SIGNAL_REACTOR_CELL_BONUS, count=0, index=11} - - --7 - reactor.interface.operable = true - - --8 - reactor.cooling_history = 0 - local color = "black" - if reactor.state == "starting" then - color = "yellow" - elseif reactor.state == "running" then - color = "green" - elseif reactor.state == "scramed" then - color = "red" - end - reactor.lamp = reactor.core.surface.create_entity{name = "rr-"..color.."-lamp", position = {reactor.core.position.x-0.62,reactor.core.position.y+0.6}, force = reactor.core.force.name, create_build_effect_smoke = false} - reactor.lamp.destructible = false - reactor.light = reactor.core.surface.create_entity{name = "rr-"..color.."-light", position = {reactor.core.position.x-0.62,reactor.core.position.y+0.6}, force = reactor.core.force.name, create_build_effect_smoke = false} - reactor.light.destructible = false - reactor.interface_warning_tick = 0 - reactor.interface_warning = nil - reactor.cooling_warning_tick = 0 - reactor.cooling_warning = nil - reactor.power_usage = {starting = 0,cooling = 0, interface = 0} - reactor.neighbours = 0 - reactor.bonus_cells = {} - reactor.core.destructible = false - - --9 - reactor.signals.parameters["electric-power"] = {signal=SIGNAL_REACTOR_ELECTRIC_POWER, count=0, index=12} - reactor.fluid_amount_last_tick = 0 - reactor.power_output_last_tick = 0 - if reactor.core.get_burnt_result_inventory().is_empty() then - reactor.used_cells_last_tick = 0 - else - reactor.used_cells_last_tick = reactor.core.get_burnt_result_inventory()[1].count - end - - end - - --7 - gui.init() - - --9 - global.fallout = {} - global.falloutclouds = {} - global.geigers = {} - - - - global.version=1 - end - - if global.version < 2 then - - --10 - global.ruins = {} - global.sarcophagus = {} - game.create_force("radioactivity") - game.create_force("radioactivity-strong") - - --11 - local reactor_state = {} - reactor_state["stopped"] = 0 - reactor_state["starting"] = 1 - reactor_state["running"] = 2 - reactor_state["scramed"] = 3 - - --12 - global.delayed_fallout={} - global.tick_delayer = 0 - for _, stats in pairs (global.stats) do - stats.max = 999 - end - - for i,reactor in pairs(global.reactors) do - --11 - reactor.state = reactor_state[reactor.state] - reactor.last_temp_update = game.tick - reactor.signals.parameters["uranium-fuel-cells"].signal = {type="item", name="uranium-fuel-cell"} - --reactor.signals.parameters["used-uranium-fuel-cells"].signal = {type="item", name="used-up-uranium-fuel-cell"} - reactor.signals.parameters["used-uranium-fuel-cells"] = nil - reactor.core.destructible = false - reactor.max_power = 155 - - reactor.interface.destructible = false - reactor.interface.minable = false - end - global.version = 2 - end - - if global.version <3 then - - --for _, stats in pairs (global.stats) do - -- stats.max = 999 - --end - global.all_heat_pipes = {} - global.underground_heat_pipes = {} - for _, surface in pairs(game.surfaces) do - global.all_heat_pipes[surface.name] = {} - local heat_pipes = surface.find_entities_filtered{type='heat-pipe'} - - for _, hp in pairs (heat_pipes) do - if hp.name == "rr-underground-heat-pipe" then - table.insert(global.underground_heat_pipes, hp) - end - --function get_connected_heat_pipes(heat_pipe) - local result = {} - - for i,heatpipe in pairs(heat_pipes) do - - if hp.position.x == heatpipe.position.x then - if hp.position.y == heatpipe.position.y + 1 or hp.position.y == heatpipe.position.y - 1 then - ----logging("--> connected to heat pipe, ID: " .. heatpipe.unit_number) - table.insert(result, heatpipe) - end - end - - if hp.position.y == heatpipe.position.y then - if hp.position.x == heatpipe.position.x + 1 or hp.position.x == heatpipe.position.x - 1 then - ----logging("--> connected to heat pipe, ID: " .. heatpipe.unit_number) - table.insert(result, heatpipe) - end - end - - end - global.all_heat_pipes[surface.name][hp.unit_number] = {hp,result,{}} - end - end - - for i,reactor in pairs(global.reactors) do - reactor.max_efficiency = 210 - local hp_neighbour_entities_ew = reactor.core.surface.find_entities_filtered{area = {{reactor.position.x-2,reactor.position.y-1},{reactor.position.x+2,reactor.position.y}}, type='heat-pipe'} --east and west - local hp_neighbour_entities_n = reactor.core.surface.find_entities_filtered{area = {{reactor.position.x-1,reactor.position.y-2},{reactor.position.x+1,reactor.position.y}}, type='heat-pipe'} -- north - local table_of_heat_pipes_to_check = union_tables(hp_neighbour_entities_ew,hp_neighbour_entities_n) - for _, hp in pairs(table_of_heat_pipes_to_check) do - table.insert(global.all_heat_pipes[reactor.core.surface.name][hp.unit_number][3],reactor) - end - - end - global.version = 3 - end - - if global.version <4 then - for i,reactor in pairs(global.reactors) do - reactor.last_states_update = game.tick - end - global.version = 4 - end - - if global.version <5 then - for key, gui in pairs (global.guis) do - if gui.graph then gui.graph.destroy() end - end - global.version = 5 - end - - if global.version <6 then - for key, force in pairs (game.forces) do - if force.technologies["nuclear-power"].researched then - force.recipes["nuclear-reactor"].enabled = true - end - end - global.version = 6 - end - if global.version <7 then - for i,reactor in pairs(global.reactors) do - reactor.light.teleport{reactor.core.position.x+0.017,reactor.core.position.y+0.88} - reactor.lamp.teleport{reactor.core.position.x+0.017,reactor.core.position.y+0.88} - end - global.version = 7 - end - if global.version <10 then - for i,reactor in pairs(global.reactors) do - reactor.core.get_fuel_inventory().clear() - reactor.core.get_burnt_result_inventory().clear() - reactor.core.get_fuel_inventory().insert{name="rr-dummy-fuel-cell", count = 50} - reactor.core.burner.currently_burning = "rr-dummy-fuel-cell" - reactor.core.burner.remaining_burning_fuel = 9223372035000000000 - end - global.version = 10 - end - if global.version <11 then - global.random = game.create_random_generator() - global.lightEffects = global.lightEffects or {} - global.interfaces = {} - network.init() - - local towers = {} - global.iterate_cooling_towers = nil -- not needed anymore - for _,tower in pairs(global.towers) do - if tower.entity.valid then - towers[tower.id] = tower -- use unit_number as index - end - end - global.towers = towers - - local ruins = {} - for _,ruin in pairs(global.ruins) do - if ruin.entity.valid then - ruins[ruin.id] = ruin -- use unit_number as index - ruin.entity.destructible = false - ruin.entity.minable = true - end - end - global.ruins = ruins - - local fallouts = {} - for _,fallout in pairs(global.fallout) do - if fallout.surface.valid then - fallout.id = fallout.surface.index - fallout.positions = {[fallout.tick] = fallout.position} - fallout.position = nil - fallout.tick = nil - fallout.clouds = {} - fallouts[fallout.id] = fallout -- use surface.index as index - end - end - for _,cloud in pairs(global.falloutclouds) do - if cloud.valid then - local fallout = fallouts[cloud.surface.index] or { - id = cloud.surface.index, - surface = cloud.surface, - positions = {}, - clouds = {}, - } - fallouts[fallout.id] = fallout - table.insert(fallout.clouds, cloud) - end - end - global.falloutclouds = nil - global.fallout = fallouts - - local sarcophagus = {} - for _,entity in pairs(global.sarcophagus) do - if entity.valid then - sarcophagus[entity.unit_number] = entity - end - end - global.sarcophagus = sarcophagus - - local lookup = {} - for key,reactor in pairs(global.reactors) do - lookup[key] = reactor.displayer.unit_number - end - - local reactors = {} - global.iterate_reactor_temp_signals = nil - global.iterate_reactor_states = nil - global.iterate_reactor_temp = nil - global.skip_temp_iteration = nil - global.tick_delayer = nil - for _,reactor in pairs(global.reactors) do - if reactor.displayer.valid then - reactor.connected_neighbours_IDs = nil - reactor.entity = reactor.displayer - reactor.displayer = nil - reactor.id = reactor.entity.unit_number - reactors[reactor.id] = reactor -- use unit_number as index - end - end - global.reactors = reactors - - global.all_heat_pipes = nil - global.connected_reactors = nil - global.underground_heat_pipes = nil - - local stats = {} - for key,stat in pairs(global.stats) do - stats[lookup[key]] = stat - end - global.stats = stats - - local guis = {} - global.worker_key = nil - for key, gui in pairs(global.guis) do - local reactor_key, playerid = splitty(key,"-") - if gui.valid then - local id = lookup[reactor_key] - guis[id .. "-" .. playerid] = gui - gui.name = "rr_gui_" .. id - end - end - global.guis = guis - - global.version = 11 - end - if global.version <12 then - network.init() -- fixed a bug there, see the π release - global.version = 12 - end - --msg("RealisticReactors - current mod version (after migration): "..global.version) -end - -local function on_configuration_changed() - migration() - on_settings_changed() -end - return on_configuration_changed -- exports