For firerate you could use a leaky bucket (Leaky bucket rate limiter) and for ammo consumption I’m still in the processing of finding the best way to do this for a game I’ working on, it will be done on the client, so I fire a remote event when the reloading event began and when it ended, and check the time difference and add a cushion to account for lag, this is not the best system because It can still result in fail cases in the case of extreme latency but I’m still figuring out a way to fix that, because I don’t want to handle reloading on the server.