1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-30 04:40:54 +02:00
This commit is contained in:
danielmartin0 2021-10-13 14:56:49 +01:00
parent 4da8094a0b
commit 29473d4ed9
16 changed files with 72 additions and 54 deletions

View File

@ -3,6 +3,7 @@ _LIFECYCLE = _STAGE.control -- Control stage
_DEBUG = false
_DUMP_ENV = false
require 'utils.server'
require 'utils.server_commands'
require 'utils.utils'
@ -29,12 +30,12 @@ require 'utils.debug.command'
require 'comfy_panel.main'
require 'comfy_panel.player_list'
require 'comfy_panel.admin'
require 'comfy_panel.group'
require 'comfy_panel.poll'
require 'comfy_panel.score'
-- require 'comfy_panel.group'
-- require 'comfy_panel.poll'
-- require 'comfy_panel.score'
require 'comfy_panel.config'
require 'modules.autostash'
-- require 'modules.autostash'
---------------- !ENABLE MODULES HERE ----------------
--require 'modules.admins_operate_biters'
@ -107,6 +108,10 @@ require 'modules.autostash'
--![[Comfylatron has seized the Fish Train and turned it into a time machine]]--
--require 'maps.chronosphere.main'
--![[Adventure as a crew of pirates!]]--
require 'maps.pirates.main'
-- Note: should disable comfy_panel.group, comfy_panel.poll, comfy_panel.score
--![[Launch rockets in increasingly harder getting worlds.]]--
--require 'maps.journey.main'

View File

@ -13,7 +13,7 @@ softmod_info_new_players_1=For New Players
softmod_info_new_players_2=Try asking the captain what you can help with, or just mine resources and bring them to the ship.
softmod_info_tips_1=Features of the game that are hard to work out alone
softmod_info_tips_2=• Resources granted to the ship appear in the captain's cabin.\n• After the first island, the ship makes ore over time.\n• Charging a silo launches a rocket. This makes gold and coin, but also pollution and evo.\n• Charging a silo drains power from everything else on its network.\n• Once a silo has launched a rocket, biters will ignore it.\n• If X marks the spot, use inserters to dig.\n• You can steer the boat from the crow's nest by placing 100 rail signals in one of the blue boxes.\n• Labs producitivity increases with each league.\n• To launch a second parallel run, you need a fifth of the server's pirates to endorse it.\n• Time increase in evolution, and passive pollution, are both proportional to the number of remaining nests. However, destroying a nest will immediately jump evolution by roughly the amount it 'would have' made had it survived. \n• At Abandoned Labs, biters don't care if you emit pollution. They only care how long you stay.
softmod_info_tips_2=• Resources granted to the ship appear in the captain's cabin.\n• After the first island, the ship makes ore over time.\n• Charging a silo launches a rocket. This makes gold and coin, but also pollution and evo.\n• Charging a silo drains power from everything else on its network.\n• Once a silo has launched a rocket, biters will ignore it.\n• If X marks the spot, use inserters to dig.\n• You can steer the boat from the crow's nest by placing 100 rail signals in one of the blue boxes.\n• Labs producitivity increases with each league.\n• To launch a second parallel run, you need a fifth of the server's pirates to endorse it.\n• Time increase in evolution, and the strength of attacks, are both proportional to the number of remaining nests. However, destroying a nest will immediately jump evolution by roughly the amount it 'would have' made had it survived. \n• At Abandoned Labs, biters don't care if you emit pollution. They only care how long you stay.
softmod_info_updates_1=Development
softmod_info_updates_2=After more than a year on and off development, Pirate Ship is released. Not everything made it into 1.0. We don't have a 'city' in the lobby with a practice boat, nor 'biter forts' on the top lane, 'maze wurld', localisation to other languages, nor pvp. But for now, it is time to enjoy and tweak 1.0.

View File

@ -57,6 +57,7 @@ function(cmd)
if player and player.valid then
if PlayerColors[param] then
player.color = PlayerColors[param]
player.chat_color = PlayerColors[param]
game.print(player.name .. '\'s color is now ' .. param .. ' (via /ccolor).', PlayerColors[param])
else
player.print('Color not found.')

View File

@ -5,8 +5,8 @@ local inspect = require 'utils.inspect'.inspect
local Public = {}
Public.scenario_id_name = 'pirates'
Public.version_string = '1.0.1.5'
Public.version_float = 1.015
Public.version_string = '1.0.1.6'
Public.version_float = 1.016
Public.victory_x = 1000

View File

@ -704,6 +704,7 @@ function Public.reset_crew_and_enemy_force(id)
crew_force.recipes['centrifuge'].enabled = false
crew_force.recipes['flamethrower-turret'].enabled = true
crew_force.recipes['locomotive'].enabled = false
crew_force.technologies['automobilism'].enabled = false
crew_force.recipes['car'].enabled = false
crew_force.recipes['cargo-wagon'].enabled = false

