Add ready rocket silo with custom GUI
This commit is contained in:
parent
0a795f5668
commit
51a61cd2e0
11 changed files with 441 additions and 98 deletions
26
lignumis/_migrations/lignumis-0.9.9.lua
Normal file
26
lignumis/_migrations/lignumis-0.9.9.lua
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
local RocketSilo = require("scripts/wooden-rocket-silo")
|
||||||
|
|
||||||
|
if not storage.rocket_silos then
|
||||||
|
storage.rocket_silos = {}
|
||||||
|
end
|
||||||
|
|
||||||
|
if not game.planets["lignumis"] then return end
|
||||||
|
|
||||||
|
local lignumis = game.planets["lignumis"].surface
|
||||||
|
|
||||||
|
for _, silo in pairs(lignumis.find_entities_filtered { name = "provisional-rocket-silo" }) do
|
||||||
|
local found = false
|
||||||
|
for _, entry in pairs(storage.rocket_silos) do
|
||||||
|
if entry.real_silo == silo then
|
||||||
|
found = true
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if not found then
|
||||||
|
RocketSilo.events[defines.events.on_script_trigger_effect]({
|
||||||
|
effect_id = "provisional-rocket-ready",
|
||||||
|
surface_index = lignumis.index,
|
||||||
|
cause_entity = silo
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,10 +1,12 @@
|
||||||
local handler = require("event_handler")
|
local handler = require("event_handler")
|
||||||
|
gui = require("__flib__/gui")
|
||||||
|
|
||||||
handler.add_libraries({
|
handler.add_libraries({
|
||||||
require("script/init-existing"),
|
require("scripts/init-existing"),
|
||||||
require("script/init-new"),
|
require("scripts/init-new"),
|
||||||
require("script/init"),
|
require("scripts/init"),
|
||||||
require("script/to-nauvis")
|
require("scripts/to-nauvis"),
|
||||||
|
require("scripts/wooden-rocket-silo")
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
"base",
|
"base",
|
||||||
"space-age >= 2.0.28",
|
"space-age >= 2.0.28",
|
||||||
|
"flib",
|
||||||
"PlanetsLib >= 1.1.26",
|
"PlanetsLib >= 1.1.26",
|
||||||
"astroponics >= 1.2.0",
|
"astroponics >= 1.2.0",
|
||||||
"cf-lib >= 0.0.2",
|
"cf-lib >= 0.0.2",
|
||||||
|
|
|
@ -31,6 +31,7 @@ gold-storage-tank=Gold storage tank
|
||||||
desiccation-furnace=Desiccation furnace
|
desiccation-furnace=Desiccation furnace
|
||||||
steam-assembling-machine=Steam assembling machine
|
steam-assembling-machine=Steam assembling machine
|
||||||
provisional-rocket-silo=Provisional rocket silo
|
provisional-rocket-silo=Provisional rocket silo
|
||||||
|
provisional-rocket-silo-ready=Provisional rocket silo (ready)
|
||||||
basic-gun-turret=Basic gun turret
|
basic-gun-turret=Basic gun turret
|
||||||
basic-construction-robot-gold=Basic construction robot (gold)
|
basic-construction-robot-gold=Basic construction robot (gold)
|
||||||
basic-construction-robot-copper=Basic construction robot (copper)
|
basic-construction-robot-copper=Basic construction robot (copper)
|
||||||
|
@ -167,3 +168,6 @@ quality-catalyst=Quality catalyst
|
||||||
|
|
||||||
[lignumis]
|
[lignumis]
|
||||||
start-new-game=Lignumis is meant to be played in a fresh game as it extends the early game before Nauvis.
|
start-new-game=Lignumis is meant to be played in a fresh game as it extends the early game before Nauvis.
|
||||||
|
provisional-rocket-silo-button=Escape to Nauvis
|
||||||
|
provisional-rocket-silo-button-tooltip=Your personal inventory must be empty!
|
||||||
|
provisional-rocket-silo-description=Fill the rocket inventory and launch the rocket to escape to Nauvis.\nBe sure to take material to jumpstart your iron, copper and wood production.
|
|
@ -32,10 +32,6 @@ data:extend({
|
||||||
space_location = "nauvis",
|
space_location = "nauvis",
|
||||||
use_icon_overlay_constant = true
|
use_icon_overlay_constant = true
|
||||||
},
|
},
|
||||||
{
|
|
||||||
type = "unlock-recipe",
|
|
||||||
recipe = "destination-nauvis"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
type = "unlock-space-platforms",
|
type = "unlock-space-platforms",
|
||||||
modifier = true,
|
modifier = true,
|
||||||
|
|
|
@ -6,7 +6,7 @@ local silo = table.deepcopy(data.raw["rocket-silo"]["rocket-silo"])
|
||||||
silo.name = "provisional-rocket-silo"
|
silo.name = "provisional-rocket-silo"
|
||||||
silo.icon = "__lignumis__/graphics/icons/provisional-rocket-silo.png"
|
silo.icon = "__lignumis__/graphics/icons/provisional-rocket-silo.png"
|
||||||
silo.module_slots = 0
|
silo.module_slots = 0
|
||||||
silo.allowed_effects = { "consumption", "pollution" }
|
silo.allowed_effects = { "consumption", "pollution", "speed" }
|
||||||
silo.minable = { mining_time = 1, result = "provisional-rocket-silo" }
|
silo.minable = { mining_time = 1, result = "provisional-rocket-silo" }
|
||||||
silo.max_health = 1000
|
silo.max_health = 1000
|
||||||
silo.energy_source = {
|
silo.energy_source = {
|
||||||
|
@ -30,7 +30,7 @@ silo.emissions_per_second = { noise = 1000 / 60 }
|
||||||
silo.energy_usage = "1MW"
|
silo.energy_usage = "1MW"
|
||||||
silo.rocket_entity = "provisional-rocket"
|
silo.rocket_entity = "provisional-rocket"
|
||||||
silo.fixed_recipe = "provisional-rocket-part"
|
silo.fixed_recipe = "provisional-rocket-part"
|
||||||
silo.door_opening_speed = 1 / (20 * 60)
|
--silo.door_opening_speed = 1 / (20 * 60)
|
||||||
silo.base_day_sprite.filename = "__lignumis__/graphics/entity/wooden-rocket-silo/06-rocket-silo.png"
|
silo.base_day_sprite.filename = "__lignumis__/graphics/entity/wooden-rocket-silo/06-rocket-silo.png"
|
||||||
silo.base_front_sprite.filename = "__lignumis__/graphics/entity/wooden-rocket-silo/14-rocket-silo-front.png"
|
silo.base_front_sprite.filename = "__lignumis__/graphics/entity/wooden-rocket-silo/14-rocket-silo-front.png"
|
||||||
silo.fluid_boxes = {
|
silo.fluid_boxes = {
|
||||||
|
@ -45,8 +45,13 @@ silo.fluid_boxes = {
|
||||||
}
|
}
|
||||||
silo.fluid_boxes_off_when_no_fluid_recipe = true
|
silo.fluid_boxes_off_when_no_fluid_recipe = true
|
||||||
silo.launch_to_space_platforms = false
|
silo.launch_to_space_platforms = false
|
||||||
silo.rocket_parts_storage_cap = 50
|
silo.rocket_parts_required = 1
|
||||||
silo.to_be_inserted_to_rocket_inventory_size = 20
|
silo.rocket_parts_storage_cap = 1
|
||||||
|
silo.to_be_inserted_to_rocket_inventory_size = 1
|
||||||
|
silo.clamps_on_trigger = {
|
||||||
|
type = "script",
|
||||||
|
effect_id = "provisional-rocket-ready"
|
||||||
|
}
|
||||||
|
|
||||||
local silo_item = table.deepcopy(data.raw["item"]["rocket-silo"])
|
local silo_item = table.deepcopy(data.raw["item"]["rocket-silo"])
|
||||||
silo_item.name = "provisional-rocket-silo"
|
silo_item.name = "provisional-rocket-silo"
|
||||||
|
@ -67,10 +72,11 @@ silo_recipe.ingredients = {
|
||||||
|
|
||||||
local rocket = table.deepcopy(data.raw["rocket-silo-rocket"]["rocket-silo-rocket"])
|
local rocket = table.deepcopy(data.raw["rocket-silo-rocket"]["rocket-silo-rocket"])
|
||||||
rocket.name = "provisional-rocket"
|
rocket.name = "provisional-rocket"
|
||||||
rocket.rising_speed = 1 / (14 * 60)
|
rocket.inventory_size = 40
|
||||||
rocket.engine_starting_speed = 1 / (11 * 60)
|
--rocket.rising_speed = 1 / (14 * 60)
|
||||||
rocket.flying_speed = 1 / (4000 * 60)
|
--rocket.engine_starting_speed = 1 / (11 * 60)
|
||||||
rocket.flying_acceleration = 0.005
|
--rocket.flying_speed = 1 / (4000 * 60)
|
||||||
|
--rocket.flying_acceleration = 0.005
|
||||||
rocket.rocket_sprite.layers[1].filename = "__lignumis__/graphics/entity/wooden-rocket-silo/rocket-static-pod.png"
|
rocket.rocket_sprite.layers[1].filename = "__lignumis__/graphics/entity/wooden-rocket-silo/rocket-static-pod.png"
|
||||||
|
|
||||||
local rocket_part_recipe = {
|
local rocket_part_recipe = {
|
||||||
|
@ -92,28 +98,198 @@ local rocket_part_recipe = {
|
||||||
allow_productivity = true
|
allow_productivity = true
|
||||||
}
|
}
|
||||||
|
|
||||||
local nauvis_item = {
|
local silo_ready = {
|
||||||
type = "item",
|
type = "container",
|
||||||
name = "destination-nauvis",
|
name = "provisional-rocket-silo-ready",
|
||||||
icon = "__base__/graphics/icons/nauvis.png",
|
icon = silo.icon,
|
||||||
subgroup = "space-related",
|
minable = { mining_time = 1, result = nil },
|
||||||
order = "z[destination-nauvis]",
|
deconstruction_alternative = "provisional-rocket-silo",
|
||||||
inventory_move_sound = item_sounds.mechanical_inventory_move,
|
inventory_size = 40,
|
||||||
pick_sound = item_sounds.mechanical_inventory_pickup,
|
inventory_type = "normal",
|
||||||
drop_sound = item_sounds.mechanical_inventory_move,
|
quality_affects_inventory_size = false,
|
||||||
stack_size = 1,
|
placeable_by = { item = "provisional-rocket-silo", count = 1 },
|
||||||
weight = 1 * tons,
|
health = 1000,
|
||||||
send_to_orbit_mode = "automated",
|
surface_conditions = {
|
||||||
spoil_ticks = 60 * 60 * 10
|
{
|
||||||
|
property = "pressure",
|
||||||
|
min = 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
flags = { "not-on-map", "not-blueprintable", "not-deconstructable", "not-flammable", "not-repairable", "not-upgradable", "no-automated-item-insertion", "no-automated-item-removal", "not-in-kill-statistics" },
|
||||||
|
allow_copy_paste = false,
|
||||||
|
additional_pastable_entities = { "provisional-rocket-silo" },
|
||||||
|
--picture = {
|
||||||
|
-- layers = {
|
||||||
|
-- {
|
||||||
|
-- filename = "__base__/graphics/entity/rocket-silo/01-rocket-silo-hole.png",
|
||||||
|
-- width = 400,
|
||||||
|
-- height = 270,
|
||||||
|
-- shift = util.by_pixel(-5, 16),
|
||||||
|
-- scale = 0.5
|
||||||
|
-- },
|
||||||
|
-- {
|
||||||
|
-- filename = "__base__/graphics/entity/rocket-silo/00-rocket-silo-shadow.png",
|
||||||
|
-- priority = "medium",
|
||||||
|
-- width = 612,
|
||||||
|
-- height = 578,
|
||||||
|
-- draw_as_shadow = true,
|
||||||
|
-- dice = 2,
|
||||||
|
-- shift = util.by_pixel(7, 2),
|
||||||
|
-- scale = 0.5
|
||||||
|
-- },
|
||||||
|
-- --{
|
||||||
|
-- -- filename = "__base__/graphics/entity/rocket-silo/04-door-back.png",
|
||||||
|
-- -- width = 312,
|
||||||
|
-- -- height = 286,
|
||||||
|
-- -- shift = util.by_pixel(37, 12),
|
||||||
|
-- -- scale = 0.5
|
||||||
|
-- --},
|
||||||
|
-- --{
|
||||||
|
-- -- filename = "__base__/graphics/entity/rocket-silo/05-door-front.png",
|
||||||
|
-- -- width = 332,
|
||||||
|
-- -- height = 300,
|
||||||
|
-- -- shift = util.by_pixel(-28, 33),
|
||||||
|
-- -- scale = 0.5
|
||||||
|
-- --},
|
||||||
|
-- {
|
||||||
|
-- filename = "__lignumis__/graphics/entity/wooden-rocket-silo/06-rocket-silo.png",
|
||||||
|
-- dice_y = 3,
|
||||||
|
-- width = 608,
|
||||||
|
-- height = 596,
|
||||||
|
-- shift = util.by_pixel(3, -1),
|
||||||
|
-- scale = 0.5
|
||||||
|
-- },
|
||||||
|
-- {
|
||||||
|
-- filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/red-light.png",
|
||||||
|
-- width = 32,
|
||||||
|
-- height = 32,
|
||||||
|
-- shift = { 1.34375, 0.28125 - 1.375 },
|
||||||
|
-- scale = 0.5
|
||||||
|
-- },
|
||||||
|
-- {
|
||||||
|
-- filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/red-light.png",
|
||||||
|
-- width = 32,
|
||||||
|
-- height = 32,
|
||||||
|
-- shift = { 2.3125, 0.9375 - 1.375 },
|
||||||
|
-- scale = 0.5
|
||||||
|
-- },
|
||||||
|
-- {
|
||||||
|
-- filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/red-light.png",
|
||||||
|
-- width = 32,
|
||||||
|
-- height = 32,
|
||||||
|
-- shift = { 2.65625, 1.90625 - 1.375 },
|
||||||
|
-- scale = 0.5
|
||||||
|
-- },
|
||||||
|
-- {
|
||||||
|
-- filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/red-light.png",
|
||||||
|
-- width = 32,
|
||||||
|
-- height = 32,
|
||||||
|
-- shift = { -2.65625, 1.90625 - 1.375 },
|
||||||
|
-- scale = 0.5
|
||||||
|
-- },
|
||||||
|
-- {
|
||||||
|
-- filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/red-light.png",
|
||||||
|
-- width = 32,
|
||||||
|
-- height = 32,
|
||||||
|
-- shift = { -2.3125, 0.9375 - 1.375 },
|
||||||
|
-- scale = 0.5
|
||||||
|
-- },
|
||||||
|
-- {
|
||||||
|
-- filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/red-light.png",
|
||||||
|
-- width = 32,
|
||||||
|
-- height = 32,
|
||||||
|
-- shift = { -1.34375, 0.28125 - 1.375 },
|
||||||
|
-- scale = 0.5
|
||||||
|
-- },
|
||||||
|
-- {
|
||||||
|
-- filename = "__base__/graphics/entity/rocket-silo/07-red-lights-back/red-light.png",
|
||||||
|
-- width = 32,
|
||||||
|
-- height = 32,
|
||||||
|
-- shift = { 0, 0 - 1.375 },
|
||||||
|
-- scale = 0.5
|
||||||
|
-- },
|
||||||
|
-- {
|
||||||
|
-- filename = "__base__/graphics/entity/rocket-silo/08-rocket-silo-arms-back.png",
|
||||||
|
-- priority = "medium",
|
||||||
|
-- width = 128,
|
||||||
|
-- height = 150,
|
||||||
|
-- x = 3968,
|
||||||
|
-- animation_speed = 0.3,
|
||||||
|
-- shift = util.by_pixel(-53, -84),
|
||||||
|
-- scale = 0.5
|
||||||
|
-- },
|
||||||
|
-- {
|
||||||
|
-- filename = "__base__/graphics/entity/rocket-silo/08-rocket-silo-arms-right.png",
|
||||||
|
-- priority = "medium",
|
||||||
|
-- width = 182,
|
||||||
|
-- height = 188,
|
||||||
|
-- x = 5642,
|
||||||
|
-- animation_speed = 0.3,
|
||||||
|
-- shift = util.by_pixel(101, -38),
|
||||||
|
-- scale = 0.5
|
||||||
|
-- },
|
||||||
|
-- {
|
||||||
|
-- filename = "__base__/graphics/entity/rocket-silo/rocket-static-pod-shadow.png",
|
||||||
|
-- priority = "medium",
|
||||||
|
-- width = 738,
|
||||||
|
-- height = 214,
|
||||||
|
-- shift = util.by_pixel(160.5, 23.5),
|
||||||
|
-- draw_as_shadow = true,
|
||||||
|
-- scale = 0.5
|
||||||
|
-- },
|
||||||
|
-- {
|
||||||
|
-- filename = "__lignumis__/graphics/entity/wooden-rocket-silo/rocket-static-pod.png",
|
||||||
|
-- priority = "medium",
|
||||||
|
-- width = 308,
|
||||||
|
-- height = 602,
|
||||||
|
-- shift = util.by_pixel(-4, -41.25),
|
||||||
|
-- scale = 0.5
|
||||||
|
-- },
|
||||||
|
-- {
|
||||||
|
-- filename = "__base__/graphics/entity/rocket-silo/rocket-static-emission.png",
|
||||||
|
-- width = 306,
|
||||||
|
-- height = 518,
|
||||||
|
-- shift = util.by_pixel(-4, -4.25),
|
||||||
|
-- draw_as_glow = true,
|
||||||
|
-- blend_mode = "additive",
|
||||||
|
-- scale = 0.5
|
||||||
|
-- },
|
||||||
|
-- {
|
||||||
|
-- filename = "__base__/graphics/entity/rocket-silo/03-rocket-over-shadow-over-rocket.png",
|
||||||
|
-- width = 426,
|
||||||
|
-- height = 288,
|
||||||
|
-- shift = util.by_pixel(-2, 21),
|
||||||
|
-- scale = 0.5
|
||||||
|
-- },
|
||||||
|
-- {
|
||||||
|
-- filename = "__lignumis__/graphics/entity/wooden-rocket-silo/14-rocket-silo-front.png",
|
||||||
|
-- width = 580,
|
||||||
|
-- height = 262,
|
||||||
|
-- shift = util.by_pixel(-1, 78),
|
||||||
|
-- scale = 0.5
|
||||||
|
-- },
|
||||||
|
-- {
|
||||||
|
-- filename = "__base__/graphics/entity/rocket-silo/13-rocket-silo-arms-front.png",
|
||||||
|
-- priority = "medium",
|
||||||
|
-- width = 126,
|
||||||
|
-- height = 228,
|
||||||
|
-- x = 3906,
|
||||||
|
-- animation_speed = 0.3,
|
||||||
|
-- shift = util.by_pixel(-51, 16),
|
||||||
|
-- scale = 0.5
|
||||||
|
-- }
|
||||||
|
-- }
|
||||||
|
--},
|
||||||
|
collision_mask = { layers = {} },
|
||||||
|
collision_box = table.deepcopy(silo.collision_box),
|
||||||
|
selection_box = table.deepcopy(silo.selection_box),
|
||||||
}
|
}
|
||||||
|
|
||||||
local nauvis_recipe = {
|
local silo_ready_item = table.deepcopy(data.raw["item"]["rocket-silo"])
|
||||||
type = "recipe",
|
silo_ready_item.name = "provisional-rocket-silo-ready"
|
||||||
name = "destination-nauvis",
|
silo_ready_item.order = "0[provisional-rocket-silo-ready]"
|
||||||
enabled = false,
|
silo_ready_item.place_result = "provisional-rocket-silo-ready"
|
||||||
ingredients = {},
|
silo_ready_item.icon = "__lignumis__/graphics/icons/provisional-rocket-silo.png"
|
||||||
results = { { type = "item", name = "destination-nauvis", amount = 1 } }
|
|
||||||
}
|
|
||||||
|
|
||||||
data:extend({
|
data:extend({
|
||||||
silo,
|
silo,
|
||||||
|
@ -121,6 +297,6 @@ data:extend({
|
||||||
silo_recipe,
|
silo_recipe,
|
||||||
rocket,
|
rocket,
|
||||||
rocket_part_recipe,
|
rocket_part_recipe,
|
||||||
nauvis_item,
|
silo_ready,
|
||||||
nauvis_recipe
|
silo_ready_item
|
||||||
})
|
})
|
||||||
|
|
|
@ -4,9 +4,7 @@ local InitExisting = {}
|
||||||
-- Don't send players to Lignumis but instead print a warning
|
-- Don't send players to Lignumis but instead print a warning
|
||||||
|
|
||||||
InitExisting.on_init = function()
|
InitExisting.on_init = function()
|
||||||
if game.tick == 0 then
|
if game.tick == 0 then return end
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
storage.init = {}
|
storage.init = {}
|
||||||
for _, player in pairs(game.players) do
|
for _, player in pairs(game.players) do
|
|
@ -6,9 +6,7 @@ local InitNew = {}
|
||||||
|
|
||||||
-- Initialize the freeplay intro
|
-- Initialize the freeplay intro
|
||||||
local function init_intro()
|
local function init_intro()
|
||||||
if not remote.interfaces.freeplay then
|
if not remote.interfaces.freeplay then return end
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Disable Nauvis intro
|
-- Disable Nauvis intro
|
||||||
remote.call("freeplay", "set_disable_crashsite", true)
|
remote.call("freeplay", "set_disable_crashsite", true)
|
||||||
|
@ -63,9 +61,7 @@ end
|
||||||
|
|
||||||
|
|
||||||
InitNew.on_init = function()
|
InitNew.on_init = function()
|
||||||
if game.tick > 0 then
|
if game.tick > 0 then return end
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
init_intro()
|
init_intro()
|
||||||
init_space_locations()
|
init_space_locations()
|
|
@ -23,9 +23,7 @@ end
|
||||||
local function init_player(event)
|
local function init_player(event)
|
||||||
local player = game.get_player(event.player_index)
|
local player = game.get_player(event.player_index)
|
||||||
|
|
||||||
if not player.character then
|
if not player.character then return end
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local surface = storage.surface or game.planets["lignumis"].surface
|
local surface = storage.surface or game.planets["lignumis"].surface
|
||||||
player.teleport(surface.find_non_colliding_position("character", { 0, 0 }, 0, 1), "lignumis")
|
player.teleport(surface.find_non_colliding_position("character", { 0, 0 }, 0, 1), "lignumis")
|
||||||
|
@ -41,9 +39,7 @@ end
|
||||||
local function init_freeplay(event)
|
local function init_freeplay(event)
|
||||||
local player = game.get_player(event.player_index)
|
local player = game.get_player(event.player_index)
|
||||||
|
|
||||||
if not player or not remote.interfaces.freeplay then
|
if not player or not remote.interfaces.freeplay then return end
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local surface = storage.surface or game.planets["lignumis"].surface
|
local surface = storage.surface or game.planets["lignumis"].surface
|
||||||
storage.crashed_ship_items = remote.call("freeplay", "get_ship_items")
|
storage.crashed_ship_items = remote.call("freeplay", "get_ship_items")
|
||||||
|
@ -75,9 +71,7 @@ Init.events[defines.events.on_player_created] = function(event)
|
||||||
migrate_0_9_6(event)
|
migrate_0_9_6(event)
|
||||||
storage.init = storage.init or {}
|
storage.init = storage.init or {}
|
||||||
|
|
||||||
if storage.init[event.player_index] then
|
if storage.init[event.player_index] then return end
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
storage.init[event.player_index] = true
|
storage.init[event.player_index] = true
|
||||||
init_player(event)
|
init_player(event)
|
||||||
|
@ -96,19 +90,13 @@ end
|
||||||
|
|
||||||
-- End intro and show starting message
|
-- End intro and show starting message
|
||||||
Init.events[defines.events.on_cutscene_waypoint_reached] = function(event)
|
Init.events[defines.events.on_cutscene_waypoint_reached] = function(event)
|
||||||
if not storage.crash_site_cutscene_active then
|
if not storage.crash_site_cutscene_active then return end
|
||||||
return
|
if not crash_site.is_crash_site_cutscene(event) then return end
|
||||||
end
|
|
||||||
if not crash_site.is_crash_site_cutscene(event) then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local player = game.get_player(event.player_index)
|
local player = game.get_player(event.player_index)
|
||||||
player.exit_cutscene()
|
player.exit_cutscene()
|
||||||
|
|
||||||
if storage.skip_intro then
|
if storage.skip_intro then return end
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local intro_message = storage.custom_intro_message or { "msg-intro-space-age" }
|
local intro_message = storage.custom_intro_message or { "msg-intro-space-age" }
|
||||||
|
|
||||||
|
@ -122,12 +110,9 @@ end
|
||||||
|
|
||||||
-- Cancel intro
|
-- Cancel intro
|
||||||
Init.events["crash-site-skip-cutscene"] = function(event)
|
Init.events["crash-site-skip-cutscene"] = function(event)
|
||||||
if not storage.crash_site_cutscene_active then
|
if not storage.crash_site_cutscene_active then return end
|
||||||
return
|
if event.player_index ~= 1 then return end
|
||||||
end
|
|
||||||
if event.player_index ~= 1 then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
local player = game.get_player(event.player_index)
|
local player = game.get_player(event.player_index)
|
||||||
if player.controller_type == defines.controllers.cutscene then
|
if player.controller_type == defines.controllers.cutscene then
|
||||||
player.exit_cutscene()
|
player.exit_cutscene()
|
||||||
|
@ -135,12 +120,9 @@ Init.events["crash-site-skip-cutscene"] = function(event)
|
||||||
end
|
end
|
||||||
|
|
||||||
Init.events[defines.events.on_cutscene_cancelled] = function(event)
|
Init.events[defines.events.on_cutscene_cancelled] = function(event)
|
||||||
if not storage.crash_site_cutscene_active then
|
if not storage.crash_site_cutscene_active then return end
|
||||||
return
|
if event.player_index ~= 1 then return end
|
||||||
end
|
|
||||||
if event.player_index ~= 1 then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
storage.crash_site_cutscene_active = nil
|
storage.crash_site_cutscene_active = nil
|
||||||
local player = game.get_player(event.player_index)
|
local player = game.get_player(event.player_index)
|
||||||
if player.gui.screen.skip_cutscene_label then
|
if player.gui.screen.skip_cutscene_label then
|
|
@ -1,5 +1,4 @@
|
||||||
local crash_site = require("crash-site")
|
local crash_site = require("crash-site")
|
||||||
local util = require("util")
|
|
||||||
|
|
||||||
-- Transition from Lignumis to Nauvis with the provisional rocket silo
|
-- Transition from Lignumis to Nauvis with the provisional rocket silo
|
||||||
|
|
||||||
|
@ -19,6 +18,7 @@ end
|
||||||
|
|
||||||
-- Initialize Nauvis
|
-- Initialize Nauvis
|
||||||
local function init_nauvis()
|
local function init_nauvis()
|
||||||
|
if storage.nauvis_visited then return end
|
||||||
local nauvis = game.planets["nauvis"].create_surface()
|
local nauvis = game.planets["nauvis"].create_surface()
|
||||||
nauvis.request_to_generate_chunks({ 0, 0 }, 3)
|
nauvis.request_to_generate_chunks({ 0, 0 }, 3)
|
||||||
nauvis.force_generate_chunk_requests()
|
nauvis.force_generate_chunk_requests()
|
||||||
|
@ -26,32 +26,28 @@ local function init_nauvis()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- Teleport all players to Nauvis and show welcoe message
|
-- Teleport player to Nauvis and show welcome message
|
||||||
local function teleport_players()
|
local function teleport_player(player)
|
||||||
local nauvis = game.planets["nauvis"].surface
|
local nauvis = game.planets["nauvis"].surface
|
||||||
for _, player in pairs(game.players) do
|
|
||||||
if player.surface.name == "lignumis" then
|
if player.surface.name == "lignumis" then
|
||||||
player.teleport(nauvis.find_non_colliding_position("character", { 0, 0 }, 0, 1), "nauvis")
|
player.teleport(nauvis.find_non_colliding_position("character", { 0, 0 }, 0, 1), "nauvis")
|
||||||
chart_starting_area(nauvis, player)
|
chart_starting_area(nauvis, player)
|
||||||
player.print("Oh no, not again. But... Welcome to Nauvis!")
|
player.print("Oh no, not again. But... Welcome to Nauvis!")
|
||||||
end
|
end
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- Initialize the Nauvis freeplay scenario
|
-- Initialize the Nauvis freeplay scenario
|
||||||
local function init_freeplay()
|
local function init_freeplay()
|
||||||
if not remote.interfaces.freeplay then
|
if not remote.interfaces.freeplay then return end
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local nauvis = game.planets["nauvis"].surface
|
local nauvis = game.planets["nauvis"].surface
|
||||||
local ship_items = {
|
local ship_items = {
|
||||||
["burner-mining-drill"] = 5,
|
["burner-mining-drill"] = 2,
|
||||||
["stone-furnace"] = 5,
|
["stone-furnace"] = 2,
|
||||||
["burner-assembling-machine"] = 2,
|
["burner-assembling-machine"] = 2,
|
||||||
["burner-agricultural-tower"] = 4,
|
["burner-agricultural-tower"] = 2,
|
||||||
["wood-lab"] = 4
|
["wood-lab"] = 2
|
||||||
}
|
}
|
||||||
local debris_items = { ["wood-darts-magazine"] = 20, ["wood"] = 20, ["lumber"] = 20 }
|
local debris_items = { ["wood-darts-magazine"] = 20, ["wood"] = 20, ["lumber"] = 20 }
|
||||||
local crashed_ship_parts = remote.call("freeplay", "get_ship_parts")
|
local crashed_ship_parts = remote.call("freeplay", "get_ship_parts")
|
||||||
|
@ -61,13 +57,32 @@ end
|
||||||
|
|
||||||
|
|
||||||
ToNauvis.events[defines.events.on_rocket_launched] = function(event)
|
ToNauvis.events[defines.events.on_rocket_launched] = function(event)
|
||||||
if not event.rocket_silo.name == "provisional-rocket-silo" then
|
if not event.rocket_silo.name == "provisional-rocket-silo" then return end
|
||||||
return
|
|
||||||
|
local rocket_entry
|
||||||
|
local rocket_entry_index
|
||||||
|
local player
|
||||||
|
|
||||||
|
for i, entry in pairs(storage.rocket_silos) do
|
||||||
|
if entry.real_silo == event.rocket_silo then
|
||||||
|
rocket_entry = entry
|
||||||
|
rocket_entry_index = i
|
||||||
|
player = game.get_player(entry.player)
|
||||||
|
break
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
init_nauvis()
|
init_nauvis()
|
||||||
teleport_players()
|
teleport_player(player)
|
||||||
init_freeplay()
|
init_freeplay()
|
||||||
|
|
||||||
|
-- Give the player the content of the rocket
|
||||||
|
local inventory = player.get_main_inventory()
|
||||||
|
for _, item in pairs(rocket_entry.rocket_content) do
|
||||||
|
inventory.insert(item)
|
||||||
|
end
|
||||||
|
inventory.sort_and_merge()
|
||||||
|
table.remove(storage.rocket_silos, rocket_entry_index)
|
||||||
end
|
end
|
||||||
|
|
||||||
return ToNauvis
|
return ToNauvis
|
147
lignumis/scripts/wooden-rocket-silo.lua
Normal file
147
lignumis/scripts/wooden-rocket-silo.lua
Normal file
|
@ -0,0 +1,147 @@
|
||||||
|
local RocketSilo = {
|
||||||
|
events = {}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-- Logic for provisional rocket silo with fake silo with inventory and custom launch GUI
|
||||||
|
|
||||||
|
local function build_gui(player, rocket_silo)
|
||||||
|
local anchor = {
|
||||||
|
gui = defines.relative_gui_type.container_gui,
|
||||||
|
names = { "provisional-rocket-silo-ready" },
|
||||||
|
position = defines.relative_gui_position.right
|
||||||
|
}
|
||||||
|
|
||||||
|
local launch_button = { type = "button", name = "provisional-rocket-silo-launch-button", caption = { "lignumis.provisional-rocket-silo-button" } }
|
||||||
|
|
||||||
|
local inventory = player.get_main_inventory()
|
||||||
|
launch_button.enabled = inventory.is_empty()
|
||||||
|
if not launch_button.enabled then
|
||||||
|
launch_button.tooltip = { "lignumis.provisional-rocket-silo-button-tooltip" }
|
||||||
|
end
|
||||||
|
|
||||||
|
storage.rocket_silo_guis = storage.rocket_silo_guis or {}
|
||||||
|
storage.rocket_silo_guis[player.index] = {
|
||||||
|
fake_silo = rocket_silo,
|
||||||
|
gui = gui.add(player.gui.relative, {
|
||||||
|
{
|
||||||
|
type = "frame",
|
||||||
|
name = "provisional-rocket-silo-relative-frame",
|
||||||
|
direction = "vertical",
|
||||||
|
anchor = anchor,
|
||||||
|
children = {
|
||||||
|
{ type = "label", style = "frame_title", caption = { "lignumis.provisional-rocket-silo-button" }, ignored_by_interaction = true },
|
||||||
|
{
|
||||||
|
type = "frame",
|
||||||
|
direction = "vertical",
|
||||||
|
style = "inside_shallow_frame_with_padding",
|
||||||
|
children = {
|
||||||
|
{
|
||||||
|
type = "flow",
|
||||||
|
direction = "vertical",
|
||||||
|
style = "inset_frame_container_vertical_flow",
|
||||||
|
children = {
|
||||||
|
{ type = "label", caption = { "lignumis.provisional-rocket-silo-description" } },
|
||||||
|
launch_button
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local function on_gui_opened(event)
|
||||||
|
local entity = event.entity
|
||||||
|
if not entity or not entity.valid then return end
|
||||||
|
if entity.name ~= "provisional-rocket-silo-ready" then return end
|
||||||
|
local player = game.get_player(event.player_index)
|
||||||
|
|
||||||
|
if player.gui.relative["provisional-rocket-silo-relative-frame"] then
|
||||||
|
player.gui.relative["provisional-rocket-silo-relative-frame"].destroy()
|
||||||
|
end
|
||||||
|
|
||||||
|
build_gui(player, entity)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local function on_gui_closed(event)
|
||||||
|
local entity = event.entity
|
||||||
|
if not entity or not entity.valid then return end
|
||||||
|
if entity.name ~= "provisional-rocket-silo-ready" then return end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local function launch(event)
|
||||||
|
if event.element.name ~= "provisional-rocket-silo-launch-button" then return end
|
||||||
|
local player = game.get_player(event.player_index)
|
||||||
|
local fake_silo = storage.rocket_silo_guis[player.index].fake_silo
|
||||||
|
rocket_content = fake_silo.get_inventory(defines.inventory.chest).get_contents()
|
||||||
|
for _, entry in pairs(storage.rocket_silos) do
|
||||||
|
if entry.fake_silo == fake_silo then
|
||||||
|
entry.player = event.player_index
|
||||||
|
entry.rocket_content = rocket_content
|
||||||
|
fake_silo.destroy()
|
||||||
|
entry.real_silo.launch_rocket()
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local function on_silo_mined(event)
|
||||||
|
if event.entity.name ~= "provisional-rocket-silo-ready" then return end
|
||||||
|
local fake_silo = event.entity
|
||||||
|
local player = game.get_player(event.player_index)
|
||||||
|
for i, entry in pairs(storage.rocket_silos) do
|
||||||
|
if entry.fake_silo == fake_silo then
|
||||||
|
player.mine_entity(entry.real_silo, true)
|
||||||
|
table.remove(storage.rocket_silos, i)
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
RocketSilo.on_init = function()
|
||||||
|
storage.rocket_silos = {}
|
||||||
|
storage.rocket_silo_guis = {}
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
RocketSilo.events[defines.events.on_script_trigger_effect] = function(event)
|
||||||
|
if event.effect_id ~= "provisional-rocket-ready" then return end
|
||||||
|
|
||||||
|
local lignumis = game.planets["lignumis"].surface
|
||||||
|
|
||||||
|
if event.surface_index ~= lignumis.index then return end
|
||||||
|
|
||||||
|
local real_silo = event.cause_entity
|
||||||
|
local fake_silo = real_silo.surface.create_entity({
|
||||||
|
name = "provisional-rocket-silo-ready",
|
||||||
|
position = real_silo.position,
|
||||||
|
force = real_silo.force,
|
||||||
|
create_build_effect_smoke = false,
|
||||||
|
})
|
||||||
|
storage.rocket_silos = storage.rocket_silos or {}
|
||||||
|
table.insert(storage.rocket_silos, {
|
||||||
|
real_silo = real_silo,
|
||||||
|
fake_silo = fake_silo
|
||||||
|
})
|
||||||
|
for _, player in pairs(real_silo.force.players) do
|
||||||
|
if player.selected == real_silo then
|
||||||
|
player.selected = fake_silo
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
RocketSilo.events[defines.events.on_gui_opened] = on_gui_opened
|
||||||
|
RocketSilo.events[defines.events.on_gui_closed] = on_gui_closed
|
||||||
|
RocketSilo.events[defines.events.on_gui_click] = launch
|
||||||
|
RocketSilo.events[defines.events.on_player_mined_entity] = on_silo_mined
|
||||||
|
|
||||||
|
|
||||||
|
return RocketSilo
|
Loading…
Add table
Reference in a new issue