I’m trying to make my game but I’ve come across a data error.
Is this something wrong with Roblox or am I getting too much data?
local DataStoreService = game:GetService("DataStoreService")
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local KillsData = DataStoreService:GetOrderedDataStore("PoopFlingers","Kills")
local CoinsData = DataStoreService:GetDataStore("PoopFlingers","Coins")
local AbilitiesData = DataStoreService:GetDataStore("PoopFlingers","Abilities")
local EquippedData = DataStoreService:GetDataStore("PoopFlingers","Equipped")
local Remotes = ReplicatedStorage.Remotes
local Bindables = ReplicatedStorage.Bindables
local Assets = ReplicatedStorage.Assets
local GlobalLeaderboard = workspace.GlobalLeaderboard
local DataStore = {}
DataStore.sessionData = {}
local function RefreshLeaderboard()
for i,v in GlobalLeaderboard.SurfaceGui:GetChildren() do if not v:IsA("UIListLayout") then v:Destroy() end end
local success,pages = pcall(function()
return KillsData:GetSortedAsync(false,10)
end)
if success then
local entries = pages:GetCurrentPage()
for rank,entry in pairs(entries) do
local nE = string.gsub(entry.key,"kills","")
local id = tonumber(nE)
local name = Players:GetNameFromUserIdAsync(id)
local item = script.Place:Clone()
item.Parent = GlobalLeaderboard.SurfaceGui
item.Kills.Text = tostring(entry.value)
item.Title.Text = name
item.Order.Text = tostring(rank)
end
end
end
local function InitAbilities(player)
DataStore.sessionData[player] = {}
for i,v in Assets.Shop:GetChildren() do
DataStore.sessionData[player][v.Name] = false
end
end
function DataStore:Init()
Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
local kills = Instance.new("IntValue")
kills.Name = "Kills"
local coins = Instance.new("IntValue")
coins.Name = "Coins"
local equipped = Instance.new("StringValue")
equipped.Name = "Equipped"
equipped.Parent = player
leaderstats.Parent = player
kills.Parent = leaderstats
coins.Parent = leaderstats
InitAbilities(player)
local pK = tostring(player.UserId)
local coinsReceived,lastCoins = pcall(function()
return CoinsData:GetAsync(pK.."coins")
end)
if coinsReceived and lastCoins then
coins.Value = lastCoins
end
local killsReceived,lastKills = pcall(function()
return KillsData:GetAsync(pK.."kills")
end)
if killsReceived and lastKills then
kills.Value = lastKills
end
local abilitiesReceived,lastAbilities = pcall(function()
return AbilitiesData:GetAsync(pK.."abilities")
end)
if abilitiesReceived and lastAbilities then
for i,v in lastAbilities do
DataStore.sessionData[player][i] = v
end
end
local equippedReceived,lastEquipped = pcall(function()
return EquippedData:GetAsync(pK .. "equipped")
end)
if equippedReceived and lastEquipped then
equipped.Value = lastEquipped
end
RefreshLeaderboard()
while true do
task.wait(50)
if player.leaderstats.Kills.Value ~= 0 then
KillsData:UpdateAsync(pK .. "kills",function(past)
return player.leaderstats.Kills.Value
end)
end
end
end)
Players.PlayerRemoving:Connect(function(player)
local pK = tostring(player.UserId)
if player.leaderstats.Coins.Value ~= 0 then
local success,result = pcall(function()
return CoinsData:SetAsync(pK .. "coins",player.leaderstats.Coins.Value)
end)
end
if player.leaderstats.Kills.Value ~= 0 then
local success,result = pcall(function()
return KillsData:SetAsync(pK .. "kills",player.leaderstats.Kills.Value)
end)
end
if DataStore.sessionData[player] then
for i,v in DataStore.sessionData[player] do print(i,v) end
local success,result = pcall(function()
return AbilitiesData:SetAsync(pK .. "abilities",DataStore.sessionData[player])
end)
end
if player.Equipped.Value ~= "" then
local success,result = pcall(function()
return EquippedData:SetAsync(pK.."equipped",player.Equipped.Value)
end)
end
end)
task.spawn(function()
while true do
task.wait(10)
RefreshLeaderboard()
end
end)
end
return DataStore