View File

@ -191,14 +191,16 @@ function Public.click(event)
event.element.zoom = zoom
end
if event.button == defines.mouse_button_type.middle then
if size == 320 then
size = 420
elseif size == 420 then
size = 520
elseif size == 520 then
size = 250
if size == 340 then
size = 440
elseif size == 440 then
size = 560
elseif size == 560 then
size = 700
elseif size == 700 then
size = 280
else
size = 320
size = 340
end
event.element.style.minimal_height = size
event.element.style.minimal_width = size

View File

@ -126,16 +126,16 @@ local function saved_scores_trim(scores)
table.sort(leagues_travelled_latestv)
local completion_times_cutoff = #completion_times > 8 and completion_times[8] or 9999999
local completion_times_mediump_latestv_cutoff = #completion_times_mediump_latestv > 5 and completion_times_mediump_latestv[5] or 9999999
local completion_times_hard_cutoff = #completion_times_hard > 5 and completion_times_hard[5] or 9999999
local completion_times_nightmare_cutoff = #completion_times_hard > 3 and completion_times_hard[3] or 9999999
local completion_times_mediump_latestv_cutoff = #completion_times_mediump_latestv > 4 and completion_times_mediump_latestv[4] or 9999999
local completion_times_hard_cutoff = #completion_times_hard > 4 and completion_times_hard[4] or 9999999
local completion_times_nightmare_cutoff = #completion_times_hard > 2 and completion_times_hard[2] or 9999999
local completion_times_latestv_cutoff = #completion_times_latestv > 8 and completion_times_latestv[8] or 9999999
local leagues_travelled_cutoff = #leagues_travelled > 8 and leagues_travelled[-8] or 0
local leagues_travelled_mediump_latestv_cutoff = #leagues_travelled_mediump_latestv > 5 and leagues_travelled_mediump_latestv[-5] or 0
local leagues_travelled_hard_cutoff = #leagues_travelled_hard > 5 and leagues_travelled_hard[-5] or 0
local leagues_travelled_nightmare_cutoff = #leagues_travelled_hard > 3 and leagues_travelled_hard[-3] or 0
local leagues_travelled_latestv_cutoff = #leagues_travelled_latestv > 8 and leagues_travelled_latestv[-8] or 0
local leagues_travelled_mediump_latestv_cutoff = #leagues_travelled_mediump_latestv > 4 and leagues_travelled_mediump_latestv[-4] or 0
local leagues_travelled_hard_cutoff = #leagues_travelled_hard > 4 and leagues_travelled_hard[-4] or 0
local leagues_travelled_nightmare_cutoff = #leagues_travelled_hard > 2 and leagues_travelled_hard[-2] or 0
local leagues_travelled_latestv_cutoff = #leagues_travelled_latestv > 86 and leagues_travelled_latestv[-8] or 0
-- log(inspect{completion_times_cutoff,completion_times_mediump_latestv_cutoff,completion_times_hard_cutoff,completion_times_latestv_cutoff,leagues_travelled_cutoff,leagues_travelled_mediump_latestv_cutoff,leagues_travelled_hard_cutoff,leagues_travelled_latestv_cutoff})
@ -350,7 +350,7 @@ local function score_gui(data)
for _, header in ipairs(headers) do
local cap = header.caption
log(header.caption)
-- log(header.caption)
-- Add sorting symbol if any
if header.column and sorting_pref[1] and sorting_pref[1].column == header.column then
@ -483,30 +483,30 @@ local function on_gui_click(event)
['_difficulty'] = 'difficulty',
['_capacity'] = 'capacity',
}
local column = element_to_column[name]
if column then
if element_to_column[name] then
--@TODO: Extend
local sorting_pref = this.sort_by[player.index]
local found = false
local found_index = nil
local new_method = 'descending'
for i, sort in ipairs(sorting_pref) do
if sort.column == column.column then
found = true
if sort.method == 'descending' then new_method = 'ascending' end
if sort.column == element_to_column[name] then
found_index = i
if sort.method == 'descending' and i==1 then new_method = 'ascending' end
end
end
if found then
if found_index then
--remove this and shuffle everything before it up by 1:
for j = i, 2, -1 do
for j = found_index, 2, -1 do
sorting_pref[j] = Utils.deepcopy(sorting_pref[j-1]) --deepcopy just as I'm slightly unsure about refernces here
end
else
--prepend:
for j = #sorting_pref + 1, 2, -1 do
sorting_pref[j] = Utils.deepcopy(sorting_pref[j-1]) --deepcopy just as I'm slightly unsure about refernces here
sorting_pref[j] = Utils.deepcopy(sorting_pref[j-1]) --deepcopy just as I'm slightly unsure about references here
end
end
sorting_pref[1] = {column = column, method = new_method}
sorting_pref[1] = {column = element_to_column[name], method = new_method}
score_gui({player = player, frame = frame})
return

