Datastore sometimes not loading?

Some times data prints like that:
prints

I just wrote data script to you

local DataStoreService = game:GetService("DataStoreService")
local PlayerDataStore = DataStoreService:GetGlobalDataStore("PlayerDataStore")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local TeleportService = game:GetService("TeleportService")

local function SaveData(plr)
	local success, errormessage = pcall(function()
		local data = {
			FirstPlay = ReplicatedStorage["HiddenStats"..plr.UserId].FirstPlay.Value;
			SaveColorX = ReplicatedStorage["HiddenStats"..plr.UserId].StarterKimonoColorX.Value;
			SaveColorY = ReplicatedStorage["HiddenStats"..plr.UserId].StarterKimonoColorY.Value;
			SaveColorZ = ReplicatedStorage["HiddenStats"..plr.UserId].StarterKimonoColorZ.Value;
			RPName = tostring(ReplicatedStorage["HiddenStats"..plr.UserId].RoleplayName.Value);
			SkinT = ReplicatedStorage["HiddenStats"..plr.UserId].SkinTone.Value;
			CharacterA1 = ReplicatedStorage["HiddenStats"..plr.UserId].CharacterArea1.Value;
			ClanS = ReplicatedStorage["HiddenStats"..plr.UserId].ClanSpin.Value;
			ClanName = tostring(ReplicatedStorage["HiddenStats"..plr.UserId].Clan.Value);
		}
		PlayerDataStore:SetAsync(plr.UserId,data)
	end)
	if success then
		print("SAVED")
	else
		warn(errormessage)
	end
end

