diff options
author | Shauren <shauren.trinity@gmail.com> | 2025-04-11 11:26:32 +0200 |
---|---|---|
committer | Ovahlord <dreadkiller@gmx.de> | 2025-04-12 14:04:47 +0200 |
commit | a08088b1c52abf468644e6ec148b889738fa3c58 (patch) | |
tree | 37961cdcd1d1bd458dff1b75906c42d83f4ed787 /src | |
parent | 160ed4abe34702f3933863cb7b7916149af780b2 (diff) |
Core/Spells: Fixed SPELL_EFFECT_CHARGE trigggering arrival effects too early
(cherry picked from commit a97775ba26bdce1dc6ae57a2c588dab53bade016)
# Conflicts:
# src/server/game/Spells/Spell.cpp
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index a41f2a7a268..8e7f2e6d6cf 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -3108,7 +3108,7 @@ SpellMissInfo Spell::PreprocessSpellHit(Unit* unit, TargetInfo& hitInfo) return SPELL_MISS_EVADE; // For delayed spells immunity may be applied between missile launch and hit - check immunity for that case - if (m_spellInfo->HasHitDelay() && unit->IsImmunedToSpell(m_spellInfo, m_caster)) + if (hitInfo.TimeDelay && unit->IsImmunedToSpell(m_spellInfo, m_caster)) return SPELL_MISS_IMMUNE; CallScriptBeforeHitHandlers(hitInfo.MissCondition); @@ -3126,7 +3126,7 @@ SpellMissInfo Spell::PreprocessSpellHit(Unit* unit, TargetInfo& hitInfo) if (m_caster != unit) { // Recheck UNIT_FLAG_NON_ATTACKABLE for delayed spells - if (m_spellInfo->HasHitDelay() && unit->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE) && unit->GetCharmerOrOwnerGUID() != m_caster->GetGUID()) + if (hitInfo.TimeDelay && unit->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE) && unit->GetCharmerOrOwnerGUID() != m_caster->GetGUID()) return SPELL_MISS_EVADE; if (m_caster->IsValidAttackTarget(unit, m_spellInfo)) @@ -3134,7 +3134,7 @@ SpellMissInfo Spell::PreprocessSpellHit(Unit* unit, TargetInfo& hitInfo) else if (m_caster->IsFriendlyTo(unit)) { // for delayed spells ignore negative spells (after duel end) for friendly targets - if (m_spellInfo->HasHitDelay() && unit->GetTypeId() == TYPEID_PLAYER && !IsPositive() && !m_caster->IsValidAssistTarget(unit, m_spellInfo)) + if (hitInfo.TimeDelay && unit->GetTypeId() == TYPEID_PLAYER && !IsPositive() && !m_caster->IsValidAssistTarget(unit, m_spellInfo)) return SPELL_MISS_EVADE; // assisting case, healing and resurrection @@ -3880,7 +3880,7 @@ void Spell::_cast(bool skipCheck) creatureCaster->ReleaseSpellFocus(this); // Okay, everything is prepared. Now we need to distinguish between immediate and evented delayed spells - if (m_spellInfo->HasHitDelay() && !m_spellInfo->IsChanneled()) + if (m_delayMoment && !m_spellInfo->IsChanneled()) { // Remove used for cast item if need (it can be already NULL after TakeReagents call // in case delayed spell remove item at cast delay start @@ -8123,9 +8123,12 @@ bool Spell::IsPositive() const bool Spell::IsNeedSendToClient() const { - return m_SpellVisual.SpellXSpellVisualID || m_spellInfo->IsChanneled() || - (m_spellInfo->HasAttribute(SPELL_ATTR8_AURA_POINTS_ON_CLIENT)) || m_spellInfo->HasHitDelay() || (!m_triggeredByAuraSpell && !IsTriggered()) || - m_spellInfo->HasAttribute(SPELL_ATTR7_ALWAYS_CAST_LOG); + return m_SpellVisual.SpellXSpellVisualID + || m_spellInfo->IsChanneled() + || m_spellInfo->HasAttribute(SPELL_ATTR8_AURA_POINTS_ON_CLIENT) + || m_spellInfo->HasHitDelay() || m_delayMoment + || (!m_triggeredByAuraSpell && !IsTriggered()) + || m_spellInfo->HasAttribute(SPELL_ATTR7_ALWAYS_CAST_LOG); } Unit* Spell::GetUnitCasterForEffectHandlers() const |