Problem with WElements...

Hi everyone! I always work on my CakeScript changed and I create weapons, NOHD this is my first weapon is a deck. So as there is no model in W hl2, I left the line like this:

SWEP.WorldModel = “”

So, to still have a model pick in hand, I create this code snippet:

SWEP.WElements = {
["pickaxe"] = { type = "Model", model = "models/props_mining/pickaxe01.mdl", bone = "ValveBiped.Bip01_R_Hand", rel = "", pos = Vector(2.825, 1.361, 4.693), angle = Angle(-177.907, 0, 0), size = Vector(0.722, 0.722, 0.722), color = Color(255, 255, 255, 255), surpresslightning = false, material = "", skin = 0, bodygroup = {} }
}

So what is in the hands of the pick (model HL2: EP2). But I can not put this paragraph in my code of my weapon as follows:

if (SERVER) then
AddCSLuaFile( “shared.lua” )
SWEP.Weight = 5
SWEP.AutoSwitchTo = false
SWEP.AutoSwitchFrom = false
end

if ( CLIENT ) then
SWEP.PrintName = “Pickaxe”
SWEP.Author = “Lyc@n”
SWEP.Contact = “”
SWEP.DrawAmmo = false
SWEP.DrawCrosshair = false
SWEP.ViewModelFOV = 70
SWEP.ViewModelFlip = false
SWEP.CSMuzzleFlashes = false
end

SWEP.Category = “RP Weapons”
SWEP.Spawnable = true
SWEP.AdminSpawnable = true

SWEP.ViewModel = “models/props_mining/pickaxe01.mdl”
SWEP.WorldModel = “”

SWEP.Primary.Sound = Sound(“Weapon_Crowbar.Single”)
SWEP.Primary.Damage = 75
SWEP.Primary.NumShots = 0
SWEP.Primary.Recoil = 0.8
SWEP.Primary.Cone = 0.1
SWEP.Primary.Delay = 0.5
SWEP.Primary.ClipSize = -1
SWEP.Primary.DefaultClip = -1
SWEP.Primary.Tracer = 0
SWEP.Primary.Force = 15
SWEP.Primary.TakeAmmoPerBullet = false
SWEP.Primary.Automatic = true
SWEP.Primary.Ammo = “none”

SWEP.Secondary.ClipSize = 0
SWEP.Secondary.DefaultClip = 0

SWEP.IronSightsPos = Vector(-51.28, -5.12, -6.231)
SWEP.IronSightsAng = Vector(37.349, -133.801, 650.599)

function SWEP:Reload()
end

function SWEP:PrimaryAttack()
self.Weapon:SetNextSecondaryFire( CurTime() + self.Secondary.Delay )
self.Weapon:SetNextPrimaryFire( CurTime() + self.Primary.Delay )
self.Weapon:EmitSound( self.Primary.Sound )
self:Slash()
self.Owner:SetAnimation( PLAYER_ATTACK1 )
end
end
end

function SWEP:SecondaryAttack()
end

function SWEP:Think()
end

function SWEP:Initialize()

self.HoldType = "melee2" //Sets their holdtype to that of the AR2
self:SetWeaponHoldType( self.HoldType )

end

Where I have to put this paragraph in the code for my weapon? Thank you!

First of all, always put your code in lua tags.
Secondly, You can just shove that code snippet anywhere in your code. However, you need to include the base weapon creator code there too.
[lua]
/**************************************************
SWEP Construction Kit base code
Created by Clavus
Available for public use, thread at:
facepunch.com/threads/1032378
**************************************************/

function SWEP:Initialize()

// other initialize code goes here

if CLIENT then
 
    self:CreateModels(self.VElements) // create viewmodels
    self:CreateModels(self.WElements) // create worldmodels
     
    // init view model bone build function
    self.BuildViewModelBones = function( s )
        if LocalPlayer():GetActiveWeapon() == self and self.ViewModelBonescales then
            for k, v in pairs( self.ViewModelBonescales ) do
                local bone = s:LookupBone(k)
                if (!bone) then continue end
                local m = s:GetBoneMatrix(bone)
                if (!m) then continue end
                m:Scale(v)
                s:SetBoneMatrix(bone, m)
            end
        end
    end
     
end

end

function SWEP:OnRemove()

// other onremove code goes here
 
if CLIENT then
    self:RemoveModels()
end

end

if CLIENT then

SWEP.vRenderOrder = nil
function SWEP:ViewModelDrawn()
     
    local vm = self.Owner:GetViewModel()
    if !ValidEntity(vm) then return end
     
    if (!self.VElements) then return end
     
    if vm.BuildBonePositions ~= self.BuildViewModelBones then
        vm.BuildBonePositions = self.BuildViewModelBones
    end

    if (self.ShowViewModel == nil or self.ShowViewModel) then
        vm:SetColor(255,255,255,255)
    else
        // we set the alpha to 1 instead of 0 because else ViewModelDrawn stops being called
        vm:SetColor(255,255,255,1) 
    end
     
    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
     
        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 ValidEntity(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)
             
            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 (ValidEntity(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
         
        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 ValidEntity(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)
             
            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:GetAngle()
        end
         
        if (ValidEntity(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 (!ValidEntity(v.modelEnt) or v.createdModel != v.model) and
                string.find(v.model, ".mdl") and file.Exists ("../"..v.model) ) then
             
            v.modelEnt = ClientsideModel(v.model, RENDER_GROUP_VIEW_MODEL_OPAQUE)
            if (ValidEntity(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")) 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

function SWEP:OnRemove()
    self:RemoveModels()
end

function SWEP:RemoveModels()
    if (self.VElements) then
        for k, v in pairs( self.VElements ) do
            if (ValidEntity( v.modelEnt )) then v.modelEnt:Remove() end
        end
    end
    if (self.WElements) then
        for k, v in pairs( self.WElements ) do
            if (ValidEntity( v.modelEnt )) then v.modelEnt:Remove() end
        end
    end
    self.VElements = nil
    self.WElements = nil
end

end
[/lua]
Just put it at the end of your code.

And don’t forget to merge your current SWEP:Initialize function with that of the base code.