Recently many players of my game have reported that sometimes when they join they're stage is set at '1' despite them being further in the game.

On other people's screens it normal (the actual stage the person is on.)

I have really no idea how to fix this glitch and so many people ask me about it that it hurts my soul, please help.

local datastore = game:GetService("DataStoreService"):GetDataStore("GameStore")

game.Players.PlayerAdded:connect(function(player)
	local leaderstats = Instance.new("IntValue")
	leaderstats.Name = "leaderstats"
	leaderstats.Parent = player
	
	local level = Instance.new("IntValue")
	level.Name = "Stage"
	level.Parent = leaderstats
	level.Value = 1
	
	local key = "user-" .. player.userId
	
	local storeditems = datastore:GetAsync(key)
	if storeditems then
		level.Value = storeditems[1]
	else
		local items = {level.Value}
		datastore:SetAsync(key, items)
	end
	local spawn = game.Workspace:WaitForChild(player.leaderstats.Stage.Value)
	if player and spawn then
		player.Character:MoveTo(spawn.Position + Vector3.new(0, 3, 0))
	end
end)

game.Players.PlayerRemoving:connect(function(player)
	local items = {player.leaderstats.Stage.Value}
	local key = "user-" .. player.userId
	datastore:SetAsync(key, items)
end)

game.Workspace.ChildAdded:connect(function(obj)
	local player = game.Players:GetPlayerFromCharacter(obj)
	if player then
		local leaderstats = player:FindFirstChild("leaderstats")
		local stage = leaderstats:FindFirstChild("Stage")
		local respawn = game.Workspace:WaitForChild(stage.Value)
		obj.Torso.CFrame = obj.Torso.CFrame + Vector3.new(0,3,0)
		wait(0.1)
		obj.Torso.CFrame = respawn.CFrame + Vector3.new(0,3,0)
	end
end)