revert "fix(Core/Formations): Implemented new creature formation flag: GROUP_AI_FLAG_ACQUIRE_NEW_TARGET_ON_EVADE." (#14494)

This commit is contained in:
Gultask
2023-01-04 10:44:42 -03:00
committed by GitHub
parent 1b8c9216ba
commit b4080ed0f1
4 changed files with 27 additions and 77 deletions

View File

@@ -0,0 +1,2 @@
--
UPDATE `creature_formations` SET `groupAI`=`groupAI`&~0x020 WHERE `leaderGUID` IN (84634,84648);

View File

@@ -200,72 +200,32 @@ void CreatureGroup::MemberEngagingTarget(Creature* member, Unit* target)
return;
}
}
else if (!(groupAI & std::underlying_type_t<GroupAIFlags>(GroupAIFlags::GROUP_AI_FLAG_LEADER_ASSIST_MEMBER)))
{
return;
}
for (auto const& itr : m_members)
{
Creature* pMember = itr.first;
if (!pMember)
{
continue;
}
if (m_leader) // avoid crash if leader was killed and reset.
LOG_DEBUG("entities.unit", "GROUP ATTACK: group instance id {} calls member instid {}", m_leader->GetInstanceId(), member->GetInstanceId());
if (pMember == member || !pMember->IsAlive() || pMember->GetVictim())
{
//Skip one check
if (pMember == member)
continue;
}
if (pMember == m_leader && !(groupAI & std::underlying_type_t<GroupAIFlags>(GroupAIFlags::GROUP_AI_FLAG_LEADER_ASSIST_MEMBER)))
{
if (!pMember->IsAlive())
continue;
if (pMember->GetVictim())
continue;
}
if (pMember->IsValidAttackTarget(target) && pMember->AI())
{
pMember->AI()->AttackStart(target);
}
}
}
Unit* CreatureGroup::GetNewTargetForMember(Creature* member)
{
uint8 const groupAI = sFormationMgr->CreatureGroupMap[member->GetSpawnId()].groupAI;
if (!(groupAI & std::underlying_type_t<GroupAIFlags>(GroupAIFlags::GROUP_AI_FLAG_ACQUIRE_NEW_TARGET_ON_EVADE)))
{
return nullptr;
}
if (member == m_leader && !(groupAI & std::underlying_type_t<GroupAIFlags>(GroupAIFlags::GROUP_AI_FLAG_LEADER_ASSIST_MEMBER)))
{
return nullptr;
}
for (auto const& itr : m_members)
{
Creature* pMember = itr.first;
if (!pMember)
{
continue;
}
if (pMember == member || !pMember->IsAlive() || !pMember->GetVictim())
{
continue;
}
if (pMember == m_leader && !(groupAI & std::underlying_type_t<GroupAIFlags>(GroupAIFlags::GROUP_AI_FLAG_MEMBER_ASSIST_LEADER)))
{
continue;
}
if (member->IsValidAttackTarget(pMember->GetVictim()))
{
return pMember->GetVictim();
}
}
return nullptr;
}
void CreatureGroup::MemberEvaded(Creature* member)
{
uint8 const groupAI = sFormationMgr->CreatureGroupMap[member->GetSpawnId()].groupAI;

View File

@@ -28,23 +28,22 @@ class CreatureGroup;
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_RESPAWN_ON_EVADE = 0x008,
GROUP_AI_FLAG_DONT_RESPAWN_LEADER_ON_EVADE = 0x010,
GROUP_AI_FLAG_ACQUIRE_NEW_TARGET_ON_EVADE = 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_MEMBER_ASSIST_LEADER = 0x001,
GROUP_AI_FLAG_LEADER_ASSIST_MEMBER = 0x002,
GROUP_AI_FLAG_EVADE_TOGETHER = 0x004,
GROUP_AI_FLAG_RESPAWN_ON_EVADE = 0x008,
GROUP_AI_FLAG_DONT_RESPAWN_LEADER_ON_EVADE = 0x010,
//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_ASSIST_MASK = GROUP_AI_FLAG_MEMBER_ASSIST_LEADER | GROUP_AI_FLAG_LEADER_ASSIST_MEMBER,
GROUP_AI_FLAG_EVADE_MASK = GROUP_AI_FLAG_EVADE_TOGETHER | GROUP_AI_FLAG_RESPAWN_ON_EVADE,
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_ASSIST_MASK | GROUP_AI_FLAG_EVADE_MASK | GROUP_AI_FLAG_DONT_RESPAWN_LEADER_ON_EVADE |
GROUP_AI_FLAG_FOLLOW_LEADER | GROUP_AI_FLAG_ACQUIRE_NEW_TARGET_ON_EVADE
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
@@ -109,7 +108,6 @@ public:
void LeaderMoveTo(float x, float y, float z, bool run);
void MemberEngagingTarget(Creature* member, Unit* target);
Unit* GetNewTargetForMember(Creature* member);
void MemberEvaded(Creature* member);
void RespawnFormation(bool force = false);
[[nodiscard]] bool IsFormationInCombat();

View File

@@ -14676,16 +14676,6 @@ Unit* Creature::SelectVictim()
return nullptr;
}
// Last chance: creature group
if (CreatureGroup* group = GetFormation())
{
if (Unit* groupTarget = group->GetNewTargetForMember(this))
{
SetInFront(groupTarget);
return groupTarget;
}
}
// enter in evade mode in other case
AI()->EnterEvadeMode();