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

My DataStore just WON'T save from the actual game. Why?

Here's my DataStore code:

local DatastoreService = game:GetService("DataStoreService")
local Datastore = DatastoreService:GetDataStore("TrainingSimulatorDatastore11")
local mps = game:GetService("MarketplaceService")
local id = 11893526

game.Players.PlayerAdded:Connect(function(player)
	
	local leaderstats = Instance.new("Folder")
	leaderstats.Name = "leaderstats"
	leaderstats.Parent = player
	
	local codesFolder = Instance.new("Folder")
	codesFolder.Name = "CodesFolder"
	codesFolder.Parent = player
	
	local miscStats = Instance.new("Folder")
	miscStats.Name = "MiscStats"
	miscStats.Parent = player
	
	local fistPowersFolder = Instance.new("Folder")
	fistPowersFolder.Name = "FistPowers"
	fistPowersFolder.Parent = player
	
	local dnasFolder = Instance.new("Folder")
	dnasFolder.Name = "DnasFolder"
	dnasFolder.Parent = player
	
	local folder = Instance.new("Folder")
	folder.Name = player.Name
	folder.Parent = game.ServerStorage:WaitForChild("RemoteData")
	
	local debounce = Instance.new("BoolValue")
	debounce.Name = "Debounce"
	debounce.Parent = folder
	
	local coins = Instance.new("NumberValue")
	coins.Name = "Coins"
	coins.Parent = leaderstats
	
	local fistPower = Instance.new("NumberValue")
	fistPower.Name = "FistPower"
	fistPower.Parent = miscStats
	
	local diamonds = Instance.new("NumberValue")
	diamonds.Name = "Diamonds"
	diamonds.Parent = leaderstats
	
	local rank = Instance.new("StringValue")
	rank.Name = "Rank"
	rank.Parent = leaderstats
	
	local rankMultiplier = Instance.new("NumberValue")
	rankMultiplier.Name = "RankMultiplier"
	rankMultiplier.Parent = rank
	
	local strength = Instance.new("NumberValue")
	strength.Name = "Strength"
	strength.Parent = miscStats
	
	local dnaAmount = Instance.new("NumberValue")
	dnaAmount.Name = "Dna"
	dnaAmount.Parent = miscStats
	
	local coinData,strengthData,dnaData,rankData,rankMultiplierData,diamondData,fistPowerData,codeData,fistPowersData,dnasData,isEquippedFistPowerData,isEquippedDnaData
	
	local success,errorMsg = pcall(function()
		
		coinData = Datastore:GetAsync("coinData-"..player.UserId)
		strengthData = Datastore:GetAsync("strengthData-"..player.UserId)
		dnaData = Datastore:GetAsync("dnaData-"..player.UserId)
		rankData = Datastore:GetAsync("rankData-"..player.UserId)
		rankMultiplierData = Datastore:GetAsync("rankMultiplierData-"..player.UserId)
		diamondData = Datastore:GetAsync("diamondData-"..player.UserId)
		fistPowerData = Datastore:GetAsync("fistPowerData-"..player.UserId)
		codeData = Datastore:GetAsync("codeData-"..player.UserId)
		fistPowersData = Datastore:GetAsync("fistPowersData-"..player.UserId)
		dnasData = Datastore:GetAsync("dnasData-"..player.UserId)
		isEquippedDnaData = Datastore:GetAsync("isEquippedDnaData-"..player.UserId)
		isEquippedFistPowerData = Datastore:GetAsync("isEquippedFistPowerData-"..player.UserId)
	end)
	
	if success then
		
		if strengthData then
			strength.Value = strengthData
			coins.Value = coinData
			dnaAmount.Value = dnaData
			rank.Value = rankData
			rankMultiplier.Value = rankMultiplierData
			diamonds.Value = diamondData
			fistPower.Value = fistPowerData
		else
			fistPower.Value = 1
			dnaAmount.Value = 50
			rank.Value = "Noob"
			
			local firstFistPower = Instance.new("StringValue")
			firstFistPower.Name = "FistPower1"
			firstFistPower.Parent = player.FistPowers
			
			local isEquipped = Instance.new("BoolValue")
			isEquipped.Name = "IsEquipped"
			isEquipped.Parent = firstFistPower
			isEquipped.Value = true
			
			local firstDna = Instance.new("StringValue")
			firstDna.Name = "Dna1"
			firstDna.Parent = player.DnasFolder
			
			local isEquippedDna = Instance.new("BoolValue")
			isEquippedDna.Name = "IsEquipped"
			isEquippedDna.Parent = firstDna
			isEquippedDna.Value = true
		end
		
		if codeData then
			
			for x = 1,#codeData do
				
				local newCode = Instance.new("StringValue")
				newCode.Name = "Code"..x
				newCode.Parent = player.CodesFolder
			end
		end
		
		if fistPowersData then
			
			for x = 1,#fistPowersData do
				
				local newFistPower = Instance.new("StringValue")
				newFistPower.Name = "FistPower"..x
				newFistPower.Parent = player.FistPowers
				
				local isEquipped = Instance.new("BoolValue")
				isEquipped.Name = "IsEquipped"
				isEquipped.Parent = newFistPower
				isEquipped.Value = isEquippedFistPowerData[x]
				
				wait()
			end
		end
		
		if dnasData then
			
			for x = 1,#dnasData do
				
				local newDna = Instance.new("StringValue")
				newDna.Name = "Dna"..x
				newDna.Parent = player.DnasFolder
				
				local isEquipped = Instance.new("BoolValue")
				isEquipped.Name = "IsEquipped"
				isEquipped.Parent = newDna
				isEquipped.Value = isEquippedDnaData[x]
			end
		end
		
	else
		print("Something went wrong whilst giving "..player.Name.." their data!")
end		
	
	if mps:UserOwnsGamePassAsync(player.UserId,id) or player:GetRankInGroup(6305352) >= 254 then
		
		dnaAmount.Value = math.huge
	end
end)

