The AnimBP only does the animation. When you press Shift, the InputActionRun in the B_DemoCharacter blueprint is called on your machine, and this sends an RPC to the server (ServerRun). In the server, this RPC changes the MaxWalkSpeed of the character movement component. The MaxWalkSpeed is a variable that comes already with the Unreal Engine’s character and is automatically replicated, which means that when we change its value in the server, the new value is sent back to our client. The RPC also changes our variable IsRunPressed to True on the server, and this variable is also replicated back to the client. But this is a RepNotify variable, which means that every time it changes, the function OnRep_IsRunPressed is called (on server and clients) and inside this function you will see the code that tells the AnimBP (1st person and 3rd person) that IsRunPressed is now True. The AnimBP will then enter the state “Running” if the character is moving while IsRunPressed is True.
But on the client we don’t wait for these two values to arrive from the server, we go ahead and change them on the client before they arrive, so our character doesn’t feel laggy. When they arrive, they are set again but you don’t feel it because the values are the same. It’s just that the server must have the final decision. So please tell me if this answers your question.