Skip to content

Commit

Permalink
Merge pull request #5 from mspielberg/master
Browse files Browse the repository at this point in the history
Merge from main repo
  • Loading branch information
jodokus31 authored May 30, 2023
2 parents 58b680e + d725ff4 commit 9ba1a10
Show file tree
Hide file tree
Showing 8 changed files with 178 additions and 10 deletions.
19 changes: 19 additions & 0 deletions changelog.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,23 @@
---------------------------------------------------------------------------------------------------
Version: 0.5.6
Date: 2023-05-30
Changes:
- Add setting to allow Autobuild to keep building, even when in combat
Bugfixes:
- Fix that belts can be upgraded with a single tile loaders or vice versa
---------------------------------------------------------------------------------------------------
Version: 0.5.5
Date: 2023-04-21
Changes:
- Support Jetpack mod, that the visual construction area doesn't get cleared on jetpack de/-activation
---------------------------------------------------------------------------------------------------
Version: 0.5.4
Date: 2023-01-13
Bugfixes:
- Fix that on_runtime_mod_setting_changed can be called with event.player_index == nil
Changes:
- Only deconstruct (mining) entity or tile, if the item fits into players inventory.
---------------------------------------------------------------------------------------------------
Version: 0.5.3
Date: 2022-10-30
Bugfixes:
Expand Down
91 changes: 83 additions & 8 deletions control.lua
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ local function get_player_state(player_index)
state.enable_visual_area = settings.get_player_settings(player_index)["autobuild-enable-visual-area"].value
state.visual_area_opacity = settings.get_player_settings(player_index)["autobuild-visual-area-opacity"].value
state.ignore_other_robots = settings.get_player_settings(player_index)["autobuild-ignore-other-robots"].value
state.build_while_in_combat = settings.get_player_settings(player_index)["autobuild-build-while-in-combat"].value

state.last_successful_build_tick = 0

player_state[player_index] = state
Expand All @@ -32,6 +34,11 @@ local function change_visual_area(player, state, opacity)
state.visual_area_id = nil
end

-- player.print("enable_visual_area ".. (state.enable_visual_area and "true" or "false"))
-- player.print("opacity ".. (opacity or "nil"))
-- player.print("player.character "..serpent.block(player.character))
-- player.print("build_distance "..(state.build_distance or "nil"))

if not state.enable_visual_area then return end
if not opacity or opacity <= 0 then return end
if not player.character then return end
Expand All @@ -52,6 +59,33 @@ local function change_visual_area(player, state, opacity)
})
end

-- on_character_swapped_event
-- params: event
-- new_unit_number
-- old_unit_number
-- new_character
-- old_character
function on_character_swapped_event(event)
-- attach visual area to the new character
local player = event and event.new_character and event.new_character.player
if not player then return end
if not player.index then return end

local state = get_player_state(player.index)
if not state.visual_area_id then return end
if not state.build_distance then return end

local radius = state.build_distance + 0.5
local target = rendering.get_left_top(state.visual_area_id)
if target and target.entity and target.entity.unit_number == event.old_unit_number then
rendering.set_corners(state.visual_area_id,
event.new_character, { -radius, -radius },
event.new_character, { radius, radius })
end
end

remote.add_interface("autobuild", { on_character_swapped = on_character_swapped_event } )

