diff --git a/src/game/AI/BaseAI/CreatureAI.cpp b/src/game/AI/BaseAI/CreatureAI.cpp index eb93f9e64f..a412a97e27 100644 --- a/src/game/AI/BaseAI/CreatureAI.cpp +++ b/src/game/AI/BaseAI/CreatureAI.cpp @@ -56,12 +56,6 @@ void CreatureAI::Reset() void CreatureAI::EnterCombat(Unit* enemy) { UnitAI::EnterCombat(enemy); - // TODO: Monitor this condition to see if it conflicts with any pets - if (m_creature->GetSettings().HasFlag(CreatureStaticFlags::NO_MELEE_FLEE) && !m_creature->IsRooted() && !m_creature->IsInPanic() && !m_creature->IsNonMeleeSpellCasted(false) && enemy && enemy->IsPlayerControlled()) - { - DoFlee(30000); - SetAIOrder(ORDER_CRITTER_FLEE); // mark as critter flee for custom handling - } if (enemy && (m_creature->IsGuard() || m_creature->IsCivilian())) { // Send Zone Under Attack message to the LocalDefense and WorldDefense Channels diff --git a/src/game/Entities/Unit.cpp b/src/game/Entities/Unit.cpp index 8285963350..326c99948f 100644 --- a/src/game/Entities/Unit.cpp +++ b/src/game/Entities/Unit.cpp @@ -8330,6 +8330,13 @@ void Unit::SetInCombatState(bool PvP, Unit* enemy) if (creature->AI()) creature->AI()->EnterCombat(enemy); + // can be overriden by spellcast on Aggro hook, hence must be done after EnterCombat hook + if (!creature->GetCreatedBySpellId() && creature->GetSettings().HasFlag(CreatureStaticFlags::NO_MELEE_FLEE) && !creature->IsRooted() && !creature->IsInPanic() && !creature->IsNonMeleeSpellCasted(false) && enemy && enemy->IsPlayerControlled()) + { + creature->AI()->DoFlee(30000); + creature->AI()->SetAIOrder(ORDER_CRITTER_FLEE); // mark as critter flee for custom handling + } + // Some bosses are set into combat with zone if (GetMap()->IsDungeon() && (creature->GetCreatureInfo()->ExtraFlags & CREATURE_EXTRA_FLAG_AGGRO_ZONE) && enemy && enemy->IsControlledByPlayer()) creature->SetInCombatWithZone();