From 74fc233f1a64211dc03914f55253e4f82545bf90 Mon Sep 17 00:00:00 2001 From: PHIDIAS Date: Thu, 16 Jan 2025 05:37:34 +0900 Subject: [PATCH 1/4] Fix GPS tag for vlayer interfaces (#355) * Update vlayer.lua * Update vlayer.lua * Update vlayer.lua * Update vlayer.lua * Update vlayer.lua * Update vlayer.lua --- exp_legacy/module/config/vlayer.lua | 2 +- exp_legacy/module/modules/control/vlayer.lua | 11 ++++++----- exp_legacy/module/modules/gui/vlayer.lua | 12 ++++++------ 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/exp_legacy/module/config/vlayer.lua b/exp_legacy/module/config/vlayer.lua index d79cc9f5..c008c41a 100644 --- a/exp_legacy/module/config/vlayer.lua +++ b/exp_legacy/module/config/vlayer.lua @@ -54,7 +54,7 @@ return { ["landfill"] = { starting_value = 0, required_area = 0, - surface_area = 8, -- Tiles + surface_area = 20, -- Tiles }, ["wood"] = { starting_value = 0, diff --git a/exp_legacy/module/modules/control/vlayer.lua b/exp_legacy/module/modules/control/vlayer.lua index 1fce06fe..cff7aea8 100644 --- a/exp_legacy/module/modules/control/vlayer.lua +++ b/exp_legacy/module/modules/control/vlayer.lua @@ -706,11 +706,12 @@ function vlayer.remove_interface(surface, position) -- Get the details which will be returned if #entities == 0 then - return nil, nil + return nil, nil, nil end local interface = entities[1] local name = interface.name + local sur = interface.surface local pos = interface.position -- Return the type of interface removed and do some clean up @@ -725,7 +726,7 @@ function vlayer.remove_interface(surface, position) table.remove_element(vlayer_data.entity_interfaces.storage_input, interface) interface.destroy() - return "storage-input", pos + return "storage-input", sur, pos elseif name == "requester-chest" then local inventory = assert(interface.get_inventory(defines.inventory.chest)) ExpUtil.transfer_inventory_to_surface{ @@ -737,18 +738,18 @@ function vlayer.remove_interface(surface, position) table.remove_element(vlayer_data.entity_interfaces.storage_output, interface) interface.destroy() - return "storage-output", pos + return "storage-output", sur, pos elseif name == "constant-combinator" then table.remove_element(vlayer_data.entity_interfaces.circuit, interface) interface.destroy() - return "circuit", pos + return "circuit", sur, pos elseif name == "electric-energy-interface" then vlayer_data.storage.energy = vlayer_data.storage.energy + interface.energy table.remove_element(vlayer_data.entity_interfaces.energy, interface) interface.destroy() - return "energy", pos + return "energy", sur, pos end end diff --git a/exp_legacy/module/modules/gui/vlayer.lua b/exp_legacy/module/modules/gui/vlayer.lua index 974570fb..44409c24 100644 --- a/exp_legacy/module/modules/gui/vlayer.lua +++ b/exp_legacy/module/modules/gui/vlayer.lua @@ -32,8 +32,8 @@ local vlayer_control_type_list = { [4] = "storage_output", } -local function pos_to_gps_string(pos) - return "[gps=" .. string.format("%.1f", pos.x) .. "," .. string.format("%.1f", pos.y) .. "]" +local function pos_to_gps_string(pos, surface_name) + return "[gps=" .. string.format("%.1f", pos.x) .. "," .. string.format("%.1f", pos.y) .. "," .. surface_name .. "]" end local function format_energy(amount, unit) @@ -127,7 +127,7 @@ Selection.on_selection(SelectionConvertArea, function(event) vlayer.create_output_interface(event.surface, e_pos, e_circ, player) end - game.print{ "vlayer.interface-result", player.name, pos_to_gps_string(e_pos), { "vlayer.result-build" }, { "vlayer.control-type-" .. target:gsub("_", "-") } } + game.print{ "vlayer.interface-result", player.name, pos_to_gps_string(e_pos, event.surface.name), { "vlayer.result-build" }, { "vlayer.control-type-" .. target:gsub("_", "-") } } end) --- Display label for the number of solar panels @@ -373,7 +373,7 @@ local vlayer_gui_control_see = local entity = i[vlayer_control_type_list[target]][n] if entity and entity.valid then player.set_controller{ type = defines.controllers.remote, position = entity.position, surface = entity.surface } - player.print{ "vlayer.result-interface-location", { "vlayer.control-type-" .. vlayer_control_type_list[target]:gsub("_", "-") }, pos_to_gps_string(entity.position) } + player.print{ "vlayer.result-interface-location", { "vlayer.control-type-" .. vlayer_control_type_list[target]:gsub("_", "-") }, pos_to_gps_string(entity.position, entity.surface.name) } end end end) @@ -415,10 +415,10 @@ local vlayer_gui_control_remove = local i = vlayer.get_interfaces() if i and i[vlayer_control_type_list[target]] then - local interface_type, interface_position = vlayer.remove_interface(i[vlayer_control_type_list[target]][n].surface, i[vlayer_control_type_list[target]][n].position) + local interface_type, interface_surface, interface_position = vlayer.remove_interface(i[vlayer_control_type_list[target]][n].surface, i[vlayer_control_type_list[target]][n].position) if interface_type then - game.print{ "vlayer.interface-result", player.name, pos_to_gps_string(interface_position), { "vlayer.result-remove" }, { "vlayer.control-type-" .. interface_type } } + game.print{ "vlayer.interface-result", player.name, pos_to_gps_string(interface_position, interface_surface.name), { "vlayer.result-remove" }, { "vlayer.control-type-" .. interface_type } } end end end From ef63c690bbc6be39fecd944383f7649aa986b7d4 Mon Sep 17 00:00:00 2001 From: PHIDIAS Date: Thu, 16 Jan 2025 05:38:12 +0900 Subject: [PATCH 2/4] Adding extra valid check for battery recharge (#356) * Update bonus.lua * Update bonus.lua * Update bonus.lua * Update bonus.lua * Update bonus.lua --- exp_legacy/module/modules/gui/bonus.lua | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/exp_legacy/module/modules/gui/bonus.lua b/exp_legacy/module/modules/gui/bonus.lua index e69ee0b8..9ee65303 100644 --- a/exp_legacy/module/modules/gui/bonus.lua +++ b/exp_legacy/module/modules/gui/bonus.lua @@ -75,18 +75,22 @@ local function apply_periodic_bonus(player) local disp = frame.container["bonus_st_2"].disp.table if vlayer.get_statistics()["energy_sustained"] > 0 then - local armor = player.get_inventory(defines.inventory.character_armor)[1].grid + local armor = player.get_inventory(defines.inventory.character_armor) - if armor then - local slider = disp["bonus_display_personal_battery_recharge_slider"].slider_value * 100000 * config.player_special_bonus_rate / 6 + if armor and armor[1] and armor[1].valid_for_read and armor[1].grid then + local armor_grid = armor[1].grid - for i = 1, #armor.equipment do - if armor.equipment[i].energy < armor.equipment[i].max_energy then - local energy_required = math.min(math.floor(armor.equipment[i].max_energy - armor.equipment[i].energy), vlayer.get_statistics()["energy_storage"], slider) - armor.equipment[i].energy = armor.equipment[i].energy + energy_required - vlayer.energy_changed(-energy_required) + if armor_grid and armor_grid.available_in_batteries and armor_grid.battery_capacity and armor_grid.available_in_batteries < armor_grid.battery_capacity then + local slider = disp["bonus_display_personal_battery_recharge_slider"].slider_value * 100000 * config.player_special_bonus_rate / 6 - slider = slider - energy_required + for i = 1, #armor_grid.equipment do + if armor_grid.equipment[i].energy < armor_grid.equipment[i].max_energy then + local energy_required = math.min(math.floor(armor_grid.equipment[i].max_energy - armor_grid.equipment[i].energy), vlayer.get_statistics()["energy_storage"], slider) + armor_grid.equipment[i].energy = armor_grid.equipment[i].energy + energy_required + vlayer.energy_changed(-energy_required) + + slider = slider - energy_required + end end end end From e437f073184681f46aea143de735f75e7c0e0e60 Mon Sep 17 00:00:00 2001 From: PHIDIAS Date: Thu, 16 Jan 2025 05:38:33 +0900 Subject: [PATCH 3/4] Fix research logging (#357) --- exp_legacy/module/modules/addons/logging.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exp_legacy/module/modules/addons/logging.lua b/exp_legacy/module/modules/addons/logging.lua index 103a47a5..cf940d15 100644 --- a/exp_legacy/module/modules/addons/logging.lua +++ b/exp_legacy/module/modules/addons/logging.lua @@ -44,7 +44,7 @@ Event.add(defines.events.on_research_finished, function(event) return end - if (event.research.level and config_res.inf_res[event.research.name]) and (event.research.level >= config_res.inf_res[event.research.name]) then + if (event.research.level and config_res.inf_res[config_res.mod_set][event.research.name]) and (event.research.level >= config_res.inf_res[config_res.mod_set][event.research.name]) then add_log{ "logging.add-l", event.research.prototype.localised_name, event.research.level - 1 } else add_log{ "logging.add-n", event.research.prototype.localised_name } From b29a141d5de2a57e6d7d4727c33183cf2b84729f Mon Sep 17 00:00:00 2001 From: Cooldude2606 <25043174+Cooldude2606@users.noreply.github.com> Date: Wed, 15 Jan 2025 21:02:44 +0000 Subject: [PATCH 4/4] Fix sudo command - Fixes autocomplete using patterns by default - Fixes required argument for sudo - Fixes format player name for table type --- exp_commands/module/commands/sudo.lua | 2 +- exp_util/module/module_exports.lua | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/exp_commands/module/commands/sudo.lua b/exp_commands/module/commands/sudo.lua index 938fb34c..d949b9a4 100644 --- a/exp_commands/module/commands/sudo.lua +++ b/exp_commands/module/commands/sudo.lua @@ -11,7 +11,7 @@ local Commands = require("modules/exp_commands") Commands.new("_sudo", { "exp-commands_sudo.description" }) :argument("player", { "exp-commands_sudo.arg-player" }, Commands.types.player) :argument("command", { "exp-commands_sudo.arg-command" }, Commands.types.key_of(Commands.registered_commands)) - :argument("arguments", { "exp-commands_sudo.arg-arguments" }, Commands.types.string) + :optional("arguments", { "exp-commands_sudo.arg-arguments" }, Commands.types.string) :enable_auto_concatenation() :add_flags{ "system_only" } :register(function(_player, player, command, parameter) diff --git a/exp_util/module/module_exports.lua b/exp_util/module/module_exports.lua index 903821fa..d8c5fed1 100644 --- a/exp_util/module/module_exports.lua +++ b/exp_util/module/module_exports.lua @@ -172,18 +172,20 @@ end --- @param input string The user input string which should be matched to an option --- @param use_key boolean? When true the keys will be searched, when false the values will be searched --- @param rtn_key boolean? When true the selected key will be returned, when false the selected value will be returned +--- @param use_pattern boolean? When true the input will be treated as a lua pattern string --- @return any # The selected key or value which first matches the input text -function ExpUtil.auto_complete(options, input, use_key, rtn_key) +function ExpUtil.auto_complete(options, input, use_key, rtn_key, use_pattern) input = input:lower() + local plain = use_pattern ~= true if use_key then for k, v in pairs(options) do - if k:lower():find(input) then + if k:lower():find(input, nil, plain) then if rtn_key then return k else return v end end end else for k, v in pairs(options) do - if v:lower():find(input) then + if v:lower():find(input, nil, plain) then if rtn_key then return k else return v end end end @@ -572,7 +574,8 @@ end --- @param player PlayerIdentification? --- @return string function ExpUtil.format_player_name(player) - local valid_player = type(player) == "userdata" and player or game.get_player(player --[[@as string|number]]) --[[@as LuaPlayer?]] + local player_type = type(player) + local valid_player = player_type == "userdata" and player or (player_type == "string" or player_type == "number") and assert(game.get_player(player)) local player_name = valid_player and valid_player.name or "" local player_chat_colour = valid_player and valid_player.chat_color or ExpUtil.color.white return ExpUtil.format_rich_text_color(player_name, player_chat_colour) @@ -582,7 +585,8 @@ end --- @param player PlayerIdentification? --- @return LocalisedString function ExpUtil.format_player_name_locale(player) - local valid_player = type(player) == "userdata" and player or game.get_player(player --[[@as string|number]]) --[[@as LuaPlayer?]] + local player_type = type(player) + local valid_player = player_type == "userdata" and player or (player_type == "string" or player_type == "number") and assert(game.get_player(player)) local player_name = valid_player and valid_player.name or "" local player_chat_colour = valid_player and valid_player.chat_color or ExpUtil.color.white return ExpUtil.format_rich_text_color_locale(player_name, player_chat_colour)