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

How do you save tables in a datastore properly?

I want to save a table as a datastore that has many other tables inside it, but how do I?

For a visual example, I want it to be like:

local DataToSave = {PlayerStats = {logs = 25}, Items = {'Axe', 'Sword'}}

This is the code I have right now but it has an underline under the word PlayerStats line 17 saying PlayerStats is an unknown global, how do I access the table inside that table without it showing unknown global so I can set the value of 'logs' to the value inside the PlayerStats table?

local DataStore = game:GetService("DataStoreService"):GetDataStore('PlayerStats')

game.Players.PlayerAdded:Connect(function(Player)
	local leaderstats = Instance.new('Folder')
	leaderstats.Parent = Player
	leaderstats.Name = 'leaderstats'
	
	local logs = Instance.new('IntValue')
	logs.Parent = leaderstats
	logs.Name = 'Logs'
	
	local scope = 'player_' .. Player.UserId
	
	local savedLogs = DataStore:GetAsync(scope)
	
	if savedLogs then
		logs.Value = savedLogs[PlayerStats]
	end
end)

1 answer

✓ Accepted answer

When you are a value in a table and the index is a string, you need to wrap the index in quotation marks (""). You can also use "." because the key you are referencing is a string.

Also, you need to use the "logs" key in the "PlayerStats" table in order to get its value.

Here is the code:

local DataStore = game:GetService("DataStoreService"):GetDataStore('PlayerStats')

game.Players.PlayerAdded:Connect(function(Player)
    local leaderstats = Instance.new('Folder')
    leaderstats.Parent = Player
    leaderstats.Name = 'leaderstats'

    local logs = Instance.new('IntValue')
    logs.Parent = leaderstats
    logs.Name = 'Logs'

    local scope = 'player_' .. Player.UserId

    local savedLogs = DataStore:GetAsync(scope)

    if savedLogs then
        logs.Value = savedLogs.PlayerStats.logs -- I use "." like how you use "game.Players" because the keys are strings.
    end
end)

If you have any questions, please leave them in the comments. Thanks.

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