DataStoreService es un servicio en Roblox que permite a los desarrolladores almacenar y recuperar datos persistentes para sus juegos. Esto es útil para guardar datos de jugadores, estadísticas de juegos, configuraciones de configuración y más. Los datos se almacenan en la nube y se pueden acceder a través de diferentes sesiones de juego y servidores.
Entrada | Detalles |
---|---|
DataStoreService | El servicio principal utilizado para acceder a DataStores. |
DataStore | Una unidad de almacenamiento dentro de DataStoreService donde se almacenan los datos. |
GetAsync | Recupera datos de un DataStore. |
SetAsync | Guarda datos en un DataStore. |
UpdateAsync | Actualiza datos en un DataStore aplicando una función de transformación. |
Permiso de DataStoreService
Roblox Studio
>File
>Game Settings
>Security
>Enable Studio Access to API Services
>Yes
Roblox Studio
Crear DataStore llamado 'PlayerData'
local DataStoreService = game:GetService("DataStoreService")
local playerDataStore = DataStoreService:GetDataStore("PlayerData")
Ejemplo: Actualizar Datos
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)
Roblox Studio
Ejemplo: Cargar Datos
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)
Roblox Studio
Ejemplo: Guardado Automático de Datos en 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)