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.

This commit is contained in:
Aokromes
2017-07-03 19:49:50 +02:00
parent c3ace88321
commit ab6ea7ba04
2 changed files with 15 additions and 6 deletions

View File

@@ -176,6 +176,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.
@@ -193,7 +201,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);
}
}
@@ -227,7 +235,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)

View File

@@ -25,10 +25,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;