forked from cacklingfiend/lignumis
		
	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
		Add a link
		
	
		Reference in a new issue
	
	 Simon Brodtmann
						Simon Brodtmann