Lowering Humanoid.WalkSpeed making walking animation glitching/breaking for other players ( local player can still see it )

Hi. I’m recently making an ability script for my game, and i needed to lower humanoid’s walkspeed to 5, but now, only local player can see walking animation ( it works perfectly fine if I decide to increase instead of lowering it ) . Can someone help me? ( I think code isn’t needed since its just changing humanoid.WalkSpeed )

1 Like

It sounds like you’re facing an issue with the walk animation not playing correctly when you lower the Humanoid.WalkSpeed for non-local players. This could be due to a synchronization issue between the server and the clients. Here’s a possible explanation and solution:

When you change the Humanoid.WalkSpeed property on the server, it affects all players’ characters, including the local player’s character. However, animations in Roblox often rely on client prediction and server synchronization to work smoothly. When you modify the Humanoid.WalkSpeed on the server, it might be causing a discrepancy between the predicted movement on the client and the actual movement on the server.

To ensure that animations and movements are synchronized properly, you should consider doing the following:

  1. Replicate WalkSpeed Changes: Instead of directly changing the Humanoid.WalkSpeed on the server, you can use a RemoteEvent to notify the server when the walk speed should change. The server then changes the value and replicates it back to the clients. This way, both the server and clients are aware of the change.
  2. Server Prediction: For animation and movement synchronization, you can let the clients predict their movements based on the changed WalkSpeed, but the server should ultimately validate and correct the movement. This helps in keeping the animations and actual movements consistent.

Here’s a high-level example of how you could approach this:

On the client-side (LocalScript):

luaCopy code

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SetWalkSpeedEvent = ReplicatedStorage:WaitForChild("SetWalkSpeedEvent")

-- Listen for walk speed changes from the server
SetWalkSpeedEvent.OnClientEvent:Connect(function(newWalkSpeed)
    local character = game.Players.LocalPlayer.Character
    if character then
        character.Humanoid.WalkSpeed = newWalkSpeed
    end
end)

On the server-side (Script):

luaCopy code

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SetWalkSpeedEvent = Instance.new("RemoteEvent")
SetWalkSpeedEvent.Name = "SetWalkSpeedEvent"
SetWalkSpeedEvent.Parent = ReplicatedStorage

-- When a player wants to change walk speed
SetWalkSpeedEvent.OnServerEvent:Connect(function(player, newWalkSpeed)
    -- Validate newWalkSpeed to prevent abuse
    newWalkSpeed = math.clamp(newWalkSpeed, MIN_WALK_SPEED, MAX_WALK_SPEED)

    -- Apply new walk speed to the player's character
    local character = player.Character
    if character then
        character.Humanoid.WalkSpeed = newWalkSpeed
    end

    -- Replicate to other clients
    SetWalkSpeedEvent:FireAllClients(newWalkSpeed)
end)

Remember to define MIN_WALK_SPEED and MAX_WALK_SPEED as appropriate values for your game.

This way, the server validates the changes and replicates them to all clients, ensuring that animations and movements are synchronized correctly.

Remember that this is a high-level example, and you may need to adapt it to fit your specific game mechanics and structure.

wouldn’t it change all players’ walkspeed, when you fire it to all clients?

Yes, you’re correct. If you change the WalkSpeed property of a Humanoid on the client side and broadcast it to all clients, it will affect the WalkSpeed of all players in the game. This is because the code runs on each player’s client, and changing the property locally would apply the change to the respective player’s character.

If you want to change the WalkSpeed only for the local player’s character without affecting other players’ characters, you should run the code only on the local player’s client. Here’s how you can achieve this:

luaCopy code

local player = game.Players.LocalPlayer
local character = player.Character

if character and character:FindFirstChild("Humanoid") then
    local humanoid = character.Humanoid
    humanoid.WalkSpeed = 5 -- Change this value to the desired WalkSpeed
end

By using this approach, the WalkSpeed will only be changed for the character of the local player running the script, and it won’t affect other players’ characters.

That seems unneccessarily complicated.
Why don’t you just have the client Fire a remote event, which the server picks up and changes the player’s speed on the server.

true i can’t think of anything better ill fix it rq

On the client side (LocalScript):

luaCopy code

local player = game.Players.LocalPlayer
local userInputService = game:GetService("UserInputService")

local remoteEvent = game.ReplicatedStorage.ChangeWalkSpeedEvent -- Replace with the actual RemoteEvent

local function changeWalkSpeed()
    remoteEvent:FireServer(5) -- Change this value to the desired WalkSpeed
end

userInputService.InputBegan:Connect(function(input, gameProcessedEvent)
    if not gameProcessedEvent and input.KeyCode == Enum.KeyCode.Space then
        changeWalkSpeed()
    end
end)

On the server side (Script):

luaCopy code

local replicatedStorage = game:GetService("ReplicatedStorage")
local remoteEvent = Instance.new("RemoteEvent")
remoteEvent.Name = "ChangeWalkSpeedEvent"
remoteEvent.Parent = replicatedStorage

remoteEvent.OnServerEvent:Connect(function(player, newWalkSpeed)
    local character = player.Character
    if character and character:FindFirstChild("Humanoid") then
        local humanoid = character.Humanoid
        humanoid.WalkSpeed = newWalkSpeed
    end
end)

is the problem solved now? or not

Yes it works now. Thank you so much for your help, i really appreciate it.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.