diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp index 50a7f8a8b..64678db31 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp @@ -195,6 +195,7 @@ ScriptedAI::ScriptedAI(Creature* creature) : CreatureAI(creature), _isHeroic = me->GetMap()->IsHeroic(); _difficulty = Difficulty(me->GetMap()->GetSpawnMode()); _invincible = false; + _canAutoAttack = true; } void ScriptedAI::AttackStartNoMove(Unit* who) @@ -220,7 +221,8 @@ void ScriptedAI::UpdateAI(uint32 /*diff*/) if (!UpdateVictim()) return; - DoMeleeAttackIfReady(); + if (IsAutoAttackAllowed()) + DoMeleeAttackIfReady(); } void ScriptedAI::DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damagetype*/, SpellSchoolMask /*damageSchoolMask*/) @@ -739,7 +741,8 @@ void BossAI::UpdateAI(uint32 diff) } } - DoMeleeAttackIfReady(); + if (IsAutoAttackAllowed()) + DoMeleeAttackIfReady(); } void BossAI::DamageTaken(Unit* attacker, uint32& damage, DamageEffectType damagetype, SpellSchoolMask damageSchoolMask) diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.h b/src/server/game/AI/ScriptedAI/ScriptedCreature.h index 0fd1c861b..d5f7f729f 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.h +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.h @@ -442,10 +442,15 @@ struct ScriptedAI : public CreatureAI void SetInvincibility(bool apply) { _invincible = apply; }; [[nodiscard]] bool IsInvincible() const { return _invincible; }; + // Disables creature auto attacks. + void SetAutoAttackAllowed(bool allow) { _canAutoAttack = allow; }; + [[nodiscard]] bool IsAutoAttackAllowed() const { return _canAutoAttack; }; + private: Difficulty _difficulty; bool _isHeroic; bool _invincible; + bool _canAutoAttack; std::unordered_set _uniqueTimedEvents; };