diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Entities/Creature/CreatureGroups.cpp | 8 | ||||
| -rw-r--r-- | src/server/game/Entities/Creature/CreatureGroups.h | 8 | 
2 files changed, 11 insertions, 5 deletions
| diff --git a/src/server/game/Entities/Creature/CreatureGroups.cpp b/src/server/game/Entities/Creature/CreatureGroups.cpp index de677d44329..2760601835a 100644 --- a/src/server/game/Entities/Creature/CreatureGroups.cpp +++ b/src/server/game/Entities/Creature/CreatureGroups.cpp @@ -179,9 +179,6 @@ void CreatureGroup::MemberAttackStart(Creature* member, Unit* target)      if (!groupAI)          return; -    if (groupAI == 1 && member != m_leader) -        return; -      for (CreatureGroupMemberType::iterator itr = m_members.begin(); itr != m_members.end(); ++itr)      {          if (m_leader) // avoid crash if leader was killed and reset. @@ -199,7 +196,7 @@ void CreatureGroup::MemberAttackStart(Creature* member, Unit* target)          if (other->GetVictim())              continue; -        if (other->IsValidAttackTarget(target)) +        if (((other != m_leader && groupAI & FLAG_AGGRO_ON_AGGRO) || (other == m_leader && groupAI & FLAG_TO_AGGRO_ON_AGGRO)) && other->IsValidAttackTarget(target))              other->AI()->AttackStart(target);      }  } @@ -232,7 +229,8 @@ void CreatureGroup::LeaderMoveTo(float x, float y, float z)      for (CreatureGroupMemberType::iterator itr = m_members.begin(); itr != m_members.end(); ++itr)      {          Creature* member = itr->first; -        if (member == m_leader || !member->IsAlive() || member->GetVictim()) +        uint8 groupAI = sFormationMgr->CreatureGroupMap[member->GetSpawnId()]->groupAI; +        if (member == m_leader || !member->IsAlive() || member->GetVictim() || !(groupAI & FLAG_FOLLOW))              continue;          if (itr->second->point_1) diff --git a/src/server/game/Entities/Creature/CreatureGroups.h b/src/server/game/Entities/Creature/CreatureGroups.h index c4746f181c6..598690124eb 100644 --- a/src/server/game/Entities/Creature/CreatureGroups.h +++ b/src/server/game/Entities/Creature/CreatureGroups.h @@ -24,6 +24,14 @@  #include <unordered_map>  #include <map> +enum GroupAIFlags +{ +    FLAG_AGGRO_NONE        = 0,          // If any creature from group is attacked, members won't assist and won't follow +    FLAG_AGGRO_ON_AGGRO    = 0x00000001, // The member aggroes if the leader aggroes +    FLAG_TO_AGGRO_ON_AGGRO = 0x00000002, // The leader aggroes if the member aggroes +    FLAG_FOLLOW            = 0x00000004, // The member will follow the leader +}; +  class Creature;  class CreatureGroup;  class Unit; | 
