Network fast movement replication! Please Help!

I want my character to move fast and rapidly change directions and some properties like ground friction for example. And for the controlled character the input should be very responsive and snappy just like if it’s controlled in a single player game. I really not to much worry about an enemy characters. It’s not so much important as a player character. But whatever I do, I cannot make a client not to jerk and teleport. For example I have a dash move. It’s done thru changing CharacterMovement properties like GroundFriction, MaxWalkSpeed, MaxAcceleration e.t.c. Yes, I do replicate them to server after they were calculated on client. And then I apply AddMovementInput. In single player or on Host player it works fine. But client does the move, than teleports back for at least a half of a distance and then jumps back to the correct location. I think what I need is to disable server to correct client. Server should just accept whatever client sends to it. But how to do it? I’ve tried checking Ignore Client Movement Error Checks And Correction as well as Server Accepts Client Authoritative Position. But It does not change anything. I’ve also tried to change Network Smoothing Settings and with no luck.

Also Yes I understand that usually in common practice server should do all the work and calculations, and clients just sends input and waits for game to happen on server than sinc the picture to the results. But! It takes too long for the type of a game I want to do. So for my case it doesn’t work. I need at least movement to happen on clients and server should just listen to it. And I do a bunch of recalculations of the input for my controls to work as I need, as standard movement component doesn’t provide the right way of movement. For example I need my character to walk in the direction of actual movement, and not in the direction of acceleration, as it’s looks like it’s drifting and I don’t want it to drift, but deceleration still must not be instantenous. And so on. All of it must happen on client first as well, as mentioned above, Dash move.

And Yes, I want to do everything with Blueprints Only. Please Help!

Could you post a image of the code where you set the speed? there are several possibilities,
but sounds like a conflict between client and server, one of them is adjusting the location in line with a different variable value.

Try this setup for setting values,

Thanks for the answer. I do it like this. See the attached image. The thing is, as you can see, I’m adjusting many of variables based on the combination of modes of movement that I have. And not only that. The whole thing is quiet complex, and this is just a small portion of it, and I’m not really sure that the problem even here. Tough mostly the issue happens when GroundFriction changes rapidly.
Also I’ve noticed that check boxes for Ignore Client Movement Error Checks And Correction as well as Server Accepts Client Authoritative Position does nothing. It resets every time I’m saving, closing and reopening the project. It could be a bug. As if I’m seting it through the function on OnBeginPlay event. It works. And the player character actually stops to jerk around. But now smoothness of remote controlled charaters starts to bother me.

Basically all the variables inside the movement component are replicated behind the scenes, so all clients including the server client need to set these (internally replicated variables) before talking to the server, then for all clients (except the server’s client) this needs to be authorized by the server and corrected,

If you don’t first locally set the new variable value, the correction will become the ping delay because your character has already displayed on screen the original value,

Also all variables that are replicated as part of the movement component do not require multi-casting, this will only cause the potential for further errors.

First thing to do is remove the multicast at the end, see if that fixes it, if not, then change the internal variables before the switch has authority, and off switch has authority use only the remote and use “Run on Server” not “run on owning client”.

Well Thanks! It works. Tough it works exactly the same as it was in my case, but I guess this is better way as it excludes some unnecessary steps…
If I disable both Ignore Client Movement Error Checks And Correction and Server Accepts Client Authoritative Position it’s still drags and teleports all over the place, but with this enabled it looks a bit lagging only on the server. Just like if there is no interpolation…

I think it makes a perfect interpolation between the client’s walk speed and the server’s.
As Basement Bob says you’re just changing the speed on the server, but not on the client, you have to change both in.