View File

@ -1272,15 +1272,17 @@ local function event_on_built_entity(event)
entity.time_to_live = entity.force.ghost_time_to_live
end
if memory.boat and memory.boat.surface_name and player.surface == game.surfaces[memory.boat.surface_name] then
if memory.boat and memory.boat.surface_name and player.surface == game.surfaces[memory.boat.surface_name] and entity.position then
if (entity.type and (entity.type == 'underground-belt')) or (entity.name == 'entity-ghost' and entity.ghost_type and (entity.ghost_type == 'underground-belt')) then
-- if (entity.type and (entity.type == 'underground-belt' or entity.type == 'pipe-to-ground')) or (entity.name == 'entity-ghost' and entity.ghost_type and (entity.ghost_type == 'underground-belt' or entity.ghost_type == 'pipe-to-ground')) then
if not (entity.name and entity.name == 'entity-ghost') then
player.insert{name = entity.name, count = 1}
if Boats.on_boat(memory.boat, entity.position) then
-- if (entity.type and (entity.type == 'underground-belt' or entity.type == 'pipe-to-ground')) or (entity.name == 'entity-ghost' and entity.ghost_type and (entity.ghost_type == 'underground-belt' or entity.ghost_type == 'pipe-to-ground')) then
if not (entity.name and entity.name == 'entity-ghost') then
player.insert{name = entity.name, count = 1}
end
entity.destroy()
Common.notify_player(player, 'Undergrounds can\'t be built on the boat, due to conflicts with the boat movement code.')
return
end
entity.destroy()
Common.notify_player(player, 'Undergrounds can\'t be built on the overworld, due to conflicts with the boat movement code.')
return
end
end

View File

@ -13,8 +13,10 @@ function Public.buried_treasure_loot()
local ret
local rng = Math.random(1000)
if rng <= 150 then
if rng <= 100 then
ret = {name = 'steel-plate', count = 150}
elseif rng <= 150 then
ret = {name = 'flying-robot-frame', count = 30}
elseif rng <= 200 then
ret = {name = 'construction-robot', count = 15}
elseif rng <= 330 then

View File

@ -60,7 +60,7 @@ local function on_init()
Autostash.bottom_button(true)
BottomFrame.reset()
BottomFrame.activate_custom_buttons(true)
BottomFrame.bottom_right(true)
-- BottomFrame.bottom_right(true)
local mgs = game.surfaces['nauvis'].map_gen_settings
mgs.width = 16
@ -208,8 +208,11 @@ local function crew_tick()
end
if memory.captain_accrued_time_data and memory.playerindex_captain then
if (not memory.captain_accrued_time_data[memory.playerindex_captain]) then memory.captain_accrued_time_data[memory.playerindex_captain] = 0 end
memory.captain_accrued_time_data[memory.playerindex_captain] = memory.captain_accrued_time_data[memory.playerindex_captain] + 1
local player = game.players[memory.playerindex_captain]
if player and player.name then
if (not memory.captain_accrued_time_data[player.name]) then memory.captain_accrued_time_data[player.name] = 0 end
memory.captain_accrued_time_data[player.name] = memory.captain_accrued_time_data[player.name] + 1
end
end
if destination.dynamic_data.time_remaining and destination.dynamic_data.time_remaining > 0 then

View File

