Checking for humanoid for 3 seconds then stop checking

Creating gogeta’s soul punisher from DBZ

I’m using magnitude to check for a player that i hit while i’m rushing forward. I have no idea how to do this.

local ReplicatedStorage = game:GetService("ReplicatedStorage")



local tool = script.Parent
local player = tool.Parent.Parent
local remote = tool.MouseLocation
local event = ReplicatedStorage.RemoteEvent
local head = player.Character.Head
local larm = player.Character:WaitForChild("Left Arm")
local human = player.Character.Humanoid
local rot = player.Character.HumanoidRootPart
local anim = tool.Throw
local TweenService = game:GetService("TweenService")

local function a(part,val)
	local tween5 = TweenService:Create(part, TweenInfo.new(.6), {Width1 = val})
	tween5:Play()
end

tool.Activated:Connect(function()
	
	
	human.WalkSpeed = 0
	human.JumpPower = 0
	human.PlatformStand = false
	local bdvelocity = Instance.new("BodyVelocity", rot)
	bdvelocity.MaxForce = Vector3.new(100000, 100000, 100000)
	bdvelocity.P = math.huge
	bdvelocity.Velocity = rot.CFrame.lookVector * 30
	game.Debris:AddItem(bdvelocity,2.1)
	for _,v in pairs(game.Workspace:GetChildren()) do
		if v:FindFirstChild("Humanoid") and v:FindFirstChild("HumanoidRootPart") then
			if (v.HumanoidRootPart.Position - rot.Position).Magnitude <=23 then	
			end
		else
			wait(2.95)
			human.WalkSpeed = 16
			human.JumpPower = 50
		end
	end
end)

When i hit them it will play an animation. I added a print but it does not print when magnitude finds them

Rush animation got screwed no idea why