diff options
author | Traesh <Traesh@users.noreply.github.com> | 2023-07-16 14:08:48 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-16 14:08:48 +0200 |
commit | bbe7cba7f411977d756f6f697056aafb920a5b0a (patch) | |
tree | 9ffd0accc4d4f5540c529138aa8d3b5cdec201c4 | |
parent | 17252534a1886d91e8669237344af47ce8c9f9b9 (diff) |
Core/Units: Allow autoattack if channelling with SPELL_ATTR5_ALLOW_ACTIONS_DURING_CHANNEL (#29133)
-rw-r--r-- | src/server/game/AI/CoreAI/UnitAI.cpp | 9 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 7 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 2 |
3 files changed, 16 insertions, 2 deletions
diff --git a/src/server/game/AI/CoreAI/UnitAI.cpp b/src/server/game/AI/CoreAI/UnitAI.cpp index bf7fe72bd5a..c8d2f61e77b 100644 --- a/src/server/game/AI/CoreAI/UnitAI.cpp +++ b/src/server/game/AI/CoreAI/UnitAI.cpp @@ -60,9 +60,16 @@ void UnitAI::AttackStartCaster(Unit* victim, float dist) void UnitAI::DoMeleeAttackIfReady() { - if (me->HasUnitState(UNIT_STATE_CASTING) || (me->IsCreature() && !me->ToCreature()->CanMelee())) + if (me->IsCreature() && !me->ToCreature()->CanMelee()) return; + if (me->HasUnitState(UNIT_STATE_CASTING)) + { + Spell* channeledSpell = me->GetCurrentSpell(CURRENT_CHANNELED_SPELL); + if (!channeledSpell || !channeledSpell->GetSpellInfo()->HasAttribute(SPELL_ATTR5_ALLOW_ACTIONS_DURING_CHANNEL)) + return; + } + Unit* victim = me->GetVictim(); if (!me->IsWithinMeleeRange(victim)) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 38206f51f17..b2a2eed635b 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -2067,6 +2067,13 @@ void Unit::AttackerStateUpdate(Unit* victim, WeaponAttackType attType, bool extr if (HasUnitState(UNIT_STATE_CANNOT_AUTOATTACK) && !extra) return; + if (HasUnitState(UNIT_STATE_CASTING)) + { + Spell* channeledSpell = GetCurrentSpell(CURRENT_CHANNELED_SPELL); + if (!channeledSpell || !channeledSpell->GetSpellInfo()->HasAttribute(SPELL_ATTR5_ALLOW_ACTIONS_DURING_CHANNEL)) + return; + } + if (HasAuraType(SPELL_AURA_DISABLE_ATTACKING_EXCEPT_ABILITIES)) return; diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index dc71330822e..e69d01795dd 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -289,7 +289,7 @@ enum UnitState : uint32 UNIT_STATE_MOVING = UNIT_STATE_ROAMING_MOVE | UNIT_STATE_CONFUSED_MOVE | UNIT_STATE_FLEEING_MOVE | UNIT_STATE_CHASE_MOVE | UNIT_STATE_FOLLOW_MOVE | UNIT_STATE_FOLLOW_FORMATION_MOVE, UNIT_STATE_CONTROLLED = UNIT_STATE_CONFUSED | UNIT_STATE_STUNNED | UNIT_STATE_FLEEING, UNIT_STATE_LOST_CONTROL = UNIT_STATE_CONTROLLED | UNIT_STATE_POSSESSED | UNIT_STATE_JUMPING | UNIT_STATE_CHARGING, - UNIT_STATE_CANNOT_AUTOATTACK = UNIT_STATE_CONTROLLED | UNIT_STATE_CHARGING | UNIT_STATE_CASTING, + UNIT_STATE_CANNOT_AUTOATTACK = UNIT_STATE_CONTROLLED | UNIT_STATE_CHARGING, UNIT_STATE_SIGHTLESS = UNIT_STATE_LOST_CONTROL | UNIT_STATE_EVADE, UNIT_STATE_CANNOT_TURN = UNIT_STATE_LOST_CONTROL | UNIT_STATE_ROTATING | UNIT_STATE_FOCUSING, UNIT_STATE_NOT_MOVE = UNIT_STATE_ROOT | UNIT_STATE_STUNNED | UNIT_STATE_DIED | UNIT_STATE_DISTRACTED, |