aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2022-05-07 20:09:25 +0200
committerShauren <shauren.trinity@gmail.com>2022-05-07 20:09:25 +0200
commit0620b829b2597777f2b5d931dfb0336f79dfd0df (patch)
treec42c3887c7acf19d6749487dd7f1cd50a6228ed8 /src/server/game/Entities
parent50eff8c23828e4aa8dcce6c5f3ffdfa4e0cf7baa (diff)
Core/Spells: Implemented SPELL_ATTR6_DELAY_COMBAT_TIMER_DURING_CAST
Diffstat (limited to 'src/server/game/Entities')
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 5fc65281c6e..5ae10b11ca9 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -470,13 +470,20 @@ void Unit::Update(uint32 p_time)
_lastExtraAttackSpell = 0;
}
- // not implemented before 3.0.2
- if (uint32 base_att = getAttackTimer(BASE_ATTACK))
- setAttackTimer(BASE_ATTACK, (p_time >= base_att ? 0 : base_att - p_time));
- if (uint32 ranged_att = getAttackTimer(RANGED_ATTACK))
- setAttackTimer(RANGED_ATTACK, (p_time >= ranged_att ? 0 : ranged_att - p_time));
- if (uint32 off_att = getAttackTimer(OFF_ATTACK))
- setAttackTimer(OFF_ATTACK, (p_time >= off_att ? 0 : off_att - p_time));
+ auto spellPausesCombatTimer = [&](CurrentSpellTypes type)
+ {
+ return GetCurrentSpell(type) && GetCurrentSpell(type)->GetSpellInfo()->HasAttribute(SPELL_ATTR6_DELAY_COMBAT_TIMER_DURING_CAST);
+ };
+
+ if (!spellPausesCombatTimer(CURRENT_GENERIC_SPELL) && !spellPausesCombatTimer(CURRENT_CHANNELED_SPELL))
+ {
+ if (uint32 base_att = getAttackTimer(BASE_ATTACK))
+ setAttackTimer(BASE_ATTACK, (p_time >= base_att ? 0 : base_att - p_time));
+ if (uint32 ranged_att = getAttackTimer(RANGED_ATTACK))
+ setAttackTimer(RANGED_ATTACK, (p_time >= ranged_att ? 0 : ranged_att - p_time));
+ if (uint32 off_att = getAttackTimer(OFF_ATTACK))
+ setAttackTimer(OFF_ATTACK, (p_time >= off_att ? 0 : off_att - p_time));
+ }
// update abilities available only for fraction of time
UpdateReactives(p_time);