1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-22 03:38:48 +02:00
MewMew f5115e240e update
Faster capsule drops and shuffled.
Built silos always have auto-launch toggled off.
Rocket silos will attempt to auto-launch every 30 seconds.
Max satellites stored is now 1 + 1 every third world.
Mothership will now answer your questions.
Teleports now always lead to 0,0.
Chunk deletion made a bit slower.
50 % less research cost in quantum anomaly.
Only units are now affected in undead plague.
Replicant fauna nerf.
Ghosts, pipes, containers and walls are now minable in tarball.
Laser turrets are broken in matter anomaly.
Biters only spawn from rocks and trees in infested.
New World types ribbon, wasteland, oceanic, lazy bastard and abandoned library.
2021-05-28 22:19:24 +02:00

224 lines
7.9 KiB
Lua

--luacheck: ignore
--[[
Journey, launch a rocket in increasingly harder getting worlds. - MewMew
]]--
require 'modules.rocket_launch_always_yields_science'
local Server = require 'utils.server'
local Constants = require 'maps.journey.constants'
local Functions = require 'maps.journey.functions'
local Unique_modifiers = require 'maps.journey.unique_modifiers'
local Map = require 'modules.map_info'
local Global = require 'utils.global'
local journey = {}
Global.register(
journey,
function(tbl)
journey = tbl
end
)
local function on_chunk_generated(event)
local surface = event.surface
if surface.index == 1 then
Functions.place_mixed_ore(event, journey)
local unique_modifier = Unique_modifiers[journey.world_trait]
if unique_modifier.on_chunk_generated then unique_modifier.on_chunk_generated(event, journey) end
return
end
if surface.name ~= "mothership" then return end
Functions.on_mothership_chunk_generated(event)
end
local function on_console_chat(event)
if not event.player_index then return end
local player = game.players[event.player_index]
local message = event.message
message = string.lower(message)
local a, b = string.find(message, "?", 1, true)
if not a then return end
local a, b = string.find(message, "mother", 1, true)
if not a then return end
local answer = Constants.mothership_messages.answers[math.random(1, #Constants.mothership_messages.answers)]
if math.random(1, 4) == 1 then
for _ = 1, math.random(2, 5), 1 do table.insert(journey.mothership_messages, "") end
table.insert(journey.mothership_messages, "...")
end
for _ = 1, math.random(15, 30), 1 do table.insert(journey.mothership_messages, "") end
table.insert(journey.mothership_messages, answer)
end
local function on_player_joined_game(event)
local player = game.players[event.player_index]
Functions.draw_gui(journey)
if player.surface.name == "mothership" then
journey.characters_in_mothership = journey.characters_in_mothership + 1
end
if player.force.name == "enemy" then
Functions.clear_player(player)
player.force = game.forces.player
local position = game.surfaces.nauvis.find_non_colliding_position("character", {0,0}, 32, 0.5)
if position then
player.teleport(position, game.surfaces.nauvis)
else
player.teleport({0,0}, game.surfaces.nauvis)
end
end
end
local function on_player_left_game(event)
local player = game.players[event.player_index]
Functions.draw_gui(journey)
if player.surface.name == "mothership" then
journey.characters_in_mothership = journey.characters_in_mothership - 1
end
end
local function on_player_changed_position(event)
local player = game.players[event.player_index]
Functions.teleporters(journey, player)
local unique_modifier = Unique_modifiers[journey.world_trait]
if unique_modifier.on_player_changed_position then unique_modifier.on_player_changed_position(event) end
end
local function on_built_entity(event)
Functions.deny_building(event)
Functions.register_built_silo(event, journey)
local unique_modifier = Unique_modifiers[journey.world_trait]
if unique_modifier.on_built_entity then unique_modifier.on_built_entity(event, journey) end
end
local function on_robot_built_entity(event)
Functions.deny_building(event)
Functions.register_built_silo(event, journey)
local unique_modifier = Unique_modifiers[journey.world_trait]
if unique_modifier.on_robot_built_entity then unique_modifier.on_robot_built_entity(event, journey) end
end
local function on_player_mined_entity(event)
local unique_modifier = Unique_modifiers[journey.world_trait]
if unique_modifier.on_player_mined_entity then unique_modifier.on_player_mined_entity(event, journey) end
end
local function on_robot_mined_entity(event)
local unique_modifier = Unique_modifiers[journey.world_trait]
if unique_modifier.on_robot_mined_entity then unique_modifier.on_robot_mined_entity(event, journey) end
end
local function on_entity_died(event)
local unique_modifier = Unique_modifiers[journey.world_trait]
if unique_modifier.on_entity_died then unique_modifier.on_entity_died(event, journey) end
end
local function on_rocket_launched(event)
local rocket_inventory = event.rocket.get_inventory(defines.inventory.rocket)
local slot = rocket_inventory[1]
if slot and slot.valid and slot.valid_for_read then
if journey.mothership_cargo[slot.name] then
journey.mothership_cargo[slot.name] = journey.mothership_cargo[slot.name] + slot.count
else
journey.mothership_cargo[slot.name] = slot.count
end
if journey.mothership_cargo_space[slot.name] then
if journey.mothership_cargo[slot.name] > journey.mothership_cargo_space[slot.name] then
journey.mothership_cargo[slot.name] = journey.mothership_cargo_space[slot.name]
end
if slot.name == "uranium-fuel-cell" then
Server.to_discord_embed("Refueling progress: " .. journey.mothership_cargo[slot.name] .. "/" .. journey.mothership_cargo_space[slot.name])
end
end
end
Functions.draw_gui(journey)
end
local function on_nth_tick()
Functions[journey.game_state](journey)
Functions.mothership_message_queue(journey)
end
local function on_init()
local T = Map.Pop_info()
T.main_caption = 'The Journey'
T.sub_caption = 'v 1.8'
T.text =
table.concat(
{
'The selectors in the mothership, allow you to choose a destination.\n',
'Worlds can be rerolled by spending a satellite at the top selector.\n',
'Once enough players are on a selector, mothership will start traveling.\n\n',
'A teleporter will be deployed, after reaching the target.\n',
'It is however, only capable of transfering the subjects body.\n\n',
'Worlds will get more difficult with each jump, stacking the chosen modifiers.\n',
'Launch uranium fuel cells via rocket cargo, to advance to the next world.\n',
'The tooltips on the top buttons yield informations about the current world.\n',
'If the journey ends, an admin can fully reset the map via command "/reset-journey".\n\n',
'How far will the journey lead?\n\n',
}
)
T.main_caption_color = {r = 100, g = 20, b = 255}
T.sub_caption_color = {r = 100, g = 100, b = 100}
game.permissions.get_group('Default').set_allows_action(defines.input_action.set_auto_launch_rocket, false)
Functions.hard_reset(journey)
end
commands.add_command(
'reset-journey',
'Fully resets the journey map.',
function()
local player = game.player
if not (player and player.valid) then
return
end
if not player.admin then
player.print("You are not an admin!")
return
end
Functions.hard_reset(journey)
game.print(player.name .. " has reset the map.")
end
)
commands.add_command(
'skip-world',
'Instantly wins and skips the current world.',
function()
local player = game.player
if not (player and player.valid) then
return
end
if not player.admin then
player.print("You are not an admin!")
return
end
if journey.game_state ~= "dispatch_goods" and journey.game_state ~= "world" then return end
journey.game_state = "set_world_selectors"
end
)
local Event = require 'utils.event'
Event.on_init(on_init)
Event.on_nth_tick(10, on_nth_tick)
Event.add(defines.events.on_chunk_generated, on_chunk_generated)
Event.add(defines.events.on_player_joined_game, on_player_joined_game)
Event.add(defines.events.on_player_left_game, on_player_left_game)
Event.add(defines.events.on_player_changed_position, on_player_changed_position)
Event.add(defines.events.on_rocket_launched, on_rocket_launched)
Event.add(defines.events.on_robot_built_entity, on_robot_built_entity)
Event.add(defines.events.on_built_entity, on_built_entity)
Event.add(defines.events.on_robot_mined_entity, on_robot_mined_entity)
Event.add(defines.events.on_player_mined_entity, on_player_mined_entity)
Event.add(defines.events.on_entity_died, on_entity_died)
Event.add(defines.events.on_console_chat, on_console_chat)