How would I make a crawling system with no latency?

So, I already made a crawling system, but the issue is that its based on a RemoveEvent.
How it works is:
Player presses Left Control > Fire remote > Server recieves > Start crawling

The obvious issue here is that it might take time for the server to recieve data because of ping.
I dont want to set the WalkSpeed on the client, because you cant overwrite local walkspeed from the server (for some reason, I dont think there are any ways to bypass this)

(Also yes, I need to change walkspeed from the server later for the morphs)

What do I do?

This really isn’t too big of a deal, unless you already observe latency currently. You could load the animation on the client to show their input is doing something, even if it doesn’t affect their walkspeed.

Allow the client to do the crawling entirely on their client. The server should make sure that the character is not performing any weird behavior. This way will split the load to some decent gameplay experience without causing latency with remotes. I am not exactly sure how server would monitor this, either remotes or other indicators.

No need for anything on the server. One local script will do. Just change the walkspeed, and play the animation in there.

But then its literally impossible to change the walkspeed from the server, which is why im asking this question in the first place

Poptartz is right cant you do this all in one local script unless there are particles or sum like that?

I don’t get what you mean.
He gave an answer, you can move it to the client and simply have the server watch and make sure the client don’t do anything strange. (Such as make a server-side event fire whenever the walkspeed changes, and check to see if it’s a walkspeed you accept.) If you need to know if the player is crawling (like set a value) Then just ignore the latency issue, you can set the walkspeed from server. Character.Humanoid.WalkSpeed = 40 will work on server.