Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions exp_legacy/module/config/expcore/roles.lua
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ Roles.new_role("Trainee", "TrMod")
"command/search-online",
"command/search-amount",
"command/search-recent",
"command/clear-blueprints",
"command/clear-blueprints-surface",
"gui/playerdata",
}

Expand Down Expand Up @@ -204,7 +204,7 @@ Roles.new_role("Veteran", "Vet")
:allow{
"command/chat-commands",
"command/clear-ground-items",
"command/clear-blueprints-radius",
"command/clear-blueprints",
"command/set-trains-to-automatic",
}
:set_auto_assign_condition(function(player)
Expand Down
123 changes: 65 additions & 58 deletions exp_scenario/module/commands/surface.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,17 @@
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 move_items = ExpUtil.move_items_to_surface

local Commands = require("modules/exp_commands")
local Selection = require("modules/exp_util/selection")
local SelectArea = Selection.connect("ExpCommand_ClearBlueprint")
local format_player_name = Commands.format_player_name_locale

--- @class ExpCommand_ClearBlueprint.commands
local commands = {}

--- @param surface LuaSurface
--- @return LuaItemStack[]
local function get_ground_items(surface)
Expand All @@ -19,71 +24,73 @@ local function get_ground_items(surface)
return items
end

--- Clear all items on the ground, optional to select a single surface
Commands.new("clear-ground-items", { "exp-commands_surface.description-items" })
--- Clear all items on the ground on a surface
commands.clear_ground_items = Commands.new("clear-ground-items", { "exp-commands_surface.description-items" })
:optional("surface", { "exp-commands_surface.arg-surface" }, Commands.types.surface)
:defaults{
surface = function(player) return player.surface end
}
:register(function(player, surface)
--- @cast surface LuaSurface?
--- @cast surface LuaSurface
move_items{
surface = surface,
items = get_ground_items(surface),
allow_creation = true,
name = "iron-chest",
}
local player_name = format_player_name(player)
if surface then
move_items{
surface = surface,
items = get_ground_items(surface),
allow_creation = true,
name = "iron-chest",
}
game.print{ "exp-commands_surface.items-surface", player_name, surface.localised_name }
else
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
game.print{ "exp-commands_surface.items", player_name, surface.localised_name }
end)

--- Clear all blueprints, optional to select a single surface
Commands.new("clear-blueprints", { "exp-commands_surface.description-blueprints" })
--- Clear all blueprints on a surface
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)
:defaults{
surface = function(player) return player.surface end
}
:register(function(player, surface)
--- @cast surface LuaSurface?
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 }
--- @cast surface LuaSurface
local entities = surface.find_entities_filtered{ type = "entity-ghost" }
for _, entity in ipairs(entities) do
entity.destroy()
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,
}
game.print{ "exp-commands_surface.blueprints", player_name, surface.localised_name }
end)

for _, entity in ipairs(entities) do
entity.destroy()
--- 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

game.print{ "exp-commands_surface.blueprint-radius", player_name, radius, player.surface.localised_name }
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
entity.destroy()
end

