Another thing which you can’t do is ever safely assume that a player can’t see the in the mechanics of your game. I’ve seen lots of tutorials online which assume that an exploiter can’t (for example) change a Boolean value in their character or something similar.
Also, for the idea on guns, many people store information about a gun’s stats in some kind of integer value in the gun. Ideally, you shouldn’t do this because an exploiter can simply change these values.
If you do use these values, just add server side sanity checks (I.E check if those stats were changed without permission) and you should be fine