How do I stop network corrections for navmesh issued movements?

Hi. I’m issuing a movement through a navmesh for a player both on the server and the client and I can’t seem to get smooth movement that doesn’t start to correct itself on the client. See picture whenever I issue the command.

Why is this happening? I’m issuing the movement as part of an Gameplay Abilities ability. Originally I had no kind of syncing code because the ability is client-predicted, so I figured it’ll happen first on the client (and then the server) and it’ll all interpolate cleanly. Unfortunately this isn’t the case.

I’ve added a NetSyncTask in order to try to prevent this from getting worse but nothing seems to be working:

Apologies for the code screenshot (I’m on remote desktop).

I’m sure someone has dealt with this in the past. When I first started on my game I had this somewhat working outside of GAS. Now that this is happening inside of GAS I’m unsure how to fix it. Thanks.

Edit: Heads up that this is the code for MoveToActor

void ATitansPlayerController::MoveToActor(const AActor* Actor)
{
	UAIBlueprintHelperLibrary::SimpleMoveToActor(this, Actor);
	bMovingToActor = true;
}

Funnily enough, I commented on this forum issue which describes exactly the problem I was having and apparently it fixed it. I’m gonna reimplement this again and see if it works. Solving character moving sync in Top-Down template multiplayer implementation

This didn’t work. The only thing that is working is using AddMovementInput and then just moving to the character. This has the disadvantage that now the character can’t follow paths on a navmesh, but this isn’t too bad given that the player will primarily use WASD movement to get around.

In the future I want to look into getting nav path and then adding AddMovementInput towards each of those individual points on the path, but I was looking at the code and it didn’t seem trivial. Anyhow, it’s solved but not fully.

Hey. What I think: You can allow client-side movement and do path calculations in the client (generation i mean) since you have references to other objects around given it’s a replicated environment. That path you can then send to the server to use with an RPC and simply have the server mirror the client movement after it checks if it’s ok (You can even use the replicated navigation sys / components to perform preliminary / partial checks on the client directly). This way it just lags behind the client slowly without impacting your player POV and the server can correct the client only if needed (wrong points or whatever), giving it some freedom and no correction glitches all the time depending on latency. It’s either that I guess or simply moving the entire thing with movement server-side to do the calculations there and then send it to the client to mimic (meaning you send the click and everything else is done server-side first), but this means the client will be waiting on the server processing info and the latency will affect your display on your client. From my experience in games, many times the server fails but the client keeps moving or whatever (though you can’t do nothing ss ofc), meaning there is a tendency towards allowing freedom there. Especially in highly dynamic environments I guess where you have to see exactly what happens. Other than that, given your choice / implementation, i guess it’s up to the connection :slight_smile: