Negative autolabor pool size uses most unskilled dwarves.

develop
Daniil Guzanov 2015-03-06 00:47:18 +03:00
parent 0f01583972
commit 4c06e022a6
1 changed files with 12 additions and 6 deletions

@ -843,14 +843,20 @@ static void assign_labor(unit_labor::unit_labor labor,
}
int pool = labor_infos[labor].talent_pool();
if (pool < 200 && candidates.size() > 1 && pool < candidates.size())
if (pool < 200 && candidates.size() > 1 && abs(pool) < candidates.size())
{
// Sort in descending order
std::sort(candidates.begin(), candidates.end(), [&](const int lhs, const int rhs) -> bool {
if (dwarf_skill[lhs] == dwarf_skill[rhs])
return dwarf_skillxp[lhs] > dwarf_skillxp[rhs];
if (pool > 0)
return dwarf_skillxp[lhs] > dwarf_skillxp[rhs];
else
return dwarf_skillxp[lhs] < dwarf_skillxp[rhs];
else
return dwarf_skill[lhs] > dwarf_skill[rhs];
if (pool > 0)
return dwarf_skill[lhs] > dwarf_skill[rhs];
else
return dwarf_skill[lhs] < dwarf_skill[rhs];
});
// Check if all dwarves have equivalent skills, usually zero
@ -863,8 +869,8 @@ static void assign_labor(unit_labor::unit_labor labor,
}
else
{
// Trim down to our top talents
candidates.resize(pool);
// Trim down to our top (or not) talents
candidates.resize(abs(pool));
}
}
@ -1444,7 +1450,7 @@ command_result autolabor (color_ostream &out, std::vector <std::string> & parame
if (parameters.size() == 4)
pool = std::stoi(parameters[3]);
if (maximum < minimum || maximum < 0 || minimum < 0 || pool < 0)
if (maximum < minimum || maximum < 0 || minimum < 0)
{
out.printerr("Syntax: autolabor <labor> <minimum> [<maximum>] [<talent pool>]\n", maximum, minimum);
return CR_WRONG_USAGE;