diff --git a/control.lua b/control.lua index 0d98ac27..40b4908e 100644 --- a/control.lua +++ b/control.lua @@ -1,6 +1,6 @@ require 'utils.data_stages' _LIFECYCLE = _STAGE.control -- Control stage -_DEBUG = false +_DEBUG = true _DUMP_ENV = false require 'utils.server' @@ -113,7 +113,7 @@ require 'utils.freeplay' --require 'maps.chronosphere.main' --![[Adventure as a crew of pirates]]-- --- require 'maps.pirates.main' +require 'maps.pirates.main' --![[Launch rockets in increasingly harder getting worlds.]]-- --require 'maps.journey.main' diff --git a/maps/pirates/api_on_tick.lua b/maps/pirates/api_on_tick.lua index e34a79c0..606ad4bc 100644 --- a/maps/pirates/api_on_tick.lua +++ b/maps/pirates/api_on_tick.lua @@ -16,20 +16,20 @@ local Roles = require 'maps.pirates.roles.roles' local Progression = require 'maps.pirates.progression' local Crowsnest = require 'maps.pirates.surfaces.crowsnest' local Hold = require 'maps.pirates.surfaces.hold' -local Cabin = require 'maps.pirates.surfaces.cabin' +-- local Cabin = require 'maps.pirates.surfaces.cabin' local Balance = require 'maps.pirates.balance' local Common = require 'maps.pirates.common' local CoreData = require 'maps.pirates.coredata' local Overworld = require 'maps.pirates.overworld' local Utils = require 'maps.pirates.utils_local' local Crew = require 'maps.pirates.crew' -local Parrot = require 'maps.pirates.parrot' +-- local Parrot = require 'maps.pirates.parrot' local Math = require 'maps.pirates.math' local _inspect = require 'utils.inspect'.inspect local Kraken = require 'maps.pirates.surfaces.sea.kraken' local Quest = require 'maps.pirates.quest' -local ShopDock = require 'maps.pirates.shop.dock' +-- local ShopDock = require 'maps.pirates.shop.dock' local QuestStructures = require 'maps.pirates.structures.quest_structures.quest_structures' local Public = {} @@ -436,40 +436,6 @@ function Public.pick_up_tick(tickinterval) end end -local function cached_structure_delete_existing_entities_if_needed(surface, position, special) - if (not special.doNotDestroyExistingEntities) then - -- destroy existing entities - local area = {left_top = {position.x - special.width/2, position.y - special.height/2}, right_bottom = {position.x + special.width/2 + 0.5, position.y + special.height/2 + 0.5}} - surface.destroy_decoratives{area=area} - local existing = surface.find_entities_filtered{area = area} - if existing then - for _, e in pairs(existing) do - if not (((special.name == 'small_primitive_mining_base' or special.name == 'small_mining_base') and (e.name == 'iron-ore' or e.name == 'copper-ore' or e.name == 'stone')) or (special.name == 'uranium_miners' and e.name == 'uranium-ore')) then - if not (e.name and e.name == 'rocket-silo') then - e.destroy() - end - end - end - end - end -end - -local function cached_structure_delete_existing_unwalkable_tiles_if_needed(surface, position, special) - local area = {left_top = {position.x - special.width/2, position.y - special.height/2}, right_bottom = {position.x + special.width/2 + 0.5, position.y + special.height/2 + 0.5}} - local existing = surface.find_tiles_filtered{area = area, collision_mask = "water-tile"} - if existing then - local tiles = {} - - for _, t in pairs(existing) do - tiles[#tiles + 1] = {name = "landfill", position = t.position} - end - - if #tiles > 0 then - surface.set_tiles(tiles, true) - end - end -end - function Public.interpret_shorthanded_force_name(shorthanded_name) local memory = Memory.get_crew_memory() @@ -533,8 +499,10 @@ function Public.place_cached_structures(tickinterval) Common.ensure_chunks_at(surface, position, Common.structure_ensure_chunk_radius) - cached_structure_delete_existing_entities_if_needed(surface, position, special) - cached_structure_delete_existing_unwalkable_tiles_if_needed(surface, position, special) + if not special.doNotDestroyExistingEntities then + Common.delete_entities(surface, position, special.width, special.height) + end + Common.replace_unwalkable_tiles(surface, position, special.width, special.height) local saved_components = {} for k = 1, #special.components do diff --git a/maps/pirates/commands.lua b/maps/pirates/commands.lua index b483f378..516b79ba 100644 --- a/maps/pirates/commands.lua +++ b/maps/pirates/commands.lua @@ -1203,8 +1203,10 @@ if _DEBUG then player.insert{name='uranium-rounds-magazine', count = 200} player.insert{name='raw-fish', count = 100} player.insert{name='coin', count = 50000} - player.insert{name='grenade', count = 100} + player.insert{name='cluster-grenade', count = 100} player.insert{name='steel-chest', count = 50} + player.insert{name='express-loader', count = 50} + player.insert{name='burner-inserter', count = 50} end end) diff --git a/maps/pirates/common.lua b/maps/pirates/common.lua index 4ad9b564..c17ba2f5 100644 --- a/maps/pirates/common.lua +++ b/maps/pirates/common.lua @@ -1670,4 +1670,37 @@ function Public.force_connect_poles(pole1, pole2) end end + +-- position here refers to middle position +function Public.delete_entities(surface, position, width, height) + local area = {left_top = {position.x - width/2, position.y - height/2}, right_bottom = {position.x + width/2 + 0.5, position.y + height/2 + 0.5}} + surface.destroy_decoratives{area = area} + local existing = surface.find_entities_filtered{area = area} + if not existing then return end + + for _, e in pairs(existing) do + if not (e.name == 'iron-ore' or e.name == 'copper-ore' or e.name == 'stone' or e.name == 'uranium-ore' or e.name == 'crude-oil') then + if not (e.name == 'rocket-silo') then + e.destroy() + end + end + end +end + +function Public.replace_unwalkable_tiles(surface, position, width, height) + local area = {left_top = {position.x - width/2, position.y - height/2}, right_bottom = {position.x + width/2 + 0.5, position.y + height/2 + 0.5}} + local existing = surface.find_tiles_filtered{area = area, collision_mask = "water-tile"} + if not existing then return end + + local tiles = {} + + for _, t in pairs(existing) do + tiles[#tiles + 1] = {name = "landfill", position = t.position} + end + + if #tiles > 0 then + surface.set_tiles(tiles, true) + end +end + return Public \ No newline at end of file diff --git a/maps/pirates/crew.lua b/maps/pirates/crew.lua index f4791c0b..fc801d33 100644 --- a/maps/pirates/crew.lua +++ b/maps/pirates/crew.lua @@ -284,8 +284,12 @@ function Public.join_spectators(player, crewid) Common.notify_force(force, {'pirates.lobby_to_spectator', player.name}) Common.notify_lobby({'pirates.lobby_to_spectator_2', player.name, memory.name}) end + memory.spectatorplayerindices[#memory.spectatorplayerindices + 1] = player.index - memory.tempbanned_from_joining_data[player.index] = game.tick + + if not _DEBUG then + memory.tempbanned_from_joining_data[player.index] = game.tick + end -- if #Common.crew_get_crew_members() == 0 then -- memory.crew_disband_tick = game.tick + 30 -- -- memory.crew_disband_tick = game.tick + 60*60*2 --give players time to log back in after a crash or save diff --git a/maps/pirates/surfaces/islands/islands.lua b/maps/pirates/surfaces/islands/islands.lua index 2f78385d..0fc4dc7d 100644 --- a/maps/pirates/surfaces/islands/islands.lua +++ b/maps/pirates/surfaces/islands/islands.lua @@ -288,8 +288,13 @@ function Public.spawn_silo_setup(points_to_avoid) if silo_count >= 2 then game.print('debug - silo count: ' .. silo_count) end end - for i=1,silo_count do - local silo = surface.create_entity({name = 'rocket-silo', position = {p_silo.x + 9*(i-1), p_silo.y}, force = force, create_build_effect_smoke = false}) + for i = 1, silo_count do + local pos = {x = p_silo.x + 9*(i-1), y = p_silo.y} + + Common.delete_entities(surface, pos, 11, 11) + Common.replace_unwalkable_tiles(surface, pos, 11, 11) + + local silo = surface.create_entity({name = 'rocket-silo', position = pos, force = force, create_build_effect_smoke = false}) if silo and silo.valid then if not destination.dynamic_data.rocketsilos then destination.dynamic_data.rocketsilos = {} end destination.dynamic_data.rocketsilos[#destination.dynamic_data.rocketsilos + 1]= silo diff --git a/maps/pirates/surfaces/surfaces.lua b/maps/pirates/surfaces/surfaces.lua index 9705eaab..c15445fa 100644 --- a/maps/pirates/surfaces/surfaces.lua +++ b/maps/pirates/surfaces/surfaces.lua @@ -382,9 +382,13 @@ function Public.destination_on_arrival(destination) -- game.print('spawning silo') if destination.subtype ~= IslandEnum.enum.RADIOACTIVE then - local silo_position = Islands.spawn_silo_setup(points_to_avoid) - if silo_position then - points_to_avoid[#points_to_avoid + 1] = {x = silo_position.x, y = silo_position.y, r = 22} + local first_silo_pos = Islands.spawn_silo_setup(points_to_avoid) + if first_silo_pos then + local silo_count = Balance.silo_count() + for i = 1, silo_count do + local avoid_pos = {x = first_silo_pos.x + 9 * (i-1), y = first_silo_pos.y} + points_to_avoid[#points_to_avoid + 1] = {x = avoid_pos.x, y = avoid_pos.y, r = 22} + end end end