Merge remote-tracking branch 'myk002/myk_orders_sort' into develop

develop
lethosor 2021-09-01 23:28:33 -04:00
commit d71e21efcb
No known key found for this signature in database
GPG Key ID: 76A269552F4F58C1
5 changed files with 45 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:

@ -45,6 +45,7 @@ changelog.txt uses a syntax similar to RST, with a few special sequences:
## Misc Improvements
- `buildingplan`: now displays which items are attached and which items are still missing for planned buildings
- `orders`: support importing and exporting reaction-specific item conditions, like "lye-containing" for soap production orders
- `orders`: new ``sort`` command. sorts orders according to their repeat frequency. this prevents daily orders from blocking other orders for simlar items from ever getting completed.
- `tiletypes-here`, `tiletypes-here-point`: add ``--cursor`` and ``--quiet`` options to support non-interactive use cases
- `quickfort`: Dreamfort blueprint set improvements: extensive revision based on playtesting and feedback. includes updated ``onMapLoad_dreamfort.init`` settings file, enhanced automation orders, and premade profession definitions. see full changelog at https://github.com/DFHack/dfhack/pull/1921 and https://github.com/DFHack/dfhack/pull/1925

@ -29,6 +29,8 @@ it is useful (and customizable) for any fort. It includes the following config:
started, so later manual changes will not be overridden.
- Automates calling of various fort maintenance and `scripts-fix`, like
`cleanowned` and `fix/stuckdoors`.
- Keeps your manager orders intelligently ordered with `orders` ``sort`` so no
orders block other orders from ever getting completed.
- Periodically enqueues orders to shear and milk shearable and milkable pets.
- Sets up `autofarm` to grow 30 units of every crop, except for pig tails, which
is set to 150 units to support the textile industry.

@ -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,28 @@ 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;
if (!std::is_sorted(world->manager_orders.begin(),
world->manager_orders.end(),
compare_freq))
{
std::stable_sort(world->manager_orders.begin(),
world->manager_orders.end(),
compare_freq);
out << "Fixed priority of manager orders." << std::endl;
}
return CR_OK;
}