1007 lines
32 KiB
Lua
1007 lines
32 KiB
Lua
require ("util")
|
|
local mod_gui = require ("mod-gui")
|
|
|
|
|
|
MOD_NAME = "SpaceMod"
|
|
|
|
global = global or {}
|
|
|
|
if global.launchMult == nil then
|
|
|
|
global.launchProfile = settings.startup["SpaceX-launch-profile"].value
|
|
if global.launchProfile == "Classic" then
|
|
global.launchMult = 1
|
|
elseif global.launchProfile == "Launch Mania(x5)" then
|
|
global.launchMult = 5
|
|
elseif global.launchProfile == "Launch Meglo-mania(x25)" then
|
|
global.launchMult = 25
|
|
else
|
|
global.launchMult = 1
|
|
end
|
|
|
|
end
|
|
|
|
local launchMult = global.launchMult
|
|
spaceshiprequirements = {
|
|
satellite = 7 * launchMult,
|
|
drydockstructure = 10 * launchMult,
|
|
drydockcommand = 2 * launchMult,
|
|
shipcasings = 10 * launchMult,
|
|
shipthrusters = 4 * launchMult,
|
|
shiptprotectionfield = 1 * launchMult,
|
|
shipfusionreactor = 1 * launchMult,
|
|
shipfuelcells = 2 * launchMult,
|
|
shiphabitation = 1 * launchMult,
|
|
shiplifesupport = 1 * launchMult,
|
|
shipastrometrics = 1 * launchMult,
|
|
shipcommand = 1 * launchMult,
|
|
shipftldrive = 1 * launchMult
|
|
}
|
|
|
|
local function glob_init()
|
|
|
|
global = global or {}
|
|
global.requirements = spaceshiprequirements
|
|
if global.launches == nil then
|
|
global.launches = {
|
|
satellite = 0,
|
|
drydockstructure = 0,
|
|
drydockcommand = 0,
|
|
shipcasings = 0,
|
|
shipthrusters = 0,
|
|
shiptprotectionfield = 0,
|
|
shipfusionreactor = 0,
|
|
shipfuelcells = 0,
|
|
shiphabitation = 0,
|
|
shiplifesupport = 0,
|
|
shipastrometrics = 0,
|
|
shipcommand = 0,
|
|
shipftldrive = 0
|
|
}
|
|
end
|
|
end
|
|
|
|
function debugp(text)
|
|
-- for _, player in pairs(game.players) do
|
|
-- player.print(text)
|
|
-- end
|
|
end
|
|
|
|
local function gui_init(player, after_research)
|
|
|
|
local button = mod_gui.get_button_flow(player).space_toggle_button
|
|
if button then
|
|
if player.force.technologies["rocket-silo"].researched ~= true then
|
|
button.destroy()
|
|
end
|
|
return
|
|
end
|
|
|
|
if (player.force.technologies["rocket-silo"].researched or after_research) then
|
|
|
|
-- player.gui.top.add{
|
|
mod_gui.get_button_flow(player).add{
|
|
type = "button",
|
|
name = "space_toggle_button",
|
|
style = mod_gui.button_style,
|
|
caption = {"space-toggle-button-caption"}
|
|
}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
local function on_player_created(event)
|
|
gui_init(game.players[event.player_index], false)
|
|
end
|
|
|
|
|
|
function gui_open_frame(player)
|
|
|
|
local frame = mod_gui.get_frame_flow(player).space_progress_frame
|
|
|
|
-- if frame then
|
|
if not frame then return end
|
|
frame.clear()
|
|
|
|
-- Now we can build the GUI.
|
|
|
|
-- Launch history, if any
|
|
if global.spacex == nil then
|
|
elseif global.spacex > 0 then
|
|
local ltext = "Interstellar Launches: " .. global.spacex
|
|
local launch = frame.add{type = "table", name = "launch_info", column_count = 2, style = "SpaceMod_table_style"}
|
|
launch.add{type = "label", caption = ltext, style = "caption_label"}
|
|
launch.add{
|
|
type = "button",
|
|
name = "launch_log",
|
|
style = mod_gui.button_style,
|
|
caption = "Log",
|
|
tooltip = {"spacex-log-tooltip"}
|
|
}
|
|
end
|
|
|
|
local sat_title = frame.add{type = "label", caption = {"satellite-network-progress-title"}, style = "caption_label"}
|
|
local satellite = frame.add{type = "table", name = "satellite", column_count = 2, style = "SpaceMod_table_style"}
|
|
satellite.style.column_alignments[2] = "right"
|
|
-- satellite.add{type = "label", caption = "-Satellites launched : "}
|
|
satellite.add{type = "label", caption = {"SpaceX-Progress.satellites"} }
|
|
satellite.add{type = "label", caption = " : " .. global.launches.satellite .. "/" .. global.requirements.satellite}
|
|
|
|
|
|
-- Test for satellite network established condition
|
|
if global.launches.satellite < global.requirements.satellite then
|
|
return
|
|
end
|
|
|
|
-- drydock_frame_title(drydock)
|
|
local drydock_title = frame.add{type = "label", caption = {"drydock-progress-title"}, style = "caption_label"}
|
|
local drydock = frame.add{type = "table", name = "drydock", column_count = 2, style = "SpaceMod_table_style"}
|
|
drydock.style.column_alignments[2] = "right"
|
|
-- drydock.add{type = "label", caption = "-Drydock Structure Component : "}
|
|
drydock.add{type = "label", caption = {"SpaceX-Progress.dsc"} }
|
|
drydock.add{type = "label", caption = " : " .. global.launches.drydockstructure .. "/" .. global.requirements.drydockstructure}
|
|
-- drydock.add{type = "label", caption = "-Drydock Assembly Component : "}
|
|
drydock.add{type = "label", caption = {"SpaceX-Progress.dac"} }
|
|
drydock.add{type = "label", caption = " : " .. global.launches.drydockcommand .. "/" .. global.requirements.drydockcommand}
|
|
|
|
-- Test for drydock built condition
|
|
if (global.launches.drydockstructure < global.requirements.drydockstructure or
|
|
global.launches.drydockcommand < global.requirements.drydockcommand) then
|
|
return
|
|
end
|
|
|
|
local ship_title = frame.add{type = "label", caption = {"ship-progress-title"}, style = "caption_label"}
|
|
local gui_ship = frame.add{type = "table", name = "ship", column_count = 2, style = "SpaceMod_table_style"}
|
|
gui_ship.style.column_alignments[2] = "right"
|
|
-- gui_ship.add{type = "label", caption = "-Protection Field...... : "}
|
|
gui_ship.add{type = "label", caption = {"SpaceX-Progress.protection"} }
|
|
gui_ship.add{type = "label", caption = " : " .. global.launches.shiptprotectionfield .. "/" .. global.requirements.shiptprotectionfield}
|
|
-- gui_ship.add{type = "label", caption = "-Fusion Reactor........ : "}
|
|
gui_ship.add{type = "label", caption = {"SpaceX-Progress.fusion"} }
|
|
gui_ship.add{type = "label", caption = " : " .. global.launches.shipfusionreactor .. "/" .. global.requirements.shipfusionreactor }
|
|
-- gui_ship.add{type = "label", caption = "-Habitation............... : "}
|
|
gui_ship.add{type = "label", caption = {"SpaceX-Progress.habitation"} }
|
|
gui_ship.add{type = "label", caption = " : " .. global.launches.shiphabitation .. "/" .. global.requirements.shiphabitation}
|
|
-- gui_ship.add{type = "label", caption = "-Life Support........... : "}
|
|
gui_ship.add{type = "label", caption = {"SpaceX-Progress.life"} }
|
|
gui_ship.add{type = "label", caption = " : " .. global.launches.shiplifesupport .. "/" .. global.requirements.shiplifesupport}
|
|
-- gui_ship.add{type = "label", caption = "-Astrometrics.......... : "}
|
|
gui_ship.add{type = "label", caption = {"SpaceX-Progress.astro"} }
|
|
gui_ship.add{type = "label", caption = " : " .. global.launches.shipastrometrics .. "/" .. global.requirements.shipastrometrics}
|
|
-- gui_ship.add{type = "label", caption = "-Command................ : "}
|
|
gui_ship.add{type = "label", caption = {"SpaceX-Progress.command"} }
|
|
gui_ship.add{type = "label", caption = " : " .. global.launches.shipcommand .. "/" .. global.requirements.shipcommand}
|
|
-- gui_ship.add{type = "label", caption = "-Fuel Cells............... : "}
|
|
gui_ship.add{type = "label", caption = {"SpaceX-Progress.fuel"} }
|
|
gui_ship.add{type = "label", caption = " : " .. global.launches.shipfuelcells .. "/" .. global.requirements.shipfuelcells}
|
|
-- gui_ship.add{type = "label", caption = "-Thrusters.............. : "}
|
|
gui_ship.add{type = "label", caption = {"SpaceX-Progress.thrusters"} }
|
|
gui_ship.add{type = "label", caption = " : " .. global.launches.shipthrusters .. "/" .. global.requirements.shipthrusters}
|
|
-- gui_ship.add{type = "label", caption = "-Hull components.. : "}
|
|
gui_ship.add{type = "label", caption = {"SpaceX-Progress.hull"} }
|
|
gui_ship.add{type = "label", caption = " : " .. global.launches.shipcasings .. "/" .. global.requirements.shipcasings}
|
|
-- gui_ship.add{type = "label", caption = "-FTL drive............. : "}
|
|
gui_ship.add{type = "label", caption = {"SpaceX-Progress.ftl"} }
|
|
gui_ship.add{type = "label", caption = " : " .. global.launches.shipftldrive .. "/" .. global.requirements.shipftldrive}
|
|
|
|
end
|
|
|
|
script.on_configuration_changed( function(event)
|
|
local changed = event.mod_changes and event.mod_changes["SpaceMod"]
|
|
|
|
if changed then
|
|
debugp("Processing mod change")
|
|
global.spacex_com = global.spacex_com or {}
|
|
for _,surface in pairs(game.surfaces) do
|
|
debugp("Surface found")
|
|
for _,spacexCom in pairs(surface.find_entities_filtered{type="constant-combinator", name="spacex-combinator"}) do
|
|
debugp("Found an old spacex combinator")
|
|
table.insert(global.spacex_com, {entity = spacexCom})
|
|
end
|
|
end
|
|
local status,err = pcall(function()
|
|
|
|
if game.players ~= nil then
|
|
for _, player in pairs(game.players) do
|
|
local frame = player.gui.left["space-progress-frame"]
|
|
if frame then
|
|
frame.destroy()
|
|
end
|
|
local button = player.gui.top["space-toggle-button"]
|
|
if button then
|
|
button.destroy()
|
|
end
|
|
gui_init(player, player.force.technologies["rocket-silo"].researched)
|
|
|
|
player.print("Mod version changed processed")
|
|
end
|
|
end
|
|
for _, force in pairs(game.forces) do
|
|
if force.technologies["space-assembly"].researched then
|
|
force.recipes["spacex-combinator"].enabled=true
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
end)
|
|
|
|
-- local function on_gui_click(event)
|
|
|
|
|
|
-- end
|
|
|
|
local function gui_open_spacex_launch_gui(player)
|
|
local gui = mod_gui.get_frame_flow(player)
|
|
local gui_spacex = gui.spacex_launch
|
|
if gui_spacex then
|
|
gui_spacex.destroy()
|
|
return
|
|
end
|
|
gui_spacex = gui.add{
|
|
type = "frame",
|
|
name = "spacex_launch",
|
|
direction = "vertical",
|
|
style = mod_gui.frame_style
|
|
}
|
|
if not gui_spacex then return end
|
|
gui_spacex.clear()
|
|
local sub_title = gui_spacex.add{type = "label", caption = {"spacex-launch-title"}, style = "caption_label"}
|
|
-- local sxtxt_table = gui_spacex.add{type = "table", name = "spacex_launchtxt_table", column_count = 1}
|
|
gui_spacex.add{type = "label", caption = {"spacex-completion-text"}, style = "Launch_label_style"}
|
|
gui_spacex.add{type = "label", caption = " ", style = "Launch_label_style"}
|
|
gui_spacex.add{type = "label", caption = {"spacex-completion-text1"}, style = "Launch_label_style"}
|
|
gui_spacex.add{type = "label", caption = " ", style = "Launch_label_style"}
|
|
gui_spacex.add{type = "label", caption = {"spacex-completion-text2"}, style = "Launch_label_style"}
|
|
gui_spacex.add{type = "label", caption = " ", style = "Launch_label_style"}
|
|
gui_spacex.add{type = "label", caption = {"spacex-completion-text3"}, style = "Launch_label_style"}
|
|
gui_spacex.add{type = "label", caption = " ", style = "Launch_label_style"}
|
|
gui_spacex.add{type = "label", caption = {"spacex-completion-text4"}, style = "caption_label"}
|
|
gui_spacex.add{type = "label", caption = " ", style = "Launch_label_style"}
|
|
-- local sxtext = gui_spacex.add{type = "label", text = stext, style = "Launch_text_box_style"}
|
|
if player.admin then
|
|
local sctable = gui_spacex.add{type = "table", name = "spacex_launch_table", column_count = 2, style = "SpaceMod_table_style"}
|
|
sctable.style.minimal_width = 400
|
|
sctable.style.horizontally_stretchable = "on"
|
|
sctable.style.column_alignments[2] = "right"
|
|
sctable.add{
|
|
type = "button",
|
|
name = "bio_button",
|
|
style = mod_gui.button_style,
|
|
caption = {"spacex-bio-game"},
|
|
tooltip = {"spacex-bio-tooltip"}
|
|
}
|
|
local iwmm = sctable.add{
|
|
type = "button",
|
|
name = "iwmm_button",
|
|
style = mod_gui.button_style,
|
|
caption = {"spacex-bio-end"},
|
|
tooltip = {"spacex-iwmm-tooltip"}
|
|
}
|
|
else
|
|
gui_spacex.add{
|
|
type = "button",
|
|
name = "notadmin_button",
|
|
style = mod_gui.button_style,
|
|
caption = "Admins Choice!",
|
|
tooltip = {"spacex-notadmin-tooltip"}
|
|
}
|
|
end
|
|
end
|
|
|
|
local function get_launch_log()
|
|
global.launch_log = global.launch_log or {}
|
|
local seconds = 60
|
|
local minutes = 60 * seconds
|
|
local hours = 60 * minutes
|
|
local days = 24 * hours
|
|
|
|
local log_tick = game.tick
|
|
local log_days = (log_tick - (log_tick % days)) / days
|
|
log_tick = log_tick - (log_days * days)
|
|
local log_hours = (log_tick - (log_tick % hours)) / hours
|
|
log_tick = log_tick - (log_hours * hours)
|
|
local log_minutes = (log_tick - (log_tick % minutes)) / minutes
|
|
log_tick = log_tick - (log_minutes * minutes)
|
|
local log_seconds = (log_tick - (log_tick % seconds)) / seconds
|
|
log_entry = log_days .. " Days: " .. log_hours .. " Hours: " .. log_minutes .. " Minutes: " .. log_seconds .. " Seconds"
|
|
return log_entry
|
|
end
|
|
|
|
local function gui_log_open(player)
|
|
local gui = mod_gui.get_frame_flow(player)
|
|
local llog = gui.spacex_log
|
|
local scroll = llog.add{type = "scroll-pane", name = "scroll"}
|
|
scroll.style.maximal_height = 800
|
|
local logtable = scroll.add{type = "table", name = "spacex_log_table", column_count = 2, style = "SpaceMod_table_style"}
|
|
for i,launch in pairs(global.launch_log) do
|
|
logtable.add{type = "label", caption = "#" .. i .. "- " .. launch.log, style = "Launch_label_style"}
|
|
if player.admin then
|
|
logtable.add{type = "textfield", name = "logdetail" .. i, enabled = true, text = launch.detail}
|
|
else
|
|
logtable.add{type = "textfield", name = "logdetail" .. i, enabled = false, text = launch.detail}
|
|
end
|
|
end
|
|
end
|
|
|
|
script.on_event(defines.events.on_gui_text_changed, function(event)
|
|
local element = event.element
|
|
local player = game.players[event.player_index]
|
|
|
|
if string.find(element.name, "logdetail") then
|
|
if player.admin then
|
|
local cur_log = tonumber(string.match(element.name, "%d+"))
|
|
global.launch_log[cur_log].detail = element.text
|
|
end
|
|
end
|
|
|
|
end)
|
|
|
|
function get_spacex_cb(entity)
|
|
if entity.valid == true then
|
|
local cb = entity.get_or_create_control_behavior()
|
|
-- cb.parameters = cb.parameters or {}
|
|
local satellite = global.requirements.satellite - global.launches.satellite
|
|
local dsc = global.requirements.drydockstructure - global.launches.drydockstructure
|
|
local dac = global.requirements.drydockcommand - global.launches.drydockcommand
|
|
local fusion = global.requirements.shipfusionreactor - global.launches.shipfusionreactor
|
|
local fuelcell = global.requirements.shipfuelcells - global.launches.shipfuelcells
|
|
local hull = global.requirements.shipcasings - global.launches.shipcasings
|
|
local shield = global.requirements.shiptprotectionfield - global.launches.shiptprotectionfield
|
|
local thruster = global.requirements.shipthrusters - global.launches.shipthrusters
|
|
local habitation = global.requirements.shiphabitation - global.launches.shiphabitation
|
|
local life = global.requirements.shiplifesupport - global.launches.shiplifesupport
|
|
local command = global.requirements.shipcommand - global.launches.shipcommand
|
|
local astro = global.requirements.shipastrometrics - global.launches.shipastrometrics
|
|
local ftl = global.requirements.shipftldrive - global.launches.shipftldrive
|
|
local params = nil
|
|
|
|
if satellite > 0 then
|
|
debugp("spacex satellite")
|
|
cb.parameters = {
|
|
{
|
|
signal = {
|
|
type = "item",
|
|
name = "satellite"
|
|
},
|
|
count = satellite,
|
|
index = 1
|
|
},
|
|
{
|
|
signal = {
|
|
type = "virtual",
|
|
name = "signal-S"
|
|
},
|
|
count = 1,
|
|
index = 2
|
|
}
|
|
}
|
|
elseif (dsc > 0) or (dac > 0) then
|
|
debugp("spacex drydock")
|
|
cb.parameters = {
|
|
{
|
|
signal = {
|
|
type = "item",
|
|
name = "drydock-structural"
|
|
},
|
|
count = dsc,
|
|
index = 1
|
|
},
|
|
{
|
|
signal = {
|
|
type = "item",
|
|
name = "drydock-assembly"
|
|
},
|
|
count = dac,
|
|
index = 2
|
|
},
|
|
{
|
|
signal = {
|
|
type = "virtual",
|
|
name = "signal-S"
|
|
},
|
|
count = 2,
|
|
index = 3
|
|
}
|
|
}
|
|
elseif (fusion > 0) or
|
|
(fuelcell > 0) or
|
|
(hull > 0) or
|
|
(shield > 0) or
|
|
(thruster > 0) or
|
|
(habitation > 0) or
|
|
(life > 0) or
|
|
(command > 0) or
|
|
(astro > 0) or
|
|
(ftl > 0) then
|
|
debugp("spacex endphase")
|
|
cb.parameters = {
|
|
{
|
|
signal = {
|
|
type = "item",
|
|
name = "fusion-reactor"
|
|
},
|
|
count = fusion,
|
|
index = 1
|
|
},
|
|
{
|
|
signal = {
|
|
type = "item",
|
|
name = "hull-component"
|
|
},
|
|
count = hull,
|
|
index = 2
|
|
},
|
|
{
|
|
signal = {
|
|
type = "item",
|
|
name = "protection-field"
|
|
},
|
|
count = shield,
|
|
index = 3
|
|
},
|
|
{
|
|
signal = {
|
|
type = "item",
|
|
name = "space-thruster"
|
|
},
|
|
count = thruster,
|
|
index = 4
|
|
},
|
|
{
|
|
signal = {
|
|
type = "item",
|
|
name = "fuel-cell"
|
|
},
|
|
count = fuelcell,
|
|
index = 5
|
|
},
|
|
{
|
|
signal = {
|
|
type = "item",
|
|
name = "habitation"
|
|
},
|
|
count = habitation,
|
|
index = 6
|
|
},
|
|
{
|
|
signal = {
|
|
type = "item",
|
|
name = "life-support"
|
|
},
|
|
count = life,
|
|
index = 7
|
|
},
|
|
{
|
|
signal = {
|
|
type = "item",
|
|
name = "command"
|
|
},
|
|
count = command,
|
|
index = 8
|
|
},
|
|
{
|
|
signal = {
|
|
type = "item",
|
|
name = "astrometrics"
|
|
},
|
|
count = astro,
|
|
index = 9
|
|
},
|
|
{
|
|
signal = {
|
|
type = "item",
|
|
name = "ftl-drive"
|
|
},
|
|
count = ftl,
|
|
index = 10
|
|
},
|
|
{
|
|
signal = {
|
|
type = "virtual",
|
|
name = "signal-S"
|
|
},
|
|
count = 3,
|
|
index = 11
|
|
}
|
|
}
|
|
else
|
|
cb.parameters = {}
|
|
end
|
|
|
|
-- cb.parameters = {parameters = {
|
|
-- {
|
|
-- signal = {
|
|
-- type = "virtual",
|
|
-- name = "train-counter"
|
|
-- },
|
|
-- count = traincount,
|
|
-- index = 1
|
|
-- }
|
|
-- }}
|
|
end
|
|
end
|
|
|
|
function remove_spacex_com(entity)
|
|
for i, coms in ipairs(global.spacex_com) do
|
|
if coms.entity == entity then
|
|
table.remove(global.spacex_com, i)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
script.on_event(defines.events.on_built_entity, function(event)
|
|
if event.created_entity.name == "spacex-combinator" then
|
|
debugp("Spacex combinator built")
|
|
global.spacex_com = global.spacex_com or {}
|
|
event.created_entity.operable = false
|
|
table.insert(global.spacex_com, {entity = event.created_entity})
|
|
get_spacex_cb(event.created_entity)
|
|
end
|
|
-- if event.entity.name == "spacex-combinator" then
|
|
-- debugp("inserting spacex combinator")
|
|
-- table.insert(global.spacex_com, {entity = event.entity})
|
|
-- end
|
|
end)
|
|
|
|
script.on_event(defines.events.on_robot_built_entity, function(event)
|
|
if event.created_entity.name == "spacex-combinator" then
|
|
debugp("Spacex combinator built")
|
|
global.spacex_com = global.spacex_com or {}
|
|
event.created_entity.operable = false
|
|
table.insert(global.spacex_com, {entity = event.created_entity})
|
|
get_spacex_cb(event.created_entity)
|
|
end
|
|
-- if event.created_entity.name == "spacex-combinator" then
|
|
-- table.insert(global.spacex_com, {entity = event.created_entity})
|
|
-- end
|
|
end)
|
|
|
|
script.on_event(defines.events.on_pre_player_mined_item, function(event)
|
|
if event.entity.name == "spacex-combinator" then
|
|
remove_spacex_com(event.entity)
|
|
end
|
|
end)
|
|
|
|
script.on_event(defines.events.on_robot_pre_mined, function(event)
|
|
if event.entity.name == "spacex-combinator" then
|
|
remove_spacex_com(event.entity)
|
|
end
|
|
end)
|
|
|
|
script.on_event(defines.events.on_entity_died, function(event)
|
|
if event.entity.name == "spacex-combinator" then
|
|
remove_spacex_com(event.entity)
|
|
end
|
|
end)
|
|
|
|
local function updateSpacexCombinators(surface)
|
|
-- for _,spacexCom in pairs(surface.find_entities_filtered{type="constant-combinator", name="spacex-combinator"}) do
|
|
global.spacex_com = global.spacex_com or {}
|
|
if global.spacex_com == {} then return end
|
|
for _,spacexCom in pairs(global.spacex_com) do
|
|
debugp("spacex combinator found")
|
|
get_spacex_cb(spacexCom.entity)
|
|
end
|
|
end
|
|
|
|
local function spacex_continue(surface)
|
|
global.launches = nil
|
|
glob_init()
|
|
updateSpacexCombinators(surface)
|
|
if global.spacex == nil then global.spacex = 0 end
|
|
global.spacex = global.spacex + 1
|
|
global.launch_log = global.launch_log or {}
|
|
local launch_log = {log = get_launch_log(), detail = "?"}
|
|
-- launch_log.detail = "?"
|
|
table.insert(global.launch_log, launch_log )
|
|
end
|
|
|
|
script.on_event(defines.events.on_gui_click, function(event)
|
|
|
|
local element = event.element
|
|
local player = game.players[event.player_index]
|
|
local gui = mod_gui.get_frame_flow(player)
|
|
local frame = gui.space_progress_frame
|
|
local gui_spacex = gui.spacex_launch
|
|
local spacex_log = gui.spacex_log
|
|
|
|
if element.name == "space_toggle_button" then
|
|
if frame then
|
|
frame.destroy()
|
|
return
|
|
end
|
|
frame = gui.add{
|
|
type = "frame",
|
|
name = "space_progress_frame",
|
|
direction = "vertical",
|
|
caption = {"space-progress-frame-title"},
|
|
style = mod_gui.frame_style
|
|
}
|
|
gui_open_frame(player)
|
|
|
|
end
|
|
|
|
if element.name == "bio_button" then
|
|
for _, player in pairs(game.players) do
|
|
-- Close every launch gui
|
|
gui_open_spacex_launch_gui(player)
|
|
end
|
|
spacex_continue(player.surface, gui)
|
|
--[[ global.launches = nil
|
|
glob_init()
|
|
updateSpacexCombinators(player.surface)
|
|
if global.spacex == nil then global.spacex = 0 end
|
|
global.spacex = global.spacex + 1
|
|
global.launch_log = global.launch_log or {}
|
|
local launch_log = {log = get_launch_log(), detail = "?"}
|
|
-- launch_log.detail = "?"
|
|
table.insert(global.launch_log, launch_log ) ]]
|
|
if frame then
|
|
frame.destroy()
|
|
end
|
|
if gui_spacex then
|
|
gui_spacex.destroy()
|
|
end
|
|
frame = gui.add{
|
|
type = "frame",
|
|
name = "space_progress_frame",
|
|
direction = "vertical",
|
|
caption = {"space-progress-frame-title"},
|
|
style = mod_gui.frame_style
|
|
}
|
|
gui_open_frame(player)
|
|
return
|
|
end
|
|
if element.name == "iwmm_button" then
|
|
for _, player in pairs(game.players) do
|
|
-- Close every launch gui
|
|
gui_open_spacex_launch_gui(player)
|
|
end
|
|
if gui_spacex then
|
|
gui_spacex.destroy()
|
|
end
|
|
game.set_game_state{game_finished=true, player_won=true, can_continue=true}
|
|
global.finished = true
|
|
return
|
|
end
|
|
|
|
if element.name == "launch_log" then
|
|
if spacex_log then
|
|
spacex_log.destroy()
|
|
return
|
|
end
|
|
log = gui.add{
|
|
type = "frame",
|
|
name = "spacex_log",
|
|
direction = "vertical",
|
|
caption = {"gui-log-title"},
|
|
style = mod_gui.frame_style
|
|
}
|
|
gui_log_open(player)
|
|
end
|
|
|
|
if element.name == "gnc_button" then
|
|
open_gnc_msg(player)
|
|
return
|
|
end
|
|
|
|
if element.name == "drydock_button" then
|
|
open_drydock_msg(player)
|
|
return
|
|
end
|
|
|
|
if element.name == "notadmin_button" then
|
|
gui_open_spacex_launch_gui(player)
|
|
return
|
|
end
|
|
|
|
-- if player.gui.left["rocket_score"] ~= nil then
|
|
-- player.gui.left["rocket_score"].destroy()
|
|
-- end
|
|
|
|
end)
|
|
|
|
function open_gnc_msg(player)
|
|
local gui = mod_gui.get_frame_flow(player)
|
|
local gui_gnc = gui.gnc_msg
|
|
if gui_gnc then
|
|
gui_gnc.destroy()
|
|
return
|
|
end
|
|
gui_gnc = gui.add{
|
|
type = "frame",
|
|
name = "gnc_msg",
|
|
direction = "vertical",
|
|
caption = {"gnc-title"},
|
|
style = mod_gui.frame_style
|
|
}
|
|
gui_gnc.add{type = "label", caption = {"satellite-network-text1"}, style = "Launch_label_style"}
|
|
gui_gnc.add{type = "button",
|
|
name = "gnc_button",
|
|
style = mod_gui.button_style,
|
|
caption = "Great!",
|
|
tooltip = {"gnc-tooltip"}
|
|
}
|
|
end
|
|
|
|
function open_drydock_msg(player)
|
|
local gui = mod_gui.get_frame_flow(player)
|
|
local gui_drydock = gui.drydock_msg
|
|
if gui_drydock then
|
|
gui_drydock.destroy()
|
|
return
|
|
end
|
|
gui_drydock = gui.add{
|
|
type = "frame",
|
|
name = "drydock_msg",
|
|
direction = "vertical",
|
|
caption = {"drydock-title"},
|
|
style = mod_gui.frame_style
|
|
}
|
|
gui_drydock.add{type = "label", caption = {"drydock-text1"}, style = "Launch_label_style"}
|
|
gui_drydock.add{type = "button",
|
|
name = "drydock_button",
|
|
style = mod_gui.button_style,
|
|
caption = "Awesome!",
|
|
tooltip = {"drydock-tooltip"}
|
|
}
|
|
end
|
|
|
|
script.on_event(defines.events.on_research_finished, function(event)
|
|
|
|
if event.research.name == 'rocket-silo' then
|
|
for _, player in pairs(game.players) do
|
|
gui_init(player, true)
|
|
end
|
|
end
|
|
|
|
end)
|
|
|
|
script.on_init(function()
|
|
|
|
glob_init()
|
|
|
|
for _, player in pairs(game.players) do
|
|
gui_init(player, false)
|
|
end
|
|
|
|
end)
|
|
|
|
-- script.on_event(defines.events.on_built_entity, function(event)
|
|
-- if event.created_entity.name == "spacex-combinator" then
|
|
-- debugp("Spacex combinator built")
|
|
-- event.created_entity.operable = false
|
|
-- get_spacex_cb(event.created_entity)
|
|
-- end
|
|
-- end)
|
|
|
|
script.on_event(defines.events.on_player_created, on_player_created)
|
|
|
|
|
|
script.on_event(defines.events.on_rocket_launched, function(event)
|
|
local status,err = pcall(function()
|
|
remote.call("silo_script","set_show_launched_without_satellite", false)
|
|
remote.call("silo_script","set_finish_on_launch", false)
|
|
end)
|
|
local force = event.rocket.force
|
|
if event.rocket.get_item_count("satellite") > 0 then
|
|
if global.launches.satellite < global.requirements.satellite then
|
|
global.launches.satellite = global.launches.satellite + 1
|
|
if global.launches.satellite == global.requirements.satellite then
|
|
|
|
for _, player in pairs(game.players) do
|
|
player.print({"satellite-network-complete-msg"})
|
|
if settings.global['SpaceX-no-popup'].value == false then
|
|
open_gnc_msg(player)
|
|
end
|
|
end
|
|
end
|
|
updateSpacexCombinators(event.rocket.surface)
|
|
end
|
|
game.set_game_state{game_finished=false, player_won=false, can_continue=true}
|
|
|
|
-- for index, player in pairs(force.players) do
|
|
-- if player.gui.left["rocket_score"] ~= nil then
|
|
-- player.gui.left["rocket_score"].destroy()
|
|
-- end
|
|
-- end
|
|
for _, player in pairs(game.players) do
|
|
-- frame = player.gui.left["space-progress-frame"]
|
|
local frame = mod_gui.get_frame_flow(player).space_progress_frame
|
|
if frame then
|
|
frame.clear()
|
|
gui_open_frame(player)
|
|
end
|
|
end
|
|
|
|
return
|
|
end
|
|
|
|
if event.rocket.get_item_count("drydock-structural") > 0 then
|
|
if global.launches.drydockstructure < global.requirements.drydockstructure then
|
|
global.launches.drydockstructure = global.launches.drydockstructure + 1
|
|
end
|
|
|
|
end
|
|
|
|
if event.rocket.get_item_count("drydock-assembly") > 0 then
|
|
if global.launches.drydockcommand < global.requirements.drydockcommand then
|
|
global.launches.drydockcommand = global.launches.drydockcommand + 1
|
|
end
|
|
|
|
end
|
|
|
|
-- local condition = (ship == nil) and (global.launches.drydockstructure = global.requirements.drydockstructure) and (global.launches.drydockcommand = globallaunches.drydockcommand)
|
|
|
|
if ((event.rocket.get_item_count("drydock-structural") > 0 or event.rocket.get_item_count("drydock-assembly") > 0) and
|
|
global.launches.drydockstructure == global.requirements.drydockstructure and
|
|
global.launches.drydockcommand == global.requirements.drydockcommand) then
|
|
for _, player in pairs(game.players) do
|
|
player.print({"drydock-complete-msg"})
|
|
if settings.global['SpaceX-no-popup'].value == false then
|
|
open_drydock_msg(player)
|
|
end
|
|
updateSpacexCombinators(event.rocket.surface)
|
|
end
|
|
end
|
|
|
|
if event.rocket.get_item_count("fusion-reactor") > 0 then
|
|
if global.launches.shipfusionreactor < global.requirements.shipfusionreactor then
|
|
global.launches.shipfusionreactor = global.launches.shipfusionreactor + 1
|
|
end
|
|
|
|
end
|
|
|
|
if event.rocket.get_item_count("fuel-cell") > 0 then
|
|
if global.launches.shipfuelcells < global.requirements.shipfuelcells then
|
|
global.launches.shipfuelcells = global.launches.shipfuelcells + 1
|
|
end
|
|
|
|
end
|
|
|
|
if event.rocket.get_item_count("hull-component") > 0 then
|
|
if global.launches.shipcasings < global.requirements.shipcasings then
|
|
global.launches.shipcasings = global.launches.shipcasings + 1
|
|
end
|
|
|
|
end
|
|
|
|
if event.rocket.get_item_count("protection-field") > 0 then
|
|
if global.launches.shiptprotectionfield < global.requirements.shiptprotectionfield then
|
|
global.launches.shiptprotectionfield = global.launches.shiptprotectionfield + 1
|
|
end
|
|
|
|
end
|
|
|
|
if event.rocket.get_item_count("space-thruster") > 0 then
|
|
if global.launches.shipthrusters < global.requirements.shipthrusters then
|
|
global.launches.shipthrusters = global.launches.shipthrusters + 1
|
|
end
|
|
|
|
end
|
|
|
|
if event.rocket.get_item_count("habitation") > 0 then
|
|
if global.launches.shiphabitation < global.requirements.shiphabitation then
|
|
global.launches.shiphabitation = global.launches.shiphabitation + 1
|
|
end
|
|
|
|
end
|
|
|
|
if event.rocket.get_item_count("life-support") > 0 then
|
|
if global.launches.shiplifesupport < global.requirements.shiplifesupport then
|
|
global.launches.shiplifesupport = global.launches.shiplifesupport + 1
|
|
end
|
|
|
|
end
|
|
|
|
if event.rocket.get_item_count("command") > 0 then
|
|
if global.launches.shipcommand < global.requirements.shipcommand then
|
|
global.launches.shipcommand = global.launches.shipcommand + 1
|
|
end
|
|
|
|
end
|
|
|
|
if event.rocket.get_item_count("astrometrics") > 0 then
|
|
if global.launches.shipastrometrics < global.requirements.shipastrometrics then
|
|
global.launches.shipastrometrics = global.launches.shipastrometrics + 1
|
|
end
|
|
|
|
end
|
|
|
|
if event.rocket.get_item_count("ftl-drive") > 0 then
|
|
if global.launches.shipftldrive < global.requirements.shipftldrive then
|
|
global.launches.shipftldrive = global.launches.shipftldrive + 1
|
|
end
|
|
end
|
|
|
|
-- Test for victory condition
|
|
global.finished = global.finished or false
|
|
|
|
if global.launches.shipfusionreactor == global.requirements.shipfusionreactor and
|
|
global.launches.shipcasings == global.requirements.shipcasings and
|
|
global.launches.shiptprotectionfield == global.requirements.shiptprotectionfield and
|
|
global.launches.shipthrusters == global.requirements.shipthrusters and
|
|
global.launches.shiphabitation == global.requirements.shiphabitation and
|
|
global.launches.shiplifesupport == global.requirements.shiplifesupport and
|
|
global.launches.shipfuelcells == global.requirements.shipfuelcells and
|
|
global.launches.shipcommand == global.requirements.shipcommand and
|
|
global.launches.shipastrometrics == global.requirements.shipastrometrics and
|
|
global.launches.shipftldrive == global.requirements.shipftldrive and
|
|
global.finished == false then
|
|
if settings.global['SpaceX-auto-continue'].value == false then
|
|
for _, player in pairs(game.players) do
|
|
player.print({"spaceship-complete-msg"})
|
|
gui_open_spacex_launch_gui(player)
|
|
end
|
|
else
|
|
spacex_continue(event.rocket.surface)
|
|
end
|
|
-- game.set_game_state{game_finished=true, player_won=true, can_continue=true}
|
|
-- global.finished = true
|
|
end
|
|
for _, player in pairs(game.players) do
|
|
frame = mod_gui.get_frame_flow(player).space_progress_frame
|
|
if frame then
|
|
gui_open_frame(player)
|
|
end
|
|
end
|
|
updateSpacexCombinators(event.rocket.surface)
|
|
-- if (#game.players <= 1) then
|
|
-- ipc.keypress(9)
|
|
-- end
|
|
end)
|
|
|
|
commands.add_command("resetSpaceX", {"resetSpaceX_help"}, function(event)
|
|
global.finished = false
|
|
end)
|
|
|
|
commands.add_command("modlist", {"modlist_help"}, function(event)
|
|
for name, version in pairs(game.active_mods) do
|
|
game.player.print(name .. " version " .. version)
|
|
end
|
|
end)
|
|
|
|
commands.add_command("spacex_settings", {"x_settings_help"}, function(event)
|
|
game.player.print("research" .. settings.startup["SpaceX-research"].value)
|
|
|
|
end)
|
|
|
|
commands.add_command("Get_log_file", {"get log file help"}, function(event)
|
|
game.write_file("spacex_log",serpent.block(global.launch_log),{comment=false})
|
|
end)
|
|
|
|
commands.add_command("spacex_combinators", {"get spacex_combinator help"}, function(event)
|
|
game.write_file("spacex_combinator",serpent.block(global.spacex_com),{comment=false})
|
|
end)
|
|
|
|
--Cheat command
|
|
--[[ commands.add_command("SpaceX_complete_launch_cycle", {"SpaceX_cheat_help"}, function(event)
|
|
global.launches.satellite = global.requirements.satellite
|
|
global.launches.drydockstructure = global.requirements.drydockstructure
|
|
global.launches.drydockcommand = global.requirements.drydockcommand
|
|
global.launches.shipfusionreactor = global.requirements.shipfusionreactor
|
|
global.launches.shipcasings = global.requirements.shipcasings
|
|
global.launches.shiptprotectionfield = global.requirements.shiptprotectionfield
|
|
global.launches.shipthrusters = global.requirements.shipthrusters
|
|
global.launches.shiphabitation = global.requirements.shiphabitation
|
|
global.launches.shiplifesupport = global.requirements.shiplifesupport
|
|
global.launches.shipfuelcells = global.requirements.shipfuelcells
|
|
global.launches.shipcommand = global.requirements.shipcommand
|
|
global.launches.shipastrometrics = global.requirements.shipastrometrics
|
|
global.launches.shipftldrive = global.requirements.shipftldrive - 1
|
|
updateSpacexCombinators(game.player.surface)
|
|
end)
|
|
|
|
commands.add_command("SpaceX_complete_satellite", {"SpaceX_cheat_sat_help"}, function(event)
|
|
global.launches.satellite = global.requirements.satellite - 1
|
|
updateSpacexCombinators(game.player.surface)
|
|
end)
|
|
|
|
commands.add_command("SpaceX_complete_drydock", {"SpaceX_cheat_dry_help"}, function(event)
|
|
global.launches.satellite = global.requirements.satellite
|
|
global.launches.drydockstructure = global.requirements.drydockstructure - 1
|
|
global.launches.drydockcommand = global.requirements.drydockcommand
|
|
updateSpacexCombinators(game.player.surface)
|
|
end) ]] |