Lua sweps darkrp

Hello yall, I am working on my darkrp server and i am setting up few customs like a grapple hook and stuff, even tho theres coding behind it. I want to make so you can only use 10 shots then the gun wont work unless you buy 1 again.

heres the code i believe you got to add code within the other coding so it doesnt have unlimited shots.

heres shared.lua


SWEP.Author            = "None"
SWEP.Contact        = "None"
SWEP.Purpose        = "A Grappling Hook"
SWEP.Instructions    = "Left click to fire"

SWEP.Spawnable            = false
SWEP.AdminSpawnable        = true

SWEP.PrintName            = "Grappling Hook"            
SWEP.Slot                = 2
SWEP.SlotPos            = 0
SWEP.DrawAmmo            = false
SWEP.DrawCrosshair        = true
SWEP.ViewModel            = "models/weapons/v_crossbow.mdl"
SWEP.WorldModel            = "models/weapons/w_crossbow.mdl"

local sndPowerUp        = Sound("weapons/crossbow/hit1.wav")
local sndPowerDown        = Sound("Airboat.FireGunRevDown")
local sndTooFar            = Sound("buttons/button10.wav")
local sndShot            = Sound("weapons/357/357_fire2.wav")

function SWEP:Initialize()

    nextshottime = CurTime()
    self:SetWeaponHoldType( "smg" )
    
end

function SWEP:Think()

    if (!self.Owner || self.Owner == NULL) then return end
    
    if ( self.Owner:KeyPressed( IN_ATTACK ) ) then
    
        self:StartAttack()
        
    elseif ( self.Owner:KeyDown( IN_ATTACK ) && inRange ) then
    
        self:UpdateAttack()
        
    elseif ( self.Owner:KeyReleased( IN_ATTACK ) && inRange ) then
    
        self:EndAttack( true )
    
    end
    
    //Changed from KeyDown to prevent random stuck-in-zoom bug.
    if ( self.Owner:KeyPressed( IN_ATTACK2 ) ) then
    
        self:Attack2()
        
    end

end

function SWEP:DoTrace( endpos )
    local trace = {}
        trace.start = self.Owner:GetShootPos()
        trace.endpos = trace.start + (self.Owner:GetAimVector() * 14096) //14096 is length modifier.
        if(endpos) then trace.endpos = (endpos - self.Tr.HitNormal * 7) end
        trace.filter = { self.Owner, self.Weapon }
        
    self.Tr = nil
    self.Tr = util.TraceLine( trace )
end

function SWEP:StartAttack()
    //Get begining and end poins of trace.
    local gunPos = self.Owner:GetShootPos() //Start of distance trace.
    local disTrace = self.Owner:GetEyeTrace() //Store all results of a trace in disTrace.
    local hitPos = disTrace.HitPos //Stores Hit Position of disTrace.
    
    //Calculate Distance
    //Thanks to rgovostes for this code.
    local x = (gunPos.x - hitPos.x)^2;
    local y = (gunPos.y - hitPos.y)^2;
    local z = (gunPos.z - hitPos.z)^2;
    local distance = math.sqrt(x + y + z);
    
    //Only latches if distance is less than distance CVAR
    local distanceCvar = GetConVarNumber("grapple_distance")
    inRange = false
    if distance <= distanceCvar then
        inRange = true
    end
    
    if inRange then
        if (SERVER) then
            
            if (!self.Beam) then //If the beam does not exist, draw the beam.
                //grapple_beam
                self.Beam = ents.Create( "trace1" )
                    self.Beam:SetPos( self.Owner:GetShootPos() )
                self.Beam:Spawn()
            end
            
            self.Beam:SetParent( self.Owner )
            self.Beam:SetOwner( self.Owner )
        
        end
        
        self:DoTrace()
        self.speed = 10000 //Rope latch speed. Was 3000.
        self.startTime = CurTime()
        self.endTime = CurTime() + self.speed
        self.dt = -1
        
        if (SERVER && self.Beam) then
            self.Beam:GetTable():SetEndPos( self.Tr.HitPos )
        end
        
        self:UpdateAttack()
        
        self.Weapon:EmitSound( sndPowerDown )
    else
        //Play A Sound
        self.Weapon:EmitSound( sndTooFar )
    end
