So I'm working on this obby spawn and leaderstats script. I haven't added a part where the player is put at the right spawn, this question is about updating what stage the player is on. The system update's perfectly when I step on a different spawn but if I have 2 people join there is a phenomenon where only one person's leaderstats update and they can be updated by anyone else touching a new spawn. Also it appears that if I have everyone press f9, the print checks to make sure the script isn't erroring will only show up in that one person's output status while the rest are blank. Why does this happen? Is there a way I can make this script work properly for each and every player on their own?

spawns = game.Workspace.spawns

game.Players.PlayerAdded:Connect(function(plr)
	wait()
	lead = Instance.new('Folder', plr)
	lead.Name = 'leaderstats'
	
	stats = Instance.new('Folder', plr)
	stats.Name = "playerstatistics"
	
	stage = Instance.new('NumberValue', lead)
	stage.Name = "Stage"
	stage.Value = 0
	
	
	
	plr.CharacterAdded:connect(function(chr)
		print(chr.Name)
		if spawns then
			print('check1')
			for i,v in ipairs(spawns:GetChildren()) do
				if v:FindFirstChild('handle') then
					print('check 2')
					handle = v.handle
					handle.Touched:connect(function(hit)
						print('check 3')
						if stage.Value + 1 == v.stageval.Value then
							print('check 4')
							stage.Value = v.stageval.Value
						end
					end)
					if v.stageval.Value == stage.Value then
						print('check 5')
						if chr:FindFirstChild('Torso') then
							print('check 6')
						
						end
					end	
				end
			end
		end
	end)
end)