void VillageControl::checkEntries() { for (auto& villain : villains) for (auto& trigger : villain.triggers) if (trigger.getId() == AttackTriggerId::ENTRY) for (Position pos : getCollective()->getTerritory().getAll()) if (Creature* c = pos.getCreature()) if (getCollective()->getTribe()->isEnemy(c)) if (auto villain = getVillain(c)) entries.insert(villain->collective); }
void VillageControl::onPickupEvent(const Creature* who, const vector<Item*>& items) { if (getCollective()->getTerritory().contains(who->getPosition())) if (auto villain = getVillain(who)) if (contains(villain->triggers, AttackTriggerId::STOLEN_ITEMS)) { bool wasTheft = false; for (const Item* it : items) if (myItems.contains(it)) { wasTheft = true; ++stolenItemCount[villain->collective]; myItems.erase(it); } if (getCollective()->hasLeader() && wasTheft) { who->playerMessage(PlayerMessage("You are going to regret this", PlayerMessage::HIGH)); } } }
void VillageControl::onMemberKilled(const Creature* victim, const Creature* killer) { if (auto villain = getVillain(killer)) victims[villain->collective] += 1; }
void VillageControl::onOtherKilled(const Creature* victim, const Creature* killer) { if (victim->getTribe() == getCollective()->getTribe()) if (auto villain = getVillain(killer)) victims[villain->collective] += 0.15; // small increase for same tribe but different village }
bool Campaign::SiteInfo::isEnemy() const { return getRetired() || (getVillain() && getVillain()->isEnemy()); }