function setPosition(mousePos,part,target,surface) --Snapping the parts if(target == nil) then return mousePos + Vector3.new(0,part.Size.Y/2,0) elseif(target.Parent.Name == "BuildPartModel") then return mousePos + Vector3.new(0,part.Size.Y/2,0) elseif(surface == "Right" or surface == "Left") then local targetPosX = target.Position.X local targetSize = target.Size local targetEdgePos if(mousePos.X >= targetPosX) then targetEdgePos = targetPosX + targetSize.X/2 + part.Size.X/2 return Vector3.new(targetEdgePos,target.Position.Y,target.Position.Z) else targetEdgePos = targetPosX - targetSize.X/2 - part.Size.X/2 return Vector3.new(targetEdgePos,target.Position.Y,target.Position.Z) end elseif(surface == "Back" or surface == "Front") then local targetPosZ = target.Position.Z local targetSize = target.Size local targetEdgePos if(mousePos.Z >= targetPosZ) then targetEdgePos = targetPosZ + targetSize.Z/2 + part.Size.Z/2 return Vector3.new(target.position.X,target.Position.Y,targetEdgePos) else targetEdgePos = targetPosZ - targetSize.Z/2 - part.Size.Z/2 return Vector3.new(target.position.X,target.Position.Y,targetEdgePos) end elseif(surface == "Top" or surface == "Bottom") then return Vector3.new(target.Position.X,target.Position.Y + target.Size.Y/2 + part.Size.Y/2,target.Position.Z) end end