How do I properly replicate state from client to other clients with client-authoritative player characters?

Godot Version



I have a basic setup largely inspired by the article here. However, I come from an engine that’s generally client-authoritative with server-side sanity checking (for speedhacking, teleporting, etc.) and that’s what I’d like to do with Godot as well. I don’t want players to have to wait for a full server ping in order to see their inputs change their character state.

What I would generally like to do is set the multiplayer authority of each character to the client that owns that character. So player 2 is the authority of his character, player 3 is the authority of hers, and if it’s not a headless server then the host obviously has authority over their own character.

I’ve tried many different things and I most often get a “pending spawn” error on the MultiplayerSynchronizer node of the player character. I’ve found a few implementations that do not produce this error, but the one issue I haven’t been able to find a solution for is the synchronizing of state between the clients. The server will see each client’s state properly, and the clients will see the server’s state properly, but the clients do not receive updates from the other clients. This occurs even when the MultiplayerSynchronizer objects appear to be error-free.

Is it even ever acceptable for the entire player character to be client-authoritative? Is that just unacceptable in Godot, at least using their high-level API (the Spawner and Synchronizer nodes)?

Please let me know what I might be missing, or if I’m even aiming in the right direction at all.

you should be able to do that, do you have the Public Visibility checked in the Synchronizer’s inspector? it should be on by default.
And what is that error you are getting? can you elaborate on it?