end

function SWEP:UpdateAttack()

    self.Owner:LagCompensation( true )
    
    if (!endpos) then endpos = self.Tr.HitPos end
    
    if (SERVER && self.Beam) then
        self.Beam:GetTable():SetEndPos( endpos )
    end

    lastpos = endpos
    
    
            if ( self.Tr.Entity:IsValid() ) then
            
                    endpos = self.Tr.Entity:GetPos()
                    if ( SERVER ) then
                    self.Beam:GetTable():SetEndPos( endpos )
                    end
            
            end
            
            local vVel = (endpos - self.Owner:GetPos())
            local Distance = endpos:Distance(self.Owner:GetPos())
            
            local et = (self.startTime + (Distance/self.speed))
            if(self.dt != 0) then
                self.dt = (et - CurTime()) / (et - self.startTime)
            end
            if(self.dt < 0) then
                self.Weapon:EmitSound( sndPowerUp )
                self.dt = 0
            end
            
            if(self.dt == 0) then
            zVel = self.Owner:GetVelocity().z
            vVel = vVel:GetNormalized()*(math.Clamp(Distance,0,7))
                if( SERVER ) then
                local gravity = GetConVarNumber("sv_Gravity")
                vVel:Add(Vector(0,0,(gravity/100)*1.5)) //Player speed. DO NOT MESS WITH THIS VALUE!
                if(zVel < 0) then
                    vVel:Sub(Vector(0,0,zVel/100))
                end
                self.Owner:SetVelocity(vVel)
                end
            end
    
    endpos = nil
    
    self.Owner:LagCompensation( false )
    
end

function SWEP:EndAttack( shutdownsound )
    
    if ( shutdownsound ) then
        self.Weapon:EmitSound( sndPowerDown )
    end
    
    if ( CLIENT ) then return end
    if ( !self.Beam ) then return end
    
    self.Beam:Remove()
    self.Beam = nil
    
end

function SWEP:Attack2() //Zoom.
            
//    self.Weapon:EmitSound( self.Secondary.Sound, 50, 100 )
    if (CLIENT) then return end
        local CF = self.Owner:GetFOV()
        if CF == 90 then
            self.Owner:SetFOV(30,.3)
        elseif CF == 30 then
            self.Owner:SetFOV(90,.3)
//            self.Scope = true
//        elseif CF == 0 then
//            self.Owner:SetFOV(90,.3)
    end
end

function SWEP:Holster()
    self:EndAttack( false )
    return true
end

function SWEP:OnRemove()
    self:EndAttack( false )
    return true
end


function SWEP:PrimaryAttack()
end

function SWEP:SecondaryAttack()
end

Init.lua



AddCSLuaFile( "cl_init.lua" )
AddCSLuaFile( "shared.lua" )
include('shared.lua')

//Distance CVAR
CreateConVar("grapple_distance", 10000, false)

and cl_init.lua



include('shared.lua')


function SWEP:CustomAmmoDisplay()

    self.AmmoDisplay = self.AmmoDisplay or {}
    //attempt to remove ammo display
    self.AmmoDisplay.Draw = true
    
    self.AmmoDisplay.PrimaryClip     = 10
    self.AmmoDisplay.PrimaryAmmo     = 1
    self.AmmoDisplay.SecondaryAmmo     = -1
    
    return self.AmmoDisplay

end

function SWEP:SetWeaponHoldType( t )
    // Just a fake function so we can define 
    // weapon holds in shared files without errors
end

How would i go about making so it doesnt have unlimited shots, because the basic ammo settings do nothing for this.