local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local Camera = workspace.CurrentCamera
local Player = game.Players.LocalPlayer
local Character = Player.Character or Player.CharacterAdded:Wait()
local Humanoid = Character:WaitForChild("Humanoid")
local OriginalSpeed = 16
local SprintingSpeed = 26
local OriginalFieldOfView = 90
local SprintingFieldOfView = 100
local Sprinting = script:WaitForChild("Sprinting")
local Animation = script:WaitForChild("SprintingAnimation")
local SprintingTrack = Humanoid:LoadAnimation(Animation)
local TweenFieldOfView = function(Duration, Value)
local FieldOfViewTween = TweenService:Create(Camera, TweenInfo.new(Duration, Enum.EasingStyle.Quad, Enum.EasingDirection.InOut), {FieldOfView = Value})
FieldOfViewTween:Play()
return FieldOfViewTween
end
UserInputService.InputBegan:Connect(function(Input, Processed)
if Input.KeyCode == Enum.KeyCode.LeftControl and not Processed then
if Humanoid.MoveDirection.Magnitude <= 0 then
Sprinting.Value = true
Humanoid.WalkSpeed = SprintingSpeed
else
Sprinting.Value = true
Humanoid.WalkSpeed = SprintingSpeed
SprintingTrack:Play(0.25)
end
end
end)
UserInputService.InputEnded:Connect(function(Input, Processed)
if Input.KeyCode == Enum.KeyCode.LeftControl and not Processed then
Sprinting.Value = false
Humanoid.WalkSpeed = OriginalSpeed
SprintingTrack:Stop(0.25)
end
end)
Sprinting:GetPropertyChangedSignal("Value"):Connect(function()
if Sprinting.Value then
TweenFieldOfView(0.5, SprintingFieldOfView)
elseif not Sprinting.Value then
TweenFieldOfView(0.5, OriginalFieldOfView)
end
end)
RunService.RenderStepped:Connect(function()
if Sprinting.Value then
if Humanoid.MoveDirection.Magnitude <= 0 then
if SprintingTrack.IsPlaying then
SprintingTrack:Stop(0.25)
end
elseif Humanoid.MoveDirection.Magnitude > 0 then
if not SprintingTrack.IsPlaying then
SprintingTrack:Play(0.25)
end
end
if Humanoid.FloorMaterial == Enum.Material.Air then
if SprintingTrack.IsPlaying then
SprintingTrack:Stop(0.1)
end
elseif Humanoid.FloorMaterial ~= Enum.Material.Air and Humanoid.MoveDirection.Magnitude > 0 then
if not SprintingTrack.IsPlaying then
SprintingTrack:Play(0.25)
end
end
end
end)
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local RunService = game:GetService("RunService")
local Players = game:GetService("Players")
local Camera = workspace.CurrentCamera
local Player = game.Players.LocalPlayer
local Character = Player.Character or Player.CharacterAdded:Wait()
local Humanoid = Character:WaitForChild("Humanoid")
local OriginalSpeed = 16
local SprintingSpeed = 26
local OriginalFieldOfView = 90
local SprintingFieldOfView = 100
local Sprinting = script:WaitForChild("Sprinting")
local Animation = script:WaitForChild("SprintingAnimation")
local SprintingTrack = Humanoid:LoadAnimation(Animation)
local TweenFieldOfView = function(Duration, Value)
local FieldOfViewTween = TweenService:Create(Camera, TweenInfo.new(Duration, Enum.EasingStyle.Quad, Enum.EasingDirection.InOut), {FieldOfView = Value})
FieldOfViewTween:Play()
return FieldOfViewTween
end
UserInputService.InputBegan:Connect(function(Input, Processed)
if Input.KeyCode == Enum.KeyCode.LeftControl and not Processed then
if Humanoid.MoveDirection.Magnitude <= 0 then
Sprinting.Value = true
TweenFieldOfView(0.5, SprintingFieldOfView)
Humanoid.WalkSpeed = SprintingSpeed
else
Sprinting.Value = true
TweenFieldOfView(0.5, SprintingFieldOfView)
Humanoid.WalkSpeed = SprintingSpeed
SprintingTrack:Play(0.25)
end
end
end)
UserInputService.InputEnded:Connect(function(Input, Processed)
if Input.KeyCode == Enum.KeyCode.LeftControl and not Processed then
Sprinting.Value = false
Humanoid.WalkSpeed = OriginalSpeed
TweenFieldOfView(0.5, OriginalFieldOfView)
SprintingTrack:Stop(0.25)
end
end)
RunService.RenderStepped:Connect(function()
if Sprinting.Value then
if Humanoid.MoveDirection.Magnitude <= 0 then
if SprintingTrack.IsPlaying then
SprintingTrack:Stop(0.25)
end
elseif Humanoid.MoveDirection.Magnitude > 0 then
if not SprintingTrack.IsPlaying then
SprintingTrack:Play(0.25)
end
end
if Humanoid.FloorMaterial == Enum.Material.Air then
if SprintingTrack.IsPlaying then
SprintingTrack:Stop(0.1)
end
elseif Humanoid.FloorMaterial ~= Enum.Material.Air and Humanoid.MoveDirection.Magnitude > 0 then
if not SprintingTrack.IsPlaying then
SprintingTrack:Play(0.25)
end
end
end
end)
Sprinting.Value = true
Humanoid.WalkSpeed = SprintingSpeed
if Humanoid.MoveDirection.Magnitude > 0 then
SprintingTrack:Play(0.25)
end
Can be reduced to by using the ternary operator:
Sprinting:GetPropertyChangedSignal("Value"):Connect(function()
TweenFieldOfView(0.5, Sprinting.Value and SprintingFieldOfView or OriginalFieldOfView)
end)
Also I noticed a couple of cases where you used elseif while using only else would be equivalent.
I have not covered the entire script, but you can probably shorten more code.