DataStoreService

DataStoreService é um serviço no Roblox que permite aos desenvolvedores armazenar e recuperar dados persistentes para seus jogos. Isso é útil para salvar dados dos jogadores, estatísticas do jogo, configurações de configuração e muito mais. Os dados são armazenados na nuvem e podem ser acessados em diferentes sessões de jogo e servidores.
EntradaDetalhes
DataStoreServiceO principal serviço usado para acessar DataStores.
DataStoreUma unidade de armazenamento dentro do DataStoreService onde os dados são armazenados.
GetAsyncRecupera dados de um DataStore.
SetAsyncSalva dados em um DataStore.
UpdateAsyncAtualiza dados em um DataStore aplicando uma função de transformação.

Permissão do DataStoreService

Roblox Studio
>
File
>
Game Settings
>
Security
>
Enable Studio Access to API Services
>
Yes
Image 1
Roblox Studio

Criar DataStore chamado 'PlayerData'

local DataStoreService = game:GetService("DataStoreService")
local playerDataStore = DataStoreService:GetDataStore("PlayerData")

Exemplo: Atualizar Dados

game.Players.PlayerRemoving:Connect(function(player)
    local playerKey = "Player_" .. player.UserId
    local data = {
        Example_String_Field = "Example_Value", 
        Example_Number_Field = 123,               
        Example_Bool_Field = true,              
        Example_Timestamp_Field = os.time()     
    }
    
    local success, errorMessage = pcall(function()
        playerDataStore:SetAsync(playerKey, data)
    end)
    
    if success then
        print("Player data saved successfully for player: " .. player.Name)
    else
        warn("Failed to save player data for player: " .. player.Name .. ". Error: " .. errorMessage)
    end
end)
Image 1
Roblox Studio

Exemplo: Carregando Dados

game.Players.PlayerAdded:Connect(function(player)

    local playerKey = "Player_" .. player.UserId
    
    local success, data = pcall(function()
        return playerDataStore:GetAsync(playerKey)
    end)
    
    if success and data then
        -- Assuming that you have already set up leaderstats with Level and Experience
        player.leaderstats.Level.Value = data.Level or 1 -- Provide a default value if nil
        player.leaderstats.Experience.Value = data.Experience or 0 -- Provide a default value if nil
        
        -- Print out the stored data
        print("Player data loaded successfully for player: " .. player.Name)
        print("Example_String_Field: " .. (data.Example_String_Field or "N/A"))
        print("Example_Number_Field: " .. (data.Example_Number_Field or "N/A"))
        print("Example_Bool_Field: " .. tostring(data.Example_Bool_Field or "N/A"))
        print("Example_Timestamp_Field: " .. os.date("%c", data.Example_Timestamp_Field or 0)) -- Convert timestamp to a readable format
    else
        warn("Failed to load player data for player: " .. player.Name)
    end
end)
Image 1
Roblox Studio

Exemplo: Auto Salvar Dados em Intervalo Regular

local function savePlayerData(player)
    local playerKey = "Player_" .. player.UserId
    
    local success, errorMessage = pcall(function()
        playerDataStore:UpdateAsync(playerKey, function(oldData)
            oldData = oldData or {
                Example_String_Field = "Default_String", 
                Example_Number_Field = 0,               
                Example_Bool_Field = false,              
                Example_Timestamp_Field = os.time()
            }
            
            -- Update all fields with the data from the player object or default values
            oldData.Example_String_Field = player.Example_String_Field or oldData.Example_String_Field
            oldData.Example_Number_Field = player.Example_Number_Field or oldData.Example_Number_Field
            oldData.Example_Bool_Field = player.Example_Bool_Field or oldData.Example_Bool_Field
            oldData.Example_Timestamp_Field = os.time()  -- Always update the timestamp to current time
            
            return oldData
        end)
    end)
    
    if success then
        print("Player data saved successfully for player: " .. player.Name)
    else
        warn("Failed to save player data for player: " .. player.Name .. ". Error: " .. errorMessage)
    end
end

-- Function to periodically save data
local function startAutoSave(player)
    while player.Parent do
        wait(5) -- Wait 1 minute
        savePlayerData(player)
    end
end

-- Connect auto-save function to player joining
game.Players.PlayerAdded:Connect(function(player)
    -- Start auto-saving for this player
    coroutine.wrap(startAutoSave)(player)
end)

-- Ensure data is saved when the player leaves as a fallback
game.Players.PlayerRemoving:Connect(function(player)
    savePlayerData(player)
end)

Se você achou este tutorial útil e gostaria de apoiar meu trabalho, por favor, considere me comprar um café.

Muito obrigado pelo seu apoio!

Me compre um café