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)