Trouble Adding Custom Weapons TTT Server

Hey guys I set up a TTT server about a week ago and I’ve been having problems getting a custom weapon to install correctly. The problem is whenever someone (or myself) joins it makes you download the files but they don’t actually download. The weapon ends up showing up in the Traitor weapon shop as the correct model but missing the textures (so black and purple) and shoots errors when used. I’ve read a lot of posts on it being a bad resource.AddFile (the files for the weapon are on the server in materials and models, same with the webserver) but it doesn’t seem to be the case. I’ve tried putting the folder in the addons folder but that doesn’t seem to load it. Any help or guidance would be much appritiated.

Server is Hardcore Bacon Action

Here is the shared.lua (I’ve put this file in the basic directory of the weapon and tried moving it to a folder within entities)



if (SERVER) then
    resource.AddSingleFile( "sound/weapons/Requests Studio/SF2/Arrowin.wav" )
    resource.AddSingleFile( "sound/weapons/Requests Studio/SF2/Bow String.wav" )
    resource.AddSingleFile( "sound/weapons/Requests Studio/SF2/draw.wav" )
    resource.AddSingleFile( "sound/weapons/Requests Studio/SF2/fire.wav" )
    resource.AddSingleFile( "sound/weapons/bf3/draw1.wav" )
    resource.AddSingleFile( "sound/weapons/bf3/ironin.wav" )
    resource.AddSingleFile( "sound/weapons/bf3/ironout.wav" )
    resource.AddSingleFile( "sound/bf3/callout1.wav" )
    resource.AddSingleFile( "sound/bf3/callout10.wav" )
    resource.AddSingleFile( "sound/bf3/callout11.wav" )
    resource.AddSingleFile( "sound/bf3/callout12.wav" )
    resource.AddSingleFile( "sound/bf3/callout13.wav" )
    resource.AddSingleFile( "sound/bf3/callout14.wav" )
    resource.AddSingleFile( "sound/bf3/callout15.wav" )
    resource.AddSingleFile( "sound/bf3/callout16.wav" )
    resource.AddSingleFile( "sound/bf3/callout17.wav" )
    resource.AddSingleFile( "sound/bf3/callout18.wav" )
    resource.AddSingleFile( "sound/bf3/callout19.wav" )
    resource.AddSingleFile( "sound/bf3/callout2.wav" )
    resource.AddSingleFile( "sound/bf3/callout20.wav" )
    resource.AddSingleFile( "sound/bf3/callout21.wav" )
    resource.AddSingleFile( "sound/bf3/callout22.wav" )
    resource.AddSingleFile( "sound/bf3/callout23.wav" )
    resource.AddSingleFile( "sound/bf3/callout24.wav" )
    resource.AddSingleFile( "sound/bf3/callout3.wav" )
    resource.AddSingleFile( "sound/bf3/callout4.wav" )
    resource.AddSingleFile( "sound/bf3/callout5.wav" )
    resource.AddSingleFile( "sound/bf3/callout6.wav" )
    resource.AddSingleFile( "sound/bf3/callout7.wav" )
    resource.AddSingleFile( "sound/bf3/callout8.wav" )
    resource.AddSingleFile( "sound/bf3/callout9.wav" )
    resource.AddSingleFile( "sound/bf3/spot1.wav" )
    resource.AddSingleFile( "sound/bf3/spot10.wav" )
    resource.AddSingleFile( "sound/bf3/spot11.wav" )
    resource.AddSingleFile( "sound/bf3/spot12.wav" )
    resource.AddSingleFile( "sound/bf3/spot13.wav" )
    resource.AddSingleFile( "sound/bf3/spot14.wav" )
    resource.AddSingleFile( "sound/bf3/spot15.wav" )
    resource.AddSingleFile( "sound/bf3/spot16.wav" )
    resource.AddSingleFile( "sound/bf3/spot17.wav" )
    resource.AddSingleFile( "sound/bf3/spot18.wav" )
    resource.AddSingleFile( "sound/bf3/spot19.wav" )
    resource.AddSingleFile( "sound/bf3/spot2.wav" )
    resource.AddSingleFile( "sound/bf3/spot20.wav" )
    resource.AddSingleFile( "sound/bf3/spot21.wav" )
    resource.AddSingleFile( "sound/bf3/spot22.wav" )
    resource.AddSingleFile( "sound/bf3/spot23.wav" )
    resource.AddSingleFile( "sound/bf3/spot24.wav" )
    resource.AddSingleFile( "sound/bf3/spot25.wav" )
    resource.AddSingleFile( "sound/bf3/spot26.wav" )
    resource.AddSingleFile( "sound/bf3/spot27.wav" )
    resource.AddSingleFile( "sound/bf3/spot28.wav" )
    resource.AddSingleFile( "sound/bf3/spot29.wav" )
    resource.AddSingleFile( "sound/bf3/spot3.wav" )
    resource.AddSingleFile( "sound/bf3/spot30.wav" )
    resource.AddSingleFile( "sound/bf3/spot31.wav" )
    resource.AddSingleFile( "sound/bf3/spot32.wav" )
    resource.AddSingleFile( "sound/bf3/spot33.wav" )
    resource.AddSingleFile( "sound/bf3/spot34.wav" )
    resource.AddSingleFile( "sound/bf3/spot4.wav" )
    resource.AddSingleFile( "sound/bf3/spot5.wav" )
    resource.AddSingleFile( "sound/bf3/spot6.wav" )
    resource.AddSingleFile( "sound/bf3/spot7.wav" )
    resource.AddSingleFile( "sound/bf3/spot8.wav" )
    resource.AddSingleFile( "sound/bf3/spot9.wav" )
    resource.AddSingleFile( "models/weapons/v_snip_scoub.mdl" )
    resource.AddSingleFile( "models/weapons/w_snip_scoub.mdl" )
    resource.AddSingleFile( "models/ml/arrow.mdl" )
    resource.AddSingleFile( "models/ml/bf3bolt.mdl" )
    resource.AddSingleFile( "models/ml/bolt.mdl" )
    resource.AddSingleFile( "materials/VGUI/entities/bow.vmt" )
    resource.AddSingleFile( "materials/VGUI/entities/bow.vtf" )
    resource.AddSingleFile( "materials/models/weapons/w_models/Requests Studio/SF2/Bow Body.vmt" )
    resource.AddSingleFile( "materials/models/weapons/w_models/Requests Studio/SF2/Bow Sight.vmt" )
    resource.AddSingleFile( "materials/models/weapons/v_models/Requests Studio/SF2/Bow Body D.vtf" )
    resource.AddSingleFile( "materials/models/weapons/v_models/Requests Studio/SF2/Bow Body N.vtf" )
    resource.AddSingleFile( "materials/models/weapons/v_models/Requests Studio/SF2/Bow Body S.vtf" )
    resource.AddSingleFile( "materials/models/weapons/v_models/Requests Studio/SF2/Bow Body.vmt" )
    resource.AddSingleFile( "materials/models/weapons/v_models/Requests Studio/SF2/Bow Sight D.vtf" )
    resource.AddSingleFile( "materials/models/weapons/v_models/Requests Studio/SF2/Bow Sight N.vtf" )
    resource.AddSingleFile( "materials/models/weapons/v_models/Requests Studio/SF2/Bow Sight S.vtf" )
    resource.AddSingleFile( "materials/models/weapons/v_models/Requests Studio/SF2/Bow Sight.vmt" )
    resource.AddSingleFile( "materials/models/weapons/v_models/hands/v_hands_gloves_sf2 d.vtf" )
    resource.AddSingleFile( "materials/models/weapons/v_models/hands/v_hands_gloves_sf2 n.vtf" )
    resource.AddSingleFile( "materials/models/weapons/v_models/hands/v_hands_gloves_sf2 s.vtf" )
    resource.AddSingleFile( "materials/models/weapons/v_models/hands/v_hands_gloves_sf2.vmt" )
    resource.AddSingleFile( "materials/models/weapons/v_models/hands/v_hands_sleeves_sf2 d.vtf" )
    resource.AddSingleFile( "materials/models/weapons/v_models/hands/v_hands_sleeves_sf2 n.vtf" )
    resource.AddSingleFile( "materials/models/weapons/v_models/hands/v_hands_sleeves_sf2 s.vtf" )
    resource.AddSingleFile( "materials/models/weapons/v_models/hands/v_hands_sleeves_sf2.vmt" )
    resource.AddSingleFile( "materials/models/weapons/v_models/hands/v_hands_watch_sf2 d.vtf" )
    resource.AddSingleFile( "materials/models/weapons/v_models/hands/v_hands_watch_sf2 n.vtf" )
    resource.AddSingleFile( "materials/models/weapons/v_models/hands/v_hands_watch_sf2 s.vtf" )
    resource.AddSingleFile( "materials/models/weapons/v_models/hands/v_hands_watch_sf2.vmt" )
    resource.AddSingleFile( "materials/models/ml/g18.vmt" )
    resource.AddSingleFile( "materials/models/ml/g18.vtf" )
    resource.AddSingleFile( "materials/models/ml/v_hands_sleeves_sf2 d.vtf" )
    resource.AddSingleFile( "materials/models/ml/v_hands_sleeves_sf2 n.vtf" )
    resource.AddSingleFile( "materials/models/ml/v_hands_sleeves_sf2 s.vtf" )
    resource.AddSingleFile( "materials/models/ml/v_hands_sleeves_sf2.vmt" )
