z_mirror/Krastorio2
git clone https://git.raiguard.me/z_mirror/Krastorio2
ec30390a
real-fusion-reactor
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 () 94storage . intergalactic_transceiver . in_cutscene ={} 95 96--- @diagnostic disable: undefined-field 97 98if storage . inserter_guis then 99for _ , gui in pairs ( storage . inserter_guis ) do 100if gui . valid then 101gui . destroy () 102end 103end 104storage . inserter_guis =nil 105end 106 107if storage . planetary_teleporter and storage . planetary_teleporter . data then 108--- @type {entity: LuaEntity, name: string?}[] 109local teleporters ={} 110for _ , data in pairs ( storage . planetary_teleporter . data ) do 111local entity =data . entities . base 112if not entity or not entity . valid then 113goto continue 114end 115 116for key , stored_entity in pairs ( data . entities ) do 117if key ~= "base" and stored_entity . valid then 118stored_entity . destroy () 119end 120end 121 122teleporters [ # teleporters + 1 ] ={ entity =entity , name =data . name } 123 124:: continue :: 125end 126 127storage . planetary_teleporter =nil 128 129planetary_teleporter . on_init () 130for _ , data in pairs ( teleporters ) do 131planetary_teleporter . migrate_teleporter ( data . entity , data . name ) 132end 133end 134 135--- @param force LuaForce 136--- @param name string 137local function research ( force , tech_name ) 138local tech =force . technologies [ tech_name ] 139if tech then 140tech . researched =true 141end 142end 143 144for _ , force in pairs ( game . forces ) do 145if 146force . technologies [ "production-science-pack" ]. researched 147or force . technologies [ "utility-science-pack" ]. researched 148then 149local found_basic =false 150local found_automation =false 151for _ , surface in pairs ( game . surfaces ) do 152if surface . count_entities_filtered ( { name ="lab" } ) > 0 then 153found_basic =true 154found_automation =true 155elseif surface . count_entities_filtered ( { name ={ "kr-advanced-lab" } } ) > 0 then 156found_automation =true 157end 158end 159if not found_basic then 160research ( force , "kr-laboratory" ) 161research ( force , "radar" ) 162research ( force , "repair-pack" ) 163end 164if not found_automation then 165research ( force , "advanced-combinators" ) 166research ( force , "kr-fusion-reactor-equipment" ) 167end 168end 169end 170end , 171} 172 173return migrations