mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-03-15 05:25:08 +00:00
revert "fix(Core/Formations): Implemented new creature formation flag: GROUP_AI_FLAG_ACQUIRE_NEW_TARGET_ON_EVADE." (#14494)
This commit is contained in:
@@ -0,0 +1,2 @@
|
|||||||
|
--
|
||||||
|
UPDATE `creature_formations` SET `groupAI`=`groupAI`&~0x020 WHERE `leaderGUID` IN (84634,84648);
|
||||||
@@ -200,72 +200,32 @@ void CreatureGroup::MemberEngagingTarget(Creature* member, Unit* target)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (!(groupAI & std::underlying_type_t<GroupAIFlags>(GroupAIFlags::GROUP_AI_FLAG_LEADER_ASSIST_MEMBER)))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for (auto const& itr : m_members)
|
for (auto const& itr : m_members)
|
||||||
{
|
{
|
||||||
Creature* pMember = itr.first;
|
Creature* pMember = itr.first;
|
||||||
if (!pMember)
|
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());
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pMember == member || !pMember->IsAlive() || pMember->GetVictim())
|
//Skip one check
|
||||||
{
|
if (pMember == member)
|
||||||
continue;
|
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;
|
continue;
|
||||||
}
|
|
||||||
|
|
||||||
if (pMember->IsValidAttackTarget(target) && pMember->AI())
|
if (pMember->IsValidAttackTarget(target) && pMember->AI())
|
||||||
{
|
|
||||||
pMember->AI()->AttackStart(target);
|
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)
|
void CreatureGroup::MemberEvaded(Creature* member)
|
||||||
{
|
{
|
||||||
uint8 const groupAI = sFormationMgr->CreatureGroupMap[member->GetSpawnId()].groupAI;
|
uint8 const groupAI = sFormationMgr->CreatureGroupMap[member->GetSpawnId()].groupAI;
|
||||||
|
|||||||
@@ -28,23 +28,22 @@ class CreatureGroup;
|
|||||||
|
|
||||||
enum class GroupAIFlags : uint16
|
enum class GroupAIFlags : uint16
|
||||||
{
|
{
|
||||||
GROUP_AI_FLAG_MEMBER_ASSIST_LEADER = 0x001,
|
GROUP_AI_FLAG_MEMBER_ASSIST_LEADER = 0x001,
|
||||||
GROUP_AI_FLAG_LEADER_ASSIST_MEMBER = 0x002,
|
GROUP_AI_FLAG_LEADER_ASSIST_MEMBER = 0x002,
|
||||||
GROUP_AI_FLAG_EVADE_TOGETHER = 0x004,
|
GROUP_AI_FLAG_EVADE_TOGETHER = 0x004,
|
||||||
GROUP_AI_FLAG_RESPAWN_ON_EVADE = 0x008,
|
GROUP_AI_FLAG_RESPAWN_ON_EVADE = 0x008,
|
||||||
GROUP_AI_FLAG_DONT_RESPAWN_LEADER_ON_EVADE = 0x010,
|
GROUP_AI_FLAG_DONT_RESPAWN_LEADER_ON_EVADE = 0x010,
|
||||||
GROUP_AI_FLAG_ACQUIRE_NEW_TARGET_ON_EVADE = 0x020,
|
//GROUP_AI_FLAG_UNK3 = 0x010,
|
||||||
//GROUP_AI_FLAG_UNK5 = 0x040,
|
//GROUP_AI_FLAG_UNK4 = 0x020,
|
||||||
//GROUP_AI_FLAG_UNK6 = 0x080,
|
//GROUP_AI_FLAG_UNK5 = 0x040,
|
||||||
//GROUP_AI_FLAG_UNK7 = 0x100,
|
//GROUP_AI_FLAG_UNK6 = 0x080,
|
||||||
GROUP_AI_FLAG_FOLLOW_LEADER = 0x200,
|
//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
|
// 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_SUPPORTED = GROUP_AI_FLAG_MEMBER_ASSIST_LEADER | GROUP_AI_FLAG_LEADER_ASSIST_MEMBER | GROUP_AI_FLAG_EVADE_MASK | GROUP_AI_FLAG_FOLLOW_LEADER
|
||||||
GROUP_AI_FLAG_FOLLOW_LEADER | GROUP_AI_FLAG_ACQUIRE_NEW_TARGET_ON_EVADE
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct FormationInfo
|
struct FormationInfo
|
||||||
@@ -109,7 +108,6 @@ public:
|
|||||||
|
|
||||||
void LeaderMoveTo(float x, float y, float z, bool run);
|
void LeaderMoveTo(float x, float y, float z, bool run);
|
||||||
void MemberEngagingTarget(Creature* member, Unit* target);
|
void MemberEngagingTarget(Creature* member, Unit* target);
|
||||||
Unit* GetNewTargetForMember(Creature* member);
|
|
||||||
void MemberEvaded(Creature* member);
|
void MemberEvaded(Creature* member);
|
||||||
void RespawnFormation(bool force = false);
|
void RespawnFormation(bool force = false);
|
||||||
[[nodiscard]] bool IsFormationInCombat();
|
[[nodiscard]] bool IsFormationInCombat();
|
||||||
|
|||||||
@@ -14676,16 +14676,6 @@ Unit* Creature::SelectVictim()
|
|||||||
return nullptr;
|
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
|
// enter in evade mode in other case
|
||||||
AI()->EnterEvadeMode();
|
AI()->EnterEvadeMode();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user