So generically, I can imagine FE guns on Roblox are made through this:
damageEvent:FireServer(humanoidHit, damageAmount)
But also there are exploiters, exploiters can fire these events replacing damageAmount to numbers like 1,000 and can cycle through the player list to insta kill them. I thought the way to get around this is to make the raycasting stuff within the server, but of course when a player has a gun that fires 7 rounds a second, I have a feeling it could exceed the 50kbs/sec data limit that's being passed. How do i go about this in the most efficient but anti-exploiting way?

4 comments
Short Answer:Use a debounce on the server
Please elaborate, my skills are relatively limited
Debounce will help I guess? Your main issue here is you're giving the client power to control how much damage they're doing, the server alone should be capable of calculating damage done. All you really need to send usually are things like mouse positions, keyboard buttons hit, etc
Unfortunately with guns, because you don't want too much input lag, you have to figure out how much raycasting and what not you can allow the client to do in order to prevent excess lag between the client clicking the mouse and the gun actually firing, they usually get more power with guns than usual