I think you need to expand on your topic a bit. The question seems a but unclear, but really it all depends on how realistic you want to make your guns.
You can make a simple hit-scan gun with no blooms, bullets, drop off, etc. This would be very easy to make and probably best for a new developer. An example of guns like this can be found in KAT and Gun Simulator.
If you want the opposite of that and you are willing to make more complex and realistic guns, see the guns in Phantom Forces.
There are lots of other types of guns too. I would recommend talking with somebody who has gone through this process before.
Handle effects on the client using a remote and passing the parameters of the effects in a RemoteFunction using the :FireAllClients() event.
Doing these effects on the server constantly can cause performance issues and overall isn’t good practice. Also make sure to store weapon state information on the server (current ammo, max ammo, reload time, etc), or at least validate it on the server.
The main issue with ACS is its really easy to exploit. And yes I did create the installer plugin but I am going to patch the exploits in the plugin installation.
I started my project using ACS, but then I came across several problems.
The first is that in the version I used it only worked for R6 (I’m doing the game with R15). Then there was that health system, I removed everything, then there were the interfaces, I was removing it, in the end there was nothing left, not even the weapon system I could use for my engine
I already have a good and realistic gun system but, I am trying to do something new. Also i want to try to keep all of the things in my game original so that’s why I’m not using ACS or Carbon engine, BCWS.
My case is more specific, I am implementing it so that I can apply server side reconciliation and client prediction, which would be serious. I need to have control over every aspect of the game (including the simulations, only use the Roblox physics engine for special effects on the client).
This to allow effects such as instant replay, highlighting of the best plays and other details, not to mention the fact that it will allow me to perform regressive tests (whenever I close a version, I replay a game, the result must be the same).
To achieve this goal I am writing my engine using ECS (Entity Component System), which in addition to giving me these features more easily, improves the code organization and the application of good practices.