Give being really annoying... (error)


local handies = { "dab", "facepunch", "flip", "salute", "middlefinger" }

player_steam = {
	p_hands = { "STEAM_0:1:71985228", "STEAM_0:1:80425272" },
	p_lightsaber = { "STEAM_0:1:71985228", "STEAM_0:1:80425272" },
	p_doorswep = { "STEAM_0:1:71985228", "STEAM_0:1:80425272"  }
}

timer.Create( "Perma_Shit", 1, 0, function()
	for _,ply in pairs( player.GetAll() ) do
		ply.Knife = ply:GetPData( "PermaKnife" )

		if isstring( ply.Knife ) or ply.Knife then
			ply:Give( ply.Knife )
		end

		for _,v in pairs( player_steam.p_hands ) do
			if ply:SteamID() == v then
				for _,k in pairs( handies ) do
					if ply:HasWeapon( k ) != true then
						ply:Give( tostring(k) )
					end
				end
			end
		end
		
		for _,v in pairs( player_steam.p_lightsaber ) do
			if ply:SteamID() == v then
				if ply:HasWeapon( "weapon_lightsaber" ) != true then
					ply:Give( "weapon_lightsaber" )
				end
			end
		end

		for _,v in pairs( player_steam.p_doorswep ) do
			if ply:SteamID() == v then
				if ply:HasWeapon( "doorswep" ) != true then
					ply:Give( "doorswep" )
				end
			end
		end

		if ply:IsUserGroup( "donator" ) then
			for k,v in pairs( handies ) do
				if ply:HasWeapon( v ) != true then
					ply:Give( v )
				end
			end

			if ply:HasWeapon( "doorswep" ) != true then
				ply:Give( "doorswep" )
			end
		end
	end
end )

Give always returns[ERROR] lua/autorun/jacobs_shit.lua:45: attempt to call method ‘Give’ (a nil value)

  1. unknown - lua/autorun/jacobs_shit.lua:45

But, I the first statement (knife) always works.
Everything after that errors? Anyone know why?