From 9da79544de574964f413a23022d9ffdb4ced4e79 Mon Sep 17 00:00:00 2001 From: sv-esk Date: Fri, 4 Mar 2016 22:19:54 +0200 Subject: [PATCH] fix Units::isCitizen fixes a lot of issues where plugins ignore non-dwarf citizens and work with dwarf mercenaries and bards, where it shouldnot --- library/modules/Units.cpp | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/library/modules/Units.cpp b/library/modules/Units.cpp index bdac27cda..ea7ed1cdc 100644 --- a/library/modules/Units.cpp +++ b/library/modules/Units.cpp @@ -818,26 +818,22 @@ bool Units::isCitizen(df::unit *unit) // except that the game appears to let melancholy/raving // dwarves count as citizens. - if (!isDwarf(unit) || !isSane(unit)) - return false; - if (unit->flags1.bits.marauder || unit->flags1.bits.invader_origin || unit->flags1.bits.active_invader || unit->flags1.bits.forest || unit->flags1.bits.merchant || - unit->flags1.bits.diplomat) + unit->flags1.bits.diplomat || + unit->flags2.bits.visitor || + unit->flags2.bits.visitor_uninvited || + unit->flags2.bits.underworld || + unit->flags2.bits.resident) return false; - if (unit->flags1.bits.tame) - return true; + if (!isSane(unit)) + return false; - return unit->civ_id == ui->civ_id && - unit->civ_id != -1 && - !unit->flags2.bits.underworld && - !unit->flags2.bits.resident && - !unit->flags2.bits.visitor_uninvited && - !unit->flags2.bits.visitor; + return isOwnGroup(unit); } bool Units::isDwarf(df::unit *unit) @@ -901,7 +897,7 @@ bool Units::isOwnGroup(df::unit* unit) for (size_t i = 0; i < histfig->entity_links.size(); i++) { auto link = histfig->entity_links[i]; - if (link->entity_id == ui->group_id && (*link).getType() == df::histfig_entity_link_type::MEMBER) + if (link->entity_id == ui->group_id && link->getType() == df::histfig_entity_link_type::MEMBER) return true; } return false;