diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 0164103c18..b3647e049a 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -5768,13 +5768,25 @@ SpellCastResult Spell::CheckCast(bool strict) // no target provided or it was not valid, so use closest in range if (!targetExplicit) { - WorldObject* objectForSearch = (worldObject && (worldObject->GetTypeId() == TYPEID_GAMEOBJECT || worldObject->GetTypeId() == TYPEID_DYNAMICOBJECT)) ? worldObject : m_caster; + WorldObject* objectForSearch = m_caster; + uint32 savePhaseMask = 0; + + if (worldObject && (worldObject->GetTypeId() == TYPEID_GAMEOBJECT || worldObject->GetTypeId() == TYPEID_DYNAMICOBJECT)) + { + objectForSearch = worldObject; + savePhaseMask = worldObject->GetPhaseMask(); + objectForSearch->SetPhaseMask(m_caster->GetPhaseMask(), false); + } + MaNGOS::NearestCreatureEntryWithLiveStateInObjectRangeCheck u_check(*objectForSearch, i_spellST->targetEntry, i_spellST->type != SPELL_TARGET_TYPE_DEAD, i_spellST->type == SPELL_TARGET_TYPE_DEAD, range); MaNGOS::CreatureLastSearcher searcher(p_Creature, u_check); // Visit all, need to find also Pet* objects Cell::VisitAllObjects(objectForSearch, searcher, range); + if (savePhaseMask) + objectForSearch->SetPhaseMask(savePhaseMask, false); + range = u_check.GetLastRange(); }