✓ Accepted answer
Replication, and the Network
See, Roblox generally doesn't understand what you really want to do with your game entities. As a result, the replication it provides by default is super generic and just replicates properties of everything in the game without making any guesses about what those properties mean in the context of the game. This is a little bit weak, but it's just about the best general-purpose solution you can get.
So, how do we tell the game what we really want?
Network Ownership
For a very simple solution, network ownership just says to the server "Hi, I'm in charge of this Instance" and the server goes "Yeah whatever dude I'll tell everyone else."
This is great for cases where you need something to be perfectly in sync with somebody who is controlling say, a physical object, so that it always looks right on their screen. But it's not so good for when you need something to be super smooth on everyone else's screen.
RemoteEvents
Alright, so how about we just say "Actually, server, I don't care. You do you."
Using RemoteEvents, you can tell the server something meaningful - And it can pass that back on to the other clients. Rather than saying "Okay here's this projectile, just replicate it to the other clients" instead say "Make this projectile. And then tell the clients to do the same"
This would be the point where I'd plug Intents, except Freya is dead (long live Freya). So instead you're just going to literally get the server to tell the clients to ignore the projectile it made, and instead to make their own projectile that does the same thing as the server. No lag. Might be a little bit behind, but honestly there's not a lot you can do about that.
2 comments
So network ownership is good for PvE where it wont affect how other players see it?
Depends on what things you're taking ownership of, but yes it could be.