From 4183bace4dfebfec0e9b46097586cc1a16a4267a Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Wed, 18 Jan 2023 13:38:23 -0800 Subject: [PATCH] update autodump, only commands, add hotkeys --- data/init/dfhack.keybindings.init | 17 +++++------ docs/plugins/autodump.rst | 40 ++++++++------------------ library/modules/Gui.cpp | 7 ++--- plugins/CMakeLists.txt | 2 +- plugins/autodump.cpp | 47 +++++++++++++++++-------------- 5 files changed, 51 insertions(+), 62 deletions(-) diff --git a/data/init/dfhack.keybindings.init b/data/init/dfhack.keybindings.init index c4323ecbc..7ef615984 100644 --- a/data/init/dfhack.keybindings.init +++ b/data/init/dfhack.keybindings.init @@ -27,8 +27,8 @@ keybinding add Ctrl-Shift-K gui/cp437-table # dwarfmode bindings # ###################### -# quicksave, only in main dwarfmode screen and menu page -#keybinding add Ctrl-Alt-S@dwarfmode/Default quicksave +# quicksave +keybinding add Ctrl-Alt-S@dwarfmode quicksave # toggle the display of water level as 1-7 tiles #keybinding add Ctrl-W@dwarfmode|dungeonmode twaterlvl @@ -40,14 +40,15 @@ keybinding add Ctrl-Shift-K gui/cp437-table # clean the selected tile of blood etc #keybinding add Ctrl-C spotclean -# destroy the selected item -#keybinding add Ctrl-K@dwarfmode autodump-destroy-item +# teleport all unforbidden items marked for dumping to the tile under the keyboard cursor +keybinding add Ctrl-Alt-D autodump -# destroy items designated for dump in the selected tile -#keybinding add Ctrl-Shift-K@dwarfmode autodump-destroy-here +# destroy the selected unit or items that are marked for dump under +keybinding add Ctrl-Alt-K autodump-destroy-here +#keybinding add Ctrl-Alt-K@dwarfmode "exterminate this" -# apply blueprints to the map (Alt-F for compatibility with LNP Quickfort) -#keybinding add Ctrl-Shift-Q@dwarfmode gui/quickfort +# apply blueprints to the map +keybinding add Ctrl-Shift-Q@dwarfmode gui/quickfort #keybinding add Alt-F@dwarfmode gui/quickfort # show information collected by dwarfmonitor diff --git a/docs/plugins/autodump.rst b/docs/plugins/autodump.rst index ec83b6082..facf70ca9 100644 --- a/docs/plugins/autodump.rst +++ b/docs/plugins/autodump.rst @@ -2,48 +2,32 @@ autodump ======== .. dfhack-tool:: - :summary: Automatically set items in a stockpile to be dumped. - :tags: untested fort armok fps productivity items stockpiles - :no-command: - -.. dfhack-command:: autodump - :summary: Teleports items marked for dumping to the cursor position. + :summary: Instantly gather or destroy items marked for dumping. + :tags: fort armok fps items .. dfhack-command:: autodump-destroy-here - :summary: Destroy items marked for dumping under the cursor. - -.. dfhack-command:: autodump-destroy-item - :summary: Destroys the selected item. + :summary: Destroy items marked for dumping under the keyboard cursor. -When `enabled `, this plugin adds an option to the :kbd:`q` menu for -stockpiles. When the ``autodump`` option is selected for the stockpile, any -items placed in the stockpile will automatically be designated to be dumped. +This tool can instantly move all unforbidden items marked for dumping to the +tile under the keyboard cursor. After moving the items, the dump flag is unset +and the forbid flag is set, just as if it had been dumped normally. Be aware +that dwarves that are en route to pick up the item for dumping may still come +and move the item to your dump zone. -When invoked as a command, it can instantly move all unforbidden items marked -for dumping to the tile under the cursor. After moving the items, the dump flag -is unset and the forbid flag is set, just as if it had been dumped normally. Be -aware that dwarves that are en route to pick up the item for dumping may still -come and move the item to your dump zone. - -The cursor must be placed on a floor tile so the items can be dumped there. +The keyboard cursor must be placed on a floor tile so the items can be dumped +there. Usage ----- :: - enable autodump autodump [] autodump-destroy-here - autodump-destroy-item ``autodump-destroy-here`` is an alias for ``autodump destroy-here`` and is intended for use as a keybinding. -``autodump-destroy-item`` destroys only the selected item. The item may be -selected in the :kbd:`k` list or in the container item list. If called again -before the game is resumed, cancels destruction of the item. - Options ------- @@ -67,5 +51,5 @@ Examples Teleports items marked for dumping to the cursor position. ``autodump destroy`` Destroys all unforbidden items marked for dumping -``autodump-destroy-item`` - Destroys the selected item. +``autodump-destroy-here`` + Destroys items on the selected tile that are marked for dumping. diff --git a/library/modules/Gui.cpp b/library/modules/Gui.cpp index 0fb455fc9..35631dfc6 100644 --- a/library/modules/Gui.cpp +++ b/library/modules/Gui.cpp @@ -46,6 +46,7 @@ using namespace DFHack; #include "modules/Screen.h" #include "modules/Maps.h" #include "modules/Units.h" +#include "modules/World.h" #include "DataDefs.h" @@ -625,10 +626,8 @@ bool Gui::anywhere_hotkey(df::viewscreen *) { return true; } -bool Gui::dwarfmode_hotkey(df::viewscreen *top) -{ - // Require the main dwarf mode screen - return !!strict_virtual_cast(top); +bool Gui::dwarfmode_hotkey(df::viewscreen *top) { + return World::isFortressMode(); } bool Gui::unitjobs_hotkey(df::viewscreen *top) diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 200cb3e2f..04bfceab1 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -78,7 +78,7 @@ set_source_files_properties( Brushes.h PROPERTIES HEADER_FILE_ONLY TRUE ) dfhack_plugin(autobutcher autobutcher.cpp LINK_LIBRARIES lua) dfhack_plugin(autochop autochop.cpp LINK_LIBRARIES lua) #dfhack_plugin(autoclothing autoclothing.cpp) -#dfhack_plugin(autodump autodump.cpp) +dfhack_plugin(autodump autodump.cpp) dfhack_plugin(autofarm autofarm.cpp) #dfhack_plugin(autogems autogems.cpp LINK_LIBRARIES jsoncpp_static) #add_subdirectory(autolabor) diff --git a/plugins/autodump.cpp b/plugins/autodump.cpp index fb215c26b..c21f5c31b 100644 --- a/plugins/autodump.cpp +++ b/plugins/autodump.cpp @@ -1,33 +1,34 @@ // Quick Dumper : Moves items marked as "dump" to cursor // FIXME: local item cache in map blocks needs to be fixed after teleporting items -#include -#include -#include -#include -#include -#include -#include -#include -using namespace std; #include "Core.h" #include "Console.h" +#include "DataDefs.h" #include "Export.h" #include "PluginManager.h" + #include "modules/Maps.h" #include "modules/Gui.h" #include "modules/Items.h" #include "modules/Materials.h" #include "modules/MapCache.h" -#include "DataDefs.h" #include "df/item.h" #include "df/world.h" #include "df/general_ref.h" #include "df/viewscreen_dwarfmodest.h" #include "df/building_stockpilest.h" -#include "uicommon.h" +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; using namespace DFHack; using namespace df::enums; @@ -40,6 +41,7 @@ DFHACK_PLUGIN("autodump"); REQUIRE_GLOBAL(gps); REQUIRE_GLOBAL(world); +/* TODO: merge with stockpiles plugin // Stockpile interface START static const string PERSISTENCE_KEY = "autodump/stockpiles"; @@ -267,6 +269,7 @@ DFhackCExport command_result plugin_enable(color_ostream &out, bool enable) } // Stockpile interface END +*/ command_result df_autodump(color_ostream &out, vector & parameters); command_result df_autodump_destroy_here(color_ostream &out, vector & parameters); @@ -276,18 +279,21 @@ DFhackCExport command_result plugin_init ( color_ostream &out, vector & parame MapCache MC; int dumped_total = 0; - int cx, cy, cz; DFCoord pos_cursor; if(!destroy || here) { - if (!Gui::getCursorCoords(cx,cy,cz)) - { - out.printerr("Cursor position not found. Please enable the cursor.\n"); + pos_cursor = Gui::getMousePos(); + if (!pos_cursor.isValid()) { + out.printerr("Mouse cursor must be over a suitable map tile.\n"); return CR_FAILURE; } - pos_cursor = DFCoord(cx,cy,cz); } if (!destroy) { @@ -441,13 +445,14 @@ command_result df_autodump(color_ostream &out, vector & parameters) command_result df_autodump_destroy_here(color_ostream &out, vector & parameters) { - // HOTKEY COMMAND; CORE ALREADY SUSPENDED if (!parameters.empty()) return CR_WRONG_USAGE; vector args; args.push_back("destroy-here"); + CoreSuspender suspend; + return autodump_main(out, args); }