diff options
author | treeston <treeston.mmoc@gmail.com> | 2017-07-03 19:39:16 +0200 |
---|---|---|
committer | treeston <treeston.mmoc@gmail.com> | 2017-07-03 19:39:16 +0200 |
commit | 495e161db2f91cd3fa85e7844fd0c7c0027d0265 (patch) | |
tree | 09eae68c1007abcc179c67b18e5de0139bc345b9 | |
parent | 62d51132524b5afff13371ccd13df556dd545bef (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.
-rw-r--r-- | src/server/game/Entities/Creature/CreatureGroups.cpp | 12 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/CreatureGroups.h | 9 |
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; |