summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Creature/CreatureGroups.cpp28
-rw-r--r--src/server/game/Entities/Creature/CreatureGroups.h16
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