end

if ( CLIENT ) then
    SWEP.Slot      = 6 
    SWEP.DrawAmmo            = true
    SWEP.DrawCrosshair        = false
    SWEP.ViewModelFOV        = 65
    SWEP.ViewModelFlip        = false
    SWEP.CSMuzzleFlashes    = true
    if file.Exists("materials/vgui/entities/bow.vmt", "GAME") then
		SWEP.Icon = "vgui/entities/novoice.vmt"
	else
		SWEP.Icon = "VGUI/ttt/icon_scout"
	end

	SWEP.EquipMenuData = {
      type = "Weapon",
      desc = "A silent compound bow."
   };
end

SWEP.Kind = WEAPON_EQUIP1
SWEP.AutoSpawnable = false
SWEP.AmmoEnt = "item_ammo_357_ttt"
SWEP.CanBuy = { ROLE_TRAITOR }
SWEP.InLoadoutFor = nil
SWEP.LimitedStock = true
SWEP.AllowDrop = true
SWEP.IsSilent = true
if (SERVER) then

    AddCSLuaFile( "shared.lua" )
    SWEP.Weight                = 5
    SWEP.AutoSwitchTo        = false
    SWEP.AutoSwitchFrom        = false

end

if ( CLIENT ) then

    SWEP.DrawAmmo            = true
    SWEP.DrawCrosshair        = false
    SWEP.ViewModelFOV        = 65
    SWEP.ViewModelFlip        = false
    SWEP.CSMuzzleFlashes    = true
    
