✓ Accepted answer
Basically, you have to constantly check if the Player in question has a valid WalkSpeed.
Even with FilteringEnabled, some core scripts still edit the Character locally, which is why SpeedHacks work: they only edit the Character.
If you have a Table or some other way of knowing what WalkSpeed a Player should be at in the game, just ban or "punish" them if they go over it (not under, as that may cause it to trigger for iOS or Android players, since they have the ability to walk at reduced speeds.)
For a constant WalkSpeed, this code will suffice:
local walkSpeed = 16
Game.Players.PlayerAdded:connect(function(plr)
plr.CharacterAdded:connect(function(char)
wait()
local h = char:WaitForChild("Humanoid")
h.Changed:connect(function()
if h.WalkSpeed > walkSpeed then
plr:Kick()
end
end)
end)
end)
3 comments
Don't forget, theres a Lvl.7 exploit out there where the Player doesn't really have to change the WalkSpeed within the Humanoid (By using the new OCE Exploit), just letting you know bro.
At that point, there's no way to stop the exploit from going thorugh. This solution will stop most CE speedhackers, though.
I know how an exploit works, the more common one, that simply speeds up the animations. I was just simply curious as to if there was any way