Beispiel #1
0
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);         
}
Beispiel #2
0
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));
        }
    }
}
Beispiel #3
0
void VillageControl::onMemberKilled(const Creature* victim, const Creature* killer) {
  if (auto villain = getVillain(killer))
    victims[villain->collective] += 1;
}
Beispiel #4
0
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
}
Beispiel #5
0
bool Campaign::SiteInfo::isEnemy() const {
  return getRetired() || (getVillain() && getVillain()->isEnemy());
}