I'm creating a laser gun that will make small neon parts that act as the projectile laser. I'm not sure how I'd make the projectile move a projectile and if it's better to replicate the actual movement on the client than the server, and when to show it's hit something. What's the best way to do a projectile, fully serverside or on the client? And best way to move it? (e.g bodymovers or tweenservice)
EDIT: Is it better to use network ownership or create the actual projectile on the client?
There are two ways that I know which you can use in order to do this:
1) Creating the projectile on the server and using network ownership to move it
In order to do that using this way, you would create the projectile on the server, set its ownership to the player and let the player's localscript handle moving it.
I personally don't have any experience with it, but I believe this way would only be good for slow projectiles such as rocket launchers, due to the delay in communicating between the server and the client.
And that's not the only issue with it. As you can read on this page, you cannot apply network ownership to anchored parts, meaning your bullet would have to be unanchored, therefor forcing you to use BodyMovers, which may not always be preferred.
2) Creating the projectile on every client separately
This way let's you anchor the projectile, and move it by setting its CFrame, without the need to use BodyMovers. In order to do this, you would have the server tell every client to create the projectile here and there, moving this way or that way.
This way is probably better for fast bullets. I know for a fact that Jailbreak uses this way in their weapons system.
TL;DR in my opinion, it's better to create the projectile on the client, especially for fast guns.