1
0
mirror of https://github.com/Oarcinae/FactorioScenarioMultiplayerSpawn.git synced 2024-12-12 10:13:58 +02:00
FactorioScenarioMultiplayer.../control.lua

266 lines
7.4 KiB
Lua
Raw Normal View History

-- control.lua
2017-04-26 01:33:58 +02:00
-- Apr 2017
2016-11-10 12:22:32 +02:00
-- Oarc's Separated Spawn Scenario
--
-- I wanted to create a scenario that allows you to spawn in separate locations
-- From there, I ended up adding a bunch of other minor/major features
2016-11-10 12:22:32 +02:00
--
-- Credit:
-- RSO mod to RSO author - Orzelek - I contacted him via the forum
-- Tags - Taken from WOGs scenario
-- Rocket Silo - Taken from Frontier as an idea
--
-- Feel free to re-use anything you want. It would be nice to give me credit
-- if you can.
2016-11-10 12:22:32 +02:00
--
-- Follow server info on @_Oarc_
2016-11-10 12:22:32 +02:00
-- To keep the scenario more manageable I have done the following:
-- 1. Keep all event calls in control.lua (here)
-- 2. Put all config options in config.lua
-- 3. Put mods into their own files where possible (RSO has multiple)
2016-11-10 12:22:32 +02:00
2016-12-28 18:33:09 +02:00
-- Generic Utility Includes
require("locale/oarc_utils")
require("locale/rso/rso_control")
require("locale/frontier_silo")
require("locale/tag")
-- Main Configuration File
require("config")
2016-12-28 18:33:09 +02:00
-- Scenario Specific Includes
require("separate_spawns")
require("separate_spawns_guis")
2016-11-10 12:22:32 +02:00
--------------------------------------------------------------------------------
-- Rocket Launch Event Code
-- Controls the "win condition"
--------------------------------------------------------------------------------
function RocketLaunchEvent(event)
2016-11-10 12:22:32 +02:00
local force = event.rocket.force
2016-11-10 12:22:32 +02:00
if event.rocket.get_item_count("satellite") == 0 then
for index, player in pairs(force.players) do
player.print("You launched the rocket, but you didn't put a satellite inside.")
end
return
end
if not global.satellite_sent then
global.satellite_sent = {}
end
if global.satellite_sent[force.name] then
global.satellite_sent[force.name] = global.satellite_sent[force.name] + 1
else
game.set_game_state{game_finished=true, player_won=true, can_continue=true}
global.satellite_sent[force.name] = 1
end
for index, player in pairs(force.players) do
if player.gui.left.rocket_score then
player.gui.left.rocket_score.rocket_count.caption = tostring(global.satellite_sent[force.name])
else
local frame = player.gui.left.add{name = "rocket_score", type = "frame", direction = "horizontal", caption="Score"}
frame.add{name="rocket_count_label", type = "label", caption={"", "Satellites launched", ":"}}
frame.add{name="rocket_count", type = "label", caption=tostring(global.satellite_sent[force.name])}
end
end
end
--------------------------------------------------------------------------------
-- ALL EVENT HANLDERS ARE HERE IN ONE PLACE!
--------------------------------------------------------------------------------
----------------------------------------
-- On Init - only runs once the first
-- time the game starts
----------------------------------------
script.on_init(function(event)
-- CreateLobbySurface() -- Currently unused, but have plans for future.
-- Here I create the game surface. I do this so that I don't have to worry
-- about the game menu settings and I can now generate a map from the command
-- line more easily!
--
-- If you are using RSO, map settings are ignored and you MUST configure
-- the relevant map settings in config.lua
--
-- If you disable RSO, the map settings will be set from the ones that you
-- choose from the game GUI when you start a new scenario.
if ENABLE_RSO then
CreateGameSurface(RSO_MODE)
else
CreateGameSurface(VANILLA_MODE)
end
if ENABLE_SEPARATE_SPAWNS then
InitSpawnGlobalsAndForces()
end
if ENABLE_RANDOM_SILO_POSITION then
SetRandomSiloPosition()
else
SetFixedSiloPosition()
end
if FRONTIER_ROCKET_SILO_MODE then
ChartRocketSiloArea(game.forces[MAIN_FORCE], game.surfaces[GAME_SURFACE_NAME])
end
2016-12-16 20:45:30 +02:00
global.welcome_msg = WELCOME_MSG
global.welcome_msg_title = WELCOME_MSG_TITLE
end)
----------------------------------------
-- Freeplay rocket launch info
-- Slightly modified for my purposes
----------------------------------------
script.on_event(defines.events.on_rocket_launched, function(event)
if FRONTIER_ROCKET_SILO_MODE then
RocketLaunchEvent(event)
end
end)
----------------------------------------
-- Chunk Generation
----------------------------------------
script.on_event(defines.events.on_chunk_generated, function(event)
if ENABLE_UNDECORATOR then
UndecorateOnChunkGenerate(event)
end
if ENABLE_RSO then
RSO_ChunkGenerated(event)
end
if FRONTIER_ROCKET_SILO_MODE then
GenerateRocketSiloChunk(event)
end
-- This MUST come after RSO generation!
if ENABLE_SEPARATE_SPAWNS then
SeparateSpawnsGenerateChunk(event)
end
end)
----------------------------------------
-- Gui Click
----------------------------------------
script.on_event(defines.events.on_gui_click, function(event)
if ENABLE_TAGS then
TagGuiClick(event)
end
if ENABLE_PLAYER_LIST then
PlayerListGuiClick(event)
end
if ENABLE_SEPARATE_SPAWNS then
WelcomeTextGuiClick(event)
SpawnOptsGuiClick(event)
SpawnCtrlGuiClick(event)
SharedSpwnOptsGuiClick(event)
end
end)
----------------------------------------
-- Player Events
----------------------------------------
script.on_event(defines.events.on_player_joined_game, function(event)
PlayerJoinedMessages(event)
if ENABLE_TAGS then
CreateTagGui(event)
end
if ENABLE_PLAYER_LIST then
CreatePlayerListGui(event)
end
end)
script.on_event(defines.events.on_player_created, function(event)
-- Move the player to the game surface immediately.
-- May change this to Lobby in the future.
game.players[event.player_index].teleport(game.forces[MAIN_FORCE].get_spawn_position(GAME_SURFACE_NAME), GAME_SURFACE_NAME)
SetOarcServerMessages(event)
if ENABLE_LONGREACH then
GivePlayerLongReach(game.players[event.player_index])
end
if not ENABLE_SEPARATE_SPAWNS then
PlayerSpawnItems(event)
else
SeparateSpawnsPlayerCreated(event)
end
end)
2017-04-26 01:33:58 +02:00
-- Disabled as of 0.15.x
-- Gravestone is now part of vanilla game! WOO!
-- script.on_event(defines.events.on_player_died, function(event)
-- if ENABLE_GRAVESTONE_CHESTS then
-- CreateGravestoneChestsOnDeath(event)
-- end
-- end)
script.on_event(defines.events.on_player_respawned, function(event)
if not ENABLE_SEPARATE_SPAWNS then
PlayerRespawnItems(event)
else
SeparateSpawnsPlayerRespawned(event)
end
if ENABLE_LONGREACH then
GivePlayerLongReach(game.players[event.player_index])
end
end)
script.on_event(defines.events.on_player_left_game, function(event)
if ENABLE_SEPARATE_SPAWNS then
FindUnusedSpawns(event)
end
end)
2016-12-16 20:45:30 +02:00
script.on_event(defines.events.on_built_entity, function(event)
if ENABLE_AUTOFILL then
Autofill(event)
end
end)
----------------------------------------
-- On Research Finished
-- This is where you can permanently remove researched techs
----------------------------------------
script.on_event(defines.events.on_research_finished, function(event)
if FRONTIER_ROCKET_SILO_MODE then
RemoveRecipe(event.research.force, "rocket-silo")
end
2016-11-10 12:22:32 +02:00
end)
----------------------------------------
2017-04-26 01:33:58 +02:00
-- Other?
----------------------------------------
2017-04-26 01:33:58 +02:00
-- script.on_event(defines.events.on_robot_built_entity, function(event)
-- end)