diff --git a/dfhack.init-example b/dfhack.init-example index c1cd1ac86..638f61aa1 100644 --- a/dfhack.init-example +++ b/dfhack.init-example @@ -72,9 +72,13 @@ keybinding add Ctrl-Shift-Z@dwarfmode/Default "stocks show" # open an overview window summarising some stocks (dfstatus) keybinding add Ctrl-Shift-I@dwarfmode/Default "gui/dfstatus" -# q->stockpile; p - copy & paste stockpiles +# q->stockpile - copy & paste stockpiles keybinding add Alt-P copystock +# q->stockpile - load and save stockpile settings out of game +keybinding add Alt-L@dwarfmode/QueryBuilding/Some/Stockpile "gui/stockpiles -load" +keybinding add Alt-S@dwarfmode/QueryBuilding/Some/Stockpile "gui/stockpiles -save" + # q->workshop - duplicate the selected job keybinding add Ctrl-D job-duplicate @@ -189,7 +193,7 @@ enable search enable automaterial # Other interface improvement tools -enable dwarfmonitor mousequery automelt autotrade buildingplan resume trackstop zone stocks autochop +enable dwarfmonitor mousequery automelt autotrade buildingplan resume trackstop zone stocks autochop stockpiles # allow the fortress bookkeeper to queue jobs through the manager stockflow enable diff --git a/plugins/lua/stockpiles.lua b/plugins/lua/stockpiles.lua index 66a9d2898..c2ac67c44 100644 --- a/plugins/lua/stockpiles.lua +++ b/plugins/lua/stockpiles.lua @@ -14,9 +14,13 @@ local gui = require 'gui' local script = require 'gui.script' local persist = require 'persist-table' -if persist.GlobalTable.stockpiles == nil then - persist.GlobalTable.stockpiles = {} - persist.GlobalTable.stockpiles['settings_path'] = './stocksettings' +function init() + if dfhack.isMapLoaded() then + if persist.GlobalTable.stockpiles == nil then + persist.GlobalTable.stockpiles = {} + persist.GlobalTable.stockpiles['settings_path'] = './stocksettings' + end + end end function tablify(iterableObject) @@ -28,6 +32,7 @@ function tablify(iterableObject) end function load_settings() + init() script.start(function() local path = persist.GlobalTable.stockpiles['settings_path'] local list = stockpiles_list_settings(path) @@ -40,6 +45,7 @@ function load_settings() end function save_settings(stockpile) + init() script.start(function() --local sp = dfhack.gui.geSelectedBuilding(true) local suggested = stockpile.name @@ -55,6 +61,7 @@ function save_settings(stockpile) end function manage_settings(sp) + init() if not guard() then return false end script.start(function() local list = {'Load', 'Save'} @@ -78,7 +85,13 @@ function guard() end function set_path(path) + init() persist.GlobalTable.stockpiles['settings_path'] = path end +function get_path() + init() + return persist.GlobalTable.stockpiles['settings_path'] +end + return _ENV diff --git a/scripts/gui/stockpiles.lua b/scripts/gui/stockpiles.lua new file mode 100644 index 000000000..557692fda --- /dev/null +++ b/scripts/gui/stockpiles.lua @@ -0,0 +1,55 @@ +-- lave/load stockpile settings with a GUI + +local stock = require 'plugins.stockpiles' + +function world_guard() + if not dfhack.isMapLoaded() then + qerror("World is not loaded") + return false + end + return true +end +function guard() + if not string.match(dfhack.gui.getCurFocus(), '^dwarfmode/QueryBuilding/Some/Stockpile') then + qerror("This script requires a stockpile selected in the 'q' mode") + return false + end + return true +end + +utils = require('utils') +validArgs = validArgs or utils.invert({ + 'help', + 'load', + 'save', + 'dir', +}) + +args = utils.processArgs({...}, validArgs) + +function usage() + print("") + print("Stockpile Settings. Arguments: ") + print("-save to save the current stockpile") + print("-load to load settings into the current stockpile") + print("-dir set the default directory to save settings into") + if dfhack.isMapLoaded() then + print(" Current directory is: " .. stock.get_path()) + end + print("") +end + +if args.load then + if not guard() then return end + stock.load_settings() +elseif args.save then + if not guard() then return end + local sp = dfhack.gui.getSelectedBuilding(true) + stock.save_settings(sp) +elseif args.dir then + if not world_guard() then return end + stock.set_path(args.dir) +else + usage() +end +