game.print({ "exp-commands_surface.complete", #entities }, Commands.print_settings.default)
end)

return {
commands = commands,
}
50 changes: 32 additions & 18 deletions exp_scenario/module/gui/quick_actions.lua
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ local addon_artillery = require("modules/exp_scenario/commands/artillery")
local addon_trains = require("modules/exp_scenario/commands/trains")
local addon_teleport = require("modules/exp_scenario/commands/teleport")
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_home = require("modules/exp_scenario/commands/home")
local addon_vlayer = require("modules/exp_scenario/commands/vlayer")
Expand All @@ -21,15 +22,23 @@ local Elements = {}
--- @type table<string, { command: ExpCommand, element: ExpElement }>
local Actions = {}

--- @param name string
--- @param command ExpCommand | function (this is needed because of the overload on commands)
--- @param on_click? ExpElement.EventHandler<EventData.on_gui_click>
local function new_quick_action(name, command, on_click)
local element = Gui.define("quick_actions/" .. name)
local function new_quick_action(command, on_click)
local command_name = command.name

local element = Gui.define("quick_actions/" .. command_name)
:draw{
type = "button",
caption = { "exp-gui_quick-actions.caption-" .. name },
tooltip = { "exp-gui_quick-actions.tooltip-" .. name },
caption = { "?",
{ "exp-gui_quick-actions.caption-" .. command_name },
command_name,
},
tooltip = { "?",
{ "exp-gui_quick-actions.tooltip-" .. command_name },
command.description,
""
},
}
:style{
width = 160,
Expand All @@ -38,26 +47,31 @@ local function new_quick_action(name, command, on_click)
command(player)
end)

Elements[name] = element
Actions[name] = {
Elements[command_name] = element
Actions[command_name] = {
command = command --[[ @as ExpCommand ]],
element = element,
}
end

new_quick_action("artillery", addon_artillery.commands.artillery)
new_quick_action("trains", addon_trains.commands.set_trains_to_automatic)
new_quick_action("spawn", addon_teleport.commands.spawn, function(_def, player, _element, _event)
new_quick_action(addon_artillery.commands.artillery)
new_quick_action(addon_trains.commands.set_trains_to_automatic)

new_quick_action(addon_teleport.commands.spawn, function(def, player, element, event)
addon_teleport.commands.spawn(player, player)
end)
new_quick_action("waterfill", addon_waterfill.commands.waterfill)
new_quick_action("lawnmower", addon_lawnmower.commands.lawnmower)
new_quick_action("home", addon_home.commands.home)
new_quick_action("return", addon_home.commands._return)
new_quick_action("set-home", addon_home.commands.set_home)
new_quick_action("get-home", addon_home.commands.get_home)
new_quick_action("vlayer", addon_vlayer.commands.vlayer)
new_quick_action("repair", addon_repair.commands.repair)

new_quick_action(addon_waterfill.commands.waterfill)
new_quick_action(addon_lawnmower.commands.lawnmower)
new_quick_action(addon_surface.commands.clear_ground_items)
new_quick_action(addon_surface.commands.clear_blueprints_surface)
new_quick_action(addon_surface.commands.clear_blueprints)
new_quick_action(addon_home.commands.home)
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
--- @class ExpGui_QuickActions.elements.container: ExpElement
Expand Down
19 changes: 7 additions & 12 deletions exp_scenario/module/locale/en.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -220,14 +220,14 @@ follow-self=You can not follow yourself.
[exp-commands_surface]
description-items=Clear all items on the ground.
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-radius=Radius to clear.
items-surface=__1__ cleared all items on the ground of __2__.
items-all=__1__ cleared all items on the ground for all surfaces.
blueprints-surface=__1__ cleared all blueprints on __2__.
blueprints-all=__1__ cleared all blueprints for all surfaces.
blueprints-radius=__1__ cleared all blueprints in a __2__ radius around them on __3__.
items=__1__ cleared all items on the ground of __2__.
blueprints=__1__ cleared all blueprints on __2__.
enter=Entered selection mode, select the area.
exit=Exited selection mode.
area-too-large=Selected area is too large, must be less than __1__, selected __2__.
complete=__1__ blueprint ghost were removed.

[exp-commands_trains]
description=Set All Trains to Automatic, does not effect trains with passengers.
Expand Down Expand Up @@ -331,15 +331,10 @@ caption-net=Net
[exp-gui_quick-actions]
tooltip-main=Quick Actions
caption-artillery=Artillery
tooltip-artillery=Select artillery targets
caption-research=Auto Research
tooltip-research=Toggle auto research queue
caption-spawn=Teleport Spawn
tooltip-spawn-tooltip=Teleport to spawn
caption-trains=Set Auto Train
tooltip-trains=Set all trains to automatic
caption-waterfill=Waterfill
tooltip-waterfill=Change tiles to water

[exp-gui_readme]
main-tooltip=Information
Expand Down
14 changes: 7 additions & 7 deletions exp_scenario/module/locale/zh-CN.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -215,14 +215,14 @@ follow-self=你不能追蹤自己
[exp-commands_surface]
description-items=清除地面上的物品
description-blueprints=清除藍圖
description-radius=清除周邊的藍圖
description-blueprints-surface=清除藍圖
arg-surface=位面
arg-radius=周邊半徑
items-surface=__1__ 清除了所有在 __2__ 中掉地上的東西
items-all=__1__ 清除了所有掉地上的東西。
blueprints-surface=__1__ 清除了所有在 __2__ 中在地上的藍圖。
blueprints-all=__1__ 清除了所有在地上的藍圖
blueprints-radius=__1__ 清除了在 __3__ 上,周邊 __2__ 格的地上的藍圖
items=__1__ 清除了所有在 __2__ 中掉地上的東西。
blueprints=__1__ 清除了所有在 __2__ 中在地上的藍圖
enter=現在進入區域選擇
exit=已進入區域選擇
area-too-large=區域太大了,需少過 __1__ 格,你選了 __2__ 格
complete=__1__ 個地上的藍圖已被清除

[exp-commands_trains]
description=把火車設置為自動模式
Expand Down
14 changes: 7 additions & 7 deletions exp_scenario/module/locale/zh-TW.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -215,14 +215,14 @@ follow-self=你不能追蹤自己
[exp-commands_surface]
description-items=清除地面上的物品
description-blueprints=清除藍圖
description-radius=清除周邊的藍圖
description-blueprints-surface=清除藍圖
arg-surface=位面
arg-radius=周邊半徑
items-surface=__1__ 清除了所有在 __2__ 中掉地上的東西
items-all=__1__ 清除了所有掉地上的東西。
blueprints-surface=__1__ 清除了所有在 __2__ 中在地上的藍圖。
blueprints-all=__1__ 清除了所有在地上的藍圖
blueprints-radius=__1__ 清除了在 __3__ 上,周邊 __2__ 格的地上的藍圖
items=__1__ 清除了所有在 __2__ 中掉地上的東西。
blueprints=__1__ 清除了所有在 __2__ 中在地上的藍圖
enter=現在進入區域選擇
exit=已進入區域選擇
area-too-large=區域太大了,需少過 __1__ 格,你選了 __2__ 格
complete=__1__ 個地上的藍圖已被清除

[exp-commands_trains]
description=把火車設置為自動模式
Expand Down
Loading