aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortreeston <treeston.mmoc@gmail.com>2017-07-03 19:39:16 +0200
committertreeston <treeston.mmoc@gmail.com>2017-07-03 19:39:16 +0200
commit495e161db2f91cd3fa85e7844fd0c7c0027d0265 (patch)
tree09eae68c1007abcc179c67b18e5de0139bc345b9 /src
parent62d51132524b5afff13371ccd13df556dd545bef (diff)
Fix an issue that was causing all creature group members to assist each other, even if only one of the aggro flags was set. Also refactor enum values to be readable.
Fixes #19977.
Diffstat (limited to 'src')
-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 b7de0c874fa..0a7e9d51a1e 100644
--- a/src/server/game/Entities/Creature/CreatureGroups.cpp
+++ b/src/server/game/Entities/Creature/CreatureGroups.cpp
@@ -179,6 +179,14 @@ void CreatureGroup::MemberEngagingTarget(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)
{
Creature* other = itr->first;
@@ -189,7 +197,7 @@ void CreatureGroup::MemberEngagingTarget(Creature* member, Unit* target)
if (!other->IsAlive())
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->EngageWithTarget(target);
}
}
@@ -225,7 +233,7 @@ void CreatureGroup::LeaderMoveTo(Position const& destination, uint32 id /*= 0*/,
{
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 3f8e466fca5..0e8cf4e45b6 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;