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!
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)