Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

I keep getting this error attempt to index local 'level' (a nil value). Help?

game.Players.PlayerAdded:Connect(function(plr)
	local leaderstats = Instance.new("Folder")
	leaderstats.Name = "leaderstats"
	leaderstats.Parent = plr
	local stage = Instance.new("IntValue",leaderstats)
	stage.Parent = leaderstats
	stage.Value = 1
	stage.Name = "Stage"
	plr.CharacterAdded:Connect(function(Character)
		repeat wait() until Character ~= nil
		local Level = game.Workspace.AllCheckpoints:FindFirstChild(stage.Value)
		Level.Value = stage.Value
		Character:WaitForChild("HumanoidRootPart").CFrame = Level.stage + Vector3(0,5,0)
	end)
end)

I dont know what is wrong with this script. Could you help me. It says "attempt to index local 'level' (a nil value)" Please help me It says there is an error in line 12.

2 comments

0

Your code is so messy and hard to read.. lol

0

I edited it, you should see it correctly now

2 answers

FindFirstChild will return the child instance with the given name of nil if no child with that given name is found.

In your code you are passing a int (number) as a parameter to FindFirstChild which expects a string. I would just use a string for simplicity at this stage. Secondly you would need a fall back position if something goes wrong this would be the default spawn position.

e.g.

if Level ~= nil then
	-- spawn to level
else
	-- spawn to default
end

Other points

repeat wait() until Character ~= nil would never be nil and can cause issues as you are using wait(). I would remove this.

The parent argument for Instance.new should not be used. You sould setup the instance and then set its parent last. The root instance (what you parent to the game / workspace) should be parented last.

in short follow create, setup, parent to instance, parent to game. This will reduce overheads with replicating changes in the game ie only do it once.

Putting this all together.

game.Players.PlayerAdded:Connect(function(plr)

	local leaderstats = Instance.new("Folder")
	leaderstats.Name = "leaderstats"
	
	local stage = Instance.new("StringValue")
	stage.Value = "1"
	stage.Name = "Stage"
	stage.Parent = leaderstats
	
	leaderstats.Parent = plr -- parent to game last
	
	plr.CharacterAdded:Connect(function(Character)
		local Level = game.Workspace.AllCheckpoints:FindFirstChild(stage.Value)
		
		if Level then
			--Level.Value = stage.Value -- i am not sure why you want to do this it would break for everyone
			Character:WaitForChild("HumanoidRootPart").CFrame = Level.stage + Vector3(0,5,0)
		else
			-- default ??
		end
	end)
end)

I hope this helps.

You didn't capitalize level, even though you did as a variable.

game.Players.PlayerAdded:Connect(function(plr) 
	local leaderstats = Instance.new("Folder") 
	leaderstats.Name = "leaderstats" 
	leaderstats.Parent = plr 
	local stage = Instance.new("IntValue",leaderstats) 
	stage.Parent = leaderstats 
	stage.Value = 1 
	stage.Name = "Stage" 
	plr.CharacterAdded:Connect(function(Character) 
		repeat wait() until Character ~= nil 
		local Level = game.Workspace.AllCheckpoints:FindFirstChild(stage.Value) 
		Level.Value = stage.Value 
		Character:WaitForChild("HumanoidRootPart").CFrame = Level.stage + Vector3(0,5,0) -- You capitalized level as a variable but you forgot to capitalize it when you said "level.stage"
	end) 
end)

1 comment

0

It still says the same error

This discussion is preserved as it was. New answers, comments, and votes are closed.