Как сделать SWEP с определенным действием? Например, делает невидимым

Примерно так:

/*==============
   SH-ЧАСТЬ
================*/

if CLIENT then
   SWEP.PrintName = "Пример"
   SWEP.Author = ""
   SWEP.Purpose = ""
   SWEP.Instructions = ""
   SWEP.Slot = 1
   SWEP.SlotPos = 4
   SWEP.DrawAmmo = true
   SWEP.DrawCrosshair = false
   SWEP.ViewModelFOV = 48
   SWEP.ViewModelFlip = false
end

SWEP.ViewModel = "models/weapons/v_pistol.mdl"
SWEP.WorldModel = "models/weapons/w_pistol.mdl"
SWEP.Category			= "Пример"
SWEP.HoldType			= "pistol" -- Если без рук, то normal
SWEP.Spawnable			= false
SWEP.AdminOnly			= true
SWEP.FiresUnderwater		= true
SWEP.UseHands = true

SWEP.Primary.ClipSize			= -1
SWEP.Primary.DefaultClip		= -1
SWEP.Primary.Automatic			= false
SWEP.Primary.Ammo			= "none"
SWEP.Primary.Delay			= 300 -- Задержка 5 минут
SWEP.Primary.Recoil			= 0
SWEP.Primary.Spread			= 0
SWEP.Primary.Force			= 0
SWEP.Primary.Damage			= 0
SWEP.Primary.NumberofShots		= 0

SWEP.Secondary.Ammo	= "none"

function SWEP:Initialize()
   self:SetWeaponHoldType(self.HoldType)
end

-- ЛКМ
function SWEP:PrimaryAttack()
   if ( !self:CanPrimaryAttack() ) then return end

   if (SERVER) then
      local owner = self:GetOwner()

      if (timer.Exists("OnInvis_" .. owner:SteamID64())) then return end
         -- Делаем игрока невидимым и не восприимчевым к НПС(они его не видят)
         owner:SetNoDraw(true)
         owner:SetNotSolid(true)
         owner:DrawWorldModel(false)
         owner:DrawShadow(false)
         owner:SetNoTarget(true)
      -- Создаем таймер на 2 минуты, чтобы сбросить невидимость
      timer.Create("OnInvis_" .. owner:SteamID64(), 120, 1, function()
         if (!IsValid(owner)) then return end
         owner:SetNoDraw(false)
         owner:SetNotSolid(false)
         owner:DrawWorldModel(true)
         owner:DrawShadow(true)
         owner:SetNoTarget(false)
      end)

   end

   self:SetNextPrimaryFire( CurTime() + self.Primary.Delay ) -- кликнуть ещё раз, можно через 5 минут
   self:SetNextSecondaryFire( CurTime() + self.Primary.Delay )
end

-- ПКМ
function SWEP:SecondaryAttack()
end

weapon_example.lua (2,2 КБ)
Дальше думаю ты сам справишься?