mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-19 08:55:32 +01:00
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:
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user