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 stuckdoors -time 1 -timeUnits months -command [ fix/stuckdoors ]
repeat -name autoShearCreature -time 14 -timeUnits days -command [ workorder ShearCreature ] 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 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 fast-heat 100
tweak do-job-now 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``. :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``. :import NAME: Imports manager orders from a file named ``dfhack-config/orders/NAME.json``.
:clear: Deletes all manager orders in the current embark. :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: .. _nestboxes:

@ -45,6 +45,7 @@ changelog.txt uses a syntax similar to RST, with a few special sequences:
## Misc Improvements ## Misc Improvements
- `buildingplan`: now displays which items are attached and which items are still missing for planned buildings - `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`: 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 - `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 - `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. started, so later manual changes will not be overridden.
- Automates calling of various fort maintenance and `scripts-fix`, like - Automates calling of various fort maintenance and `scripts-fix`, like
`cleanowned` and `fix/stuckdoors`. `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. - 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 - 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. 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" " Imports manager orders from a file named dfhack-config/orders/[name].json.\n"
" orders clear\n" " orders clear\n"
" Deletes all manager orders in the current embark.\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; 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_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_import_command(color_ostream & out, const std::string & name);
static command_result orders_clear_command(color_ostream & out); 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) 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); return orders_clear_command(out);
} }
if (parameters[0] == "sort" && parameters.size() == 1)
{
return orders_sort_command(out);
}
return CR_WRONG_USAGE; return CR_WRONG_USAGE;
} }
@ -924,3 +932,28 @@ static command_result orders_clear_command(color_ostream & out)
return CR_OK; 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;
}