|
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) |
|
|