Spawning with weapon error

So I got the following code to spawn players with a random weapon between a set list. I’ve already edited it to fit my server’s ranks. It works…mostly. The issue is that when they start the preround, the player does not receive a crowbar, holstered, or magnetostick until the start of the round. Also, for most guns the player has no hands(the gun floats and reloads with magic). The following is the code:


-- This is some old code someone made before, I refined it and changed only a few things.
-- Therefore, I'm not claiming credit for the code (majority)
-- but I'm just going to say I authored this right here (Zero the fallen)


if SERVER then
    util.AddNetworkString("TTTDonatorWeapons")
	local grey = Color(150,150,150)
	local dark grey = Color(200,200,200)
	local white 	= Color(255,255,255)
	local red 		= Color(255,0,0)	
	local green 	= Color(0,255,0)	
	local blue 		= Color(0,0,255)	
	local black 	= Color(0,0,0)

	-- add/remove weapons in the table as you wish, because you might not have some that are in the table therefore they won't spawn. EG MP5/ETC
	
    function WeaponStart( ply )
       
	   local primaryWep = 
		{"weapon_ttt_m16","Pistol",20,"an M16",
		"weapon_zm_mac10","smg1",30,"a MAC10",
		"Weapon_Galil","Pistol",30,"a Galil",
		"weapon_zm_shotgun","Buckshot",16,"a Shotgun",
		"weapon_zm_rifle","357",10,"a Rifle",
		"weapon_ttt_mp5","smg1",30,"a mp5"}
		
		
	
		
		
        if ply:Team() == 1 then
            if(ply:IsUserGroup("Owner") or ply:IsUserGroup("Co-Owner") or ply:IsUserGroup("superadmin") or ply:IsUserGroup("admin") or ply:IsUserGroup("VIP")) then -- You Can change "Respect" to anything you wish, or add more "IsUserGroup" shit
			
			
                -- Primary Weapon Start - Chooses Primary weapon
                pDisplay = math.random(1,6)*4
                pAmmo,pType,pName = primaryWep[pDisplay-1],primaryWep[pDisplay-2],primaryWep[pDisplay-3]
                pDisplay = primaryWep[pDisplay]
                ply:Give(pName)
                ply:GiveAmmo(pAmmo,pType)
				
				
                net.Start("TTTDonatorWeapons")
                    net.WriteTable({white,"[",blue,"wD Donator Weapons",white,"]",black,": ",dgrey,"You received ".. pDisplay .. " with " .. sDisplay .. " and " .. gDisplay .. "!"})
                net.Send(ply)
				
				-- This starts the networking, and sends the table after the weapons are given.
				
            end
        end
    end
    hook.Add("PlayerSpawn", "WeaponStart", WeaponStart )
 
 
end


if CLIENT then
    net.Receive("TTTDonatorWeapons",function()
    local tbl = net.ReadTable()
    if tbl != nil then
    chat.AddText(unpack(tbl))
    else
    print("Empty Table. - Debug")
    end
    end)
end