RPC Call causes Server Correction?

I’ve been learning how to make use of the built-in replication of the Character Movement to extend its behavior and use it for my game. I’ve gotten a pretty good grasp on how to do it from [here][1]. I fully understand how the whole SavedMoves thing works and how it is that the variables must be set to ensure that the replication happens smoothly (which in my case means aiming at as few Corrections from the Server as possible).

I currently have a simple setup where the PlayerController inputs movement into the PlayerCharacter through CharacterMovement’s Add Input Vector function, this works perfectly. However, I started noticing that I was getting weird Corrections when moving around, and after digging for a long time, I finally realized what was causing them:

216392-bp.png

These are the last 2 nodes that are called whenever the Movement Input is updated in PlayerController. Handle Movement Input calls AddInputVector on the PlayerCharacter (obviously client-side since we are talking input here). Then, [SERVER] Update Movement Input Vector is called so that the Server stores that Input Vector into a replicated variable (used solely for feedback purposes on clients, it doesn’t mess with movement in any capacity). Now, this is where it gets really weird to me: When I stop calling the last node (the RPC call) then suddenly the corrections stop happening.

This doesn’t really make sense to me, I thought it might be something the RPC was doing on the server but even after making it an empty event (as in, it does nothing when it is triggered on the server) I would still get the corrections. Everything aims at the actual RPC call as the culprit for the corrections… which doesn’t really make sense UNLESS there is some vital piece of information I’m missing from unreal’s network lifecycle.

Extra info:

  • [SERVER] Update Movement Input Vector Is set as Run on Server and is Unreliable. I’ve tried setting it to Reliable resulting in an extremely exaggerated Correction, which I assume comes from having to make the client “wait” while the calls arrive properly and then replaying the pending moves.

  • The same correction issues happen then again when I perform a jump off of a wall (which in my case means not calling Jump() but a function I defined myself that makes an RPC call, following the same pattern of RPC → Causes Correction, regardless of what it actually does).