end
SWEP.Base                   = "exp_bow"
SWEP.Category                = "EXP 2 Weapons"
SWEP.PrintName                 = "Barnett Infinite Bow"
SWEP.HoldType                 = "rpg"
SWEP.Slot = 3
SWEP.SlotPos = 2

SWEP.Author            = "Mighty Lolrus"


SWEP.ViewModel                  = "models/weapons/v_snip_scoub.mdl"
SWEP.WorldModel 				= "models/blackout.mdl"



SWEP.Spawnable            = true
SWEP.AdminSpawnable        = true

SWEP.Primary.Sound			= Sound("weapons/Requests Studio/SF2/fire.wav")
SWEP.Primary.Round			= ("arrow")
SWEP.Primary.RPM			=  37
SWEP.Primary.ClipSize			= 200		
SWEP.Primary.DefaultClip		= 200
SWEP.Primary.ConeSpray			= 1.5					
SWEP.Primary.ConeIncrement		= 4.0					
SWEP.Primary.ConeMax			= 4.0					
SWEP.Primary.ConeDecrement		= 0.1					
SWEP.Primary.KickUp			= 0
SWEP.Primary.KickDown			= 0					
SWEP.Primary.KickHorizontal		= 0					
SWEP.Primary.Automatic			= false					
SWEP.Primary.Ammo			= "Arrows"

SWEP.Secondary.ClipSize			= 1						
SWEP.Secondary.DefaultClip		= 1						
SWEP.Secondary.Automatic		= false						
SWEP.Secondary.Ammo			= ""
SWEP.Secondary.IronFOV			= 60



SWEP.IronSightsPos = Vector(-13.41, -13.308, 18.549)
SWEP.IronSightsAng = Vector(1.5, -0.401, -53.741)

SWEP.SightsPos = Vector(-13.41, -13.308, 18.549)
SWEP.SightsAng = Vector(1.5, -0.401, -53.741)

SWEP.RunSightsPos = Vector(0, 0, 0)
SWEP.RunSightsAng = Vector(-7.993, 6.889, 9.093)

SWEP.WElements = {
	["w_model"] = { type = "Model", model = "models/weapons/w_snip_scoub.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "", pos = Vector(-5.909, 0, 0), angle = Angle(-15.341, -1.024, 30), size = Vector(0.5, 0.5, 0.5), color = Color(255, 255, 255, 255), surpresslightning = false, material = "", skin = 0, bodygroup = {} }
}



function SWEP:PrimaryAttack()
	if self:CanPrimaryAttack() then
		self:FireRocket()
		self.Weapon:EmitSound(self.Primary.Sound)
		self.Weapon:TakePrimaryAmmo(1)
		self.Weapon:SendWeaponAnim( ACT_VM_PRIMARYATTACK )
		timer.Simple( 0.9, function() self.Weapon:EmitSound("weapons/Requests Studio/SF2/arrowin.wav") end )
		timer.Simple( 0.05, function() self.Weapon:EmitSound("bf3/callout"..math.random(1,200)..".wav") end )
		self.Owner:GetViewModel():SetPlaybackRate( 1 ) 
		local fx 		= EffectData()
		fx:SetEntity(self.Weapon)
		fx:SetOrigin(self.Owner:GetShootPos())
		fx:SetNormal(self.Owner:GetAimVector())
		fx:SetAttachment(self.MuzzleAttachment)
		util.Effect("gdcw_muzzle",fx)
		self.Owner:SetAnimation( PLAYER_ATTACK1 )
		self.Owner:MuzzleFlash()
		self.Weapon:SetNextPrimaryFire(CurTime()+1/(self.Primary.RPM/60))
	end
end












    
function SWEP:Initialize()
 
   if ( SERVER ) then
        self:SetNPCMinBurst( 0.01 )
        self:SetNPCMaxBurst( 0.04 )
        self:SetNPCFireRate( 0.1 )
    end
            self.Weapon:SetDeploySpeed( self.WeaponDeploySpeed )
    self:SetWeaponHoldType( self.HoldType )
                 self.Primary.Cone = self.HipCone
    self.Weapon:SetNetworkedBool( "Ironsights", false )
     gap = 05    mm = 20

	if CLIENT then
	
		// Create a new table for every weapon instance
		self.VElements = table.FullCopy( self.VElements )
		self.WElements = table.FullCopy( self.WElements )
		self.ViewModelBoneMods = table.FullCopy( self.ViewModelBoneMods )

		self:CreateModels(self.VElements) // create viewmodels
		self:CreateModels(self.WElements) // create worldmodels
		
		
		
		
		
		
	end
end

function SWEP:Holster()
	
	if CLIENT then
		local vm = self.Owner:GetViewModel()
		if IsValid(vm) then
			self:ResetBonePositions(vm)
		end
	end
	
	return true
end

if CLIENT then

	SWEP.vRenderOrder = nil
	function SWEP:ViewModelDrawn()
		
		local vm = self.Owner:GetViewModel()
		if !IsValid(vm) then return end
		
		if (!self.VElements) then return end
		
		self:UpdateBonePositions(vm)

		if (!self.vRenderOrder) then
			
			// we build a render order because sprites need to be drawn after models
			self.vRenderOrder = {}

			for k, v in pairs( self.VElements ) do
				if (v.type == "Model") then
					table.insert(self.vRenderOrder, 1, k)
				elseif (v.type == "Sprite" or v.type == "Quad") then
					table.insert(self.vRenderOrder, k)
				end
			end
			
		end

		for k, name in ipairs( self.vRenderOrder ) do
		
			local v = self.VElements[name]
			if (!v) then self.vRenderOrder = nil break end
			if (v.hide) then continue end
			
			local model = v.modelEnt
			local sprite = v.spriteMaterial
			
			if (!v.bone) then continue end
			
			local pos, ang = self:GetBoneOrientation( self.VElements, v, vm )
			
			if (!pos) then continue end
			
			if (v.type == "Model" and IsValid(model)) then

				model:SetPos(pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z )
				ang:RotateAroundAxis(ang:Up(), v.angle.y)
				ang:RotateAroundAxis(ang:Right(), v.angle.p)
				ang:RotateAroundAxis(ang:Forward(), v.angle.r)

				model:SetAngles(ang)
				//model:SetModelScale(v.size)
				local matrix = Matrix()
				matrix:Scale(v.size)
				model:EnableMatrix( "RenderMultiply", matrix )
				
				if (v.material == "") then
					model:SetMaterial("")
				elseif (model:GetMaterial() != v.material) then
					model:SetMaterial( v.material )
				end
				
				if (v.skin and v.skin != model:GetSkin()) then
					model:SetSkin(v.skin)
				end
				
				if (v.bodygroup) then
					for k, v in pairs( v.bodygroup ) do
						if (model:GetBodygroup(k) != v) then
							model:SetBodygroup(k, v)
						end
					end
				end
				
				if (v.surpresslightning) then
					render.SuppressEngineLighting(true)
				end
				
				render.SetColorModulation(v.color.r/255, v.color.g/255, v.color.b/255)
				render.SetBlend(v.color.a/255)
				model:DrawModel()
				render.SetBlend(1)
				render.SetColorModulation(1, 1, 1)
				
				if (v.surpresslightning) then
					render.SuppressEngineLighting(false)
				end
				
			elseif (v.type == "Sprite" and sprite) then
				
				local drawpos = pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z
				render.SetMaterial(sprite)
				render.DrawSprite(drawpos, v.size.x, v.size.y, v.color)
				
			elseif (v.type == "Quad" and v.draw_func) then
				
				local drawpos = pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z
				ang:RotateAroundAxis(ang:Up(), v.angle.y)
				ang:RotateAroundAxis(ang:Right(), v.angle.p)
				ang:RotateAroundAxis(ang:Forward(), v.angle.r)
				
				cam.Start3D2D(drawpos, ang, v.size)
					v.draw_func( self )
				cam.End3D2D()

			end
			
		end
		
	end

	SWEP.wRenderOrder = nil
	function SWEP:DrawWorldModel()
		
		if (self.ShowWorldModel == nil or self.ShowWorldModel) then
			self:DrawModel()
		end
		
		if (!self.WElements) then return end
		
		if (!self.wRenderOrder) then

			self.wRenderOrder = {}

			for k, v in pairs( self.WElements ) do
				if (v.type == "Model") then
					table.insert(self.wRenderOrder, 1, k)
				elseif (v.type == "Sprite" or v.type == "Quad") then
					table.insert(self.wRenderOrder, k)
				end
			end

		end
		
		if (IsValid(self.Owner)) then
			bone_ent = self.Owner
		else
			// when the weapon is dropped
			bone_ent = self
		end
		
		for k, name in pairs( self.wRenderOrder ) do
		
			local v = self.WElements[name]
			if (!v) then self.wRenderOrder = nil break end
			if (v.hide) then continue end
			
			local pos, ang
			
			if (v.bone) then
				pos, ang = self:GetBoneOrientation( self.WElements, v, bone_ent )
			else
				pos, ang = self:GetBoneOrientation( self.WElements, v, bone_ent, "ValveBiped.Bip01_R_Hand" )
			end
			
			if (!pos) then continue end
			
			local model = v.modelEnt
			local sprite = v.spriteMaterial
			
			if (v.type == "Model" and IsValid(model)) then

				model:SetPos(pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z )
				ang:RotateAroundAxis(ang:Up(), v.angle.y)
				ang:RotateAroundAxis(ang:Right(), v.angle.p)
				ang:RotateAroundAxis(ang:Forward(), v.angle.r)

				model:SetAngles(ang)
				//model:SetModelScale(v.size)
				local matrix = Matrix()
				matrix:Scale(v.size)
				model:EnableMatrix( "RenderMultiply", matrix )
				
				if (v.material == "") then
					model:SetMaterial("")
				elseif (model:GetMaterial() != v.material) then
					model:SetMaterial( v.material )
				end
				
				if (v.skin and v.skin != model:GetSkin()) then
					model:SetSkin(v.skin)
				end
				
				if (v.bodygroup) then
					for k, v in pairs( v.bodygroup ) do
						if (model:GetBodygroup(k) != v) then
							model:SetBodygroup(k, v)
						end
					end
				end
				
				if (v.surpresslightning) then
					render.SuppressEngineLighting(true)
				end
				
				render.SetColorModulation(v.color.r/255, v.color.g/255, v.color.b/255)
				render.SetBlend(v.color.a/255)
				model:DrawModel()
				render.SetBlend(1)
				render.SetColorModulation(1, 1, 1)
				
				if (v.surpresslightning) then
					render.SuppressEngineLighting(false)
				end
				
			elseif (v.type == "Sprite" and sprite) then
				
				local drawpos = pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z
				render.SetMaterial(sprite)
				render.DrawSprite(drawpos, v.size.x, v.size.y, v.color)
				
			elseif (v.type == "Quad" and v.draw_func) then
				
				local drawpos = pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z
				ang:RotateAroundAxis(ang:Up(), v.angle.y)
				ang:RotateAroundAxis(ang:Right(), v.angle.p)
				ang:RotateAroundAxis(ang:Forward(), v.angle.r)
				
				cam.Start3D2D(drawpos, ang, v.size)
					v.draw_func( self )
				cam.End3D2D()

			end
			
		end
		
	end

	function SWEP:GetBoneOrientation( basetab, tab, ent, bone_override )
		
		local bone, pos, ang
		if (tab.rel and tab.rel != "") then
			
			local v = basetab[tab.rel]
			
			if (!v) then return end
			
			// Technically, if there exists an element with the same name as a bone
			// you can get in an infinite loop. Let's just hope nobody's that stupid.
			pos, ang = self:GetBoneOrientation( basetab, v, ent )
			
			if (!pos) then return end
			
			pos = pos + ang:Forward() * v.pos.x + ang:Right() * v.pos.y + ang:Up() * v.pos.z
			ang:RotateAroundAxis(ang:Up(), v.angle.y)
			ang:RotateAroundAxis(ang:Right(), v.angle.p)
			ang:RotateAroundAxis(ang:Forward(), v.angle.r)
				
		else
		
			bone = ent:LookupBone(bone_override or tab.bone)

			if (!bone) then return end
			
			pos, ang = Vector(0,0,0), Angle(0,0,0)
			local m = ent:GetBoneMatrix(bone)
			if (m) then
				pos, ang = m:GetTranslation(), m:GetAngles()
			end
			
			if (IsValid(self.Owner) and self.Owner:IsPlayer() and 
				ent == self.Owner:GetViewModel() and self.ViewModelFlip) then
				ang.r = -ang.r // Fixes mirrored models
			end
		
		end
		
		return pos, ang
	end

	function SWEP:CreateModels( tab )

		if (!tab) then return end

		// Create the clientside models here because Garry says we can't do it in the render hook
		for k, v in pairs( tab ) do
			if (v.type == "Model" and v.model and v.model != "" and (!IsValid(v.modelEnt) or v.createdModel != v.model) and 
					string.find(v.model, ".mdl") and file.Exists (v.model, "GAME") ) then
				
				v.modelEnt = ClientsideModel(v.model, RENDER_GROUP_VIEW_MODEL_OPAQUE)
				if (IsValid(v.modelEnt)) then
					v.modelEnt:SetPos(self:GetPos())
					v.modelEnt:SetAngles(self:GetAngles())
					v.modelEnt:SetParent(self)
					v.modelEnt:SetNoDraw(true)
					v.createdModel = v.model
				else
					v.modelEnt = nil
				end
				
			elseif (v.type == "Sprite" and v.sprite and v.sprite != "" and (!v.spriteMaterial or v.createdSprite != v.sprite) 
				and file.Exists ("materials/"..v.sprite..".vmt", "GAME")) then
				
				local name = v.sprite.."-"
				local params = { ["$basetexture"] = v.sprite }
				// make sure we create a unique name based on the selected options
				local tocheck = { "nocull", "additive", "vertexalpha", "vertexcolor", "ignorez" }
				for i, j in pairs( tocheck ) do
					if (v[j]) then
						params["$"..j] = 1
						name = name.."1"
					else
						name = name.."0"
					end
				end

				v.createdSprite = v.sprite
				v.spriteMaterial = CreateMaterial(name,"UnlitGeneric",params)
				
			end
		end
		
	end
	
	local allbones
	local hasGarryFixedBoneScalingYet = false

	function SWEP:UpdateBonePositions(vm)
		
		if self.ViewModelBoneMods then
			
			if (!vm:GetBoneCount()) then return end
			
			// !! WORKAROUND !! //
			// We need to check all model names :/
			local loopthrough = self.ViewModelBoneMods
			if (!hasGarryFixedBoneScalingYet) then
				allbones = {}
				for i=0, vm:GetBoneCount() do
					local bonename = vm:GetBoneName(i)
					if (self.ViewModelBoneMods[bonename]) then 
						allbones[bonename] = self.ViewModelBoneMods[bonename]
					else
						allbones[bonename] = { 
							scale = Vector(1,1,1),
							pos = Vector(0,0,0),
							angle = Angle(0,0,0)
						}
					end
				end
				
				loopthrough = allbones
			end
			// !! ----------- !! //
			
			for k, v in pairs( loopthrough ) do
				local bone = vm:LookupBone(k)
				if (!bone) then continue end
				
				// !! WORKAROUND !! //
				local s = Vector(v.scale.x,v.scale.y,v.scale.z)
				local p = Vector(v.pos.x,v.pos.y,v.pos.z)
				local ms = Vector(1,1,1)
				if (!hasGarryFixedBoneScalingYet) then
					local cur = vm:GetBoneParent(bone)
					while(cur >= 0) do
						local pscale = loopthrough[vm:GetBoneName(cur)].scale
						ms = ms * pscale
						cur = vm:GetBoneParent(cur)
					end
				end
				
				s = s * ms
				// !! ----------- !! //
				
				if vm:GetManipulateBoneScale(bone) != s then
					vm:ManipulateBoneScale( bone, s )
				end
				if vm:GetManipulateBoneAngles(bone) != v.angle then
					vm:ManipulateBoneAngles( bone, v.angle )
				end
				if vm:GetManipulateBonePosition(bone) != p then
					vm:ManipulateBonePosition( bone, p )
				end
			end
		else
			self:ResetBonePositions(vm)
		end
		   
	end
	 
	function SWEP:ResetBonePositions(vm)
		
		if (!vm:GetBoneCount()) then return end
		for i=0, vm:GetBoneCount() do
			vm:ManipulateBoneScale( i, Vector(1, 1, 1) )
			vm:ManipulateBoneAngles( i, Angle(0, 0, 0) )
			vm:ManipulateBonePosition( i, Vector(0, 0, 0) )
		end
		
	end

	/**************************
		Global utility code
	**************************/

	// Fully copies the table, meaning all tables inside this table are copied too and so on (normal table.Copy copies only their reference).
	// Does not copy entities of course, only copies their reference.
	// WARNING: do not use on tables that contain themselves somewhere down the line or you'll get an infinite loop
	function table.FullCopy( tab )

		if (!tab) then return nil end
		
		local res = {}
		for k, v in pairs( tab ) do
			if (type(v) == "table") then
				res[k] = table.FullCopy(v) // recursion ho!
			elseif (type(v) == "Vector") then
				res[k] = Vector(v.x, v.y, v.z)
			elseif (type(v) == "Angle") then
				res[k] = Angle(v.p, v.y, v.r)
			else
				res[k] = v
			end
		end
		
		return res
		
	end
	
end


Here is the directory to the fastdl files (I have custom player models on it that download and work so IDK why this weapon won’t)

http://96.251.111.183/gmodds/garrysmod/

The files should be in the right location, is there anything that I’m missing?

Thanks!

edit* I noticed the HTML server isnt showing that I have premission to the garrysmod/sound directory, not sure if this is affecting it.

Try to google next time.

I have spent hours googling to find an answer and I have even read that post multiple times. Still doesn’t work. That’s why I posted on here.