More Info
The Third Person Character uses the Character Movement Component (CMC) to move the capsule component.
CMC uses client-side prediction which in simplest terms is the client executes movement input locally. It passes the inputs and it’s results to the server. The server executes the inputs and then compares its results against the clients. IF they are close enough the server sends an acknowledgement (ACK). If the difference exceeds tolerance the server instead sends a correction. The client then updates its simulation to match the servers result…approximately. Everything in a multiplayer game is based on approximations.
When you change a CMC state, speed or any other variable you apply the change locally, then RPC the server to “attempt” to make the change. Your flow logic must maintain server authority. You do not tell the server what values to apply.
For instance if you want to apply sprinting you change the CMC Max Walk Speed on the client, then RPC the server to take the same steps. But you don’t pass a float telling it what speed to change to. It must determine the value itself through logic or hard coded value.
Here’s a simplified version of sprint.
Notice the Conditional checks before applying a speed change on both the client and server. You aren’t Commanding the action to happen. You are attempting. Conditions must allow for the change to be applied.
Here’s a more advance Sprint setup. The base logic flow is the same, but the application is more dynamic. I’m setting a custom State variable that will apply the max walk speed change based on other states.
The Locomotion Mode enumerator is a Repnotify. RepNotify vars execute a bound function when their values are changed. I have this function call a custom function that walks through all my other character state variables to determine the movement speed to apply.

Here’s the tail end of that movement speed function.
Yes, this is all quite a bit over the top for most games sprinting action. But the point here is the client determines the speed via rules and conditions. The server in turn does the same and maintains authority. If its value is different it’ll force the client to change.



