I'm making a script that pulls the nearest player. It runs properly, but the character moves over incredibly slowly unless they are in the air, which I have tried fixing by forcing them up with Velocity and by making them not collide, but the collision isn't working and the up velocity isn't something I liked. Could someone look my code over and give me some tips to make it work better?

RS.UtilEvents.PullRope.OnServerEvent:Connect(function(player, Password, Target)
	Target.Backpack.Stand.Value = 0
	local pos = player.Character.LowerTorso
	local bp = Instance.new("BodyPosition", Target.Character.HumanoidRootPart)
	local stringie = Instance.new("Part", player.Character.HumanoidRootPart)
	stringie.Shape = Enum.PartType.Block
	local Distance = (Target.Character.HumanoidRootPart.Position-player.Character.HumanoidRootPart.Position).Magnitude
	stringie.CFrame = CFrame.new(Target.Character.HumanoidRootPart.Position,player.Character.HumanoidRootPart.Position) * CFrame.new(0,0,-Distance/2)
	stringie.Size = Vector3.new(.3,.3,Distance)
	bp.Position = pos.Position
	stringie.Anchored = true
	stringie.CanCollide = false
	stringie.Material = Enum.Material.SmoothPlastic
	bp.D = 1000
	bp.MaxForce = Vector3.new(10000, 10000, 10000)
	bp.P = 10000 
	for i = 1,50 do
		wait(.1)
		bp.Position = pos.Position
		Distance = (Target.Character.HumanoidRootPart.Position-player.Character.HumanoidRootPart.Position).Magnitude
		stringie.CFrame = CFrame.new(Target.Character.HumanoidRootPart.Position,player.Character.HumanoidRootPart.Position) * CFrame.new(0,0,-Distance/2)
		stringie.Size = Vector3.new(.3,.3,Distance)
		if Distance < 3 then
			for _,v in pairs(Target.Character:GetChildren()) do
				if v:IsA("BasePart") then
					v.CanCollide = true
				end
			end
		else
			for _,v in pairs(Target.Character:GetChildren()) do
				if v:IsA("BasePart") then
					v.CanCollide = false
				end
			end
		end
		if i == 50 then
			for _,v in pairs(Target.Character:GetChildren()) do
				if v:IsA("BasePart") then
					v.CanCollide = true
				end
			end
			Target.Backpack.Stand.Value = 1
			bp:Destroy()
			stringie:Destroy()
		end
	end
end)