server interp sucks. we built a prototype that had the 20km world box as the map and we turned the speed all the way up to whatever mach 3 (2500mph) is in cm per second (ue4 is cm= uu). at first I thought it was some type of lag and other people told oh its too fast. we figured out it was the camera being replicated and some component being attached to something. anyways to make a long story short we successfully built a shooter that people could fly mach 3 and it looked as smooth as baby bottoms on client side. the listen server was a different story. at first we couldn’t notice the poor interp on listen side because the game was just so fast. we finnaly implemented a camera lock on system ( think Zelda z-targeting meets ace combat) and all the sudden the listen server was seeing doubles like it was drunk. gf had the idea to capture single frames and each shot only showed one target but during gameplay it was showing two. it was every other frame. somehow the interp on listen is set up to update client positions in some order that clashed with the way we doing things. I finally figured out to use the r-interp node on the lockon and it hid the bad interp on the listen screen. now that we know its there we always see it but most people dont notice. plus most of the time you are playing client side. only one dude is gonna be host. going dedicated may be the solution for a lot of peeps out there but being a two man/girl team we dont have the resources for dedi at the time. we will have to do a listen server beta or early access at least till we can get funding to do dedicated servers. would really like a run down on how interpolation is handled listen side. listen server interp is just not good for high speed games. what are some good solutions?

I already did the things as he suggested, and my previous post was already about this new configuration. And for hi speeds and frequent changes of character movement variables it’s faaaar from perfect. Especially when ground friction changes suddenly while character moves at couple of thousands of kilometers per hour. Yes it IS extreme, but I want it to be this way. And I can’t see why it can’t be.

Damnationist
That looks pretty similar, tough I use network lag emulation for testing. And on listen server it looks like client character is updating with 13-15fps while rest of the game works pretty smooth. So for me it doesn’t doubling. Also on all the other clients it really is perfectly smooth. It’s also true for actual build running through steam on different machines.

Demnus, How many components do you have on the character blueprint? We just found that on listen server side the only thing being interpolated correctly is the skeletal mesh. Any component you have attached will not be interpolated on the listen server screen. We were using a static mesh to represent the player character with a bunch of meshes for weapons and material billboards as attached components back when we were prototyping mach 3 speeds. we are still working through animations and probably will be for the next few months so our skeletal mesh is still being worked on but I just hooked up the skeletal mesh we had with out any animations and it looks smooth on listen side going 2500mph as long as we use only a skeletal mesh by itself. anything that I have attached though still looks like the 15-20 fps your talking about. This is why most devs ive seen are going dedicated on ue4 when it comes to high speed games. the listen server interp is just bad. I wonder if there is way to use the interp nodes to interp the location of all these attached components.

btw the network lag emulation works for now but we found a lot of stuff we had to rebuild the first time we tested dev builds in real world. we had a guy in new York and one in texas. I ran the server on my pc and my gf connected through lan. she was smooth and they were not. even with all the rpc we did. it turned out that it was better to use switch has authority straight to the multicast event and then remote would do rep to server which would then multicast. also when we ran with the interp provided by ue4 in the character movement component everything was buttery smooth for new York and texas but introduced the listen lag. I have searched far an wide for a solution to this listen server interp. the best I have came up with is interp on our lock on or straight up lock on to target which removes the jitter completely. not sure why this affected it all on the listen but it did. I think the camera rotation is updated after the client update so it makes it appear smooth because every frame is updating the rotation of the camera after the player positions are updated. ill attach a pic of the switch authority example that dude gave me back then. maybe it will help you with high speed as it did me.

These pics did not help with the particle system (which was broken because its activation would happen while it was not relevant). while they did not help with the particle system it did help a whole lot when applying the switch has authority to the mach 3 movement system.

I have at least 8 additional actors that’s attached to my initial character model. And I don’t see any lag on them in relation to the main character on any of the clients or server. But most likely it’s because I’m not doing any replication of that parts. I’m replicating only control input variables and then they works independently on all of the clients doing their things with all the interpolation and stuff. But for now, I’m not doing anything with particles. And for firing I use draw line traces as placeholders. I guess the logic for that is similar to what you posted. But It has nothing to do with movement, as it has some internal replication thing asBasement Bob stated above.
Here’s my contraption for firing things.