local ds = game:GetService("DataStoreService")
local dataStore = ds:GetDataStore("LeaderstatsData")
local plrs = game:GetService("Players")
plrs.PlayerAdded:Connect(function(plr)
local leaderstats = Instance.new("Folder")
leaderstats.Parent = plr
leaderstats.Name = "leaderstats"
local souls = Instance.new("IntValue")
souls.Parent = leaderstats
souls.Name = "Souls"
souls.Value = 0
local gems = Instance.new("IntValue")
gems.Parent = leaderstats
gems.Name = "Gems"
gems.Value = 0
local privateValues = Instance.new("Folder")
privateValues.Parent = plr
privateValues.Name = "privateValues"
local gemMultiplication = Instance.new("IntValue")
gemMultiplication.Parent = privateValues
gemMultiplication.Name = "gemMultiplication"
gemMultiplication.Value = 0
local soulMultiplication = Instance.new("IntValue")
soulMultiplication.Parent = privateValues
soulMultiplication.Name = "soulMultiplication"
soulMultiplication.Value = 0
local data = nil
local succ, err = pcall(function()
data = dataStore:GetAsync(plr.UserId)
end)
if not succ then
warn(err)
end
if type(data) == "table" then
souls.Value = data[1] or 0
gems.Value = data[2] or 0
gemMultiplication.Value = data[3] or 0
soulMultiplication.Value = data[4] or 0
end
end)
plrs.PlayerRemoving:Connect(function(plr)
local data = {
plr.leaderstats.Souls.Value,
plr.leaderstats.Gems.Value,
plr.privateValues.gemMultiplication.Value,
plr.privateValues.soulMultiplication.Value
}
local succ, err = pcall(function()
dataStore:SetAsync(plr.UserId, data)
end)
if not succ then
warn(err)
end
end)
Instance all of the necessary instances first, then load the stored values at once. Also, avoid using the parent parameter of the instance class constructor function “Instance.new()”.