diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 68b4776cdfd..e483baceae3 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -5464,13 +5464,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(); }