So for some reason, this crouch script does not work, My script dev says its buggy for some reason and makes you go free falling state when you try to come out of crouch. How could this be fixed?

wait(0.5) --Wait time

on = 0

Tool = game.Players.LocalPlayer.Character

welds = {}

sh = {}

arms = nil

torso = nil

local mouse

f = nil

function Crouch(ison)
if arms == nil and torso == nil then
	arms = {Tool:FindFirstChild("Left Leg"), Tool:FindFirstChild("Right Leg")}
	torso = Tool:FindFirstChild("Torso")
end
if arms ~= nil and torso ~= nil then
	sh = {torso:FindFirstChild("Left Hip"), torso:FindFirstChild("Right Hip")}
		if sh ~= nil then
		local yes = true
			if yes then
			yes = false
				if ison == 1 then--if on
				sh[1].Part1 = nil
				sh[2].Part1 = nil
				
				local weld1 = Instance.new("Weld")--weld1
				weld1.Part0 = torso
				weld1.Parent = torso
				weld1.Part1 = arms[1]
				weld1.C1 = CFrame.new(-0.5, 0.75, 1)
				arms[1].Name = "LDave"
				arms[1].CanCollide = true
				
				welds[1] = weld1
				
				local weld2 = Instance.new("Weld")--weld2
				weld2.Part0 = torso
				weld2.Parent = torso
				weld2.Part1 = arms[2]
				weld2.C1 = CFrame.new(0.5,0.495,1.25) * CFrame.fromEulerAnglesXYZ(math.rad(90),0,0)
				
				arms[2].Name = "RDave"
				arms[2].CanCollide = true
				
				welds[2] = weld2
				
				local force = Instance.new("BodyForce")
				force.Parent = torso
				f = force
				
				wait(0.01)
			elseif ison == 0 then
				if arms then
					
				sh[1].Part1 = arms[1]
				sh[2].Part1 = arms[2]
				
				f.Parent = nil
				
				arms[2].Name = "Right Leg"
				arms[1].Name = "Left Leg"
				
				welds[1].Parent = nil
				welds[2].Parent = nil
			end
		end

	end
	else
	print("sh")
	end
else
	print("leg") --if leg missing
end
end
function Key(key)
	if key then
	key = string.lower(key)
		if (key=="c") then
			if on == 1 then
			on = 0
		elseif on == 0 then
			on = 1
		end
	Crouch(on)
	end
	end
end

mouse = game.Players.LocalPlayer:GetMouse()
mouse.KeyDown:connect(Key)