local userInput = game:GetService("UserInputService")

local players = game:GetService("Players")

local sprintSpeed = 25

local walkSpeed = 16

local maxSprint = 10 local staminaCount = maxSprint

local player = players.LocalPlayer

local function beginSprint(input, gameProcessed)

if not gameProcessed then        

	if input.UserInputType == Enum.UserInputType.Keyboard then

		local keycode = input.KeyCode

		if keycode == Enum.KeyCode.LeftShift then 

			player.Character.Humanoid.WalkSpeed = sprintSpeed
			if staminaCount > 0 then
				repeat
					wait(.5)
					staminaCount -= .5
					script.Parent.Size = UDim2.new(staminaCount/maxSprint,0,.16,1)
				until
				staminaCount <= 0
				if staminaCount <= 0 then
					player.Character.Humanoid.WalkSpeed = walkSpeed
					repeat
						wait(.5)
						staminaCount += .5
						script.Parent.Size = UDim2.new(staminaCount/maxSprint,0,.16,0)
					until
					staminaCount == 10
				end
				
			end
			
		end

	end

end

end

local function endSprint(input, gameProcessed)

if not gameProcessed then

	if input.UserInputType == Enum.UserInputType.Keyboard then

		local keycode = input.KeyCode

		if keycode == Enum.KeyCode.LeftShift then

			player.Character.Humanoid.WalkSpeed = walkSpeed
			repeat
				wait(.5)
				staminaCount += .5
			until
			staminaCount == 10
			
		end

	end

end

end

userInput.InputBegan:Connect(beginSprint)

userInput.InputEnded:Connect(endSprint)

i need help fixing things like the choppyness of it, when it fills up you cant start using the sprint again to make it go back down and when it fills up all the way it doesnt stop when the bar is full. any help?