Basically, I have a sprint script which works well but whenever I hold the LeftShift the animation starts playing when the player is standing still.
Things I tried: Detecting when player is holding the W key, detecting player velocity, detecting if the HumanoidStateType is idle (there's no idle state)
Code:
local UserInputService = game:GetService("UserInputService"); local player = game.Players.LocalPlayer or game.Players.PlayerAdded:Wait(); local PlayerGui = player:WaitForChild("PlayerGui"); local Stamina = script.Parent:WaitForChild("Stamina"); local camera = game.Workspace.Camera local Character = player.Character local Anim = Instance.new('Animation') local Humanoid = player.Character:WaitForChild("Humanoid") Anim.AnimationId = 'rbxassetid://myid' local PlayAnim = Character.Humanoid:LoadAnimation(Anim) local cool = false; UserInputService.InputBegan:Connect(function(sprint) if sprint.KeyCode == Enum.KeyCode.LeftShift then if not cool and (not player.Character:FindFirstChild("Stun")) then coroutine.wrap(function() cool = true; wait(0.85); cool = false; end)(); wait(0.65) player.Backpack.Running.Value = true; PlayAnim:Play() -- plays the running animation return; end; else return; end; end); UserInputService.InputEnded:Connect(function(keyPress) if keyPress.KeyCode == Enum.KeyCode.LeftShift then player.Backpack.Running.Value = false; PlayAnim:Stop() -- stops the running animation end; end); local pog = false; while wait() do if Stamina.Value > 0 and player.Backpack.Running.Value == true or player.Character:FindFirstChild("Stun") then local Humanoid = player.Character:WaitForChild("Humanoid"); if Humanoid.MoveDirection == Vector3.new(0, 0, 0) then script.Parent.regenStaminaClient.Disabled = false; else script.Parent.regenStaminaClient.Disabled = true; end; Humanoid.WalkSpeed = 22; -- sprint walkspeed local playerStats = PlayerGui:WaitForChild("playerStats"); if not pog and Humanoid.MoveDirection ~= Vector3.new(0, 0, 0) then Stamina.Value = Stamina.Value - 1.25; playerStats.Frame.Stamina.Bar:TweenSize(UDim2.new(Stamina.Value / 100, 0, 1, 0), Enum.EasingDirection.Out, Enum.EasingStyle.Linear, 0.1, true); -- tween stamina bar wait(0.1); pog = false; end; elseif Stamina.Value <= 0 or player.Backpack.Running.Value == false or player.Character:FindFirstChild("Stun") then local Humanoid = player.Character:WaitForChild("Humanoid"); player.Backpack.Running.Value = false; PlayAnim:Stop() -- stops the running anim Humanoid.WalkSpeed = 16; -- goes back to normal walkspeed script.Parent.regenStaminaClient.Disabled = false; end; end;