mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-03-17 06:25:11 +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->SetLastDamagedTime(0);
|
||||||
me->SetCannotReachTarget(false);
|
me->SetCannotReachTarget(false);
|
||||||
|
|
||||||
if (CreatureGroup* formation = me->GetFormation())
|
|
||||||
{
|
|
||||||
formation->MemberEvaded(me);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (me->IsInEvadeMode())
|
if (me->IsInEvadeMode())
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
else if (CreatureGroup* formation = me->GetFormation())
|
||||||
|
{
|
||||||
|
formation->MemberEvaded(me);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -237,31 +237,23 @@ void CreatureGroup::MemberEvaded(Creature* member)
|
|||||||
for (auto const& itr : m_members)
|
for (auto const& itr : m_members)
|
||||||
{
|
{
|
||||||
Creature* pMember = itr.first;
|
Creature* pMember = itr.first;
|
||||||
|
// This should never happen
|
||||||
//Skip one check
|
if (!pMember)
|
||||||
if (pMember == member)
|
|
||||||
{
|
{
|
||||||
continue;
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pMember->IsInEvadeMode())
|
if (pMember->IsAIEnabled)
|
||||||
{
|
{
|
||||||
continue;
|
if (CreatureAI* pMemberAI = pMember->AI())
|
||||||
}
|
|
||||||
|
|
||||||
if (itr.second.HasGroupFlag(std::underlying_type_t<GroupAIFlags>(GroupAIFlags::GROUP_AI_FLAG_EVADE_TOGETHER)))
|
|
||||||
{
|
|
||||||
if (pMember->IsAIEnabled)
|
|
||||||
{
|
{
|
||||||
if (CreatureAI* pMemberAI = pMember->AI())
|
pMemberAI->EnterEvadeMode();
|
||||||
{
|
|
||||||
pMemberAI->EnterEvadeMode();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user