mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-16 18:40:28 +00:00
fix(Core/Formations): fixed possible finite loop related to GROUP_AI_FLAG_EVADE_TOGETHER (#9279)
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1637549244654096226');
|
||||
|
||||
UPDATE `creature_formations` SET `groupAI` = `groupAI`|4 WHERE `leaderGUID` = 202212;
|
||||
@@ -314,15 +314,14 @@ bool CreatureAI::_EnterEvadeMode()
|
||||
me->SetLastDamagedTime(0);
|
||||
me->SetCannotReachTarget(false);
|
||||
|
||||
if (CreatureGroup* formation = me->GetFormation())
|
||||
{
|
||||
formation->MemberEvaded(me);
|
||||
}
|
||||
|
||||
if (me->IsInEvadeMode())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (CreatureGroup* formation = me->GetFormation())
|
||||
{
|
||||
formation->MemberEvaded(me);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -237,31 +237,23 @@ void CreatureGroup::MemberEvaded(Creature* member)
|
||||
for (auto const& itr : m_members)
|
||||
{
|
||||
Creature* pMember = itr.first;
|
||||
|
||||
//Skip one check
|
||||
if (pMember == member)
|
||||
// This should never happen
|
||||
if (!pMember)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!pMember->IsAlive())
|
||||
if (pMember == member || pMember->isDead() || pMember->IsInEvadeMode() || !pMember->IsInCombat() ||
|
||||
!itr.second.HasGroupFlag(std::underlying_type_t<GroupAIFlags>(GroupAIFlags::GROUP_AI_FLAG_EVADE_TOGETHER)))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (pMember->IsInEvadeMode())
|
||||
if (pMember->IsAIEnabled)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (itr.second.HasGroupFlag(std::underlying_type_t<GroupAIFlags>(GroupAIFlags::GROUP_AI_FLAG_EVADE_TOGETHER)))
|
||||
{
|
||||
if (pMember->IsAIEnabled)
|
||||
if (CreatureAI* pMemberAI = pMember->AI())
|
||||
{
|
||||
if (CreatureAI* pMemberAI = pMember->AI())
|
||||
{
|
||||
pMemberAI->EnterEvadeMode();
|
||||
}
|
||||
pMemberAI->EnterEvadeMode();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user