Добавлен мод blueprint-sandboxes Добавляет метку версии в zzzparanoidal (#72)
238 lines
8.6 KiB
Lua
238 lines
8.6 KiB
Lua
-- Required by basically everything immediately
|
|
BPSB = require("scripts.bpsb")
|
|
Events = require("scripts.events")
|
|
Settings = require("scripts.settings")
|
|
Debug = require("scripts.debug")
|
|
Queue = require("scripts.queue")
|
|
|
|
-- Required by some
|
|
Illusion = require("scripts.illusion")
|
|
EditorExtensionsCheats = require("scripts.editor-extensions-cheats")
|
|
|
|
-- Required, but not ordered importantly
|
|
Init = require("scripts.init")
|
|
Chat = require("scripts.chat")
|
|
Equipment = require("scripts.equipment")
|
|
Factorissimo = require("scripts.factorissimo")
|
|
Force = require("scripts.force")
|
|
God = require("scripts.god")
|
|
Inventory = require("scripts.inventory")
|
|
Lab = require("scripts.lab")
|
|
Migrate = require("scripts.migrate")
|
|
Research = require("scripts.research")
|
|
Resources = require("scripts.resources")
|
|
Tiles = require("scripts.tiles")
|
|
ToggleGUI = require("scripts.toggle-gui")
|
|
|
|
-- Required by Sandbox
|
|
SpaceExploration = require("scripts.space-exploration")
|
|
|
|
-- Requires SpaceExploration method immediately
|
|
Sandbox = require("scripts.sandbox")
|
|
|
|
require('scripts.remote-interface')
|
|
|
|
-- Initializations
|
|
|
|
script.on_init(function()
|
|
Init.FirstTimeInit()
|
|
Settings.SetupConditionalHandlers()
|
|
end)
|
|
|
|
script.on_event(defines.events.on_player_created, function(event)
|
|
local player = game.players[event.player_index]
|
|
log("on_player_created index: " .. event.player_index)
|
|
Force.Init(player.force)
|
|
Init.Player(player)
|
|
end)
|
|
|
|
script.on_event(defines.events.on_player_removed, function(event)
|
|
local playerData = global.players[event.player_index]
|
|
log("on_player_removed index: " .. event.player_index)
|
|
Lab.DeleteLab(playerData.labName)
|
|
if playerData.sandboxInventory then
|
|
playerData.sandboxInventory.destroy()
|
|
end
|
|
if playerData.preSandboxInventory then
|
|
playerData.preSandboxInventory.destroy()
|
|
end
|
|
global.players[event.player_index] = nil
|
|
end)
|
|
|
|
script.on_event(defines.events.on_force_created, function(event)
|
|
log("on_force_created name: " .. event.force.name)
|
|
Force.Init(event.force)
|
|
end)
|
|
|
|
-- Conditional Event Listeners
|
|
|
|
script.on_load(Settings.SetupConditionalHandlers)
|
|
|
|
script.on_event(defines.events.on_runtime_mod_setting_changed, Settings.OnRuntimeSettingChanged)
|
|
|
|
-- Important Game Events
|
|
|
|
script.on_configuration_changed(function(event)
|
|
for _, sandboxForceData in pairs(global.sandboxForces) do
|
|
-- Ensure that new automatic recipes aren't hidden
|
|
sandboxForceData.hiddenItemsUnlocked = false
|
|
end
|
|
--[[ TODO:
|
|
There's a bug related to this section if a Player is currently
|
|
inside of a Sandbox while loading a Save where the Configuration
|
|
Changed. The above hiddenItemsUnlocked flag is reset, since for
|
|
some reason the Recipes will have disappeared again, but of
|
|
course there's nothing here to enable them again!
|
|
That's because the enabling code doesn't seem to work anywhere
|
|
outside of right-after the Player has been swapped to their
|
|
Sandbox Force (see the to-do over there).
|
|
Currently, if that same code is used here, the flag will be true,
|
|
but the Recipes are still hidden, so they'll be stuck hidden!
|
|
]]
|
|
|
|
Migrate.Run()
|
|
Research.SyncAllForces()
|
|
end)
|
|
|
|
script.on_event(defines.events.on_player_changed_force, function(event)
|
|
local player = game.players[event.player_index]
|
|
Force.Init(player.force)
|
|
Sandbox.OnPlayerForceChanged(player)
|
|
end)
|
|
|
|
script.on_event(defines.events.on_forces_merged, function(event)
|
|
Force.Init(event.destination)
|
|
Force.Merge(event.source_name, event.destination)
|
|
end)
|
|
|
|
script.on_event(defines.events.on_player_promoted, function(event)
|
|
local player = game.players[event.player_index]
|
|
ToggleGUI.Update(player)
|
|
end)
|
|
|
|
script.on_event(defines.events.on_player_demoted, function(event)
|
|
local player = game.players[event.player_index]
|
|
ToggleGUI.Update(player)
|
|
end)
|
|
|
|
script.on_event(defines.events.on_console_chat, Chat.OnChat)
|
|
|
|
script.on_event(defines.events.on_research_finished, Research.OnResearched)
|
|
script.on_event(defines.events.on_research_reversed, Research.OnResearched)
|
|
script.on_event(defines.events.on_research_started, Research.OnResearchStarted)
|
|
|
|
script.on_event(defines.events.on_player_changed_surface, function(event)
|
|
local player = game.players[event.player_index]
|
|
Sandbox.OnPlayerSurfaceChanged(player)
|
|
ToggleGUI.Update(player)
|
|
end)
|
|
|
|
script.on_event(defines.events.on_surface_created, function(event)
|
|
local surface = game.surfaces[event.surface_index]
|
|
local _ = Lab.AfterCreate(surface) or SpaceExploration.AfterCreate(surface)
|
|
local _ = Lab.Equip(surface) or SpaceExploration.Equip(surface)
|
|
end)
|
|
|
|
script.on_event(defines.events.on_surface_cleared, function(event)
|
|
return Lab.Equip(game.surfaces[event.surface_index])
|
|
or SpaceExploration.Equip(game.surfaces[event.surface_index])
|
|
end)
|
|
|
|
script.on_event(defines.events.on_chunk_generated, function(event)
|
|
local equipmentData = global.equipmentInProgress[event.surface.name]
|
|
if equipmentData then
|
|
Equipment.BuildBlueprint(
|
|
equipmentData.stack,
|
|
equipmentData.surface,
|
|
equipmentData.forceName
|
|
)
|
|
end
|
|
end)
|
|
|
|
script.on_event(defines.events.on_pre_surface_deleted, function(event)
|
|
local surface = game.surfaces[event.surface_index]
|
|
if global.labSurfaces[surface.name] then
|
|
global.labSurfaces[surface.name] = nil
|
|
end
|
|
local surfaceData = global.seSurfaces[surface.name]
|
|
if surfaceData then
|
|
local sandboxForceData = global.sandboxForces[surfaceData.sandboxForceName]
|
|
SpaceExploration.PreDeleteSandbox(sandboxForceData, surface.name)
|
|
end
|
|
end)
|
|
|
|
script.on_event(defines.events.on_surface_renamed, function(event)
|
|
-- TODO: Renaming surfaces likely doesn't really work
|
|
if global.labSurfaces[event.old_name] then
|
|
global.labSurfaces[event.new_name] = global.labSurfaces[event.old_name]
|
|
global.labSurfaces[event.old_name] = nil
|
|
end
|
|
local surfaceData = global.seSurfaces[event.old_name]
|
|
if surfaceData then
|
|
local sandboxForceData = global.sandboxForces[surfaceData.sandboxForceName]
|
|
if sandboxForceData.sePlanetaryLabZoneName == event.old_name then
|
|
sandboxForceData.sePlanetaryLabZoneName = event.new_name
|
|
end
|
|
if sandboxForceData.seOrbitalSandboxZoneName == event.old_name then
|
|
sandboxForceData.seOrbitalSandboxZoneName = event.new_name
|
|
end
|
|
global.seSurfaces[event.new_name] = global.seSurfaces[event.old_name]
|
|
global.seSurfaces[event.old_name] = nil
|
|
end
|
|
end)
|
|
|
|
script.on_event(defines.events.on_marked_for_deconstruction, God.OnMarkedForDeconstruct)
|
|
script.on_event(defines.events.on_marked_for_upgrade, God.OnMarkedForUpgrade)
|
|
script.on_event(defines.events.on_built_entity, function(event)
|
|
God.OnBuiltEntity(event.created_entity)
|
|
end, God.onBuiltEntityFilters)
|
|
script.on_event(defines.events.script_raised_built, function(event)
|
|
God.OnBuiltEntity(event.entity)
|
|
end, God.onBuiltEntityFilters)
|
|
script.on_event(defines.events.on_player_crafted_item, God.OnPlayerCraftedItem)
|
|
script.on_event(defines.events.on_player_main_inventory_changed, God.OnInventoryChanged)
|
|
|
|
script.on_event(defines.events.on_player_setup_blueprint, Illusion.OnBlueprintSetup)
|
|
|
|
-- TODO: on_entity_settings_pasted
|
|
|
|
script.on_event(defines.events.on_player_selected_area, function(event)
|
|
Resources.OnAreaSelected(event, true)
|
|
end)
|
|
script.on_event(defines.events.on_player_alt_selected_area, function(event)
|
|
Resources.OnAreaSelected(event, false)
|
|
end)
|
|
|
|
-- Internal
|
|
|
|
script.on_event(Events.on_daylight_changed_event, function(event)
|
|
log("on_daylight_changed_event from player: " .. event.player_index)
|
|
for _, player in pairs(game.players) do
|
|
if player.index ~= event.player_index
|
|
and player.surface.name == event.surface_name
|
|
then
|
|
ToggleGUI.Update(player)
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- Shortcuts
|
|
|
|
script.on_event(ToggleGUI.toggleShortcut, ToggleGUI.OnToggleShortcut)
|
|
script.on_event(defines.events.on_lua_shortcut, ToggleGUI.OnToggleShortcut)
|
|
|
|
-- GUI
|
|
|
|
script.on_event(defines.events.on_gui_click, ToggleGUI.OnGuiClick)
|
|
script.on_event(defines.events.on_gui_value_changed, ToggleGUI.OnGuiValueChanged)
|
|
script.on_event(defines.events.on_gui_selection_state_changed, ToggleGUI.OnGuiDropdown)
|
|
|
|
script.on_event(defines.events.on_gui_closed, function(event)
|
|
if (event.gui_type == defines.gui_type.blueprint_library) then
|
|
-- We know this won't work, but we'll do it to print a message anyway
|
|
Illusion.OnBlueprintGUIClosed(event)
|
|
elseif (event.gui_type == defines.gui_type.item) then
|
|
Illusion.OnBlueprintGUIClosed(event)
|
|
end
|
|
end)
|