z_mirror/Krastorio2
git clone https://git.raiguard.me/z_mirror/Krastorio2
4414062d
trunk
1local biter_virus =require ( "scripts.biter-virus" ) 2local planetary_teleporter =require ( "scripts.planetary-teleporter" ) 3 4local function ensure_turret_force () 5if not game . forces [ "kr-internal-turrets" ] then 6game . create_force ( "kr-internal-turrets" ) 7end 8end 9 10--- @class MigrationsHandler: event_handler 11local migrations ={} 12 13migrations . on_init =ensure_turret_force 14 15--- @param e ConfigurationChangedData 16function migrations . on_configuration_changed ( e ) 17local old_version =e . mod_changes and e . mod_changes [ script . mod_name ] and e . mod_changes [ script . mod_name ]. old_version 18if not old_version then 19return 20end 21 22for version , callback in pairs ( migrations . versions ) do 23if helpers . compare_versions ( version , old_version ) > 0 then 24callback () 25end 26end 27 28ensure_turret_force () 29end 30 31migrations . events ={ 32[ defines . events . on_technology_effects_reset ] =function ( e ) 33if game . finished or game . finished_but_continuing then 34e . force . technologies [ "kr-logo" ]. enabled =true 35end 36end , 37} 38 39migrations . versions ={ 40[ "1.2.25" ] =function () 41error ( "Loading Krastorio 2 saves from versions prior to 1.2.25 is no longer supported." ) 42end , 43[ "1.3.0" ] =function () 44if game . finished or game . finished_but_continuing then 45for _ , force in pairs ( game . forces ) do 46force . technologies [ "kr-logo" ]. enabled =true 47end 48end 49end , 50[ "1.3.8" ] =function () 51-- Clean up any invalid roboport GUIs 52local new ={} 53for player_index , player_gui in pairs ( storage . roboport_guis ) do 54if player_gui . valid then 55new [ player_index ] =player_gui 56end 57end 58storage . roboport_guis =new 59end , 60[ "1.3.10" ] =function () 61-- Clean up any orphaned internal entities 62local valid_unit_numbers ={} 63for _ , data in pairs ( storage . tesla_coil . towers ) do 64for _ , entity in pairs ( data . entities ) do 65if entity . valid then 66valid_unit_numbers [ entity . unit_number or 0 ] =true 67end 68end 69end 70--- @diagnostic disable-next-line 71for _ , data in pairs ( storage . planetary_teleporter . data ) do 72for _ , entity in pairs ( data . entities ) do 73if entity . valid then 74valid_unit_numbers [ entity . unit_number or 0 ] =true 75end 76end 77end 78for _ , surface in pairs ( game . surfaces ) do 79for _ , entity in 80pairs ( surface . find_entities_filtered ( { 81name ={ 82"kr-planetary-teleporter-turret" , 83"kr-planetary-teleporter-front-layer" , 84"kr-planetary-teleporter-collision-1" , 85"kr-planetary-teleporter-collision-2" , 86"kr-planetary-teleporter-collision-3" , 87"kr-tesla-coil-turret" , 88"kr-tesla-coil-collision" , 89} , 90} )) 91do 92if entity . valid and not valid_unit_numbers [ entity . unit_number ] then 93entity . destroy () 94end 95end 96end 97end , 98[ "2.0.0" ] =function () 99storage . creep =nil 100storage . inserter_has_droplane_gui =nil 101storage . temp_inserter_settings =nil 102storage . virus =nil 103biter_virus . on_init () 104storage . intergalactic_transceiver . in_cutscene ={} 105 106--- @diagnostic disable: undefined-field 107 108if storage . inserter_guis then 109for _ , gui in pairs ( storage . inserter_guis ) do 110if gui . valid then 111gui . destroy () 112end 113end 114storage . inserter_guis =nil 115end 116 117if storage . planetary_teleporter and storage . planetary_teleporter . data then 118--- @type {entity: LuaEntity, name: string?}[] 119local teleporters ={} 120for _ , data in pairs ( storage . planetary_teleporter . data ) do 121local entity =data . entities . base 122if not entity or not entity . valid then 123goto continue 124end 125 126for key , stored_entity in pairs ( data . entities ) do 127if key ~= "base" and stored_entity . valid then 128stored_entity . destroy () 129end 130end 131 132teleporters [ # teleporters + 1 ] ={ entity =entity , name =data . name } 133 134:: continue :: 135end 136 137storage . planetary_teleporter =nil 138 139planetary_teleporter . on_init () 140for _ , data in pairs ( teleporters ) do 141planetary_teleporter . migrate_teleporter ( data . entity , data . name ) 142end 143end 144 145--- @param force LuaForce 146--- @param name string 147local function research ( force , tech_name ) 148local tech =force . technologies [ tech_name ] 149if tech then 150tech . researched =true 151end 152end 153 154for _ , force in pairs ( game . forces ) do 155if 156force . technologies [ "production-science-pack" ]. researched 157or force . technologies [ "utility-science-pack" ]. researched 158then 159local found_basic =false 160local found_automation =false 161for _ , surface in pairs ( game . surfaces ) do 162if surface . count_entities_filtered ( { name ="lab" } ) > 0 then 163found_basic =true 164found_automation =true 165elseif surface . count_entities_filtered ( { name ={ "kr-advanced-lab" } } ) > 0 then 166found_automation =true 167end 168end 169if not found_basic then 170research ( force , "kr-laboratory" ) 171research ( force , "radar" ) 172research ( force , "repair-pack" ) 173end 174if not found_automation then 175research ( force , "advanced-combinators" ) 176research ( force , "kr-fusion-reactor-equipment" ) 177end 178end 179end 180 181-- Convert all steel pipes into regular pipes 182for _ , surface in pairs ( game . surfaces ) do 183for _ , entity in pairs ( surface . find_entities_filtered ( { name ="kr-steel-pipe" } )) do 184surface . create_entity ( { 185name ="pipe" , 186position =entity . position , 187direction =entity . direction , 188mirror =entity . mirroring , 189quality =entity . quality , 190force =entity . force , 191fast_replace =true , 192player =entity . last_user , 193raise_built =true , 194create_build_effect_smoke =false , 195} ) 196end 197for _ , entity in pairs ( surface . find_entities_filtered ( { name ="kr-steel-pipe-to-ground" } )) do 198surface . create_entity ( { 199name ="kr-legacy-steel-pipe-to-ground" , 200position =entity . position , 201direction =entity . direction , 202mirror =entity . mirroring , 203quality =entity . quality , 204force =entity . force , 205fast_replace =true , 206player =entity . last_user , 207raise_built =true , 208create_build_effect_smoke =false , 209} ) 210end 211end 212end , 213[ "2.0.7" ] =function () 214if storage . intergalactic_transceiver then 215storage . intergalactic_transceiver . player_in_cutscene ={} 216for force_index in pairs ( storage . intergalactic_transceiver . in_cutscene ) do 217local force =game . forces [ force_index ] 218if force then 219for _ , player in pairs ( force . players ) do 220if player . controller_type == defines . controllers . cutscene then 221storage . intergalactic_transceiver . player_in_cutscene [ player . index ] =true 222end 223end 224end 225end 226end 227end , 228 229-- STOP! Do not add any more migrations here. Use Lua migration files instead. 230} 231 232return migrations