Исправлен мод heroturrets
Добавлен мод blueprint-sandboxes Добавляет метку версии в zzzparanoidal (#72)
This commit is contained in:
404
blueprint-sandboxes/scripts/migrate.lua
Normal file
404
blueprint-sandboxes/scripts/migrate.lua
Normal file
@@ -0,0 +1,404 @@
|
||||
local Migrate = {}
|
||||
|
||||
Migrate.version = 011701
|
||||
|
||||
function Migrate.Run()
|
||||
if not global.version then
|
||||
global.version = 0
|
||||
end
|
||||
|
||||
if global.version < Migrate.version then
|
||||
if global.version < 010003 then Migrate.v1_0_3() end
|
||||
if global.version < 010100 then Migrate.v1_1_0() end
|
||||
if global.version < 010401 then Migrate.v1_4_1() end
|
||||
if global.version < 010500 then Migrate.v1_5_0() end
|
||||
if global.version < 010600 then Migrate.v1_6_0() end
|
||||
if global.version < 010700 then Migrate.v1_7_0() end
|
||||
if global.version < 010703 then Migrate.v1_7_3() end
|
||||
if global.version < 010704 then Migrate.v1_7_4() end
|
||||
if global.version < 011000 then Migrate.v1_10_0() end
|
||||
if global.version < 011001 then Migrate.v1_10_1() end
|
||||
if global.version < 011101 then Migrate.v1_11_1() end
|
||||
if global.version < 011103 then Migrate.v1_11_3() end
|
||||
if global.version < 011500 then Migrate.v1_15_0() end
|
||||
if global.version < 011604 then Migrate.v1_16_4() end
|
||||
if global.version < 011606 then Migrate.v1_16_6() end
|
||||
end
|
||||
|
||||
global.version = Migrate.version
|
||||
end
|
||||
|
||||
function Migrate.RecreateGuis()
|
||||
for _, player in pairs(game.players) do
|
||||
ToggleGUI.Destroy(player)
|
||||
ToggleGUI.Init(player)
|
||||
end
|
||||
end
|
||||
|
||||
function Migrate.v1_0_3()
|
||||
--[[
|
||||
It was discovered that in on_configuration_changed Space Exploration would
|
||||
"fix" all Tiles for all Zones that it knows of, which causes problems
|
||||
specifically for the Planetary Sandbox, which initially used Stars.
|
||||
At this point, we unfortunately have to completely remove those Sandboxes,
|
||||
which is unavoidable because by the nature of this update we would have
|
||||
triggered the complete-reset of that Surface anyway.
|
||||
]]
|
||||
|
||||
log("Migration 1.0.3 Starting")
|
||||
|
||||
if SpaceExploration.enabled then
|
||||
local planetaryLabId = 3
|
||||
local planetaryLabsOnStars = {}
|
||||
local playersToKickFromPlanetaryLabs = {}
|
||||
|
||||
for name, surfaceData in pairs(global.seSurfaces) do
|
||||
if (not surfaceData.orbital) and SpaceExploration.IsStar(name) then
|
||||
table.insert(planetaryLabsOnStars, {
|
||||
zoneName = name,
|
||||
sandboxForceName = surfaceData.sandboxForceName,
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
for index, player in pairs(game.players) do
|
||||
local playerData = global.players[index]
|
||||
if playerData.insideSandbox == planetaryLabId
|
||||
and SpaceExploration.IsStar(player.surface.name)
|
||||
then
|
||||
table.insert(playersToKickFromPlanetaryLabs, player)
|
||||
end
|
||||
end
|
||||
|
||||
for _, player in pairs(playersToKickFromPlanetaryLabs) do
|
||||
log("Kicking Player out of Planetary Lab: " .. player.name)
|
||||
Sandbox.Exit(player)
|
||||
end
|
||||
|
||||
for _, surfaceData in pairs(planetaryLabsOnStars) do
|
||||
log("Destroying Planetary Lab inside Star: " .. surfaceData.zoneName)
|
||||
SpaceExploration.DeleteSandbox(
|
||||
global.sandboxForces[surfaceData.sandboxForceName],
|
||||
surfaceData.zoneName
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
log("Migration 1.0.3 Finished")
|
||||
end
|
||||
|
||||
function Migrate.v1_1_0()
|
||||
--[[
|
||||
A "persistent" Sandbox Inventory was created for each Player.
|
||||
]]
|
||||
|
||||
log("Migration 1.1.0 Starting")
|
||||
|
||||
for index, player in pairs(game.players) do
|
||||
local playerData = global.players[index]
|
||||
playerData.sandboxInventory = game.create_inventory(#player.get_main_inventory())
|
||||
if Sandbox.IsPlayerInsideSandbox(player) then
|
||||
log("Player inside Sandbox, fully-syncing the inventory.")
|
||||
Inventory.Persist(
|
||||
player.get_main_inventory(),
|
||||
playerData.sandboxInventory
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
log("Migration 1.1.0 Finished")
|
||||
end
|
||||
|
||||
function Migrate.v1_4_1()
|
||||
--[[
|
||||
The levels for level-based Research wasn't being synchronized.
|
||||
]]
|
||||
|
||||
log("Migration 1.4.1 Starting")
|
||||
|
||||
Research.SyncAllForces()
|
||||
|
||||
log("Migration 1.4.1 Finished")
|
||||
end
|
||||
|
||||
function Migrate.v1_5_0()
|
||||
--[[
|
||||
Bonus Slots for Sandbox Force Inventories were added.
|
||||
]]
|
||||
|
||||
log("Migration 1.5.0 Starting")
|
||||
|
||||
Force.SyncAllForces()
|
||||
|
||||
log("Migration 1.5.0 Finished")
|
||||
end
|
||||
|
||||
function Migrate.v1_6_0()
|
||||
--[[
|
||||
Last-known positions inside Sandboxes were added.
|
||||
]]
|
||||
|
||||
log("Migration 1.6.0 Starting")
|
||||
|
||||
for index, _ in pairs(game.players) do
|
||||
local playerData = global.players[index]
|
||||
playerData.lastSandboxPositions = {}
|
||||
end
|
||||
|
||||
log("Migration 1.6.0 Finished")
|
||||
end
|
||||
|
||||
function Migrate.v1_7_0()
|
||||
--[[
|
||||
Configurable-per-Sandbox daytime was added.
|
||||
]]
|
||||
|
||||
log("Migration 1.7.0 Starting")
|
||||
|
||||
for surfaceName, _ in pairs(global.labSurfaces) do
|
||||
local surface = game.surfaces[surfaceName]
|
||||
if surface then
|
||||
surface.always_day = false
|
||||
surface.freeze_daytime = true
|
||||
surface.daytime = 0.95
|
||||
global.labSurfaces[surfaceName].daytime = 0.95
|
||||
end
|
||||
end
|
||||
|
||||
for surfaceName, _ in pairs(global.seSurfaces) do
|
||||
local surface = game.surfaces[surfaceName]
|
||||
if surface then
|
||||
surface.always_day = false
|
||||
surface.freeze_daytime = true
|
||||
surface.daytime = 0.95
|
||||
global.seSurfaces[surfaceName].daytime = 0.95
|
||||
end
|
||||
end
|
||||
|
||||
Migrate.RecreateGuis()
|
||||
|
||||
log("Migration 1.7.0 Finished")
|
||||
end
|
||||
|
||||
function Migrate.v1_7_3()
|
||||
--[[
|
||||
The daylight portrait icon had the same name as the Reset Button.
|
||||
]]
|
||||
|
||||
log("Migration 1.7.3 Starting")
|
||||
|
||||
Migrate.RecreateGuis()
|
||||
|
||||
log("Migration 1.7.3 Finished")
|
||||
end
|
||||
|
||||
function Migrate.v1_7_4()
|
||||
--[[
|
||||
The 1.7.3 migration wasn't correctly applied to 1.7.x
|
||||
Allow-all-Tech was incorrectly applying the existing Force's bonuses
|
||||
]]
|
||||
|
||||
Migrate.v1_7_3()
|
||||
|
||||
log("Migration 1.7.4 Starting")
|
||||
|
||||
if settings.global[Settings.allowAllTech].value then
|
||||
game.print("Blueprint Sandboxes Notice: You had the Unlock-all-Technologies " ..
|
||||
"Setting enabled, but there was a bug pre-1.7.4 that was incorrectly " ..
|
||||
"overriding some of the bonuses from leveled-research. You should " ..
|
||||
"disable, then re-enable this setting in order to fix that.")
|
||||
end
|
||||
|
||||
log("Migration 1.7.4 Finished")
|
||||
end
|
||||
|
||||
function Migrate.v1_10_0()
|
||||
--[[
|
||||
Internal Queues for Asynchronous Sandbox requests
|
||||
replace the old find_entities_filtered
|
||||
]]
|
||||
|
||||
log("Migration 1.10.0 Starting")
|
||||
|
||||
global.asyncCreateQueue = Queue.New()
|
||||
global.asyncUpgradeQueue = Queue.New()
|
||||
global.asyncDestroyQueue = Queue.New()
|
||||
|
||||
for _, surfaceData in pairs(global.labSurfaces) do
|
||||
surfaceData.hasRequests = nil
|
||||
end
|
||||
|
||||
for _, surfaceData in pairs(global.seSurfaces) do
|
||||
surfaceData.hasRequests = nil
|
||||
end
|
||||
|
||||
log("Migration 1.10.0 Finished")
|
||||
end
|
||||
|
||||
function Migrate.v1_10_1()
|
||||
--[[
|
||||
Planetary Labs were possibly created within a Player's Home System
|
||||
and on Planets that could be dangerous.
|
||||
]]
|
||||
|
||||
log("Migration 1.10.1 Starting")
|
||||
|
||||
if SpaceExploration.enabled then
|
||||
local planetaryLabId = 3
|
||||
local badPlanetaryLabs = {}
|
||||
local badPlanetaryLabNames = {}
|
||||
local playersToKickFromPlanetaryLabs = {}
|
||||
local zoneIndex = remote.call(SpaceExploration.name, "get_zone_index", {})
|
||||
|
||||
for name, surfaceData in pairs(global.seSurfaces) do
|
||||
if not surfaceData.orbital then
|
||||
local zone = remote.call(SpaceExploration.name, "get_zone_from_name", {
|
||||
zone_name = name,
|
||||
})
|
||||
local rootZone = SpaceExploration.GetRootZone(zoneIndex, zone)
|
||||
if SpaceExploration.IsZoneThreatening(zone)
|
||||
or rootZone.special_type == "homesystem" then
|
||||
table.insert(badPlanetaryLabs, {
|
||||
zoneName = name,
|
||||
sandboxForceName = surfaceData.sandboxForceName,
|
||||
})
|
||||
badPlanetaryLabNames[name] = true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
for index, player in pairs(game.players) do
|
||||
local playerData = global.players[index]
|
||||
if playerData.insideSandbox == planetaryLabId
|
||||
and badPlanetaryLabNames[player.surface.name]
|
||||
then
|
||||
table.insert(playersToKickFromPlanetaryLabs, player)
|
||||
end
|
||||
end
|
||||
|
||||
for _, player in pairs(playersToKickFromPlanetaryLabs) do
|
||||
log("Kicking Player out of Planetary Lab: " .. player.name)
|
||||
Sandbox.Exit(player)
|
||||
end
|
||||
|
||||
for _, surfaceData in pairs(badPlanetaryLabs) do
|
||||
log("Destroying Planetary Lab: " .. surfaceData.zoneName)
|
||||
SpaceExploration.DeleteSandbox(
|
||||
global.sandboxForces[surfaceData.sandboxForceName],
|
||||
surfaceData.zoneName
|
||||
)
|
||||
local message = "Unfortunately, your Planetary Sandbox was generated in a " ..
|
||||
"non-ideal or dangerous location, so it was destroyed. Accessing " ..
|
||||
"the Sandbox again will create a new one in a safer location."
|
||||
game.forces[surfaceData.sandboxForceName].print(message)
|
||||
game.forces[global.sandboxForces[surfaceData.sandboxForceName].forceName].print(message)
|
||||
end
|
||||
end
|
||||
|
||||
log("Migration 1.10.1 Finished")
|
||||
end
|
||||
|
||||
function Migrate.v1_11_1()
|
||||
--[[
|
||||
dangOreus was applying to Labs and causing significant lag
|
||||
]]
|
||||
|
||||
log("Migration 1.11.1 Starting")
|
||||
|
||||
if remote.interfaces["dangOreus"] then
|
||||
for labName, _ in pairs(global.labSurfaces) do
|
||||
pcall(remote.call, "dangOreus", "toggle", labName)
|
||||
end
|
||||
end
|
||||
|
||||
log("Migration 1.11.1 Finished")
|
||||
end
|
||||
|
||||
function Migrate.v1_11_3_surface(surfaceName)
|
||||
local surface = game.surfaces[surfaceName]
|
||||
if not surface then
|
||||
return
|
||||
end
|
||||
|
||||
local entitiesToSwap = surface.find_entities_filtered({ name = Illusion.realNameFilters, })
|
||||
for _, entity in pairs(entitiesToSwap) do
|
||||
Illusion.ReplaceIfNecessary(entity)
|
||||
end
|
||||
|
||||
local ghostsToSwap = surface.find_entities_filtered({ ghost_name = Illusion.realNameFilters, })
|
||||
for _, entity in pairs(ghostsToSwap) do
|
||||
Illusion.ReplaceIfNecessary(entity)
|
||||
end
|
||||
end
|
||||
|
||||
function Migrate.v1_11_3()
|
||||
--[[
|
||||
1.11.0 did not include a migration of real-to-illusion Entities,
|
||||
but it was found that some older Entities combined with Space Exploration 0.6
|
||||
could cause a crash.
|
||||
]]
|
||||
|
||||
log("Migration 1.11.3 Starting")
|
||||
|
||||
for surfaceName, _ in pairs(global.labSurfaces) do
|
||||
Migrate.v1_11_3_surface(surfaceName)
|
||||
end
|
||||
|
||||
for surfaceName, _ in pairs(global.seSurfaces) do
|
||||
Migrate.v1_11_3_surface(surfaceName)
|
||||
end
|
||||
|
||||
log("Migration 1.11.3 Finished")
|
||||
end
|
||||
|
||||
function Migrate.v1_15_0()
|
||||
--[[
|
||||
1.15.0 introduced a default Equipment Inventory for each Sandbox
|
||||
]]
|
||||
|
||||
log("Migration 1.15.0 Starting")
|
||||
|
||||
for surfaceName, surfaceData in pairs(global.labSurfaces) do
|
||||
surfaceData.equipmentBlueprints = Equipment.Init(Lab.equipmentString)
|
||||
end
|
||||
|
||||
for surfaceName, surfaceData in pairs(global.seSurfaces) do
|
||||
if (surfaceData.orbital) then
|
||||
surfaceData.equipmentBlueprints = Equipment.Init(SpaceExploration.orbitalEquipmentString)
|
||||
else
|
||||
surfaceData.equipmentBlueprints = Equipment.Init(Lab.equipmentString)
|
||||
end
|
||||
end
|
||||
|
||||
log("Migration 1.15.0 Finished")
|
||||
end
|
||||
|
||||
function Migrate.v1_16_4()
|
||||
--[[
|
||||
1.16.4 introduced an alternative Equipment placement technique
|
||||
]]
|
||||
|
||||
log("Migration 1.16.4 Starting")
|
||||
|
||||
global.equipmentInProgress = {}
|
||||
|
||||
log("Migration 1.16.4 Finished")
|
||||
end
|
||||
|
||||
function Migrate.v1_16_6()
|
||||
--[[
|
||||
1.16.6 added Remote Interface support for Editor Extensions
|
||||
]]
|
||||
|
||||
log("Migration 1.16.6 Starting")
|
||||
|
||||
for _, force in pairs(game.forces) do
|
||||
if Sandbox.IsSandboxForce(force) then
|
||||
EditorExtensionsCheats.EnableTestingRecipes(force)
|
||||
end
|
||||
end
|
||||
|
||||
log("Migration 1.16.6 Finished")
|
||||
end
|
||||
|
||||
return Migrate
|
||||
Reference in New Issue
Block a user