game.ReplicatedStorage.RemoteEvents.MiscEvents.CodeEvent.OnServerEvent:Connect(function(player,code,amount,folder,currency)
	
	local newCode = Instance.new("StringValue")
	newCode.Name = code
	newCode.Parent = player.CodesFolder
	
	player[folder][currency].Value = player[folder][currency].Value + amount
end)

game.Players.PlayerRemoving:Connect(function(player)
	
	local usedCodes = {}
	local isEquippedFistPowers = {}
	local fistPowers = {}
	local dnas = {}
	local isEquippedDnas = {}
	
	for _,code in pairs(player.CodesFolder:GetChildren()) do
		
		table.insert(usedCodes,code.Name)
		wait()
	end
	
	for _,fistPower in pairs(player.FistPowers:GetChildren()) do
		table.insert(fistPowers,fistPower.Name)
		table.insert(isEquippedFistPowers,fistPower.IsEquipped.Value)
		
		wait()
	end
	
	for _,DNA in pairs(player.DnasFolder:GetChildren()) do
		table.insert(dnas,DNA.Name)
		table.insert(isEquippedDnas,DNA.IsEquipped.Value)
		
		wait()
	end
	
	
	local success,errorMsg = pcall(function()
		
		Datastore:SetAsync("coinData-"..player.UserId,player.leaderstats.Coins.Value)
		Datastore:SetAsync("strengthData-"..player.UserId,player.MiscStats.Strength.Value)
		Datastore:SetAsync("dnaData-"..player.UserId,player.MiscStats.Dna.Value)
		Datastore:SetAsync("rankData-"..player.UserId,player.leaderstats.Rank.Value)
		Datastore:SetAsync("rankMultiplierData-"..player.UserId,player.leaderstats.Rank.RankMultiplier.Value)
		Datastore:SetAsync("diamondData-"..player.UserId,player.leaderstats.Diamonds.Value)
		Datastore:SetAsync("fistPowerData-"..player.UserId,player.MiscStats.FistPower.Value)
		Datastore:SetAsync("codeData-"..player.UserId,usedCodes)
		Datastore:SetAsync("fistPowersData-"..player.UserId,fistPowers)
		Datastore:SetAsync("dnasData-"..player.UserId,dnas)
		Datastore:SetAsync("isEquippedDnaData-"..player.UserId,isEquippedDnas)
		Datastore:SetAsync("isEquippedFistPowerData-"..player.UserId,isEquippedFistPowers)
	end)
end)

game:BindToClose(function()
	
	for _,player in pairs(game.Players:GetPlayers()) do
		
		local usedCodes = {}
		local isEquippedFistPowers = {}
		local fistPowers = {}
		local dnas = {}
		local isEquippedDnas = {}
		
		for _,code in pairs(player.CodesFolder:GetChildren()) do
			
			table.insert(usedCodes,code.Name)
			wait()
		end
		
		for _,fistPower in pairs(player.FistPowers:GetChildren()) do
			table.insert(fistPowers,fistPower.Name)
			table.insert(isEquippedFistPowers,fistPower.IsEquipped.Value)
			
			wait()
		end
		
		for _,DNA in pairs(player.DnasFolder:GetChildren()) do
			table.insert(dnas,DNA.Name)
			table.insert(isEquippedDnas,DNA.IsEquipped.Value)
			
			wait()
		end
		
		for _,dnasInDNAS in pairs(dnas) do
			print(dnasInDNAS)
			wait()
		end
		
		
		local success,errorMsg = pcall(function()
			
			Datastore:SetAsync("coinData-"..player.UserId,player.leaderstats.Coins.Value)
			Datastore:SetAsync("strengthData-"..player.UserId,player.MiscStats.Strength.Value)
			Datastore:SetAsync("dnaData-"..player.UserId,player.MiscStats.Dna.Value)
			Datastore:SetAsync("rankData-"..player.UserId,player.leaderstats.Rank.Value)
			Datastore:SetAsync("rankMultiplierData-"..player.UserId,player.leaderstats.Rank.RankMultiplier.Value)
			Datastore:SetAsync("diamondData-"..player.UserId,player.leaderstats.Diamonds.Value)
			Datastore:SetAsync("fistPowerData-"..player.UserId,player.MiscStats.FistPower.Value)
			Datastore:SetAsync("codeData-"..player.UserId,usedCodes)
			Datastore:SetAsync("fistPowersData-"..player.UserId,fistPowers)
			Datastore:SetAsync("dnasData-"..player.UserId,dnas)
			Datastore:SetAsync("isEquippedDnaData-"..player.UserId,isEquippedDnas)
			Datastore:SetAsync("isEquippedFistPowerData-"..player.UserId,isEquippedFistPowers)
		end)

	end
end)

1 comment

0

it's probably a roblox error, the servers are pretty busy right now

1 answer

I am quite sure it would save. Make sure you have "Enable Studio access to API services" under game settings enabled. Otherwise, it might just be their servers.

1 comment

0

It is on, and it saves normally inside of studio. But then I try testing it from the Roblox website, and sometimes it'll save, sometimes it won't.

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