Players.PlayerAdded:Connect(function(Player)
	local HiddenStats = Instance.new("Folder",ReplicatedStorage)
	HiddenStats.Name = "HiddenStats"..Player.UserId
Player.CharacterAdded:Connect(function(Character)
		local data
		local success, errormessage = pcall(function()
			data = PlayerDataStore:GetAsync(Player.UserId)
		end)
		if success and data then
			
			ReplicatedStorage["HiddenStats"..Player.UserId].FirstPlay.Value = data.FirstPlay
			ReplicatedStorage["HiddenStats"..Player.UserId].RoleplayName.Value = tostring(data.RPName)
			ReplicatedStorage["HiddenStats"..Player.UserId].SkinTone.Value = tostring(data.SkinT)
			ReplicatedStorage["HiddenStats"..Player.UserId].StarterKimonoColorX.Value = tonumber(data.SaveColorX)
			ReplicatedStorage["HiddenStats"..Player.UserId].StarterKimonoColorY.Value = tonumber(data.SaveColorY)
			ReplicatedStorage["HiddenStats"..Player.UserId].StarterKimonoColorZ.Value = tonumber(data.SaveColorZ)
			ReplicatedStorage["HiddenStats"..Player.UserId].ClanSpin.Value = tonumber(data.ClanS)
			ReplicatedStorage["HiddenStats"..Player.UserId].Clan.Value = tostring(data.ClanName)
			ReplicatedStorage["HiddenStats"..Player.UserId].CharacterArea1.Value = data.CharacterA1
			for _,Part in pairs(Player.Character:GetChildren()) do
				if Part.ClassName == "MeshPart" then
					Part.BrickColor = BrickColor.new(tostring(data.SkinT))
				end
			end
			local LoadColour = Color3.fromRGB(data.SaveColorX,data.SaveColorY,data.SaveColorZ)
			Character.Pants.Color3 = LoadColour
			Character.Shirt.Color3 = LoadColour
			print("Data loaded,",data.FirstPlay,data.RPName,data.ClanName,data.CharacterA1)
			if data == nil then
				Player:Kick(" Data can't loaded try again."..tostring(errormessage))
			else
				print("Data loaded")
			end
		else

		end
		local MainUI = game.ServerStorage.MainUI:Clone()
		MainUI.Parent = Player.PlayerGui
	end
end)

I got a problem like you, and I’ve been searching around for months. To fix this put:

game:BindToClose(function()
wait(10)
end)

So they said that when all players are left. The servers are closed automatically, which will not make the data saved. However the function yield the server to close for 10 seconds. Which gave time for the saving

Like that?

game:BindToClose(function()
	wait(10)
	for i, Player in pairs(game.Players:GetChildren()) do
		if ReplicatedStorage["HiddenStats"..Player.UserId].FirstPlay.Value == true and ReplicatedStorage["HiddenStats"..Player.UserId].CharacterArea1.Value == true then
			SaveData(Player)
			if ReplicatedStorage:FindFirstChild(string.match(Player.UserId)) then
				ReplicatedStorage:FindFirstChild(string.match(Player.UserId)):Destroy()
			end
		end
	end
end)

No, do this!

--all your codes here
game:BindToClose(function()
wait(10)
end)

still nil value for me… im gonna give you full script.

local Players = game:GetService("Players")
local DataStoreService = game:GetService("DataStoreService")
local PlayerDataStore = DataStoreService:GetGlobalDataStore("PlayerDataStore")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local TeleportService = game:GetService("TeleportService")
local function SaveData(plr)
	local success, errormessage = pcall(function()
		local data = {
			FirstPlay = ReplicatedStorage["HiddenStats"..plr.UserId].FirstPlay.Value;
			SaveColorX = ReplicatedStorage["HiddenStats"..plr.UserId].StarterKimonoColorX.Value;
			SaveColorY = ReplicatedStorage["HiddenStats"..plr.UserId].StarterKimonoColorY.Value;
			SaveColorZ = ReplicatedStorage["HiddenStats"..plr.UserId].StarterKimonoColorZ.Value;
			RPName = tostring(ReplicatedStorage["HiddenStats"..plr.UserId].RoleplayName.Value);
			SkinT = ReplicatedStorage["HiddenStats"..plr.UserId].SkinTone.Value;
			CharacterA1 = ReplicatedStorage["HiddenStats"..plr.UserId].CharacterArea1.Value;
			ClanS = ReplicatedStorage["HiddenStats"..plr.UserId].ClanSpin.Value;
			ClanName = tostring(ReplicatedStorage["HiddenStats"..plr.UserId].Clan.Value);
		}
		PlayerDataStore:SetAsync(plr.UserId,data)
	end)
	if success then
		print("SAVED")
	else
		warn(errormessage)
	end
end
Players.PlayerAdded:Connect(function(Player)
	local leaderstats = Instance.new("Folder",Player)
	leaderstats.Name = "leaderstats"
	local HiddenStats = Instance.new("Folder",ReplicatedStorage)
	HiddenStats.Name = "HiddenStats"..Player.UserId
	local FirstPlay = Instance.new("BoolValue",HiddenStats)
	FirstPlay.Name = "FirstPlay"
	local ClanSpin = Instance.new("IntValue",HiddenStats)
	ClanSpin.Name = "ClanSpin"
	ClanSpin.Value = 2
	local Clan = Instance.new("StringValue",HiddenStats)
	Clan.Name = "Clan"
	Clan.Value = ""
	local CharacterArea1 = Instance.new("BoolValue",HiddenStats)
	CharacterArea1.Name = "CharacterArea1"
	Player.CharacterAdded:Connect(function(Character)
		repeat wait(.1) until Character.Pants or Character.Shirt
		local RoleplayName = Instance.new("StringValue",HiddenStats)
		RoleplayName.Name = "RoleplayName"
		RoleplayName.Value = "nil"
		local SkinTone = Instance.new("StringValue",HiddenStats)
		SkinTone.Name = "SkinTone"
		SkinTone.Value = "Light orange"
		local StarterKimonoColorX = Instance.new("IntValue",HiddenStats)
		StarterKimonoColorX.Name = "StarterKimonoColorX"
		StarterKimonoColorX.Value = 255
		local StarterKimonoColorY = Instance.new("IntValue",HiddenStats)
		StarterKimonoColorY.Name = "StarterKimonoColorY"
		StarterKimonoColorY.Value = 255
		local StarterKimonoColorZ = Instance.new("IntValue",HiddenStats)
		StarterKimonoColorZ.Name = "StarterKimonoColorZ"
		StarterKimonoColorZ.Value = 255
		local data
		local success, errormessage = pcall(function()
			data = PlayerDataStore:GetAsync(Player.UserId)
		end)
		if success and data then
			
			ReplicatedStorage["HiddenStats"..Player.UserId].FirstPlay.Value = data.FirstPlay
			ReplicatedStorage["HiddenStats"..Player.UserId].RoleplayName.Value = tostring(data.RPName)
			ReplicatedStorage["HiddenStats"..Player.UserId].SkinTone.Value = tostring(data.SkinT)
			ReplicatedStorage["HiddenStats"..Player.UserId].StarterKimonoColorX.Value = tonumber(data.SaveColorX)
			ReplicatedStorage["HiddenStats"..Player.UserId].StarterKimonoColorY.Value = tonumber(data.SaveColorY)
			ReplicatedStorage["HiddenStats"..Player.UserId].StarterKimonoColorZ.Value = tonumber(data.SaveColorZ)
			ReplicatedStorage["HiddenStats"..Player.UserId].ClanSpin.Value = tonumber(data.ClanS)
			ReplicatedStorage["HiddenStats"..Player.UserId].Clan.Value = tostring(data.ClanName)
			ReplicatedStorage["HiddenStats"..Player.UserId].CharacterArea1.Value = data.CharacterA1
			for _,Part in pairs(Player.Character:GetChildren()) do
				if Part.ClassName == "MeshPart" then
					Part.BrickColor = BrickColor.new(tostring(data.SkinT))
				end
			end
			local LoadColour = Color3.fromRGB(data.SaveColorX,data.SaveColorY,data.SaveColorZ)
			Character.Pants.Color3 = LoadColour
			Character.Shirt.Color3 = LoadColour
			print("Data loaded,",data.FirstPlay,data.RPName,data.ClanName,data.CharacterA1)
			if data == nil then
				Player:Kick(" Data can't loaded try again."..tostring(errormessage))
			else
				print("Data loaded")
			end
		else

		end
		local MainUI = game.ServerStorage.MainUI:Clone()
		MainUI.Parent = Player.PlayerGui
	end)

end)

ReplicatedStorage.ClanSpin.OnServerEvent:Connect(function(Player,Clan)
	if ReplicatedStorage["HiddenStats"..Player.UserId].ClanSpin.Value > 0 then
		ReplicatedStorage["HiddenStats"..Player.UserId].Clan.Value = tostring(Clan)
		ReplicatedStorage["HiddenStats"..Player.UserId].ClanSpin.Value = ReplicatedStorage["HiddenStats"..Player.UserId].ClanSpin.Value - 1
	end
end)

ReplicatedStorage.SkinTone.OnServerEvent:Connect(function(Player,SkinTone)
	for _,Part in pairs(Player.Character:GetChildren()) do
		if Part.ClassName == "MeshPart" then
			Part.BrickColor = BrickColor.new(tostring(SkinTone))
			ReplicatedStorage["HiddenStats"..Player.UserId].SkinTone.Value = tostring(SkinTone)
		end
	end
end)

ReplicatedStorage.RoleplayName.OnServerEvent:Connect(function(Player,Message)
	ReplicatedStorage["HiddenStats"..Player.UserId].RoleplayName.Value = tostring(Message)
	Player.Character.Humanoid.DisplayName = tostring(Message)
	if Message ~= nil or Message ~= "nil" then
		ReplicatedStorage["HiddenStats"..Player.UserId].CharacterArea1.Value = true	
	end
	if Message == nil then
		ReplicatedStorage["HiddenStats"..Player.UserId].CharacterArea1.Value = false
	end
	if ReplicatedStorage["HiddenStats"..Player.UserId].RoleplayName.Value == "nil" or ReplicatedStorage["HiddenStats"..Player.UserId].RoleplayName.Value == nil then
		ReplicatedStorage["HiddenStats"..Player.UserId].CharacterArea1.Value = false
	end
end)

ReplicatedStorage.Play.OnServerEvent:Connect(function(Player,FirstPlay)
	if FirstPlay == false then
		ReplicatedStorage.Play:FireAllClients(Player,FirstPlay)
		ReplicatedStorage["HiddenStats"..Player.UserId].SkinTone.Value = "Light orange"
		ReplicatedStorage["HiddenStats"..Player.UserId].StarterKimonoColorX.Value = math.random(50,255)
		ReplicatedStorage["HiddenStats"..Player.UserId].StarterKimonoColorY.Value = math.random(50,255)
		ReplicatedStorage["HiddenStats"..Player.UserId].StarterKimonoColorZ.Value = math.random(50,255)
		Player.Character.Pants.Color3 = Color3.fromRGB(ReplicatedStorage["HiddenStats"..Player.UserId].StarterKimonoColorX.Value,ReplicatedStorage["HiddenStats"..Player.UserId].StarterKimonoColorY.Value,ReplicatedStorage["HiddenStats"..Player.UserId].StarterKimonoColorZ.Value)
		Player.Character.Shirt.Color3 = Color3.fromRGB(ReplicatedStorage["HiddenStats"..Player.UserId].StarterKimonoColorX.Value,ReplicatedStorage["HiddenStats"..Player.UserId].StarterKimonoColorY.Value,ReplicatedStorage["HiddenStats"..Player.UserId].StarterKimonoColorZ.Value)
	end
	if FirstPlay == true then
		local teleportData
		local success, errormessage = pcall(function()
			teleportData = PlayerDataStore:GetAsync(Player.UserId)
		end)
		if success and teleportData then
			local teleportOptions = Instance.new("TeleportOptions")
			teleportOptions:SetTeleportData(teleportData)
			wait(0.2)
			TeleportService:TeleportAsync(8785832664,{Player},teleportOptions)
		else
			Player:Kick("Can't teleport."..errormessage)
		end
	end
end)

ReplicatedStorage.ApplyCharacter.OnServerEvent:Connect(function(Player)
	ReplicatedStorage["HiddenStats"..Player.UserId].FirstPlay.Value = true
	SaveData(Player)
	ReplicatedStorage.ApplyCharacter:FireAllClients(Player)
end)

game:BindToClose(function()
	wait(10)
end)

Is there any errors on the code? I think it might be that the data just already saved the nil value.

it works fine on studio:
studiooutput

but on game:

gameoutput