Добавлен мод blueprint-sandboxes Добавляет метку версии в zzzparanoidal (#72)
106 lines
4.2 KiB
Lua
106 lines
4.2 KiB
Lua
-- Managing the Research of each Force's Sandboxes
|
|
local Research = {}
|
|
|
|
-- Set a Force's Sandboxes Research equal to that of the Force's (or all research)
|
|
function Research.Sync(originalForce, sandboxForce)
|
|
if settings.global[Settings.allowAllTech].value then
|
|
sandboxForce.research_all_technologies()
|
|
log("Researching everything for: " .. sandboxForce.name)
|
|
else
|
|
for tech, _ in pairs(game.technology_prototypes) do
|
|
sandboxForce.technologies[tech].researched = originalForce.technologies[tech].researched
|
|
sandboxForce.technologies[tech].level = originalForce.technologies[tech].level
|
|
end
|
|
log("Copied all Research from: " .. originalForce.name .. " -> " .. sandboxForce.name)
|
|
end
|
|
end
|
|
|
|
-- Set a Force's Sandboxes Research Queue equal to that of the Force's
|
|
function Research.SyncQueue(originalForce, sandboxForce)
|
|
if settings.global[Settings.allowAllTech].value then
|
|
sandboxForce.research_queue = nil
|
|
log("Emptying Research Queue for: " .. sandboxForce.name)
|
|
else
|
|
local newQueue = {}
|
|
for _, tech in pairs(originalForce.research_queue) do
|
|
table.insert(newQueue, tech.name)
|
|
end
|
|
sandboxForce.research_queue = newQueue
|
|
log("Copied Research Queue from: " .. originalForce.name .. " -> " .. sandboxForce.name)
|
|
end
|
|
end
|
|
|
|
-- Enable the Infinity Input/Output Recipes
|
|
function Research.EnableSandboxSpecificResearch(force)
|
|
if global.sandboxForces[force.name].hiddenItemsUnlocked == true then
|
|
return
|
|
end
|
|
log("Unlocking hidden Recipes for: " .. force.name)
|
|
|
|
if force.recipes[BPSB.pfx .. "loader"] then
|
|
force.recipes[BPSB.pfx .. "loader"].enabled = true
|
|
force.recipes[BPSB.pfx .. "fast-loader"].enabled = true
|
|
force.recipes[BPSB.pfx .. "express-loader"].enabled = true
|
|
end
|
|
|
|
force.recipes[BPSB.pfx .. "electric-energy-interface"].enabled = true
|
|
force.recipes[BPSB.pfx .. "infinity-chest"].enabled = true
|
|
force.recipes[BPSB.pfx .. "infinity-pipe"].enabled = true
|
|
|
|
for name, recipe in pairs(force.recipes) do
|
|
if Resources.IsResourcePlanner(name) or Tiles.IsTilePlanner(name) then
|
|
recipe.enabled = true
|
|
end
|
|
end
|
|
|
|
EditorExtensionsCheats.EnableTestingRecipes(force)
|
|
|
|
global.sandboxForces[force.name].hiddenItemsUnlocked = true
|
|
end
|
|
|
|
-- For all Forces with Sandboxes, Sync their Research
|
|
function Research.SyncAllForces()
|
|
for _, force in pairs(game.forces) do
|
|
if not Sandbox.IsSandboxForce(force) then
|
|
local sandboxForce = game.forces[Sandbox.NameFromForce(force)]
|
|
if sandboxForce then
|
|
Research.Sync(force, sandboxForce)
|
|
Research.SyncQueue(force, sandboxForce)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- As a Force's Research changes, keep the Force's Sandboxes in-sync
|
|
function Research.OnResearched(event)
|
|
if not settings.global[Settings.allowAllTech].value then
|
|
local force = event.research.force
|
|
if not Sandbox.IsSandboxForce(force) then
|
|
local sandboxForce = game.forces[Sandbox.NameFromForce(force)]
|
|
if sandboxForce then
|
|
log("New Research: " .. event.research.name .. " from " .. force.name .. " -> " .. sandboxForce.name)
|
|
sandboxForce.technologies[event.research.name].researched = force.technologies[event.research.name].researched
|
|
sandboxForce.technologies[event.research.name].level = force.technologies[event.research.name].level
|
|
sandboxForce.play_sound { path = "utility/research_completed" }
|
|
Research.SyncQueue(force, sandboxForce)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- As a Force's Research Queue changes, show it in the Force's Sandboxes
|
|
function Research.OnResearchStarted(event)
|
|
if not settings.global[Settings.allowAllTech].value then
|
|
local force = event.research.force
|
|
if not Sandbox.IsSandboxForce(force) then
|
|
local sandboxForce = game.forces[Sandbox.NameFromForce(force)]
|
|
if sandboxForce then
|
|
log("New Research Queued: " .. event.research.name .. " from " .. force.name .. " -> " .. sandboxForce.name)
|
|
Research.SyncQueue(force, sandboxForce)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
return Research
|