I made a sprint script which works completely fine in studio, even after I reset the character. Yet in a real Roblox server, the script no longer works after I reset.
This is a local script within StarterCharacterScripts
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
local Character = script.Parent
local Humanoid = Character:WaitForChild("Humanoid")
local hrp = Character:WaitForChild("HumanoidRootPart")
local Animation = Humanoid:LoadAnimation(script:WaitForChild("Animation"))
local Walk = Character:WaitForChild("HumanoidRootPart"):FindFirstChild("Running")
Walk.SoundId = "rbxassetid://174960816"
Walk.Volume = 4
Walk.PlaybackSpeed = 0.8
Animation.Priority = Enum.AnimationPriority.Movement
local running = false
local function ChangeFov(Fov, Time)
TweenService:Create(workspace.Camera, TweenInfo.new(Time), {FieldOfView = Fov}):Play()
end
UserInputService.InputBegan:Connect(function(key)
if key.KeyCode == Enum.KeyCode.LeftShift then
Humanoid.WalkSpeed = 40
running = true
end
end)
UserInputService.InputEnded:Connect(function(key)
if key.KeyCode == Enum.KeyCode.LeftShift then
Humanoid.WalkSpeed = 13
running = false
end
end)
RunService.Heartbeat:Connect(function()
if running == true and Humanoid.MoveDirection.Magnitude > 0 then
if not Animation.IsPlaying then
Animation:Play()
ChangeFov(105, 0.2)
Walk.PlaybackSpeed = 1
end
else
if Animation.IsPlaying then
Animation:Stop()
ChangeFov(100, 0.2)
Walk.PlaybackSpeed = 0.8
end
end
end)
When upon resetting the character. The game will have a few seconds or however time to load the character and so the script won’t or should get the character variable right away and will cause it to equals nil.
So instead we add a wait delay for the character to load like this example:
It is still causing a problem. I tried implementing what you said
local player = game:GetService("Players").LocalPlayer
local Character = player.Character or player.CharacterAdded:Wait()
local Humanoid = Character:FindFirstChildOfClass("Humanoid")
local hrp = Character:FindFirstChild("HumanoidRootPart")
local Animator = Humanoid:FindFirstChildOfClass("Animator")
local Animation = Animator:LoadAnimation(script:WaitForChild("Animation"))
local Walk = hrp:FindFirstChild("Running")
After a reset, the console displays “RunService:UnbindFromRenderStep removed different functions with same reference name utility-focus-state-inspect-MrHistoryMan 2 times.”
i just tested it out myself it works for me when i reset.
local player = game:GetService("Players").LocalPlayer
local Character = script.Parent
local Humanoid = Character.Humanoid
local hrp = Character:FindFirstChild("HumanoidRootPart")
local Animator = Humanoid.Animator
--local Animation = Animator:LoadAnimation(script:WaitForChild("Animation"))
local Walk = hrp:FindFirstChild("Running")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
Walk.SoundId = "rbxassetid://174960816"
Walk.Volume = 4
Walk.PlaybackSpeed = 0.8
--Animation.Priority = Enum.AnimationPriority.Movement
local running = false
local function ChangeFov(Fov, Time)
TweenService:Create(workspace.Camera, TweenInfo.new(Time), {FieldOfView = Fov}):Play()
end
UserInputService.InputBegan:Connect(function(key)
if key.KeyCode == Enum.KeyCode.LeftShift then
Humanoid.WalkSpeed = 40
running = true
end
end)
UserInputService.InputEnded:Connect(function(key)
if key.KeyCode == Enum.KeyCode.LeftShift then
Humanoid.WalkSpeed = 13
running = false
end
end)
RunService.Heartbeat:Connect(function()
if running == true and Humanoid.MoveDirection.Magnitude > 0 then
print("Running!")
--if not Animation.IsPlaying then
-- Animation:Play()
-- ChangeFov(105, 0.2)
-- Walk.PlaybackSpeed = 1
--end
else
print("Not running")
--if Animation.IsPlaying then
-- Animation:Stop()
-- ChangeFov(100, 0.2)
-- Walk.PlaybackSpeed = 0.8
--end
end
end)
i just commented out some stuff and yeah it works for me, you can keep the “local Character = script.Parent”
that’s odd, i published the studio i put it in, and its working for me after reset. maybe its the animations? i commeneted the lines that had animations with it and its perfectly fine.
i had a little error where it said it failed to find humanoid, so i just set all the FindFirstChild to WaitForChild
I tested your script in game and the only error I really got was the sound id so all you had to do is set the sound variable to WaitForChild to give it time to load
I went into your script and did some changes and you should also disconnect events for the sake of not leaving memory leaks and so I simply organized it and on my way, tested it in studio and game too. It worked for me so hopefully this should work just fine
Let me know if there is any errors in the developer console or output.
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local TweenService = game:GetService("TweenService")
local camera = game:GetService("Workspace").CurrentCamera
--[[Global Variables]]--
local player = game:GetService("Players").LocalPlayer
local Character = player.Character or player.CharacterAdded:Wait()
local HumanoidRootPart = Character:WaitForChild("HumanoidRootPart")
local Humanoid = Character:WaitForChild("Humanoid")
local Animator = Humanoid.Animator
local running = false
local RunningSound = HumanoidRootPart:WaitForChild("Running")
RunningSound.SoundId = "rbxassetid://174960816"
RunningSound.Volume = 4
RunningSound.PlaybackSpeed = 0.8
local HeartbeatConnecton, InputBeganConnection, InputEndConnection, HumanoidConnection
--[[Functions]]--
local function ChangeFov(Fov: Number, Time: Number) TweenService:Create(camera, TweenInfo.new(Time), {FieldOfView = Fov}):Play() end
local function OnMove()
if running and Humanoid.MoveDirection.Magnitude > 0 then
print("Running!")
else
print("Not running")
end
end
local function OnDeath()
HumanoidConnection:Disconnect() InputBeganConnection:Disconnect() InputEndConnection:Disconnect() HeartbeatConnecton:Disconnect()
HumanoidConnection = nil InputBeganConnection = nil InputEndConnection = nil HeartbeatConnecton = nil
end
--[[Events / Loops]]--
InputBeganConnection = UserInputService.InputBegan:Connect(function(input)
if not (input.KeyCode == Enum.KeyCode.LeftShift) then return end
Humanoid.WalkSpeed = 40 running = true
end)
InputEndConnection = UserInputService.InputEnded:Connect(function(input)
if not (input.KeyCode == Enum.KeyCode.LeftShift) then return end
Humanoid.WalkSpeed = 13 running = false
end)
HumanoidConnection = Humanoid.Died:Connect(OnDeath)
HeartbeatConnecton = RunService.Heartbeat:Connect(OnMove)
Blockquote