DataStoreService

DataStoreService è un servizio in Roblox che consente agli sviluppatori di memorizzare e recuperare dati persistenti per i loro giochi. Questo è utile per salvare dati dei giocatori, statistiche di gioco, impostazioni di configurazione e altro ancora. I dati sono memorizzati nel cloud e possono essere accessibili attraverso diverse sessioni di gioco e server.
InputDettagli
DataStoreServiceIl servizio principale utilizzato per accedere a DataStore.
DataStoreUn'unità di archiviazione all'interno di DataStoreService dove vengono memorizzati i dati.
GetAsyncRecupera i dati da un DataStore.
SetAsyncSalva i dati in un DataStore.
UpdateAsyncAggiorna i dati in un DataStore applicando una funzione di trasformazione.

Permessi di DataStoreService

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

Crea un DataStore chiamato 'PlayerData'

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

Esempio: Aggiorna Dati

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

Esempio: Caricamento Dati

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

Esempio: Salvataggio Automatico dei Dati a Intervalli Regolari

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 hai trovato utile questo tutorial e desideri supportare il mio lavoro, considera di offrirmi un caffè.

Grazie mille per il tuo supporto!

Offrimi un caffè