Can Tables Be Used With DataStore?

I am working on a simple game for fun, and there are upgrades that players can purchase with in-game cash. I want these upgrades to save, which seems easy. But I want them to all save as one singular table.

I have been wondering, is it possible to store a table full of Boolean values to achieve this? If so, how would it be done?
Thank you for reading, hopefully you have anything in mind to help!
-Peter

To manage upgrades for players, you can use a different approach, such as utilizing ModuleScripts or managing the data within the script itself. Here’s an example using a ModuleScript to store and manage player upgrades:

  1. Create a ModuleScript inside ServerScriptService and name it “PlayerUpgradesManager”.
  2. Edit the ModuleScript with the following code:
local PlayerUpgradesManager = {}

local playerUpgrades = {}

function PlayerUpgradesManager.loadUpgrades(player)
    -- Example: Load upgrades from DataStore or create a new table with default values
    playerUpgrades[player] = {
        upgrade1 = false,
        upgrade2 = false,
        upgrade3 = false
    -- Add more upgrades as needed
    }
end

function PlayerUpgradesManager.saveUpgrades(player)
    -- Example: Save upgrades to DataStore
end

function PlayerUpgradesManager.getUpgrades(player)
    return playerUpgrades[player]
end

function PlayerUpgradesManager.setUpgrades(player, upgrades)
    playerUpgrades[player] = upgrades
end

return PlayerUpgradesManager
  1. In a Script inside ServerScriptService, use the ModuleScript to manage the player’s upgrades:
local PlayerUpgradesManager = require(script.Parent.PlayerUpgradesManager)

local function onPlayerAdded(player)
    PlayerUpgradesManager.loadUpgrades(player)
end

local function onPlayerRemoving(player)
    PlayerUpgradesManager.saveUpgrades(player)
end

game.Players.PlayerAdded:Connect(onPlayerAdded)
game.Players.PlayerRemoving:Connect(onPlayerRemoving)

Now you can use the PlayerUpgradesManager ModuleScript to manage upgrades for each player. When you need to access or modify a player’s upgrades, simply call the corresponding functions provided by the ModuleScript. This way, you can store and manage complex data structures.

1 Like

How would i actually save them to the datastore? Would I do them individually?

To save the player upgrades to a DataStore, you must create a DataStoreService and then call the appropriate methods to save and load the data. Here’s an example of how you could modify the PlayerUpgradesManager ModuleScript to save the player upgrades to a DataStore:

-- Replace the existing saveUpgrades and loadUpgrades functions with the following:

function PlayerUpgradesManager.saveUpgrades(player)
    local dataStore = game:GetService("DataStoreService"):GetDataStore("PlayerUpgrades")
    local success, err = pcall(function()
        dataStore:SetAsync(player.UserId, playerUpgrades[player])
    end)
    if not success then
        warn("Error saving upgrades for player " .. player.Name .. ": " .. err)
    end
end

function PlayerUpgradesManager.loadUpgrades(player)
    local dataStore = game:GetService("DataStoreService"):GetDataStore("PlayerUpgrades")
    local success, result = pcall(function()
        return dataStore:GetAsync(player.UserId)
    end)
    if success and result then
        playerUpgrades[player] = result
    else
        playerUpgrades[player] = {
            upgrade1 = false,
            upgrade2 = false,
            upgrade3 = false
            -- Add more upgrades as needed
        }
    end
end

In this example, the saveUpgrades function retrieves a DataStore instance named “PlayerUpgrades” and uses the SetAsync method to save the player’s upgrades to the DataStore. The loadUpgrades function retrieves the player’s upgrades from the DataStore using the GetAsync method. If the data is not found or an error occurs, it initializes the upgrades with default values.

Note that this is just an example, and you would need to modify the code to suit your specific needs, such as changing the DataStore name or modifying the upgrade data structure.

2 Likes

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.