z_mirror/Krastorio2
git clone https://git.raiguard.me/z_mirror/Krastorio2
5ebb8a3c
k2so-fixes
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 180end , 181[ "2.0.7" ] =function () 182if storage . intergalactic_transceiver then 183storage . intergalactic_transceiver . player_in_cutscene ={} 184for force_index in pairs ( storage . intergalactic_transceiver . in_cutscene ) do 185local force =game . forces [ force_index ] 186if force then 187for _ , player in pairs ( force . players ) do 188if player . controller_type == defines . controllers . cutscene then 189storage . intergalactic_transceiver . player_in_cutscene [ player . index ] =true 190end 191end 192end 193end 194end 195end , 196 197-- STOP! Do not add any more migrations here. Use Lua migration files instead. 198} 199 200return migrations