Learn how to save and load player data persistently.
DataStores let you save data that persists between game sessions.
local DataStoreService = game:GetService("DataStoreService")
local playerData = DataStoreService:GetDataStore("PlayerData")
-- Enable Studio testing (only for testing!)
-- Enable in Game Settings > Security > Enable Studio Access to API Services
DataStores must be enabled in Game Settings to work.
Use GetAsync to load and SetAsync to save data.
local DataStoreService = game:GetService("DataStoreService")
local playerData = DataStoreService:GetDataStore("PlayerData")
-- Load data
local function loadData(player)
local userId = player.UserId
local data
local success, err = pcall(function()
data = playerData:GetAsync(userId)
end)
if success then
return data or {Coins = 0, Level = 1} -- Default data
else
warn("Error loading data: " .. err)
return {Coins = 0, Level = 1}
end
end
-- Save data
local function saveData(player, data)
local userId = player.UserId
local success, err = pcall(function()
playerData:SetAsync(userId, data)
end)
if success then
print("Data saved successfully!")
else
warn("Error saving data: " .. err)
end
end
Always use pcall() to handle DataStore errors gracefully.
Implement a full save system with auto-save.
local Players = game:GetService("Players")
local DataStoreService = game:GetService("DataStoreService")
local dataStore = DataStoreService:GetDataStore("PlayerData")
local playerData = {}
Players.PlayerAdded:Connect(function(player)
-- Load data
local data = loadData(player)
playerData[player.UserId] = data
-- Create leaderstats
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local coins = Instance.new("IntValue")
coins.Name = "Coins"
coins.Value = data.Coins
coins.Parent = leaderstats
end)
Players.PlayerRemoving:Connect(function(player)
-- Save on leave
local data = playerData[player.UserId]
if data then
data.Coins = player.leaderstats.Coins.Value
saveData(player, data)
end
end)
Load data when player joins, save when they leave.
Create a system that saves and loads player coins.
local DataStoreService = game:GetService("DataStoreService")
local Players = game:GetService("Players")
-- Create your save system
local DataStoreService = game:GetService("DataStoreService")
local Players = game:GetService("Players")
local coinStore = DataStoreService:GetDataStore("Coins")
Players.PlayerAdded:Connect(function(player)
local coins = coinStore:GetAsync(player.UserId) or 0
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local coinsValue = Instance.new("IntValue")
coinsValue.Name = "Coins"
coinsValue.Value = coins
coinsValue.Parent = leaderstats
end)
Players.PlayerRemoving:Connect(function(player)
coinStore:SetAsync(player.UserId, player.leaderstats.Coins.Value)
end)
Continue your learning journey