I’m using a projectile system using AssemblyLinearVelocity for its movement, when the projectile hits a part it will detonate. On the server this appears to work just fine, it detonates directly on the part, however on the client it appears much higher which looks plain awful. This screenshot is after I set the network owner of the projectile to the server, before I did the client would show it being much lower then it should be.
Physics done on the server will always be off from the client. This is why when you set the Network owner to the client it appears better, as the client will be the one doing the calculations instead.
I recommend you either don’t use physics (raycasts like @electricpretzel0 said) or simply create a projectile for every player using RemoteEvents, creating the particles from the client and simply handling the backend physics on the Server.