clear blueprint changed to selection (#435)

* Update surface.lua

* Update en.cfg

* Update surface.lua

* Update en.cfg

* Fix description keys for ground items and blueprints

* Update roles.lua

* Update surface.lua

* Update quick_actions.lua

* Update en.cfg

* Update en.cfg

* Update surface.lua

* Update zh-CN.cfg

* Update zh-TW.cfg

* .

* .

* .

* Many fixes and reverts

---------

Co-authored-by: Cooldude2606 <25043174+Cooldude2606@users.noreply.github.com>
This commit is contained in:
2026-06-26 13:15:49 +01:00
committed by GitHub
co-authored by Cooldude2606
parent cb89c08c9f
commit 71ab3e7be4
6 changed files with 124 additions and 108 deletions
+2 -2
View File
@@ -125,7 +125,7 @@ Roles.new_role("Trainee", "TrMod")
"command/search-online", "command/search-online",
"command/search-amount", "command/search-amount",
"command/search-recent", "command/search-recent",
"command/clear-blueprints", "command/clear-blueprints-surface",
"gui/playerdata", "gui/playerdata",
} }
@@ -204,7 +204,7 @@ Roles.new_role("Veteran", "Vet")
:allow{ :allow{
"command/chat-commands", "command/chat-commands",
"command/clear-ground-items", "command/clear-ground-items",
"command/clear-blueprints-radius", "command/clear-blueprints",
"command/set-trains-to-automatic", "command/set-trains-to-automatic",
} }
:set_auto_assign_condition(function(player) :set_auto_assign_condition(function(player)
+60 -53
View File
@@ -2,12 +2,17 @@
Adds a command that clear item on ground so blueprint can deploy safely Adds a command that clear item on ground so blueprint can deploy safely
]] ]]
local AABB = require("modules/exp_util/aabb")
local Commands = require("modules/exp_commands")
local ExpUtil = require("modules/exp_util") local ExpUtil = require("modules/exp_util")
local move_items = ExpUtil.move_items_to_surface local move_items = ExpUtil.move_items_to_surface
local Selection = require("modules/exp_util/selection")
local Commands = require("modules/exp_commands") local SelectArea = Selection.connect("ExpCommand_ClearBlueprint")
local format_player_name = Commands.format_player_name_locale local format_player_name = Commands.format_player_name_locale
--- @class ExpCommand_ClearBlueprint.commands
local commands = {}
--- @param surface LuaSurface --- @param surface LuaSurface
--- @return LuaItemStack[] --- @return LuaItemStack[]
local function get_ground_items(surface) local function get_ground_items(surface)
@@ -19,71 +24,73 @@ local function get_ground_items(surface)
return items return items
end end
--- Clear all items on the ground, optional to select a single surface --- Clear all items on the ground on a surface
Commands.new("clear-ground-items", { "exp-commands_surface.description-items" }) commands.clear_ground_items = Commands.new("clear-ground-items", { "exp-commands_surface.description-items" })
:optional("surface", { "exp-commands_surface.arg-surface" }, Commands.types.surface) :optional("surface", { "exp-commands_surface.arg-surface" }, Commands.types.surface)
:defaults{
surface = function(player) return player.surface end
}
:register(function(player, surface) :register(function(player, surface)
--- @cast surface LuaSurface? --- @cast surface LuaSurface
local player_name = format_player_name(player)
if surface then
move_items{ move_items{
surface = surface, surface = surface,
items = get_ground_items(surface), items = get_ground_items(surface),
allow_creation = true, allow_creation = true,
name = "iron-chest", name = "iron-chest",
} }
game.print{ "exp-commands_surface.items-surface", player_name, surface.localised_name } local player_name = format_player_name(player)
else game.print{ "exp-commands_surface.items", player_name, surface.localised_name }
for _, surface in pairs(game.surfaces) do
move_items{
surface = surface,
items = get_ground_items(surface),
allow_creation = true,
name = "iron-chest",
}
end
game.print{ "exp-commands_surface.items-all", player_name }
end
end) end)
--- Clear all blueprints, optional to select a single surface --- Clear all blueprints on a surface
Commands.new("clear-blueprints", { "exp-commands_surface.description-blueprints" }) commands.clear_blueprints_surface = Commands.new("clear-blueprints-surface", { "exp-commands_surface.description-blueprints-surface" })
:optional("surface", { "exp-commands_surface.arg-surface" }, Commands.types.surface) :optional("surface", { "exp-commands_surface.arg-surface" }, Commands.types.surface)
:register(function(player, surface) :defaults{
--- @cast surface LuaSurface? surface = function(player) return player.surface end
local player_name = format_player_name(player)
if surface then
local entities = surface.find_entities_filtered{ type = "entity-ghost" }
for _, entity in ipairs(entities) do
entity.destroy()
end
game.print{ "exp-commands_surface.blueprint-surface", player_name, surface.localised_name }
else
for _, surface in pairs(game.surfaces) do
local entities = surface.find_entities_filtered{ type = "entity-ghost" }
for _, entity in ipairs(entities) do
entity.destroy()
end
end
game.print{ "exp-commands_surface.blueprint-all", player_name }
end
end)
--- Clear all blueprints in a radius around you
Commands.new("clear-blueprints-radius", { "exp-commands_surface.description-radius" })
:argument("radius", { "exp-commands_surface.arg-radius" }, Commands.types.number_range(1, 100))
:register(function(player, radius)
--- @cast radius number
local player_name = format_player_name(player)
local entities = player.surface.find_entities_filtered{
type = "entity-ghost",
position = player.position,
radius = radius,
} }
:register(function(player, surface)
--- @cast surface LuaSurface
local entities = surface.find_entities_filtered{ type = "entity-ghost" }
for _, entity in ipairs(entities) do
entity.destroy()
end
local player_name = format_player_name(player)
game.print{ "exp-commands_surface.blueprints", player_name, surface.localised_name }
end)
--- Clear all blueprint in the area, selected by toggle player selection mode
--- @class ExpCommands_ClearBlueprint.commands.clear_blueprint: ExpCommand
--- @overload fun(player: LuaPlayer)
commands.clear_blueprints = Commands.new("clear-blueprints", { "exp-commands_surface.description-blueprints" })
:register(function(player)
if SelectArea:stop(player) then
return Commands.status.success{ "exp-commands_surface.exit" }
end
SelectArea:start(player)
return Commands.status.success{ "exp-commands_surface.enter" }
end) --[[ @as any ]]
--- When an area is selected
SelectArea:on_selection(function(event)
local player = assert(game.get_player(event.player_index))
local area = AABB.expand(event.area)
local surface = event.surface
local area_size = (area.right_bottom.x - area.left_top.x) * (area.right_bottom.y - area.left_top.y)
if area_size > 1000 then
player.print({ "exp-commands_surface.area-too-large", 1000, area_size }, Commands.print_settings.error)
return
end
local entities = surface.find_entities_filtered{ type = "entity-ghost", area = area }
for _, entity in ipairs(entities) do for _, entity in ipairs(entities) do
entity.destroy() entity.destroy()
end end
game.print{ "exp-commands_surface.blueprint-radius", player_name, radius, player.surface.localised_name } game.print({ "exp-commands_surface.complete", #entities }, Commands.print_settings.default)
end) end)
return {
commands = commands,
}
+32 -18
View File
@@ -10,6 +10,7 @@ local addon_artillery = require("modules/exp_scenario/commands/artillery")
local addon_trains = require("modules/exp_scenario/commands/trains") local addon_trains = require("modules/exp_scenario/commands/trains")
local addon_teleport = require("modules/exp_scenario/commands/teleport") local addon_teleport = require("modules/exp_scenario/commands/teleport")
local addon_waterfill = require("modules/exp_scenario/commands/waterfill") local addon_waterfill = require("modules/exp_scenario/commands/waterfill")
local addon_surface = require("modules/exp_scenario/commands/surface")
local addon_lawnmower = require("modules/exp_scenario/commands/lawnmower") local addon_lawnmower = require("modules/exp_scenario/commands/lawnmower")
local addon_home = require("modules/exp_scenario/commands/home") local addon_home = require("modules/exp_scenario/commands/home")
local addon_vlayer = require("modules/exp_scenario/commands/vlayer") local addon_vlayer = require("modules/exp_scenario/commands/vlayer")
@@ -21,15 +22,23 @@ local Elements = {}
--- @type table<string, { command: ExpCommand, element: ExpElement }> --- @type table<string, { command: ExpCommand, element: ExpElement }>
local Actions = {} local Actions = {}
--- @param name string
--- @param command ExpCommand | function (this is needed because of the overload on commands) --- @param command ExpCommand | function (this is needed because of the overload on commands)
--- @param on_click? ExpElement.EventHandler<EventData.on_gui_click> --- @param on_click? ExpElement.EventHandler<EventData.on_gui_click>
local function new_quick_action(name, command, on_click) local function new_quick_action(command, on_click)
local element = Gui.define("quick_actions/" .. name) local command_name = command.name
local element = Gui.define("quick_actions/" .. command_name)
:draw{ :draw{
type = "button", type = "button",
caption = { "exp-gui_quick-actions.caption-" .. name }, caption = { "?",
tooltip = { "exp-gui_quick-actions.tooltip-" .. name }, { "exp-gui_quick-actions.caption-" .. command_name },
command_name,
},
tooltip = { "?",
{ "exp-gui_quick-actions.tooltip-" .. command_name },
command.description,
""
},
} }
:style{ :style{
width = 160, width = 160,
@@ -38,26 +47,31 @@ local function new_quick_action(name, command, on_click)
command(player) command(player)
end) end)
Elements[name] = element Elements[command_name] = element
Actions[name] = { Actions[command_name] = {
command = command --[[ @as ExpCommand ]], command = command --[[ @as ExpCommand ]],
element = element, element = element,
} }
end end
new_quick_action("artillery", addon_artillery.commands.artillery) new_quick_action(addon_artillery.commands.artillery)
new_quick_action("trains", addon_trains.commands.set_trains_to_automatic) new_quick_action(addon_trains.commands.set_trains_to_automatic)
new_quick_action("spawn", addon_teleport.commands.spawn, function(_def, player, _element, _event)
new_quick_action(addon_teleport.commands.spawn, function(def, player, element, event)
addon_teleport.commands.spawn(player, player) addon_teleport.commands.spawn(player, player)
end) end)
new_quick_action("waterfill", addon_waterfill.commands.waterfill)
new_quick_action("lawnmower", addon_lawnmower.commands.lawnmower) new_quick_action(addon_waterfill.commands.waterfill)
new_quick_action("home", addon_home.commands.home) new_quick_action(addon_lawnmower.commands.lawnmower)
new_quick_action("return", addon_home.commands._return) new_quick_action(addon_surface.commands.clear_ground_items)
new_quick_action("set-home", addon_home.commands.set_home) new_quick_action(addon_surface.commands.clear_blueprints_surface)
new_quick_action("get-home", addon_home.commands.get_home) new_quick_action(addon_surface.commands.clear_blueprints)
new_quick_action("vlayer", addon_vlayer.commands.vlayer) new_quick_action(addon_home.commands.home)
new_quick_action("repair", addon_repair.commands.repair) new_quick_action(addon_home.commands._return)
new_quick_action(addon_home.commands.set_home)
new_quick_action(addon_home.commands.get_home)
new_quick_action(addon_vlayer.commands.vlayer)
new_quick_action(addon_repair.commands.repair)
--- Container added to the left gui flow --- Container added to the left gui flow
--- @class ExpGui_QuickActions.elements.container: ExpElement --- @class ExpGui_QuickActions.elements.container: ExpElement
+7 -12
View File
@@ -220,14 +220,14 @@ follow-self=You can not follow yourself.
[exp-commands_surface] [exp-commands_surface]
description-items=Clear all items on the ground. description-items=Clear all items on the ground.
description-blueprints=Clear all blueprints. description-blueprints=Clear all blueprints.
description-radius=Clear all blueprints in an radius around you. description-blueprints-surface=Clear all blueprints on the current surface.
arg-surface=Surface to clear on, default all. arg-surface=Surface to clear on, default all.
arg-radius=Radius to clear. items=__1__ cleared all items on the ground of __2__.
items-surface=__1__ cleared all items on the ground of __2__. blueprints=__1__ cleared all blueprints on __2__.
items-all=__1__ cleared all items on the ground for all surfaces. enter=Entered selection mode, select the area.
blueprints-surface=__1__ cleared all blueprints on __2__. exit=Exited selection mode.
blueprints-all=__1__ cleared all blueprints for all surfaces. area-too-large=Selected area is too large, must be less than __1__, selected __2__.
blueprints-radius=__1__ cleared all blueprints in a __2__ radius around them on __3__. complete=__1__ blueprint ghost were removed.
[exp-commands_trains] [exp-commands_trains]
description=Set All Trains to Automatic, does not effect trains with passengers. description=Set All Trains to Automatic, does not effect trains with passengers.
@@ -347,15 +347,10 @@ caption-net=Net
[exp-gui_quick-actions] [exp-gui_quick-actions]
tooltip-main=Quick Actions tooltip-main=Quick Actions
caption-artillery=Artillery caption-artillery=Artillery
tooltip-artillery=Select artillery targets
caption-research=Auto Research caption-research=Auto Research
tooltip-research=Toggle auto research queue
caption-spawn=Teleport Spawn caption-spawn=Teleport Spawn
tooltip-spawn-tooltip=Teleport to spawn
caption-trains=Set Auto Train caption-trains=Set Auto Train
tooltip-trains=Set all trains to automatic
caption-waterfill=Waterfill caption-waterfill=Waterfill
tooltip-waterfill=Change tiles to water
[exp-gui_readme] [exp-gui_readme]
main-tooltip=Information main-tooltip=Information
+7 -7
View File
@@ -215,14 +215,14 @@ follow-self=你不能追蹤自己
[exp-commands_surface] [exp-commands_surface]
description-items=清除地面上的物品 description-items=清除地面上的物品
description-blueprints=清除藍圖 description-blueprints=清除藍圖
description-radius=清除周邊的藍圖 description-blueprints-surface=清除藍圖
arg-surface=位面 arg-surface=位面
arg-radius=周邊半徑 items=__1__ 清除了所有在 __2__ 中掉地上的東西。
items-surface=__1__ 清除了所有在 __2__ 中地上的東西 blueprints=__1__ 清除了所有在 __2__ 中地上的藍圖
items-all=__1__ 清除了所有掉地上的東西。 enter=現在進入區域選擇
blueprints-surface=__1__ 清除了所有在 __2__ 中在地上的藍圖。 exit=已進入區域選擇
blueprints-all=__1__ 清除了所有在地上的藍圖 area-too-large=區域太大了,需少過 __1__ 格,你選了 __2__ 格
blueprints-radius=__1__ 清除了在 __3__ 上,周邊 __2__ 格的地上的藍圖。 complete=__1__ 地上的藍圖已被清除
[exp-commands_trains] [exp-commands_trains]
description=把火車設置為自動模式 description=把火車設置為自動模式
+7 -7
View File
@@ -215,14 +215,14 @@ follow-self=你不能追蹤自己
[exp-commands_surface] [exp-commands_surface]
description-items=清除地面上的物品 description-items=清除地面上的物品
description-blueprints=清除藍圖 description-blueprints=清除藍圖
description-radius=清除周邊的藍圖 description-blueprints-surface=清除藍圖
arg-surface=位面 arg-surface=位面
arg-radius=周邊半徑 items=__1__ 清除了所有在 __2__ 中掉地上的東西。
items-surface=__1__ 清除了所有在 __2__ 中地上的東西 blueprints=__1__ 清除了所有在 __2__ 中地上的藍圖
items-all=__1__ 清除了所有掉地上的東西。 enter=現在進入區域選擇
blueprints-surface=__1__ 清除了所有在 __2__ 中在地上的藍圖。 exit=已進入區域選擇
blueprints-all=__1__ 清除了所有在地上的藍圖 area-too-large=區域太大了,需少過 __1__ 格,你選了 __2__ 格
blueprints-radius=__1__ 清除了在 __3__ 上,周邊 __2__ 格的地上的藍圖。 complete=__1__ 地上的藍圖已被清除
[exp-commands_trains] [exp-commands_trains]
description=把火車設置為自動模式 description=把火車設置為自動模式