z_mirror/Krastorio2
git clone https://git.raiguard.me/z_mirror/Krastorio2
8a4ec9b0
discrete-steel-pipes
1local flib_migration =require ( "__flib__.migration" ) 2local biter_virus =require ( "scripts.biter-virus" ) 3local planetary_teleporter =require ( "scripts.planetary-teleporter" ) 4 5local function ensure_turret_force () 6if not game . forces [ "kr-internal-turrets" ] then 7game . create_force ( "kr-internal-turrets" ) 8end 9end 10 11local migrations ={} 12 13migrations . on_init =ensure_turret_force 14 15function migrations . on_configuration_changed ( e ) 16if flib_migration . on_config_changed ( e , migrations . versions ) then 17ensure_turret_force () 18end 19end 20 21migrations . events ={ 22[ defines . events . on_technology_effects_reset ] =function ( e ) 23if game . finished or game . finished_but_continuing then 24e . force . technologies [ "kr-logo" ]. enabled =true 25end 26end , 27} 28 29migrations . versions ={ 30[ "1.2.25" ] =function () 31error ( "Loading Krastorio 2 saves from versions prior to 1.2.25 is no longer supported." ) 32end , 33[ "1.3.0" ] =function () 34if game . finished or game . finished_but_continuing then 35for _ , force in pairs ( game . forces ) do 36force . technologies [ "kr-logo" ]. enabled =true 37end 38end 39end , 40[ "1.3.8" ] =function () 41-- Clean up any invalid roboport GUIs 42local new ={} 43for player_index , player_gui in pairs ( storage . roboport_guis ) do 44if player_gui . valid then 45new [ player_index ] =player_gui 46end 47end 48storage . roboport_guis =new 49end , 50[ "1.3.10" ] =function () 51-- Clean up any orphaned internal entities 52local valid_unit_numbers ={} 53for _ , data in pairs ( storage . tesla_coil . towers ) do 54for _ , entity in pairs ( data . entities ) do 55if entity . valid then 56valid_unit_numbers [ entity . unit_number or 0 ] =true 57end 58end 59end 60--- @diagnostic disable-next-line 61for _ , data in pairs ( storage . planetary_teleporter . data ) do 62for _ , entity in pairs ( data . entities ) do 63if entity . valid then 64valid_unit_numbers [ entity . unit_number or 0 ] =true 65end 66end 67end 68for _ , surface in pairs ( game . surfaces ) do 69for _ , entity in 70pairs ( surface . find_entities_filtered ( { 71name ={ 72"kr-planetary-teleporter-turret" , 73"kr-planetary-teleporter-front-layer" , 74"kr-planetary-teleporter-collision-1" , 75"kr-planetary-teleporter-collision-2" , 76"kr-planetary-teleporter-collision-3" , 77"kr-tesla-coil-turret" , 78"kr-tesla-coil-collision" , 79} , 80} )) 81do 82if entity . valid and not valid_unit_numbers [ entity . unit_number ] then 83entity . destroy () 84end 85end 86end 87end , 88[ "2.0.0" ] =function () 89storage . creep =nil 90storage . inserter_has_droplane_gui =nil 91storage . temp_inserter_settings =nil 92storage . virus =nil 93biter_virus . on_init () 94 95--- @diagnostic disable: undefined-field 96 97if storage . inserter_guis then 98for _ , gui in pairs ( storage . inserter_guis ) do 99if gui . valid then 100gui . destroy () 101end 102end 103storage . inserter_guis =nil 104end 105 106if storage . planetary_teleporter and storage . planetary_teleporter . data then 107--- @type {entity: LuaEntity, name: string?}[] 108local teleporters ={} 109for _ , data in pairs ( storage . planetary_teleporter . data ) do 110local entity =data . entities . base 111if not entity or not entity . valid then 112goto continue 113end 114 115for key , stored_entity in pairs ( data . entities ) do 116if key ~= "base" and stored_entity . valid then 117stored_entity . destroy () 118end 119end 120 121teleporters [ # teleporters + 1 ] ={ entity =entity , name =data . name } 122 123:: continue :: 124end 125 126storage . planetary_teleporter =nil 127 128planetary_teleporter . on_init () 129for _ , data in pairs ( teleporters ) do 130planetary_teleporter . migrate_teleporter ( data . entity , data . name ) 131end 132end 133end , 134} 135 136return migrations