Fix #1103: do not idle for a meeting if the other participant is dead, asleep, resting, or on military duty

develop
Kelly Kinkade 2017-07-29 09:26:19 -05:00
parent c5c80d5dc0
commit fe9454ff1c
1 changed files with 17 additions and 4 deletions

@ -1212,15 +1212,28 @@ private:
{
df::activity_info *act = ui->activities[i];
if (!act) continue;
bool p1 = act->unit_actor == dwarf->dwarf;
bool p2 = act->unit_noble == dwarf->dwarf;
if (p1 || p2)
{
dwarf->clear_all = true;
if (print_debug)
out.print("Dwarf \"%s\" has a meeting, will be cleared of all labors\n", dwarf->dwarf->name.first_name.c_str());
break;
df::unit* other = p1 ? act->unit_noble : act->unit_actor;
if (other && !(other->flags1.bits.dead ||
other->job.current_job->job_type == df::job_type::Sleep ||
other->job.current_job->job_type == df::job_type::Rest ||
ENUM_ATTR(profession, military, other->profession)))
{
dwarf->clear_all = true;
if (print_debug)
out.print("Dwarf \"%s\" has a meeting, will be cleared of all labors\n", dwarf->dwarf->name.first_name.c_str());
break;
}
else
{
if (print_debug)
out.print("Dwarf \"%s\" has a meeting, but with someone who can't make the meeting.\n", dwarf->dwarf->name.first_name.c_str());
}
}
}