Wall Run Fling Glitch [HELP]

I have Wall running script however if you wall run into another wall and don’t stop holding the button it flings the character. Any idea on how to fix this? Thanks!

Both scripts are in StarterCharacterScripts as well.

Wall Run Script:

-- Settings --
local Speed = 4000
local Gravity = 0
local MaxWallrunRadius = 4
local CameraTiltAmount = 15
local Cooldown = 0.75
local RightAnimId = "rbxassetid://83121519454876"
local LeftAnimId = "rbxassetid://124890838985456"

-- References --
local char = script.Parent
local plr = game.Players:GetPlayerFromCharacter(char)
local HRP: Part = char:WaitForChild("HumanoidRootPart")
local hum = char:WaitForChild("Humanoid")

-- Raycast Parameters --
local params = RaycastParams.new()
params.FilterType = Enum.RaycastFilterType.Exclude
params.FilterDescendantsInstances = {char}

-- Attachments and Physics --
local Attach = Instance.new("Attachment")
Attach.Parent = HRP

local Velocity = Instance.new("LinearVelocity")
Velocity.MaxForce = math.huge
Velocity.Enabled = false
Velocity.Attachment0 = Attach
Velocity.Parent = HRP

-- Signal and RunService --
local Signal = script.Parent:WaitForChild("WallrunSignal")
local RS = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")

-- State Variables --
local Wallrunning = false
local WallrunningNormal = Vector3.new(0, 0, 0)
local lastWallrun = 0

-- Wallrun Animations --
local rightWallrunAnim = Instance.new("Animation")
rightWallrunAnim.AnimationId = RightAnimId
local rightAnimTrack = hum:WaitForChild("Animator"):LoadAnimation(rightWallrunAnim)

local leftWallrunAnim = Instance.new("Animation")
leftWallrunAnim.AnimationId = LeftAnimId
local leftAnimTrack = hum:WaitForChild("Animator"):LoadAnimation(leftWallrunAnim)

-- Wallrun Request Handling --
Signal.OnServerEvent:Connect(function(plr, val)
	if hum:GetState() ~= Enum.HumanoidStateType.Freefall then return end
	if val then
		if tick() - lastWallrun < Cooldown then return end
		lastWallrun = tick()

		local right = workspace:Raycast(HRP.Position, HRP.CFrame.RightVector * MaxWallrunRadius, params)
		if right then
			Wallrunning = 1
			WallrunningNormal = Vector3.new(right.Normal.Z, 0, -right.Normal.X)
			Signal:FireClient(plr, CameraTiltAmount)
			rightAnimTrack:Play()
		else
			local left = workspace:Raycast(HRP.Position, -HRP.CFrame.RightVector * MaxWallrunRadius, params)
			if left then
				Wallrunning = -1
				WallrunningNormal = Vector3.new(left.Normal.Z, 0, -left.Normal.X)
				Signal:FireClient(plr, -CameraTiltAmount)
				leftAnimTrack:Play()
			end
		end
	elseif Wallrunning then
		Wallrunning = false
		Velocity.Enabled = false
		Signal:FireClient(plr, 0)
		Velocity.VectorVelocity = Vector3.new(0, 0, 0)
		rightAnimTrack:Stop()
		leftAnimTrack:Stop()
	end
end)

-- Frame Updates --
RS.Heartbeat:Connect(function(dt)
	if hum:GetState() ~= Enum.HumanoidStateType.Freefall and hum:GetState() ~= Enum.HumanoidStateType.FallingDown then
		Wallrunning = false
	end

	if Wallrunning then
		Velocity.Enabled = true
		local result = workspace:Raycast(HRP.Position, HRP.CFrame.RightVector * MaxWallrunRadius * Wallrunning, params)
		if result then
			local v = WallrunningNormal * Speed * -Wallrunning * dt
			Velocity.VectorVelocity = Vector3.new(v.X, -Gravity, v.Z)
		else
			Wallrunning = false
		end
	elseif Velocity.Enabled then
		Velocity.Enabled = false
		Signal:FireClient(plr, 0)
		Velocity.VectorVelocity = Vector3.new(0, 0, 0)
		rightAnimTrack:Stop()
		leftAnimTrack:Stop()
	end
end)

Wall Run Local Script:

-- Settings --
local TiltSpeed = 1
local JumpPower = 500

-- References --
local Signal = script.Parent:WaitForChild("WallrunSignal")
local UIS = game:GetService("UserInputService")
local RS = game:GetService("RunService")
local Goal = 0
local CurrentAngle = 0
local cam = workspace.CurrentCamera

local HRP: Part = script.Parent:WaitForChild("HumanoidRootPart")

-- Input Handling -- 
UIS.InputBegan:Connect(function(key, p)
	if not p then
		if key.KeyCode == Enum.KeyCode.T then
			Signal:FireServer(true) -- Start wallrunning
		elseif key.KeyCode == Enum.KeyCode.R then
			Signal:FireServer(false) -- Stop wallrunning
		end
	end
end)

UIS.InputEnded:Connect(function(key, p)
	if not p and key.KeyCode == Enum.KeyCode.T then
		Signal:FireServer(false) -- Stop wallrunning when T is released
	end
end)

-- Wallrun Signal --
Signal.OnClientEvent:Connect(function(angle)
	Goal = angle
	if angle == 0 then
		HRP:ApplyImpulse(Vector3.new(0, JumpPower, 0)) -- Jump off the wall when wallrunning ends
	end
end)

-- Camera Tilt Update --
RS.RenderStepped:Connect(function()
	local sign = Goal / math.abs(Goal) -- Determine direction of tilt
	if CurrentAngle * sign < Goal * sign then
		CurrentAngle += sign * TiltSpeed
	elseif CurrentAngle ~= 0 then
		sign = CurrentAngle / math.abs(CurrentAngle)
		CurrentAngle -= sign * TiltSpeed
	end
	if math.abs(CurrentAngle - Goal) <= TiltSpeed then 
		CurrentAngle = Goal 
	end
	cam.CFrame *= CFrame.Angles(0, 0, math.rad(CurrentAngle))
end)

Thanks again!