--[[
DataStoreManager.lua
Creado por: TuNombre/TuUsuarioGitHub
Descripción: Un sistema seguro de guardado de datos para monedas y niveles en Roblox.
Colocación en Roblox: ServerScriptService
--]]
local DataStoreService = game:GetService("DataStoreService")
local Players = game:GetService("Players")
-- Cambia "MiJuegoDatos_v1" por el nombre que quieras para tu base de datos
local playerDataStore = DataStoreService:GetDataStore("MiJuegoDatos_v1")
-- Función para cargar los datos del jugador
local function onPlayerAdded(player)
-- Crear la carpeta "leaderstats" para que se muestre en la tabla de puntuación
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
-- Crear el valor de Monedas (Coins)
local coins = Instance.new("IntValue")
coins.Name = "Coins"
coins.Value = 0 -- Valor por defecto
coins.Parent = leaderstats
-- Crear el valor de Nivel (Level)
local level = Instance.new("IntValue")
level.Name = "Level"
level.Value = 1 -- Valor por defecto
level.Parent = leaderstats
-- Intentar cargar los datos guardados desde el DataStore
local playerKey = "Player_" .. player.UserId
local success, savedData = pcall(function()
return playerDataStore:GetAsync(playerKey)
end)
if success and savedData then
-- Si se encontraron datos, se los asignamos al jugador
coins.Value = savedData.Coins or 0
level.Value = savedData.Level or 1
print("Datos cargados con éxito para: " .. player.Name)
else
print("No se encontraron datos previos para: " .. player.Name .. ". Creando nuevos.")
end
end
-- Función para guardar los datos del jugador
local function onPlayerRemoving(player)
local leaderstats = player:FindFirstChild("leaderstats")
if not leaderstats then return end
local playerKey = "Player_" .. player.UserId```
-- Creamos una tabla con los datos actuales
local dataToSave = {
Coins = leaderstats.Coins.Value,
Level = leaderstats.Level.Value
}
-- Intentamos guardar en la base de datos (usamos pcall por si falla la conexión)
local success, err = pcall(function()
playerDataStore:SetAsync(playerKey, dataToSave)
end)
if success then
print("Datos guardados correctamente para: " .. player.Name)
else
warn("Error al guardar datos de " .. player.Name .. ": " .. tostring(err))
end
end
-- Conectar las funciones a los eventos del juego
Players.PlayerAdded:Connect(onPlayerAdded)
Players.PlayerRemoving:Connect(onPlayerRemoving)
-- Guardado preventivo por si el servidor se cierra de golpe (BindToClose)
game:BindToClose(function()
for _, player in ipairs(Players:GetPlayers()) do
onPlayerRemoving(player)
end
end)
--[[
DataStoreManager.lua
Creado por: TuNombre/TuUsuarioGitHub
Descripción: Un sistema seguro de guardado de datos para monedas y niveles en Roblox.
Colocación en Roblox: ServerScriptService
--]]
local DataStoreService = game:GetService("DataStoreService")
local Players = game:GetService("Players")
-- Cambia "MiJuegoDatos_v1" por el nombre que quieras para tu base de datos
local playerDataStore = DataStoreService:GetDataStore("MiJuegoDatos_v1")
-- Función para cargar los datos del jugador
local function onPlayerAdded(player)
-- Crear la carpeta "leaderstats" para que se muestre en la tabla de puntuación
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
end
-- Función para guardar los datos del jugador
local function onPlayerRemoving(player)
local leaderstats = player:FindFirstChild("leaderstats")
if not leaderstats then return end
end
-- Conectar las funciones a los eventos del juego
Players.PlayerAdded:Connect(onPlayerAdded)
Players.PlayerRemoving:Connect(onPlayerRemoving)
-- Guardado preventivo por si el servidor se cierra de golpe (BindToClose)
game:BindToClose(function()
for _, player in ipairs(Players:GetPlayers()) do
onPlayerRemoving(player)
end
end)