@ -164,6 +164,7 @@ function Public.draw_noisy_ore_patch(surface, position, name, budget, radius_squ
end
end
--@FIXME: Hardcode positions instead, ordered by distance from origin
local spiral_layer = 0
local outwards_spiral_x = 0
local outwards_spiral_y = 0

View File

@ -125,6 +125,7 @@ function Public.generate_overworld_destination(p)
if type == Surfaces.enum.ISLAND then
local scope = Surfaces[Surfaces.enum.ISLAND][subtype]
--@FIXME: Common.activecrewcount() shouldn't be used here, it should be sensitive to the playercount when you arrive on the island
local playercount = Common.activecrewcount()
local static_params = Utils.deepcopy(scope.Data.static_params_default)
@ -562,10 +563,10 @@ function Public.try_overworld_move_v2(vector) --islands stay, crowsnest moves
if memory.overworldx % 40 == 0 then
local modal_captain = nil
local modal_captain_time = 0
for player, time in pairs(memory.captain_accrued_time_data) do
for name, time in pairs(memory.captain_accrued_time_data) do
if time > modal_captain_time then
modal_captain_time = time
modal_captain = player
modal_captain = name
end
end
Highscore.write_score(memory.secs_id, memory.name, modal_captain, memory.completion_time or 0, memory.overworldx, CoreData.version_float, memory.difficulty, memory.capacity)

View File

@ -32,13 +32,13 @@ Public.areas_offleft = {
}
Public.entities = {
inaccessible = {
pos = { x = -9, y = 0},
pos = { x = -7.5, y = 0},
bp_str = [[0eNqV08sOwiAQBdB/mTU1ltIXv2KMqXZSSdqhKfhoDP9uQRcmsmF5k7mHWQwvOI83nBdFFuQLDHVzZnU2LKr3+QkyZ7CCbB0DddFkQB62MTVQN/oBu84IEpTFCRhQN/n00LpHyi5XNBZ8kXr0kjsyQLLKKvw4Iawnuk1nXMJTMYHBrM1W0vRdab8rw1L5rnSO/TE8kdnHmSKRKeKMSGR4nCkTmTLOVImMiDN1IlPHmSaRqeJMm8g0ntluMVyt/PkBDO64mFDgTS7qlteiqETLG+fekGkHZg==]],
},
}
Public.landingtrack = {
offset = {x = 4, y = -7},
offset = {x = 4.5, y = -7},
bp = [[0eNqV2M1qwkAYheF7mXWE+eZ/civFhdVBBjQJSSwVyb3XVBddtMV3JYHjBJ85m+NNvZ8uZRhrN6v2pqZuN2zmfnMc62F9/lStmEZd7x9+aVTd992k2rd7sB673WmNzNehqFbVuZxVo7rdeX265/ZjmYtav9QdynrOsm3UXE/lccDQT3Wuffd8y+b5Gr38dsafcWFxA0+neQvz7tW8MBxhOMJwBOIIxBGIoxmOZjia4WiIoyGOZjgZ2WREk5FMZjCZuWTGkhBLQiwJsSTGkhhLYiwRsUTEEhFLZCyRsUTGEhBLQCwBsQTGEhhLYCwesXjE4hGLZyyesXjG4hCLQywOsTjG4hiLYywWsVjEYhHLI21Rmv1Kj9IBpSNKJ5TO7HbgZbLbFHadwu7z5dqyWcJWCRslBtXWoNoaVFuDamtQbQ2qrUG1Nay2htUWbkY4GeliZJuITSK2iFBtBdVWUG0F1VZQbQXVVlBthdVWWG3pmod79Z/abpvHv0btj/+gGvVRxun7AJPExWyiDc5pa5blC6gg570=]],
}

View File

@ -157,9 +157,9 @@ Public.deck_whitebelts_lrtp_order = {
{x = -52.5, y = 11.5, direction = defines.direction.south, type = 'output'},
{x = -51.5, y = 11.5, direction = defines.direction.south, type = 'output'},
{x = -50.5, y = 11.5, direction = defines.direction.south, type = 'output'},
{x = -17.5, y = 11.5, direction = defines.direction.north, type = 'input'},
{x = -16.5, y = 11.5, direction = defines.direction.north, type = 'input'},
{x = -15.5, y = 11.5, direction = defines.direction.north, type = 'input'},
{x = -17.5, y = 11.5, direction = defines.direction.north, type = 'output'},
{x = -16.5, y = 11.5, direction = defines.direction.north, type = 'output'},
{x = -15.5, y = 11.5, direction = defines.direction.north, type = 'output'},
}
Public.crewname_rendering_position = {x = -67, y = -18.5}

View File

@ -52,9 +52,9 @@ Public[enum.INITIAL].Data.hold_whitebelts_lrtp_order = {
{x = -18.5, y = 21.5, direction = defines.direction.south, type = 'input'},
{x = -17.5, y = 21.5, direction = defines.direction.south, type = 'input'},
{x = 17.5, y = 21.5, direction = defines.direction.south, type = 'output'},
{x = 18.5, y = 21.5, direction = defines.direction.south, type = 'output'},
{x = 19.5, y = 21.5, direction = defines.direction.south, type = 'output'},
{x = 17.5, y = 21.5, direction = defines.direction.south, type = 'input'},
{x = 18.5, y = 21.5, direction = defines.direction.south, type = 'input'},
{x = 19.5, y = 21.5, direction = defines.direction.south, type = 'input'},
}
Public[enum.SECONDARY] = {}

View File

@ -46,7 +46,7 @@ function Public.prevent_unbarreling_off_ship(tickinterval)
local r = a.get_recipe()
if r and r.subgroup and r.subgroup.name and r.subgroup.name == 'fill-barrel' and (not (r.name and r.name == 'fill-water-barrel')) then
if not Boats.on_boat(boat, a.position) then
Common.notify_force(game.forces[memory.force_name], 'Nope: Can\'t barrel fluids offboard.')
Common.notify_force(game.forces[memory.force_name], 'Barrelling recipe removed; barrels are too heavy to carry back to the ship.')
a.set_recipe('fill-water-barrel')
end
end