Hello. I’m not sure if you are still willing to try and do what you were doing originally. If you are, I believe I have a solution to your problem. I’ve tested it in my own baseplate and it works flawlessly. I’ll share the scripts I used, and where to put them.
First one:
game.Players.PlayerAdded:Connect(function(player) -- Detect when player joins
player.CharacterAdded:Connect(function(char) -- Detect when player's character is added
local newScript = game:GetService("ServerStorage"):WaitForChild("DetectChangeInWalkspeed"):Clone() -- Get the Script that detects when the walkspeed has changed, and parent it to the player's character
newScript.Parent = char
local particleEmitter = game:GetService("ServerStorage"):WaitForChild("ParticleEmitter"):Clone() -- Create a clone of the particle emitter and parent it to HumanoidRootPart
particleEmitter.Parent = char.HumanoidRootPart
end)
end)
This script is stored in ServerScriptService, and will create and parent a new Walkspeed detecting script and particle emitter anytime a new player joins the game.
Second one:
local humanoid = script.Parent.Humanoid -- Get the character's humanoid
humanoid:GetPropertyChangedSignal("WalkSpeed"):Connect(function() -- Detect whenever walkspeed changes
print(humanoid.WalkSpeed)
if humanoid.WalkSpeed > 85 then
script.Parent.HumanoidRootPart.ParticleEmitter.Enabled = true
else
script.Parent.HumanoidRootPart.ParticleEmitter.Enabled = false
end
end)
This script is stored in ServerStorage and is the script that gets cloned into the character by the first script I pasted. Using the GetPropertyChangedSignal() function, we can detect whenever the humanoid’s walkspeed changes.
Third one (optional):
game.Players.PlayerAdded:Connect(function(player) -- Detect when new player joins the game
player.CharacterAdded:Connect(function(char) -- Detect when that player's character has loaded
while true do -- Create a while loop
task.wait(0.5)
for i, v in ipairs(game.Players:GetPlayers()) do -- Loop through all players in the game
v.Character.Humanoid.WalkSpeed += 1 -- Create a path to the player's humanoid and increase walkspeed by 1 every 0.5 seconds
end
end
end)
end)
This last script is optional, however I do have something important to share. If you were previously updating the walkspeed of the player through a localscript, then that could be why the server wasn’t picking up the change in the walkspeed, because the change won’t be replicated to the server, meaning it can’t detect it. The second script I pasted is a server script, meaning that it will only detect changes to the walkspeed on the server, so you’ll have to update the walkspeed on the server, which is what this script does.
Hopefully you can use these scripts or at least integrate the ideas used in them into your own scripts. If you want to try and handle everything through startergui or whatever, you can, but this is an idea that could work for you I think. Let me know if you have any troubles or questions.