Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

What are Datastores and how do I use them?

Asked by 3 years ago

For some reason, Datastores are my biggest weakness. Every tutorial I have seen and every article I have seen just dont seem to explain fully to me what datastores are. Therefore it would be excellent if someone could carefully explain what datastores are and how to use them in games and between different games.

Thanks so much!

1 answer

Log in to vote
2
Answered by 3 years ago
Edited 3 years ago

A data store is essentially a dictionary, like a Lua table. Each value in the data store is indexed by a unique key, for instance the player's unique Player. UserId or simply a named string for a game promo. To create a new entry, call SetAsync() with the key name and a value

Like this:

-- // Assigning variables //
local DataStoreService = game:GetService("DataStoreService")
local dataStore = DataStoreService:GetDataStore("MyDataStore") -- This can be changed to whatever you want

local function saveData(player) -- The functions that saves data

    local tableToSave = {
        player.leaderstats.Money.Value; -- First value from the table
        player.leaderstats.Coins.Value -- Second value from the table
    }

    local success, err = pcall(function()
        dataStore:SetAsync(player.UserId, tableToSave) -- Save the data with the player UserId, and the table we wanna save
    end)

    if success then -- If the data has been saved
        print("Data has been saved!")
    else -- Else if the save failed
        print("Data hasn't been saved!")
        warn(err)       
    end
end

game.Players.PlayerAdded:Connect(function(player) -- When a player joins the game

-- // Assigning player stats //
    local leaderstats = Instance.new("Folder")
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player

    local Money = Instance.new("IntValue")
    Money.Name = "Money"
    Money.Parent = leaderstats

    local Coins = Instance.new("IntValue")
    Coins.Name = "Coins"
    Coins.Parent = leaderstats

    local data -- We will define the data here so we can use it later, this data is the table we saved
    local success, err = pcall(function()

        data = dataStore:GetAsync(player.UserId) -- Get the data from the datastore

    end)

    if success then -- If there were no errors and player loaded the data

        Money.Value = data[1] -- Set the money to the first value of the table (data)
        Coins.Value = data[2] -- Set the coins to the second value of the table (data)

    else -- The player didn't load in the data, and probably is a new player
        print("The player has no data!") -- The default will be set to 0
    end

end)

game.Players.PlayerRemoving:Connect(function(player) -- When a player leaves
    local success, err  = pcall(function()
        saveData(player) -- Save the data
    end)

    if success then
        print("Data has been saved")
    else
        print("Data has not been saved!")
    end
end)

game:BindToClose(function() -- When the server shuts down
    for _, player in pairs(game.Players:GetPlayers()) do -- Loop through all the players
        local success, err  = pcall(function()
             saveData(player) -- Save the data
        end)

        if success then
            print("Data has been saved")
        else
            print("Data has not been saved!")
        end
    end
end)
Ad

Answer this question