void Tribe::onMemberAttacked(Creature* member, Creature* attacker) { if (contains(attacks, make_pair(member, attacker))) return; attacks.emplace_back(member, attacker); initStanding(attacker); standing[attacker] -= attackPenalty * getMultiplier(member); }
void Tribe::onAttackEvent(Creature* member, Creature* attacker) { if (member->getTribe() != this) return; if (contains(attacks, make_pair(member, attacker))) return; attacks.emplace_back(member, attacker); initStanding(attacker); standing[attacker] -= attackPenalty * getMultiplier(member); }
void Tribe::onMemberKilled(Creature* member, Creature* attacker) { CHECK(member->getTribe() == this); if (attacker == nullptr) return; initStanding(attacker); standing[attacker] -= killPenalty * getMultiplier(member); for (Tribe* t : enemyTribes) if (t->diplomatic) { t->initStanding(attacker); t->standing[attacker] += killBonus * getMultiplier(member); } }
void Tribe::onItemsStolen(const Creature* attacker) { if (diplomatic) { initStanding(attacker); standing[attacker] -= thiefPenalty; } }