From 3169695247f723a4202373e9aba963fe2fe97024 Mon Sep 17 00:00:00 2001 From: Shauren Date: Wed, 5 May 2021 21:32:15 +0200 Subject: Core/Auras: Fixed possible crash on login with SPELL_EFFECT_APPLY_AREA_AURA_SUMMONS --- src/server/game/Spells/Auras/SpellAuras.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/server') diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index 8f9d716a304..e6c2dc87284 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -2382,9 +2382,11 @@ void UnitAura::FillTargetMap(std::unordered_map& targets, Unit* c case SPELL_EFFECT_APPLY_AREA_AURA_SUMMONS: { units.push_back(GetUnitOwner()); - Trinity::WorldObjectSpellAreaTargetCheck check(radius, GetUnitOwner(), caster, GetUnitOwner(), m_spellInfo, TARGET_CHECK_SUMMONED, nullptr, TARGET_OBJECT_TYPE_UNIT); + Trinity::WorldObjectSpellAreaTargetCheck check(radius, GetUnitOwner(), caster, GetUnitOwner(), m_spellInfo, TARGET_CHECK_SUMMONED, effect->ImplicitTargetConditions, TARGET_OBJECT_TYPE_UNIT); Trinity::UnitListSearcher searcher(GetUnitOwner(), units, check); Cell::VisitAllObjects(GetUnitOwner(), searcher, radius); + // by design WorldObjectSpellAreaTargetCheck allows not-in-world units (for spells) but for auras it is not acceptable + units.erase(std::remove_if(units.begin(), units.end(), [caster](Unit* unit) { return !unit->IsSelfOrInSameMap(caster); }), units.end()); break; } } -- cgit v1.2.3