Deriving SWEP from base weapons

I want to create player specific weapons which are based on HL2 weapons. Every player’s weapon’s stats, such as damage, kick and rate of fire, will change during the game.

My questions are:

  1. Can I derive a weapon from another weapon? (Using setmetatable() or any other way)
  2. Can I give players weapons using a variable instead of the string required in Player:Give()?
  1. Swep.Base(“my_base”)
  2. make your own function returning the weapon string for each variable