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

How to use the data saved in a datastore?

Hello everyone, I found a datastore script:

local DataStoreService = game:GetService("DataStoreService")
local statStore = DataStoreService:GetDataStore("StatStore")

game.Players.PlayerAdded:Connect(function(Player)
		local leaderstats = Instance.new("Folder", Player)
		leaderstats.Name = "leaderstats"
		
		local cashs = Instance.new("IntValue", leaderstats)
		cashs.Name = "Money"
		cashs.Value = 2000
		
		local death = Instance.new("IntValue", leaderstats)
		death.Name = "Death"
		death.Value = 5
		
		local recieved, NotRecieved = pcall(function()
			stat = statStore:GetAsync("UserId-"..Player.UserId)
		end)
		
		if recieved then
			cashs.Value = stat[1]
			death.Value = stat[2]
			print("Stat was recieved")
		else
			print("Stat wasn't recieved")
		end
		
		while true do wait(30)
			statStore:SetAsync("UserId"..Player.UserId, {cashs.Value, death.Value})
		end
end)

game.Players.PlayerRemoving:Connect(function(Player)
	local leaderstats = Player.leaderstats
	local money = leaderstats.Money
	local death = leaderstats.Death
	
	local saved, notSaved = pcall(function()
		statStore:SetAsync("UserId-"..Player.UserId, {money.Value, death.Value})
	end)
	
	if saved then
		print("Stat was saved")
	else
		print("Stat wasn't saved")
	end
end)

With this datastore script, how can I use the data saved in other scripts, for example, I want to display the value of the money and death saved in a text label. How to do this? PS: I'm a beginner

1 answer

✓ Accepted answer

:SetAsync() is the method responsible for saving the data, and :GetAsync() is the one responsible for loading or retrieving the data back. Let's say you saved a value using :SetAsync(). Remember that this method has 2 paramaters: A unique key that serves as a special name for the save value, and the value that you wanna save. And notice how I said unique key! That's why all example use the plr.UserId, because each player has his own specail ID that can never be found in another player, which makes each player have his own saved data without it being overwritten by another player. If we used the same key, the same value will be replaced whenever any player tries to save his data.

And also, you're commonly going to be saving the data (:SetAsync()) when the player leaves, meaning we will use the .PlayerRemoving event. You can also make an autosaving system, by placing the :SetAsync() inside of a while loop that loops every 5 mintues for examples. But let's just stick the simple player removing.

And also let's say this player has some leaderstats, like money, which are the ones that we wanna save.

Anyways, this is probably what you're gonna do


local DataStoreService = game:GetService("DataStoreService")
local statStore = DataStoreService:GetDataStore("StatStore") --makec( a datastore

game.Players.PlayerRemoving:Connect(function(plr) --this event has the player that left as a paramater
	statStore:SetAsync(tostring(plr.UserId), plr.leaderstats.Money) --plr.UserId is an integer, but we need it to be a string so we tostring() it
end)

Now let's use the retrive data part using :GetAsync(), and what's very important is: You have to use the same key for the value that you saved!


local textbox = script.Parent --or wherever it is

textbox.Text = tostring(statScore:GetAsync(tostring(plr.UserId)) --just the key, and this should return the saved value, which is the money

And also logically, you wanna be retrieving the data when the player joins, using the .PlayerAdded event. Which fires when the player joins.

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