You should place GetAsync and SetAsync within a pcall function.
DataStoreService gives errors some times, meaning a pcall function will prevent that.
Your script may stop working sometimes, if you don’t have a pcall function
Heres an example for getting data:
local data
local success,err = pcall(function()
data = coinsStore:GetAsync(player.UserId)
end)
if success then
value_1 = data
else
warn(err)
end
I found a few issues and fixed them, try it now and see if it works (you need to modify the users’ coin and gem values server-side cause client-side adjustments dont change server-side values.)
local dataStoreService = game:GetService(“DataStoreService”)
local coinsStore = dataStoreService:GetDataStore(“CoinsStore”)
local gemsStore = dataStoreService:GetDataStore(“GemsStore”)
game:GetService(“Players”).PlayerAdded:Connect(function(player)
player.CharacterAdded:Connect(function(char)
local folder = Instance.new(“Folder”)
folder.Name = “leaderstats”
folder.Parent = player
local value_1 = Instance.new(“NumberValue”, folder)
value_1.Name = “Coins”
value_1.Value = coinsStore:GetAsync(player.UserId)
local value_2 = Instance.new(“NumberValue”, folder)
value_2.Name = “Gems”
value_2.Value = gemsStore:GetAsync(player.UserId)
end)
end)
game:GetService(“Players”).PlayerRemoving:Connect(function(player)
local folder = player:FindFirstChild(“leaderstats”)
local value_1 = folder:FindFirstChild(“Coins”)
local value_2 = folder:FindFirstChild(“Gems”)
coinsStore:SetAsync(player.UserId, value_1.Value)
gemsStore:SetAsync(player.UserId, value_2.Value)
end)
game:BindToClose(function()
for _,plr in pairs(game:GetService(“Players”):GetChildren()) do
local folder = player:FindFirstChild(“leaderstats”)
local value_1 = folder:FindFirstChild(“Coins”)
local value_2 = folder:FindFirstChild(“Gems”)
coinsStore:SetAsync(plr.UserId, value_1.Value)
gemsStore:SetAsync(plr.UserId, value_2.Value)
end
end)
I’d recommend using ProfileService instead of default Roblox Datastores so you dont experience data-loss when making a lot of requests.