diff options
author | Shauren <shauren.trinity@gmail.com> | 2025-01-13 15:02:07 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2025-01-13 15:46:25 +0100 |
commit | 497cb7df49550c2420ce8729254cc120d3290d2e (patch) | |
tree | cd3b5d681b2a435b88e8001baadb565d7b52fb97 | |
parent | d8636d4cc603262da8454231d64bd09b604b25f7 (diff) |
Core/Spells: DynamicObject auras will now use the largest radius found in SPELL_EFFECT_PERSISTENT_AREA_AURA effects of the spell creating them
(cherry picked from commit 4bec94451fb239a4e2007413b5691ed19fea6981)
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 276c78a21f3..2f3609ddb19 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -1494,6 +1494,10 @@ void Spell::EffectPersistentAA() if (!unitCaster) return; + // Caster not in world, might be spell triggered from aura removal + if (!unitCaster->IsInWorld()) + return; + // only handle at last effect for (size_t i = effectInfo->EffectIndex + 1; i < m_spellInfo->GetEffects().size(); ++i) if (m_spellInfo->GetEffect(SpellEffIndex(i)).IsEffect(SPELL_EFFECT_PERSISTENT_AREA_AURA)) @@ -1501,11 +1505,13 @@ void Spell::EffectPersistentAA() ASSERT(!_dynObjAura); - float radius = effectInfo->CalcRadius(unitCaster); - - // Caster not in world, might be spell triggered from aura removal - if (!unitCaster->IsInWorld()) - return; + float radius = 0.0f; + for (size_t i = 0; i <= effectInfo->EffectIndex; ++i) + { + SpellEffectInfo const& spellEffectInfo = m_spellInfo->GetEffect(SpellEffIndex(i)); + if (spellEffectInfo.IsEffect(SPELL_EFFECT_PERSISTENT_AREA_AURA)) + radius = std::max(radius, spellEffectInfo.CalcRadius(unitCaster)); + } DynamicObject* dynObj = new DynamicObject(false); if (!dynObj->CreateDynamicObject(unitCaster->GetMap()->GenerateLowGuid<HighGuid::DynamicObject>(), unitCaster, m_spellInfo, *destTarget, radius, DYNAMIC_OBJECT_AREA_SPELL, m_SpellVisual)) |