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.
This commit is contained in:
treeston
2017-07-03 19:39:16 +02:00
parent 62d5113252
commit 495e161db2
2 changed files with 15 additions and 6 deletions

View File

@@ -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)

View File

@@ -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;