local function on_load()
player_state = global.player_state
end
Expand Down Expand Up @@ -293,21 +327,24 @@ local function try_upgrade_with_stack(entity, target_name, player, stack_to_plac
return false
end

local entity = entity.surface.create_entity{
local new_entity = entity.surface.create_entity{
name = target_name,
position = entity.position,
direction = entity.direction,
force = entity.force,
fast_replace = true,
player = player,
type = entity.type:find("loader") and entity.loader_type or
entity.type == "underground-belt" and entity.belt_to_ground_type,
entity.type == "underground-belt" and entity.belt_to_ground_type or
nil,
raise_built = true,
}
if entity then

if new_entity then
player.remove_item(stack_to_place)
return true
end

return false
end

Expand Down Expand Up @@ -360,14 +397,36 @@ local function try_upgrade(entity, player, state)
end
end

local function can_insert_into_players_inventory(player, entity)
local can_insert = false
if entity.prototype and entity.prototype.mineable_properties and entity.prototype.mineable_properties.minable then
can_insert = true
if entity.prototype.mineable_properties.products then
for i, p in pairs(entity.prototype.mineable_properties.products) do
if p.type == "item" and p.amount then
if not player.can_insert {name=p.name, count=math.floor(p.amount)} then
can_insert = false
break
end
end
end
end
end
return can_insert
end


local function try_deconstruct_tile(entity, player, state)
if not force_match(entity, player, true) then
return false
end

if entity.to_be_deconstructed(player.force.name) then
local position = entity.position
return player.mine_tile(entity.surface.get_tile(position.x, position.y))
local tile = entity.surface.get_tile(position.x, position.y)
if can_insert_into_players_inventory(player, tile) then
return player.mine_tile(tile)
end
end
return false
end
Expand All @@ -376,7 +435,10 @@ local function try_deconstruct_entity(entity, player, state)
if not force_match(entity, player, true) then
return false
end
return player.mine_entity(entity)

if can_insert_into_players_inventory(player, entity) then
return player.mine_entity(entity, false)
end
end

local build_actions =
Expand Down Expand Up @@ -558,7 +620,10 @@ local function handle_player_update(player)
return
end

if player.in_combat then return end
if not state.build_while_in_combat and player.in_combat then
-- don't build while in combat only when setting is enabled
return
end

if needs_recheck(player, state) then
-- player has moved
Expand Down Expand Up @@ -589,8 +654,6 @@ end
script.on_nth_tick(cycle_length_in_ticks, update_cycle)

script.on_event(defines.events.on_runtime_mod_setting_changed, function(event)
local state = get_player_state(event.player_index)

if event.setting == "autobuild-cycle-length-in-ticks" then
--unregister with old value
script.on_nth_tick(cycle_length_in_ticks, nil)
Expand All @@ -602,16 +665,28 @@ script.on_event(defines.events.on_runtime_mod_setting_changed, function(event)
HelpFunctions.log_level = settings.global[event.setting].value

elseif event.setting == "autobuild-actions-per-cycle" then
local state = get_player_state(event.player_index)
state.actions_per_cycle = settings.get_player_settings(event.player_index)[event.setting].value

elseif event.setting == "autobuild-idle-cycles-before-recheck" then
local state = get_player_state(event.player_index)
state.idle_cycles_before_recheck = settings.get_player_settings(event.player_index)[event.setting].value

elseif event.setting == "autobuild-visual-area-opacity" or event.setting == "autobuild-enable-visual-area" then
local state = get_player_state(event.player_index)
state.enable_visual_area = settings.get_player_settings(event.player_index)["autobuild-enable-visual-area"].value
state.visual_area_opacity = settings.get_player_settings(event.player_index)["autobuild-visual-area-opacity"].value
local player = game.players[event.player_index]
change_visual_area(player, state, state.visual_area_opacity)

elseif event.setting == "autobuild-ignore-other-robots" then
local state = get_player_state(event.player_index)
state.ignore_other_robots = settings.get_player_settings(event.player_index)[event.setting].value

elseif event.setting == "autobuild-build-while-in-combat" then
local state = get_player_state(event.player_index)
state.build_while_in_combat = settings.get_player_settings(event.player_index)[event.setting].value

end

end)
2 changes: 1 addition & 1 deletion info.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "autobuild",
"version": "0.5.3",
"version": "0.5.6",
"factorio_version": "1.1",
"title": "Autobuild",
"author": "Therax",
Expand Down
7 changes: 7 additions & 0 deletions locale/de/autobuild.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,27 @@ deconstruction-disabled=Automatische Dekonstruktion deaktiviert.
tiles-enabled=Automatisches Konstruieren von Kacheln aktiviert.
tiles-disabled=Automatisches Konstruieren von Kacheln deaktiviert.


[mod-setting-name]
autobuild-cycle-length-in-ticks=Bauzykluslänge in Ticks
autobuild-log-level=Debug-Log-Level

autobuild-actions-per-cycle=Bauvorgänge pro Zyklus
autobuild-idle-cycles-before-recheck=Leerlauf-Überprüfungs Zyklen
autobuild-enable-visual-area=Aktiviere den visuellen Bereich
autobuild-visual-area-opacity=Deckkraft des visuellen Bereiches
autobuild-ignore-other-robots=Andere Roboter ignorieren und alles bauen
autobuild-build-while-in-combat=Baue weiter trotz Kampfhandlungen

[mod-setting-description]
autobuild-cycle-length-in-ticks=Wie viele Ticks sind ein Bauzyklus. Erhöht die Anzahl der Konstruktionsaktionen. Könnte die Performance verschlechtern, wenn zu niedrig
autobuild-log-level=Debug Log Level (0 nichts, 5 alles, oder werte dazwischen)

autobuild-actions-per-cycle=Wie viele Bauvorgänge werden in einem Zyklus durchgeführt. Erhöht die Anzahl der Gesamtbau-Aktionen. Kann Performance verschlechtern, wenn zu hoch
autobuild-idle-cycles-before-recheck=Anzahl der Zyklen, bis die Baubewerber neu berechnet werden, z. B. nach einer Konstruktionspause (5 Sek. ohne Bau), benötigt es max. diese Anzahl an Zyklen, um die Konstruktion fortzusetzen. Könnte unproduktive Performance verschlechtern, wenn zu niedrig
autobuild-enable-visual-area=Visuellen Baubereich aktivieren. Deaktivieren um den visuellen Baubereich zu verbergen
autobuild-visual-area-opacity=Deckkraft des visuellen Bereiches
autobuild-ignore-other-robots=Respektiert nicht, dass Tasks einem Bot aus dem Netzwerk zugewiesen sind und baue trotzdem.
autobuild-build-while-in-combat=Aktiviere, wenn während Kampfhandlungen weiter gebaut werden soll. Anscheinend ist man auch im Kampfmodus, wenn man die Grapping Gun von SE verwendet hat.


2 changes: 2 additions & 0 deletions locale/en/autobuild.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ autobuild-idle-cycles-before-recheck=Idle recheck cycles
autobuild-enable-visual-area=Enable Visual building area
autobuild-visual-area-opacity=Visual area opacity
autobuild-ignore-other-robots=Ignore other robots and build everything
autobuild-build-while-in-combat=Keep building while in combat

[mod-setting-description]
autobuild-cycle-length-in-ticks=How many ticks is one building cycle. Increases amount of overall building actions. Might tank performance, if too low
Expand All @@ -32,3 +33,4 @@ autobuild-idle-cycles-before-recheck=Amount of cycles until building candidates
autobuild-enable-visual-area=Enable Visual building area. Uncheck to hide visual building area
autobuild-visual-area-opacity=Visual area opacity
autobuild-ignore-other-robots=Do not respect tasks already assigned to other robots and build/deconstruct/upgrade anyway.
autobuild-build-while-in-combat=Enable, when you want to keep building, while in combat. Obviously, using the grappling gun from SE also counts as being in combat
22 changes: 21 additions & 1 deletion locale/ru/autobuild.cfg
Original file line number Diff line number Diff line change
@@ -1,16 +1,36 @@
[controls]
autobuild-custominput-toggle-construction=Переключить автоматическое конструирование
autobuild-custominput-toggle-tiles=Переключить автоматическую постройку плит

[autobuild-shortcut]
autobuild-shortcut-toggle-construction=Переключить автоматическое конструирование

[autobuild-message]
construction-enabled=Автоматическое конструирование включено.
construction-disabled=Автоматическое конструирование выключено.
deconstruction-enabled=Автоматический снос включен.
deconstruction-disabled=Автоматический снос выключен.
tiles-enabled=Автоматическая постройка плит включена.
tiles-disabled=Автоматическая постройка плит выключена.

[mod-setting-name]
autobuild-cycle-length-in-ticks=Длина цикла постройки в тиках
autobuild-log-level=Уровень отладочного журнала

autobuild-actions-per-cycle=Действий стройки за цикл
autobuild-idle-cycles-before-recheck=Циклы перепроверки в режиме ожидания
autobuild-enable-visual-area=Включить визуальную область постройки
autobuild-visual-area-opacity=Прозрачность визуальной области
autobuild-ignore-other-robots=Игнорировать других роботов и строить всё

[mod-setting-description]

autobuild-cycle-length-in-ticks=Сколько тиков длится один цикл постройки. Увеличивает количество общих действий постройки. Может снизить производительность, если слишком мало
autobuild-log-level=Уровень отладочного журнала (0 - ничего, 5 - всё, или значения между)

autobuild-actions-per-cycle=Сколько действий постройки выполняется за один цикл. Увеличивает количество общих действий постройки. Может снизить производительность, если слишком высоко
autobuild-idle-cycles-before-recheck=Количество циклов до перепроверки кандидатов на постройку. Например, после паузы строительства (5 сек. без постройки) принимает максимум. Это количество циклов для возобновления строительства. Может снизить производительность, если слишком мало
autobuild-enable-visual-area=Включить визуальную область постройки. Выключите, чтобы скрыть визуальную область постройки
autobuild-visual-area-opacity=Прозрачность визуальной области
autobuild-ignore-other-robots=Игнорировать задачи, уже назначенные на других роботов, и строить/сносить/улучшать в любом случае.


36 changes: 36 additions & 0 deletions locale/uk/autobuild.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
[controls]
autobuild-custominput-toggle-construction=Увімкнути автоматичну побудову
autobuild-custominput-toggle-tiles=Увімкнути автоматичну побудову плиток

[autobuild-shortcut]
autobuild-shortcut-toggle-construction=Увімкнути автоматичну побудову

[autobuild-message]
construction-enabled=Автоматичну побудову увімкнено.
construction-disabled=Автоматичне будівництво відключено.
deconstruction-enabled=Увімкнено автоматичну деконструкцію.
deconstruction-disabled=Автоматичну деконструкцію вимкнено.
tiles-enabled=Увімкнено автоматичну побудову плиток.
tiles-disabled=Автоматичну побудову тайлів вимкнено.

[mod-setting-name]
autobuild-cycle-length-in-ticks=Тривалість циклу побудови в тиках
autobuild-log-level=Рівень журналу налагодження

autobuild-actions-per-cycle=Побудова дій за цикл
autobuild-idle-cycles-before-recheck=Холості цикли повторних перевірок
autobuild-enable-visual-area=Увімкнути візуальну область будівлі
autobuild-visual-area-opacity=Непрозорість візуальної області
autobuild-ignore-other-robots=Ігнорувати інших роботів і будувати все

[mod-setting-description]
autobuild-cycle-length-in-ticks=Скільки тиків становить один цикл побудови. Збільшує кількість загальних будівельних дій. Може знизити продуктивність, якщо занадто низький
autobuild-log-level=Рівень журналу налагодження (0 - нічого, 5 - все, або проміжні значення)

autobuild-actions-per-cycle=Скільки будівельних дій виконується за один цикл. Збільшує загальну кількість будівельних дій. Може знижувати продуктивність, якщо занадто велике значення
autobuild-idle-cycles-before-recheck=Кількість циклів до повторної перевірки кандидатів на збірку. наприклад, після паузи у збірці (5 секунд без збірки), потрібно максимум стільки циклів, щоб відновити збірку. Може знизити продуктивність на холостому ходу, якщо занадто низька
autobuild-enable-visual-area=Увімкнути візуальну зону забудови. Зніміть прапорець, щоб приховати візуальну область будівлі
autobuild-visual-area-opacity=Непрозорість візуальної області
autobuild-ignore-other-robots=Не поважайте завдання, вже призначені іншим роботам, і все одно будуйте/зруйнуйте/модернізуйте.


9 changes: 9 additions & 0 deletions settings.lua
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,15 @@ table.insert(settings,
default_value = false,
})

table.insert(settings,
{
type = "bool-setting",
name = "autobuild-build-while-in-combat",
order = "eb",
setting_type = "runtime-per-user",
default_value = false,
})

table.insert(settings,
{
type = "int-setting",
Expand Down

0 comments on commit 9ba1a10

Please sign in to comment.