| require "util" |
| require("story") |
|
|
| local set_arrow = function(arrow_settings) |
| if global.arrow then |
| global.arrow.destroy() |
| end |
| if arrow_settings == nil then |
| global.arrow = nil |
| else |
| global.arrow = game.players[1].surface.create_entity(arrow_settings) |
| end |
| end |
|
|
| local generate_pause_to_think_node = function(thought) |
| if not global.thoughts then global.thoughts = {} end |
| global.thoughts[thought] = false |
| return |
| { |
| name = 'pause-to-think-'..thought, |
| init = function() |
| game.players[1].set_goal_description("") |
| end, |
| condition = story_elapsed_check(3), |
| action = function() |
| if global.thoughts[thought] == false then |
| game.players[1].print({"","[img=entity/character][color=orange]",{"engineer-title"},": [/color]",{"think-"..thought}}) |
| end |
| end |
| } |
| end |
|
|
| local generate_post_pause_to_think_node = function(thought) |
| return { |
| name = 'after-pause-to-think-'..thought, |
| condition = story_elapsed_check(3), |
| action = function() |
| global.thoughts[thought] = true |
| end |
| } |
| end |
|
|
| local count_items_in_container = function (container) |
| return container.get_item_count("coal") + |
| container.get_item_count("iron-ore") + |
| container.get_item_count("stone") + |
| container.get_item_count("iron-plate") + |
| container.get_item_count("stone-brick") |
| end |
|
|
| local count_smelted_objects_in_furnace = function (container) |
| return container.get_item_count("iron-plate") + |
| container.get_item_count("stone-brick") |
| end |
|
|
| local count_fuel_objects_in_drill = function (container) |
| return container.get_item_count("coal") |
| end |
|
|
| local count_items_in_unknown = function(container) |
| local count = 0 |
| if container.type == 'container' then |
| count = count_items_in_container(container) |
| elseif container.name == 'burner-mining-drill' then |
| count = count_fuel_objects_in_drill(container) |
| elseif container.name == 'stone-furnace' then |
| count = count_smelted_objects_in_furnace(container) |
| end |
| return count |
| end |
|
|
| local get_furnace = function() |
|
|
| if global.furnace and global.furnace.valid then |
| return global.furnace |
| end |
|
|
| local furnaces = game.surfaces[1].find_entities_filtered({name='stone-furnace'}) |
| if #furnaces > 0 then |
| global.furnace = furnaces[1] |
| return global.furnace |
| end |
|
|
| end |
|
|
| local get_miner_drop_target = function() |
| if global.miner and global.miner.valid and global.miner_drop_target and global.miner_drop_target.valid and global.miner.drop_target == global.miner_drop_target then |
| return global.miner_drop_target |
| end |
| local miners = game.surfaces[1].find_entities_filtered({name='burner-mining-drill'}) |
| for _, miner in pairs(miners) do |
| if miner.drop_target then |
| global.miner_drop_target = miner.drop_target |
| global.miner = miner |
| |
| |
| return global.miner_drop_target |
| end |
| end |
| return nil |
| end |
|
|
| local get_miner = function() |
|
|
| if global.miner and global.miner.valid then |
| return global.miner |
| end |
|
|
| local miners = game.surfaces[1].find_entities_filtered({name='burner-mining-drill'}) |
| for _, miner in pairs(miners) do |
| if miner.drop_target then |
| global.miner = miner |
| return global.miner |
| end |
| end |
|
|
| if #miners > 0 then |
| global.miner = miners[1] |
| end |
|
|
| end |
|
|
| local intro_time = 500 |
|
|
| |
| local story_table = |
| { |
| { |
| { |
| name = 'setup', |
| init = function() |
| game.players[1].disable_recipe_groups() |
| game.players[1].disable_recipe_subgroups() |
| game.players[1].minimap_enabled = false |
| game.players[1].character.disable_flashlight() |
| game.players[1].force.disable_all_prototypes() |
| game.players[1].force.disable_research() |
| game.players[1].zoom = 2 |
| game.map_settings.pollution.enabled = false |
| game.players[1].game_view_settings = |
| { |
| show_quickbar = false, |
| show_shortcut_bar = false, |
| show_side_menu = false, |
| show_hotkey_suggestions = false, |
| } |
|
|
| game.players[1].surface.daytime = 0.5 |
|
|
| global.starting_player_position = game.players[1].position |
|
|
| local recipelist = game.players[1].force.recipes |
| recipelist["iron-plate"].enabled = true |
| recipelist["copper-plate"].enabled = true |
| game.players[1].clear_recipe_notifications() |
| global.wreck = game.get_entity_by_tag("wreck") |
| global.wreck.insert({ name = "iron-gear-wheel", count = 2 }) |
| end |
| }, |
| { |
| name = 'sunrise', |
| init = function() |
| local player = game.get_player(1) |
| player.set_controller |
| { |
| type = defines.controllers.cutscene, |
| waypoints = |
| { |
| { |
| target = player.character, |
| zoom = 2, |
| transition_time = intro_time, |
| time_to_wait = 0 |
| } |
| }, |
| start_zoom = 3, |
| start_position = player.position |
| } |
| end, |
| update = function() |
| game.surfaces[1].daytime = math.min(game.players[1].surface.daytime + (0.5 / intro_time), 1) |
| end, |
| condition = function() return game.players[1].surface.daytime > 0.95 end, |
| action = function() |
| game.players[1].surface.freeze_daytime = true |
| end |
| }, |
| generate_pause_to_think_node('introduction'), |
| generate_post_pause_to_think_node('introduction'), |
| { |
| name = 'think-2', |
| condition = story_elapsed_check(2), |
| action = function() |
| game.show_message_dialog({ |
| text = {"msg-intro"}, |
| point_to = { |
| type = "entity", |
| entity = game.players[1].character |
| } |
| }) |
| end |
| }, |
| { |
| name = 'movement', |
| init = function() |
| game.show_message_dialog({ |
| text = {"msg-goal-in-top-left"}, |
| point_to = {type = "goal"} |
| }) |
| if game.players[1].input_method == defines.input_method.game_controller then |
| game.players[1].set_goal_description({"goal-movement-controller"}) |
| else |
| game.players[1].set_goal_description({"goal-movement"}) |
| end |
| end, |
| condition = function() |
| return util.distance(global.starting_player_position, game.players[1].position) > 5 |
| end, |
| action = function() |
| if global.wreck.get_item_count("iron-gear-wheel") ~= 2 then |
| story_jump_to( global.story,"iron-ore-gathering") |
| end |
| end |
| }, |
| generate_pause_to_think_node('search-wreck'), |
| generate_post_pause_to_think_node('search-wreck'), |
| { |
| name = 'close-inv-if-open', |
| init = function() |
| if game.players[1].opened_self == true then |
| game.players[1].set_goal_description({"goal-close-character-screen"}) |
| end |
| end, |
| condition = function() |
| return game.players[1].opened_self == false |
| end |
| }, |
| { |
| name = 'open-wreck', |
| init = function() |
| game.players[1].set_goal_description({"goal-search-wreck"}) |
| if game.players[1].input_method == defines.input_method.game_controller then |
| set_info({text = {"controller-look-tip"}, append = true}) |
| end |
| game.players[1].set_gui_arrow({type="position", position=game.get_entity_by_tag('wreck').position}) |
| end, |
| condition = function(event) |
| |
| return game.players[1].opened == game.get_entity_by_tag('wreck') or game.get_entity_by_tag('wreck').get_item_count('iron-gear-wheel') == 0 |
| end |
| }, |
| { |
| name = 'take-plates-from-wreck', |
| init = function() |
| set_info() |
| game.players[1].set_goal_description({"goal-take-iron-from-wreck"}) |
| game.players[1].clear_gui_arrow() |
| end, |
| condition = function (event) |
| |
| return (game.players[1].cursor_stack.valid_for_read and |
| game.players[1].cursor_stack.count >= 2) or |
| game.get_entity_by_tag('wreck').get_item_count('iron-gear-wheel') == 0 |
| end |
| }, |
| { |
| name = 'put-plates', |
| condition = function (event) |
| return (game.players[1].get_item_count('iron-gear-wheel') >= 2 and |
| game.players[1].cursor_stack.valid_for_read == false) |
| end |
| }, |
| { |
| name = 'close-wreck-gui', |
| init = function() |
| game.players[1].set_goal_description({"goal-close-screen"}) |
| end, |
| condition = function(event) |
| |
| return game.players[1].opened == nil |
| end, |
| action = function() |
| game.players[1].set_goal_description({""}) |
| end |
| }, |
| generate_pause_to_think_node('nothing-more'), |
| generate_post_pause_to_think_node('nothing-more'), |
| { |
| name = 'wait-longer', |
| condition = story_elapsed_check(1) |
| }, |
| generate_pause_to_think_node('see-iron-ore'), |
| generate_post_pause_to_think_node('see-iron-ore'), |
| { |
| name = "iron-ore-gathering", |
| init = function() |
|
|
| game.players[1].set_gui_arrow({type="position", position={-15.5,-3.5}}) |
| if game.players[1].input_method == defines.input_method.game_controller then |
| game.players[1].set_goal_description({"goal-mine-iron-ore-controller"}) |
| set_info({text = {"controller-look-tip"}, append = true}) |
| else |
| game.players[1].set_goal_description({"goal-mine-iron-ore"}) |
| end |
| set_info({text = {"zoom-tip"}, append = true}) |
| end, |
| condition = function(event) |
| if event.name == defines.events.on_tick then return false end |
| local selectedentity = game.players[1].selected |
| return selectedentity ~= nil and selectedentity.name == "iron-ore" and game.players[1].can_reach_entity(selectedentity) |
| end |
| }, |
| { |
| name = 'show-tooltip', |
| init = function() |
| game.players[1].clear_gui_arrow() |
| end, |
| action = function() |
| local shown_text; |
| if game.players[1].input_method == defines.input_method.game_controller then |
| shown_text = "msg-entity-info-controller" |
| else |
| shown_text = "msg-entity-info" |
| end |
| game.show_message_dialog({ |
| text = {shown_text}, |
| point_to = {type = "entity_info"} |
| }) |
| end |
| }, |
| { |
| name = 'handmining', |
| init = function() |
| set_info() |
| game.players[1].set_goal_description({"goal-mine-iron-ore-precise", |
| game.players[1].get_item_count('iron-ore'), 5}) |
| end, |
| update = function(event) |
| if event.name == defines.events.on_tick then return false end |
| game.players[1].set_goal_description({"goal-mine-iron-ore-precise", |
| game.players[1].get_item_count('iron-ore'), 5},true) |
| end, |
| condition = function(event) |
| if event.name == defines.events.on_tick then return false end |
| return game.players[1].get_item_count("iron-ore") >= 5 |
| end |
| }, |
| generate_pause_to_think_node('smelt-iron'), |
| generate_post_pause_to_think_node('smelt-iron'), |
| { |
| name = 'craft-furnace-start', |
| init = function() |
| game.players[1].set_goal_description({"goal-craft-furnace"}) |
|
|
| end, |
| condition = function (event) |
| return game.players[1].opened_gui_type == defines.gui_type.controller |
| end |
| }, |
| { |
| name = 'wait-for-crafting-to-open', |
| condition = story_elapsed_check(0.0000001), |
| action = function() |
| local recipelist = game.players[1].force.recipes |
| recipelist["stone-furnace"].enabled = true |
| end |
| }, |
| { |
| name = 'craft-furnace-finish', |
| init = function() |
| game.show_message_dialog({text={"msg-recipes-info-1"}, point_to= {type="active_window"}}) |
| end, |
| condition = function (event) |
| if event.name == defines.events.on_tick then return false end |
| return game.players[1].crafting_queue_size > 0 |
| end |
| }, |
| { |
| name = 'show-crafting-queue', |
| init = function() |
| local shown_text; |
| if game.players[1].input_method == defines.input_method.game_controller then |
| shown_text = "msg-crafting-queue-1-controller" |
| else |
| shown_text = "msg-crafting-queue-1" |
| end |
| game.show_message_dialog({ |
| text={shown_text}, |
| point_to= |
| { |
| type = "crafting_queue", |
| crafting_queueindex = game.players[1].crafting_queue_size |
| } |
| }) |
| end, |
| condition = function(event) |
| if event.name == defines.events.on_tick then return false end |
| return game.players[1].get_item_count("stone-furnace") >= 1 |
| end |
| }, |
| { |
| name = 'place-stone-furnace', |
| init = function() |
| game.players[1].set_goal_description({"goal-build-furnace"}) |
| end, |
| condition = function(event) |
| if event.name == defines.events.on_tick then return false end |
| return get_furnace() |
| end, |
| action = function() |
| if global.placed_furnace_before == true then |
| story_jump_to(global.story,'wait-for-iron-plates') |
| end |
| end |
| }, |
| generate_pause_to_think_node('furnace-useful'), |
| generate_post_pause_to_think_node('furnace-useful'), |
| { |
| name = 'open-furnace', |
| init = function() |
| game.players[1].set_goal_description({"goal-open-furnace"}) |
| end, |
| update = function(event) |
| if event.name == defines.events.on_tick then return false end |
| if not get_furnace() then |
| story_jump_to(global.story,'place-stone-furnace') |
| end |
| end, |
| condition = function(event) |
| if event.name == defines.events.on_tick then return false end |
| return (get_furnace() and game.players[1].opened == get_furnace()) or |
| get_furnace() and get_furnace().get_item_count('iron-ore') > 0 |
| end |
| }, |
| { |
| name = 'put-iron-ore', |
| init = function() |
| game.players[1].set_goal_description({"goal-insert-iron-into-furnace"}) |
| end, |
| update = function(event) |
| if event.name == defines.events.on_tick then return false end |
| if not get_furnace() then |
| story_jump_to(global.story,'place-stone-furnace') |
| end |
| end, |
| condition = function(event) |
| if event.name == defines.events.on_tick then return false end |
| return get_furnace() and get_furnace().get_item_count('iron-ore') > 0 |
| end |
| }, |
| { |
| name = 'put-coal', |
| init = function() |
| game.players[1].set_goal_description({"goal-insert-fuel-into-furnace"}) |
| end, |
| update = function (event) |
| if event.name == defines.events.on_tick then return false end |
| if not get_furnace() then |
| story_jump_to(global.story,'place-stone-furnace') |
| end |
| end, |
| condition = function() |
| local furnace = get_furnace() |
| return furnace and furnace.valid and furnace.energy > 0 |
| end |
| }, |
| { |
| name = 'show-furnace-smelting', |
| init = function() |
| game.players[1].set_goal_description("") |
| if game.players[1].opened == get_furnace() then |
| game.show_message_dialog( |
| { |
| text={"msg-furnace-working"}, |
| point_to={type="active_window"} |
| }) |
| elseif game.players[1].opened == nil then |
| game.show_message_dialog( |
| { |
| text={"msg-furnace-working"}, |
| point_to={type="entity", entity=get_furnace()} |
| }) |
| end |
| end, |
| update = function(event) |
| if event.name == defines.events.on_tick then return false end |
| if not get_furnace() then |
| story_jump_to(global.story,'place-stone-furnace') |
| end |
| end, |
|
|
| }, |
| generate_pause_to_think_node('tired'), |
| generate_post_pause_to_think_node('tired'), |
| { |
| name = 'wait-for-iron-plates', |
| init = function() |
| if global.placed_furnace_before == true then |
| game.players[1].set_goal_description({"goal-wait-for-smelting"}) |
| else |
| game.players[1].set_goal_description("") |
| end |
| global.placed_furnace_before = true |
|
|
| end, |
| condition = function(event) |
| if event.name == defines.events.on_tick and event.tick % 60 ~= 0 then return end |
|
|
| local furnace = get_furnace() |
| if not furnace then |
| story_jump_to(global.story,'place-stone-furnace') |
| return |
| end |
|
|
| local plate_count = furnace.get_item_count("iron-plate") |
| if plate_count > 3 then return true end |
|
|
| local ore_count = furnace.get_item_count("iron-ore") |
| if ore_count > 0 then return end |
|
|
| if game.players[1].get_item_count("iron-plate") > 3 then |
| |
| story_jump_to(global.story,'craft-burner-mining-drill') |
| return |
| end |
|
|
| end |
| }, |
| { |
| name = 'take-plates-from-furnace', |
| init = function() |
| game.players[1].set_goal_description({"goal-get-iron-plates-from-furnace"}) |
| game.players[1].set_gui_arrow({type="entity", entity=get_furnace()}) |
| end, |
| update = function(event) |
| if event.name == defines.events.on_tick then return false end |
| if get_furnace() == nil then |
| game.players[1].clear_gui_arrow() |
| story_jump_to(global.story,'place-stone-furnace') |
| end |
| end, |
| condition = function (event) |
| if event.name == defines.events.on_tick then return false end |
| return get_furnace() and get_furnace().get_item_count('iron-plate') == 0 |
| end, |
| action = function() |
| game.players[1].clear_gui_arrow() |
| end |
| }, |
| { |
| name = 'craft-burner-mining-drill', |
| init = function() |
| game.players[1].set_goal_description({"goal-craft-burner-miner"}) |
| local recipelist = game.players[1].force.recipes |
| recipelist["iron-gear-wheel"].enabled = true |
| recipelist["burner-mining-drill"].enabled = true |
| end, |
| condition = function (event) |
| if event.name == defines.events.on_tick then return false end |
| return game.players[1].get_item_count("burner-mining-drill") > 0 |
| end |
| }, |
| { |
| name = 'add_filter', |
| init = function() |
| if game.players[1].input_method == defines.input_method.game_controller then |
| game.players[1].set_goal_description({"goal-add-filter-controller"}) |
| else |
| game.players[1].set_goal_description({"goal-add-filter"}) |
| end |
| game.players[1].game_view_settings = { |
| show_quickbar = true |
| } |
| end, |
| condition = function(event) |
| for slot=1,40 do |
| if game.players[1].get_quick_bar_slot(slot) |
| and game.players[1].get_quick_bar_slot(slot).name == 'burner-mining-drill' then |
| return true |
| end |
| end |
| if event.name == defines.events.on_built_entity |
| and event.created_entity.name == "burner-mining-drill" then |
| global.miner = event.created_entity |
| return true |
| end |
| return false |
| end |
| }, |
| { |
| name = 'empty-hand-contents', |
| init = function () |
| if not game.players[1].cursor_stack.valid_for_read then |
| |
| story_jump_to( global.story,"place-burner-mining-drill") |
| end |
| if get_furnace() then |
| |
| story_jump_to( global.story,"fuel-burner-mining-drill") |
| end |
| game.players[1].set_goal_description({"goal-fast-empty-hand"}) |
| end, |
| condition = function () |
| return game.players[1].cursor_stack.valid_for_read == false |
| end |
| }, |
| { |
| name = 'place-burner-mining-drill', |
| init = function() |
| set_arrow() |
| game.players[1].set_goal_description({"goal-place-burner-miner"}) |
| end, |
| condition = function (event) |
| if event.name == defines.events.on_tick then return false end |
| return get_miner() and get_miner().valid |
| end |
| }, |
| { |
| name = 'fuel-burner-mining-drill', |
| init = function() |
| game.players[1].set_goal_description({"goal-insert-fuel-into-burner-miner"}) |
| end, |
| update = function(event) |
| if event.name == defines.events.on_tick and event.tick % 60 ~= 0 then return false end |
| if get_miner() == nil then |
| story_jump_to(global.story,'place-burner-mining-drill') |
| elseif get_miner().valid and get_miner().energy > 0 then |
| game.players[1].set_goal_description("") |
| end |
| end, |
| condition = function (event) |
| if event.name == defines.events.on_tick and event.tick % 60 ~= 0 then return false end |
| return get_miner() and get_miner().valid and get_miner().energy > 0 |
| end |
|
|
| }, |
| generate_pause_to_think_node('burner-miner-working'), |
| generate_post_pause_to_think_node('burner-miner-working'), |
| { |
| name = 'wait-to-check-target', |
| init = function() |
| game.players[1].set_goal_description("") |
| end, |
| condition = function(event) |
| if event.name == defines.events.on_tick and event.tick % 60 ~= 0 then return false end |
| return game.players[1].opened == nil and (game.surfaces[1].count_entities_filtered({name='item-on-ground'}) > 0 and |
| get_miner() and get_miner().status == defines.entity_status.waiting_for_space_in_destination) or |
| get_miner_drop_target() or get_miner() == nil |
| end, |
| action = function() |
| local drop_target = get_miner_drop_target() |
| local miner = get_miner() |
| if get_miner() == nil then |
| story_jump_to(global.story,'place-burner-mining-drill') |
| elseif drop_target and drop_target.can_insert(miner.mining_target.name) then |
| story_jump_to(global.story,'wait-for-chest-to-fill') |
| elseif drop_target then |
| story_jump_to(global.story,'remove-blocking-entity') |
| elseif global.picked_up_item_before == true then |
| story_jump_to(global.story,'place-iron-chest') |
| end |
| end |
| }, |
| { |
| name = 'show-miner-blockage', |
| init = function() |
|
|
| game.players[1].set_goal_description("") |
| game.show_message_dialog({ |
| text={"msg-burner-miner-resources-placement"}, |
| point_to={type="position", position=global.miner.drop_position} |
| }) |
| set_arrow({name="orange-arrow-with-circle", position = global.miner.drop_position}) |
| game.players[1].set_goal_description({"goal-pick-mined-item"}) |
| end, |
| update = function(event) |
| if event.name == defines.events.on_tick then return false end |
| if get_miner() == nil then |
| set_arrow() |
| story_jump_to(global.story,'place-burner-mining-drill') |
| end |
| end, |
| condition = function (event) |
| if event.name == defines.events.on_tick then return false end |
| if event.name == defines.events.on_player_mined_entity and event.entity.name =='item-on-ground' then |
| return true |
| elseif event.name == defines.events.on_picked_up_item then |
| return true |
| end |
| return false |
| end, |
| action = function() |
| set_arrow() |
| end |
| }, |
| generate_pause_to_think_node('storage-needed'), |
| generate_post_pause_to_think_node('storage-needed'), |
| { |
| name = 'craft-iron-chest', |
| init = function() |
| global.placed_miner_before = true |
| global.picked_up_item_before = true |
| game.players[1].set_goal_description({"goal-craft-chest"}) |
| local recipelist = game.players[1].force.recipes |
| recipelist["wooden-chest"].enabled = true |
| recipelist["iron-chest"].enabled = true |
| end, |
| condition = function (event) |
| if event.name == defines.events.on_tick then return false end |
| local have_wood_chest = game.players[1].get_item_count("wooden-chest") > 0 |
| local have_iron_chest = game.players[1].get_item_count("iron-chest") > 0 |
| local placed_any_chest = game.surfaces[1].count_entities_filtered({name={'wooden-chest','iron-chest'}}) > 0 |
| return have_wood_chest or have_iron_chest or placed_any_chest |
| end, |
| update = function(event) |
| if get_miner() == nil then |
| story_jump_to(global.story,'place-burner-mining-drill') |
| elseif get_miner().energy == 0 then |
| story_jump_to(global.story,'fuel-burner-mining-drill') |
| end |
| end |
| }, |
| { |
| name = 'place-iron-chest', |
| init = function() |
| game.players[1].set_goal_description({"goal-put-chest-below-burner-miner"}) |
| set_arrow({name="orange-arrow-with-circle", position = global.miner.drop_position}) |
| local recipelist = game.players[1].force.recipes |
| recipelist["wooden-chest"].enabled = true |
| end, |
| update = function(event) |
| if event.name == defines.events.on_tick then return false end |
| if get_miner() == nil then |
| story_jump_to(global.story,'place-burner-mining-drill') |
| elseif get_miner().energy == 0 then |
| story_jump_to(global.story,'fuel-burner-mining-drill') |
| end |
| end, |
| condition = function (event) |
| if event.name == defines.events.on_tick then return false end |
| return get_miner_drop_target() and get_miner_drop_target().valid and get_miner_drop_target().can_insert(get_miner().mining_target.name) |
| end, |
| action = function(event) |
| set_arrow() |
| end |
| }, |
| generate_pause_to_think_node('learned-something'), |
| generate_post_pause_to_think_node('learned-something'), |
| { |
| name = 'wait-for-chest-to-fill', |
| init = function() |
| if get_miner_drop_target() then |
| global.original_count = count_items_in_unknown(get_miner_drop_target()) |
| if get_miner_drop_target().name == 'stone-furnace' then |
| game.players[1].set_goal_description({"goal-collect-in-furnace", |
| global.original_count + 2, |
| get_miner_drop_target().localised_name}) |
| else |
| game.players[1].set_goal_description({"goal-collect-in-container", |
| global.original_count + 2, |
| get_miner_drop_target().localised_name}) |
| end |
| end |
| end, |
| update = function (event) |
| if event.name == defines.events.on_tick and event.tick % 60 ~= 0 then return false end |
| if get_miner() == nil then |
| game.players[1].clear_gui_arrow() |
| story_jump_to(global.story,'place-burner-mining-drill') |
| elseif get_miner_drop_target() == nil then |
| game.players[1].clear_gui_arrow() |
| story_jump_to(global.story,'place-iron-chest') |
| else |
| game.players[1].set_gui_arrow({type="position", position=get_miner_drop_target().position}) |
| if get_miner_drop_target().name == 'stone-furnace' then |
| game.players[1].set_goal_description({"goal-collect-in-furnace", |
| global.original_count + 2, |
| get_miner_drop_target().localised_name},true) |
| else |
| game.players[1].set_goal_description({"goal-collect-in-container", |
| global.original_count + 2, |
| get_miner_drop_target().localised_name},true) |
| end |
| end |
| end, |
| condition = function (event) |
| if event.name == defines.events.on_tick and event.tick % 60 ~= 0 then return false end |
| local drop_target = get_miner_drop_target() |
| local count = count_items_in_unknown(drop_target) |
| return drop_target and drop_target.valid and count >= global.original_count + 2 |
| end |
| }, |
| { |
| name = 'take-items', |
| init = function() |
| if get_miner_drop_target().name == 'stone-furnace' then |
| game.players[1].set_goal_description({"goal-empty-furnace",get_miner_drop_target().localised_name}) |
| else |
| game.players[1].set_goal_description({"goal-empty-container",get_miner_drop_target().localised_name}) |
| end |
| end, |
| update = function(event) |
| if event.name == defines.events.on_tick then return false end |
| if get_miner() == nil then |
| game.players[1].clear_gui_arrow() |
| story_jump_to(global.story,'place-burner-mining-drill') |
| elseif get_miner_drop_target() == nil then |
| game.players[1].clear_gui_arrow() |
| story_jump_to(global.story,'place-iron-chest') |
| else |
| game.players[1].set_gui_arrow({type="position", position=get_miner_drop_target().position}) |
| end |
| end, |
| condition = function (event) |
| if event.name == defines.events.on_tick then return false end |
| return get_miner_drop_target() and count_items_in_unknown(get_miner_drop_target()) == 0 |
| end, |
| action = function() |
| game.players[1].set_goal_description("") |
| game.players[1].clear_gui_arrow() |
| end |
| }, |
| generate_pause_to_think_node('go-around'), |
| generate_post_pause_to_think_node('go-around'), |
| { |
| name = 'victory', |
| init = function() |
| game.set_game_state({game_finished=true, player_won=true, can_continue=true,next_level='level-02'}) |
| game.tick_paused = true |
| end |
| }, |
| { |
| name = 'remove-blocking-entity', |
| init = function() |
| game.players[1].set_goal_description("") |
| |
| |
| |
| |
| game.players[1].set_gui_arrow({type="position", position=get_miner_drop_target().position}) |
| game.players[1].set_goal_description({"goal-remove-blocking-entity"}) |
| end, |
| condition = function(event) |
| if event.name == defines.events.on_tick then return false end |
| return get_miner() == nil or (get_miner() and get_miner_drop_target() == nil) or |
| (get_miner() and get_miner_drop_target() and get_miner_drop_target().can_insert(get_miner().mining_target.name)) |
| end, |
| action = function() |
| game.players[1].clear_gui_arrow() |
| if get_miner() == nil then |
| story_jump_to(global.story,'place-burner-mining-drill') |
| elseif get_miner_drop_target() == nil then |
| story_jump_to(global.story,'wait-to-check-target') |
| end |
| end |
| } |
| } |
| } |
|
|
| story_init_helpers(story_table) |
|
|
| local story_events = |
| { |
| defines.events.on_player_cursor_stack_changed, |
| defines.events.on_player_main_inventory_changed, |
| defines.events.on_gui_opened, |
| defines.events.on_gui_closed, |
| defines.events.on_picked_up_item, |
| defines.events.on_player_mined_entity, |
| defines.events.on_player_mined_item, |
| defines.events.on_built_entity, |
| defines.events.on_player_rotated_entity, |
| defines.events.on_selected_entity_changed, |
| defines.events.on_pre_player_crafted_item, |
| defines.events.on_tick |
| } |
|
|
| script.on_init(function() |
| global.story = story_init() |
| end) |
|
|
| script.on_event(story_events, function(event) |
| if not game.tick_paused then |
| story_update(global.story, event, "level-02") |
| end |
| end) |
|
|