From 0db39f76de2667fcb495deaef257d8a9e38f4bf2 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Thu, 13 Feb 2025 13:22:02 -0300 Subject: [PATCH] fix(Core/Creature): Creatures should skip confused targets (#21410) --- src/server/game/Combat/ThreatMgr.cpp | 4 ++-- .../BlackwingLair/boss_razorgore.cpp | 20 +------------------ .../EasternKingdoms/ZulGurub/boss_jindo.cpp | 18 ----------------- .../Mechanar/boss_nethermancer_sepethrea.cpp | 18 ----------------- 4 files changed, 3 insertions(+), 57 deletions(-) diff --git a/src/server/game/Combat/ThreatMgr.cpp b/src/server/game/Combat/ThreatMgr.cpp index 30fb7a146..899eee48e 100644 --- a/src/server/game/Combat/ThreatMgr.cpp +++ b/src/server/game/Combat/ThreatMgr.cpp @@ -328,7 +328,7 @@ HostileReference* ThreatContainer::SelectNextVictim(Creature* attacker, HostileR Unit* cvUnit = currentVictim->getTarget(); if (!attacker->CanCreatureAttack(cvUnit)) // pussywizard: if currentVictim is not valid => don't compare the threat with it, just take the highest threat valid target currentVictim = nullptr; - else if (cvUnit->IsImmunedToDamageOrSchool(attacker->GetMeleeDamageSchoolMask()) || cvUnit->HasNegativeAuraWithInterruptFlag(AURA_INTERRUPT_FLAG_TAKE_DAMAGE)) // pussywizard: no 10%/30% if currentVictim is immune to damage or has auras breakable by damage + else if (cvUnit->IsImmunedToDamageOrSchool(attacker->GetMeleeDamageSchoolMask()) || cvUnit->HasNegativeAuraWithInterruptFlag(AURA_INTERRUPT_FLAG_TAKE_DAMAGE) || cvUnit->HasUnitState(UNIT_STATE_CONFUSED)) // pussywizard: no 10%/30% if currentVictim is immune to damage or has auras breakable by damage currentVictim = nullptr; } @@ -345,7 +345,7 @@ HostileReference* ThreatContainer::SelectNextVictim(Creature* attacker, HostileR // pussywizard: don't go to threat comparison if this ref is immune to damage or has aura breakable on damage (second choice target) // pussywizard: if this is the last entry on the threat list, then all targets are second choice, set bool to true and loop threat list again, ignoring this section - if (!noPriorityTargetFound && (target->IsImmunedToDamageOrSchool(attacker->GetMeleeDamageSchoolMask()) || target->HasNegativeAuraWithInterruptFlag(AURA_INTERRUPT_FLAG_TAKE_DAMAGE) || target->HasAuraTypeWithCaster(SPELL_AURA_IGNORED, attacker->GetGUID()))) + if (!noPriorityTargetFound && (target->IsImmunedToDamageOrSchool(attacker->GetMeleeDamageSchoolMask()) || target->HasNegativeAuraWithInterruptFlag(AURA_INTERRUPT_FLAG_TAKE_DAMAGE) || target->HasUnitState(UNIT_STATE_CONFUSED) || target->HasAuraTypeWithCaster(SPELL_AURA_IGNORED, attacker->GetGUID()))) { if (iter != lastRef) { diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp index c837cfc81..4b82654fb 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp @@ -110,25 +110,7 @@ public: bool CanAIAttack(Unit const* target) const override { - if (target->IsCreature() && !secondPhase) - { - return false; - } - - if (me->GetThreatMgr().GetThreatListSize() > 1) - { - ThreatContainer::StorageType::const_iterator lastRef = me->GetThreatMgr().GetOnlineContainer().GetThreatList().end(); - --lastRef; - if (Unit* lastTarget = (*lastRef)->getTarget()) - { - if (lastTarget != target) - { - return !target->HasAura(SPELL_CONFLAGRATION); - } - } - } - - return true; + return !(target->IsCreature() && !secondPhase); } void JustEngagedWith(Unit* /*who*/) override diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp index 57b2321d6..27d302260 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_jindo.cpp @@ -153,24 +153,6 @@ struct boss_jindo : public BossAI DoMeleeAttackIfReady(); } - bool CanAIAttack(Unit const* target) const override - { - if (me->GetThreatMgr().GetThreatListSize() > 1) - { - ThreatContainer::StorageType::const_iterator lastRef = me->GetThreatMgr().GetOnlineContainer().GetThreatList().end(); - --lastRef; - if (Unit* lastTarget = (*lastRef)->getTarget()) - { - if (lastTarget != target) - { - return !target->HasAura(SPELL_HEX); - } - } - } - - return true; - } - private: TaskScheduler _scheduler; }; diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp index c45fe391f..5999aaa8a 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp @@ -51,24 +51,6 @@ struct boss_nethermancer_sepethrea : public BossAI { boss_nethermancer_sepethrea(Creature* creature) : BossAI(creature, DATA_NETHERMANCER_SEPRETHREA) { } - bool CanAIAttack(Unit const* target) const override - { - if (me->GetThreatMgr().GetThreatListSize() > 1) - { - ThreatContainer::StorageType::const_iterator lastRef = me->GetThreatMgr().GetOnlineContainer().GetThreatList().end(); - --lastRef; - if (Unit* lastTarget = (*lastRef)->getTarget()) - { - if (lastTarget != target) - { - return !target->HasAura(SPELL_DRAGONS_BREATH); - } - } - } - - return true; - } - void JustEngagedWith(Unit* /*who*/) override { _JustEngagedWith();