| | require "story" |
| | require "train-stations" |
| |
|
| | function on_player_created(event) |
| | local player = game.players[event.player_index] |
| | player.game_view_settings = |
| | { |
| | show_side_menu = false, |
| | show_research_info = false, |
| | show_alert_gui = false, |
| | show_minimap = false |
| | } |
| | game.permissions.get_group(0).set_allows_action(defines.input_action.remove_cables, false) |
| | game.permissions.get_group(0).set_allows_action(defines.input_action.open_production_gui, false) |
| | game.permissions.get_group(0).set_allows_action(defines.input_action.open_tips_and_tricks_gui, false) |
| | game.permissions.get_group(0).set_allows_action(defines.input_action.open_logistic_gui, false) |
| | game.permissions.get_group(0).set_allows_action(defines.input_action.open_technology_gui, false) |
| | player.force.disable_all_prototypes() |
| | player.force.mining_drill_productivity_bonus = 4 |
| |
|
| | player.set_quick_bar_slot(1,'rail') |
| | player.set_quick_bar_slot(2,'locomotive') |
| | player.set_quick_bar_slot(3,'cargo-wagon') |
| | player.set_quick_bar_slot(4,'train-stop') |
| | player.set_quick_bar_slot(5,'inserter') |
| | player.set_quick_bar_slot(6,'iron-chest') |
| | player.set_quick_bar_slot(7,'coal') |
| | end |
| | intermission = |
| | { |
| | init = function() |
| | flying_congrats(global.last_built_position) |
| | set_goal() |
| | set_info() |
| | end, |
| | condition = story_elapsed_check(2) |
| | } |
| | story_table = |
| | { |
| | { |
| | { |
| | init = function() |
| | recreate_entities_on_tick(entities, {offset = {0, -16}}, 1.4) |
| | end, |
| | condition = function() |
| | return recreate_entities_on_tick() |
| | end |
| | }, |
| | { |
| | init = function() |
| | for k, drill in pairs (surface().find_entities_filtered{type = "mining-drill"}) do |
| | drill.mining_progress = math.random() |
| | drill.bonus_mining_progress = math.random() |
| | end |
| | for k, entity in pairs (surface().find_entities()) do |
| | entity.minable = false |
| | entity.operable = false |
| | end |
| | set_info{text = {"intro"}} |
| | if player().input_method == defines.input_method.game_controller then |
| | set_info({text = {"button-controller-note"}, append = true}) |
| | end |
| | set_info{custom_function = add_button, append = true} |
| | flash_goal() |
| | end, |
| | condition = function() |
| | return global.continue |
| | end |
| | }, |
| | { |
| | init = function() |
| | player().character.destructible = false |
| | local stop = surface().find_entities_filtered{name = "train-stop", area = {{-50,0},{50,50}}}[1] |
| | surface().create_entity{name = "fake-selection-box-2x2", position = stop.position} |
| | global.correct_position = {x = stop.position.x, y = stop.position.y} |
| | stop.destroy() |
| | player().insert({name = "train-stop"}) |
| | set_goal({"place-stop"}) |
| | set_info() |
| | end, |
| | condition = function() |
| | for k, stop in pairs (surface().find_entities_filtered{name = "train-stop"}) do |
| | if stop.position.x == global.correct_position.x and stop.position.y == global.correct_position.y then |
| | global.correct_position = nil |
| | stop.minable = false |
| | stop.backer_name = "B" |
| | return true |
| | end |
| | end |
| | end, |
| | action = function() |
| | for k, entity in pairs (surface().find_entities_filtered{type = "arrow"}) do |
| | entity.destroy() |
| | end |
| | end |
| | }, |
| | intermission, |
| | { |
| | init = function() |
| | set_goal{"place-locomotive"} |
| | set_info({text = {"place-locomotive-info"}, picture = "file/place-locomotive.png"}) |
| | player().insert({name = "locomotive"}) |
| | end, |
| | condition = function() |
| | local offset = {x = -3, y = -2} |
| | for k, entity in pairs (surface().find_entities_filtered{type = "locomotive"}) do |
| | if entity.orientation == 0.75 then |
| | local position = {x = entity.position.x + offset.x, y = entity.position.y + offset.y} |
| | for k, stop in pairs (surface().find_entities_filtered{name = "train-stop"}) do |
| | if stop.position.x == position.x and stop.position.y == position.y then |
| | global.locomotive = entity |
| | return true |
| | end |
| | end |
| | end |
| | end |
| | end, |
| | action = function() |
| | global.locomotive.minable = false |
| | global.locomotive.rotatable = false |
| | global.locomotive.destructible = false |
| | end |
| | }, |
| | intermission, |
| | { |
| | init = function() |
| | set_goal({"fuel-train"}) |
| | set_info({picture = "file/fuel-train.png"}) |
| | global.locomotive.operable = false |
| | player().insert{name = "coal",count = 50} |
| | player().insert{name = "inserter"} |
| | player().insert{name = "iron-chest"} |
| | end, |
| | update = function(event) |
| | if event.name ~= defines.events.on_built_entity then |
| | return |
| | end |
| | local entity = event.created_entity |
| | if entity.name == "inserter" then |
| | global.inserter = entity |
| | end |
| | end, |
| | condition = function() |
| | if not global.inserter then return end |
| | if not global.inserter.valid then return end |
| | if (not global.inserter.drop_target) or (not global.inserter.pickup_target) then return end |
| | if not global.inserter.drop_target.name == "locomotive" then return end |
| | if not global.inserter.pickup_target.name == "iron-chest" then return end |
| | return global.locomotive.get_item_count("coal") > 0 |
| | end, |
| | action = function() |
| | global.locomotive.operable = true |
| | global.last_built_position = nil |
| | player().clear_items_inside() |
| | end |
| | }, |
| | intermission, |
| | { |
| | init = function() |
| | player().insert({name = "cargo-wagon"}) |
| | set_goal{"place-wagon"} |
| | set_info({text = {"place-wagon-info"}, picture = "file/place-wagon.png"}) |
| | end, |
| | condition = function(event) |
| | return global.locomotive.train.back_stock.name == "cargo-wagon" |
| | end, |
| | action = function(event) |
| | local wagon = surface().find_entities_filtered{name = "cargo-wagon"}[1] |
| | wagon.minable = false |
| | wagon.destructible = false |
| | wagon.operable = false |
| | global.wagon = wagon |
| | end |
| | }, |
| | intermission, |
| | { |
| | init = function() |
| | set_goal({"load-wagon"}) |
| | set_info() |
| | player().insert{name = "fast-inserter", count = 6} |
| | player().set_quick_bar_slot(11,'fast-inserter') |
| | player().force.inserter_stack_size_bonus = 3 |
| | for k, chest in pairs (surface().find_entities_filtered{name = "steel-chest"}) do |
| | if chest.position.y > 0 then |
| | chest.clear_items_inside() |
| | chest.insert{name = "iron-ore", count = 1000} |
| | end |
| | end |
| | end, |
| | condition = function() |
| | return global.wagon.get_item_count("iron-ore") > 100 |
| | end, |
| | action = function() |
| | global.last_built_position = global.wagon.position |
| | player().clear_items_inside() |
| | end |
| | }, |
| | intermission, |
| | { |
| | init = function() |
| | local stop |
| | for k, entity in pairs (surface().find_entities_filtered{name = "train-stop"}) do |
| | if entity.position.y < 0 then |
| | stop = entity |
| | break |
| | end |
| | end |
| | global.stop = stop |
| | set_goal({"set-schedule", stop.backer_name, {"gui-train.add-empty-condition"}}) |
| | set_info( |
| | { |
| | pictures = |
| | { |
| | {path = "file/add-station.png"}, |
| | {path = "file/empty-cargo.png", split = true} |
| | } |
| | }) |
| | global.last_built_position = global.locomotive.position |
| | end, |
| | condition = function() |
| | local schedule = global.locomotive.train.schedule |
| | if not schedule then return end |
| | local record = schedule.records[1] |
| | if not (record and record.wait_conditions) then return end |
| | return (record.station == global.stop.backer_name) and (record.wait_conditions[1].type == "empty") |
| | end |
| | }, |
| | intermission, |
| | { |
| | init = function() |
| | set_goal({"start-train"}) |
| | set_info({picture = "file/start-train.png"}) |
| | end, |
| | condition = function() |
| | return (global.locomotive.train.manual_mode == false) |
| | end, |
| | action = function() |
| | global.locomotive.operable = false |
| | end |
| | }, |
| | intermission, |
| | { |
| | condition = function() |
| | return global.locomotive.train.station ~= nil |
| | end |
| | }, |
| | { |
| | init = function() |
| | set_goal({"unload-train"}) |
| | set_info({text = {"unload-train-info"}}) |
| | local player = player() |
| | for name, count in pairs ({ |
| | ["fast-transport-belt"] = 20, |
| | ["fast-inserter"] = 20, |
| | ["fast-splitter"] = 5, |
| | ["fast-underground-belt"] = 10, |
| | ["steel-chest"] = 10 |
| | }) do |
| | player.insert{name = name, count = count} |
| | end |
| | player.set_quick_bar_slot(12,'fast-transport-belt') |
| | player.set_quick_bar_slot(13,'fast-splitter') |
| | player.set_quick_bar_slot(14,'fast-underground-belt') |
| | player.set_quick_bar_slot(15,'steel-chest') |
| | for k, furnace in pairs (surface().find_entities_filtered{name = "steel-furnace"}) do |
| | furnace.force = "neutral" |
| | end |
| | end, |
| | condition = function() |
| | local chest = surface().find_entities_filtered{name = "iron-chest", area = {{-50,-50},{50,0}}}[1] |
| | return chest.get_item_count("iron-plate") > 0 |
| | end, |
| | action = function() |
| | global.last_built_position = nil |
| | end |
| |
|
| | }, |
| | intermission, |
| | { |
| | init = function() |
| | local load_stop |
| | for k, entity in pairs (surface().find_entities_filtered{name = "train-stop"}) do |
| | if entity.position.y > 0 then |
| | load_stop = entity |
| | break |
| | end |
| | end |
| | global.load_stop = load_stop |
| | set_goal({"set-schedule", load_stop.backer_name, {"gui-train.add-full-condition"}}) |
| | global.last_built_position = global.locomotive.position |
| | global.locomotive.operable = true |
| | end, |
| | condition = function() |
| | local schedule = global.locomotive.train.schedule |
| | if not schedule then return end |
| | local record = schedule.records[2] |
| | if not record then return end |
| | if not record.wait_conditions then return end |
| | return (record.station == global.load_stop.backer_name) and (record.wait_conditions[1].type == "full") |
| | end |
| | }, |
| | intermission, |
| | { |
| | init = function() |
| | set_goal({"trains-will-loop"}) |
| | local wagon = surface().find_entities_filtered{name = "cargo-wagon"}[1] |
| | wagon.clear_items_inside() |
| | wagon.get_inventory(defines.inventory.cargo_wagon).set_bar(5) |
| | for k, entity in pairs (surface().find_entities()) do |
| | entity.minable = true |
| | entity.operable = true |
| | entity.rotatable = true |
| | end |
| | set_info() |
| | if player().input_method == defines.input_method.game_controller then |
| | set_info({text = {"button-controller-note"}, append = true}) |
| | end |
| | set_info({custom_function = function(flow) add_button(flow).caption = {"continue"} end, append = true}) |
| | end, |
| | condition = function() |
| | return global.continue |
| | end |
| | }, |
| | intermission, |
| | { |
| | init = function() |
| | set_info{text = {"finish-info"}} |
| | if player().input_method == defines.input_method.game_controller then |
| | set_info({text = {"button-controller-note"}, append = true}) |
| | end |
| | set_info{custom_function = function(flow) add_button(flow).caption = {"finish"} end, append = true} |
| | set_goal(nil, false) |
| | player().insert({name='fast-inserter',count=40}) |
| | player().insert({name='fast-transport-belt',count=200}) |
| | player().insert({name='fast-splitter',count=10}) |
| | player().insert({name='fast-underground-belt',count=10}) |
| | player().insert({name='locomotive',count=3}) |
| | player().insert({name='cargo-wagon',count=3}) |
| | player().insert({name='train-stop',count=5}) |
| | player().insert({name='rail',count=1000}) |
| | player().insert({name='steel-chest',count=30}) |
| | player().insert({name='coal',count=500}) |
| | player().insert({name='medium-electric-pole',count=20}) |
| | player().insert({name='electronic-circuit',count=4000}) |
| | player().set_quick_bar_slot(8,'medium-electric-pole') |
| | end, |
| | condition = function() |
| | return global.continue |
| | end |
| | } |
| | } |
| | } |
| |
|
| | story_init_helpers(story_table) |
| |
|
| | script.on_init(function() |
| | game.forces.player.manual_mining_speed_modifier = 4 |
| | game.forces.player.disable_all_prototypes() |
| | surface().always_day = true |
| | global.story = story_init() |
| | end) |
| |
|
| | script.on_event(defines.events, function(event) |
| | story_update(global.story, event, "") |
| | if event.name == defines.events.on_player_created then |
| | on_player_created(event) |
| | end |
| | end) |
| |
|