aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Creature/CreatureGroups.cpp12
-rw-r--r--src/server/game/Entities/Creature/CreatureGroups.h9
2 files changed, 15 insertions, 6 deletions
diff --git a/src/server/game/Entities/Creature/CreatureGroups.cpp b/src/server/game/Entities/Creature/CreatureGroups.cpp
index 2760601835a..e6f1f65a004 100644
--- a/src/server/game/Entities/Creature/CreatureGroups.cpp
+++ b/src/server/game/Entities/Creature/CreatureGroups.cpp
@@ -179,6 +179,14 @@ void CreatureGroup::MemberAttackStart(Creature* member, Unit* target)
if (!groupAI)
return;
+ if (member == m_leader)
+ {
+ if (!(groupAI & FLAG_MEMBERS_ASSIST_LEADER))
+ return;
+ }
+ else if (!(groupAI & FLAG_LEADER_ASSISTS_MEMBER))
+ return;
+
for (CreatureGroupMemberType::iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
{
if (m_leader) // avoid crash if leader was killed and reset.
@@ -196,7 +204,7 @@ void CreatureGroup::MemberAttackStart(Creature* member, Unit* target)
if (other->GetVictim())
continue;
- if (((other != m_leader && groupAI & FLAG_AGGRO_ON_AGGRO) || (other == m_leader && groupAI & FLAG_TO_AGGRO_ON_AGGRO)) && other->IsValidAttackTarget(target))
+ if (((other != m_leader && (groupAI & FLAG_MEMBERS_ASSIST_LEADER)) || (other == m_leader && (groupAI & FLAG_LEADER_ASSISTS_MEMBER))) && other->IsValidAttackTarget(target))
other->AI()->AttackStart(target);
}
}
@@ -230,7 +238,7 @@ void CreatureGroup::LeaderMoveTo(float x, float y, float z)
{
Creature* member = itr->first;
uint8 groupAI = sFormationMgr->CreatureGroupMap[member->GetSpawnId()]->groupAI;
- if (member == m_leader || !member->IsAlive() || member->GetVictim() || !(groupAI & FLAG_FOLLOW))
+ if (member == m_leader || !member->IsAlive() || member->GetVictim() || !(groupAI & FLAG_IDLE_IN_FORMATION))
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 598690124eb..bddfca62023 100644
--- a/src/server/game/Entities/Creature/CreatureGroups.h
+++ b/src/server/game/Entities/Creature/CreatureGroups.h
@@ -26,10 +26,11 @@
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
+ FLAG_AGGRO_NONE = 0, // No creature group behavior
+ FLAG_MEMBERS_ASSIST_LEADER = 0x00000001, // The member aggroes if the leader aggroes
+ FLAG_LEADER_ASSISTS_MEMBER = 0x00000002, // The leader aggroes if the member aggroes
+ FLAG_MEMBERS_ASSIST_MEMBER = (FLAG_MEMBERS_ASSIST_LEADER | FLAG_LEADER_ASSISTS_MEMBER), // every member will assist if any member is attacked
+ FLAG_IDLE_IN_FORMATION = 0x00000004, // The member will follow the leader when pathing idly
};
class Creature;