implement orders sort, document, and add to init

develop
myk002 2021-09-01 13:04:23 -07:00
parent 42d3620ef6
commit f21ba5c8aa
No known key found for this signature in database
GPG Key ID: 8A39CA0FA0C16E78
3 changed files with 37 additions and 0 deletions

@ -17,6 +17,7 @@ repeat -name feeding-timers -time 1 -timeUnits months -command [ fix/feeding-tim
repeat -name stuckdoors -time 1 -timeUnits months -command [ fix/stuckdoors ]
repeat -name autoShearCreature -time 14 -timeUnits days -command [ workorder ShearCreature ]
repeat -name autoMilkCreature -time 14 -timeUnits days -command [ workorder "{\"job\":\"MilkCreature\",\"item_conditions\":[{\"condition\":\"AtLeast\",\"value\":2,\"flags\":[\"empty\"],\"item_type\":\"BUCKET\"}]}" ]
repeat -name orders-sort -time 1 -timeUnits days -command [ orders sort ]
tweak fast-heat 100
tweak do-job-now

@ -1968,6 +1968,14 @@ Subcommands:
:export NAME: Exports the current list of manager orders to a file named ``dfhack-config/orders/NAME.json``.
:import NAME: Imports manager orders from a file named ``dfhack-config/orders/NAME.json``.
:clear: Deletes all manager orders in the current embark.
:sort: Sorts current manager orders by repeat frequency so daily orders don't
prevent other orders from ever being completed: one-time orders first, then
yearly, seasonally, monthly, then finally daily.
You can keep your orders automatically sorted by adding the following command to
your ``onMapLoad.init`` file::
repeat -name orders-sort -time 1 -timeUnits days -command [ orders sort ]
.. _nestboxes:

@ -56,6 +56,8 @@ DFhackCExport command_result plugin_init(color_ostream & out, std::vector<Plugin
" Imports manager orders from a file named dfhack-config/orders/[name].json.\n"
" orders clear\n"
" Deletes all manager orders in the current embark.\n"
" orders sort\n"
" Sorts current manager orders by repeat frequency so they don't conflict.\n"
));
return CR_OK;
}
@ -68,6 +70,7 @@ DFhackCExport command_result plugin_shutdown(color_ostream & out)
static command_result orders_export_command(color_ostream & out, const std::string & name);
static command_result orders_import_command(color_ostream & out, const std::string & name);
static command_result orders_clear_command(color_ostream & out);
static command_result orders_sort_command(color_ostream & out);
static command_result orders_command(color_ostream & out, std::vector<std::string> & parameters)
{
@ -100,6 +103,11 @@ static command_result orders_command(color_ostream & out, std::vector<std::strin
return orders_clear_command(out);
}
if (parameters[0] == "sort" && parameters.size() == 1)
{
return orders_sort_command(out);
}
return CR_WRONG_USAGE;
}
@ -924,3 +932,23 @@ static command_result orders_clear_command(color_ostream & out)
return CR_OK;
}
static bool compare_freq(df::manager_order *a, df::manager_order *b)
{
if (a->frequency == df::manager_order::T_frequency::OneTime
|| b->frequency == df::manager_order::T_frequency::OneTime)
return a->frequency < b->frequency;
return a->frequency > b->frequency;
}
static command_result orders_sort_command(color_ostream & out)
{
CoreSuspender suspend;
std::stable_sort(world->manager_orders.begin(), world->manager_orders.end(),
compare_freq);
out << "Sorted " << world->manager_orders.size() << " manager orders." << std::endl;
return CR_OK;
}