diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Entities/Creature/CreatureGroups.cpp | 28 | ||||
| -rw-r--r-- | src/server/game/Entities/Creature/CreatureGroups.h | 16 |
2 files changed, 31 insertions, 13 deletions
diff --git a/src/server/game/Entities/Creature/CreatureGroups.cpp b/src/server/game/Entities/Creature/CreatureGroups.cpp index 161919439b..6bfcb211fe 100644 --- a/src/server/game/Entities/Creature/CreatureGroups.cpp +++ b/src/server/game/Entities/Creature/CreatureGroups.cpp @@ -229,7 +229,7 @@ void CreatureGroup::MemberAttackStart(Creature* member, Unit* target) void CreatureGroup::MemberEvaded(Creature* member) { uint8 const groupAI = sFormationMgr->CreatureGroupMap[member->GetSpawnId()].groupAI; - if (!(groupAI & std::underlying_type_t<GroupAIFlags>(GroupAIFlags::GROUP_AI_FLAG_EVADE_TOGETHER))) + if (!(groupAI & std::underlying_type_t<GroupAIFlags>(GroupAIFlags::GROUP_AI_FLAG_EVADE_MASK))) { return; } @@ -243,18 +243,34 @@ void CreatureGroup::MemberEvaded(Creature* member) continue; } - if (pMember == member || pMember->isDead() || pMember->IsInEvadeMode() || !pMember->IsInCombat() || - !itr.second.HasGroupFlag(std::underlying_type_t<GroupAIFlags>(GroupAIFlags::GROUP_AI_FLAG_EVADE_TOGETHER))) + if (pMember == member || pMember->IsInEvadeMode() || !itr.second.HasGroupFlag(std::underlying_type_t<GroupAIFlags>(GroupAIFlags::GROUP_AI_FLAG_EVADE_MASK))) { continue; } - if (pMember->IsAIEnabled) + if (itr.second.HasGroupFlag(std::underlying_type_t<GroupAIFlags>(GroupAIFlags::GROUP_AI_FLAG_EVADE_TOGETHER))) { - if (CreatureAI* pMemberAI = pMember->AI()) + if (!pMember->IsAlive() || !pMember->IsInCombat()) { - pMemberAI->EnterEvadeMode(); + continue; } + + if (pMember->IsAIEnabled) + { + if (CreatureAI* pMemberAI = pMember->AI()) + { + pMemberAI->EnterEvadeMode(); + } + } + } + else + { + if (pMember->IsAlive()) + { + continue; + } + + pMember->Respawn(); } } } diff --git a/src/server/game/Entities/Creature/CreatureGroups.h b/src/server/game/Entities/Creature/CreatureGroups.h index c1f8256af2..26c4826ef2 100644 --- a/src/server/game/Entities/Creature/CreatureGroups.h +++ b/src/server/game/Entities/Creature/CreatureGroups.h @@ -31,16 +31,18 @@ enum class GroupAIFlags : uint16 GROUP_AI_FLAG_MEMBER_ASSIST_LEADER = 0x001, GROUP_AI_FLAG_LEADER_ASSIST_MEMBER = 0x002, GROUP_AI_FLAG_EVADE_TOGETHER = 0x004, - //GROUP_AI_FLAG_UNK2 = 0x008, - //GROUP_AI_FLAG_UNK3 = 0x010, - //GROUP_AI_FLAG_UNK4 = 0x020, - //GROUP_AI_FLAG_UNK5 = 0x040, - //GROUP_AI_FLAG_UNK6 = 0x080, - //GROUP_AI_FLAG_UNK7 = 0x100, + GROUP_AI_FLAG_RESPAWN_ON_EVADE = 0x008, + //GROUP_AI_FLAG_UNK3 = 0x010, + //GROUP_AI_FLAG_UNK4 = 0x020, + //GROUP_AI_FLAG_UNK5 = 0x040, + //GROUP_AI_FLAG_UNK6 = 0x080, + //GROUP_AI_FLAG_UNK7 = 0x100, GROUP_AI_FLAG_FOLLOW_LEADER = 0x200, + GROUP_AI_FLAG_EVADE_MASK = GROUP_AI_FLAG_EVADE_TOGETHER | GROUP_AI_FLAG_RESPAWN_ON_EVADE, + // Used to verify valid and usable flags - GROUP_AI_FLAG_SUPPORTED = GROUP_AI_FLAG_MEMBER_ASSIST_LEADER | GROUP_AI_FLAG_LEADER_ASSIST_MEMBER | GROUP_AI_FLAG_EVADE_TOGETHER | GROUP_AI_FLAG_FOLLOW_LEADER + GROUP_AI_FLAG_SUPPORTED = GROUP_AI_FLAG_MEMBER_ASSIST_LEADER | GROUP_AI_FLAG_LEADER_ASSIST_MEMBER | GROUP_AI_FLAG_EVADE_MASK | GROUP_AI_FLAG_FOLLOW_LEADER }; struct FormationInfo |
