I'm trying to make a game but I will not going into details. Anyway, I'm trying to make a system that requires saving and getting a table from the Data Store Service. I have created a new place just to test this, and I got a problem. I have a server script for storing the data, local script for sending the table to the data store script, and another local script that creates the data. I know it sounds a bit confusing but when you will see the scripts I hope everything will become more clearly. My problem is (at list what i think it is) that most of the time the data isn't being saved. I tried to see how can I fix the problem and found out that every time that I change the player key (the unique key that stores each player's data) or the data store key (:GetDataStore(This)) I get a warning in the console:
Request was throttled. Try sending fewer requests. Key = [key]
and the data being saved. This is the only time that the game saves the data. I think it's a bug or something but I really need that system so if any one can help I would very appreciate it :)
The scripts:
Data store script:
--Data store SERVER script, Parent: Workspace
--Get services
local DSService = game:GetService('DataStoreService'):GetDataStore('@1F6=mX')
local Workspace = game:GetService('Workspace')
local Players = game:GetService('Players')
local ReplicatedStorage = game:GetService('ReplicatedStorage')
--Make data save folder
local DataSaveFolder = Instance.new('Folder', ReplicatedStorage)
DataSaveFolder.Name = "DataSaveFolder"
--Player is joining the game
Players.PlayerAdded:Connect(function(player)
local uniqueId = 'id-'..player.userId --Player unique id
local tableData = {} --Table data
--Insert default data into table for a case that the player has no data
for index, value in pairs(ReplicatedStorage.DefaultTableData:GetChildren()) do
table.insert(tableData, value.Value)
end
local GetSaved = DSService:GetAsync(uniqueId) --Stores the player data on get saved
if GetSaved then --Checks if player has any data
tableData = GetSaved --If true pull the exicting data
--Debug Start
print("Debug - The player has past data. Table:")
for i,v in pairs(tableData) do
print("Debug - #"..i.." - "..v)
end
--Debug End
else
DSService:SetAsync(uniqueId, tableData)--If false save the default data for a new player
--Debug Start
print("Debug - The player has no past data. Table:")
for i,v in pairs(tableData) do
print("Debug - #"..i.." - "..v)
end
--Debug End
end
end)
--Player is leaving the game
Players.PlayerRemoving:Connect(function(player)
local uniqueId = 'id-'..player.userId --Player's unique id
local dataPullRF = ReplicatedStorage.Remote.RemoteFunctions.PlayerLeavingTablePullRF
local tableDataToSave = dataPullRF:InvokeClient(player)
local GetSaved = DSService:GetAsync(uniqueId)
--Debug Start
print("Debug - The player leaved the game. Table to save:")
for i,v in pairs(tableDataToSave) do
print("Debug - #"..i.." - "..v)
end
--Debug End
DSService:SetAsync(uniqueId, tableDataToSave)
end)
Data send script:
--Data send LOCAL script, Parent: StarterGui
--Get Services
local Workspace = game:GetService('Workspace')
local Players = game:GetService('Players')
local ReplicatedStorage = game:GetService('ReplicatedStorage')
local DataSaveFolder = ReplicatedStorage:WaitForChild('DataSaveFolder')
local tableGiveRF = ReplicatedStorage.Remote.RemoteFunctions.PlayerLeavingTablePullRF
--Give data function
local function SendTable()
print("Debug - GiveTable function has been activated")
local tableToSend = {}--Create table to give
for index, value in pairs(DataSaveFolder:GetChildren()) do --Adds the values to the table from the data save folder
table.insert(tableToSend, value.Value)
end
if tableToSend == nil then --If there was a problem and the table to give is nil
print("Debug - The table is nill (local script), fixing it!")
for index, value in pairs(ReplicatedStorage.DefaultTableData:GetChildren()) do --Adds the values to the table from the default data save folder
table.insert(tableToSend, value.Value)
end
end
--Debug Start
print("Debug - Return, Table to give:")
for i,v in pairs(tableToSend) do
print("Debug - #"..i.." - "..v)
end
--Debug End
return tableToSend
end
tableGiveRF.OnClientInvoke = SendTable
Data set script:
--Data set LOCAL script, Parent: StarterGui
--Get Services
local Workspace = game:GetService('Workspace')
local Players = game:GetService('Players')
local ReplicatedStorage = game:GetService('ReplicatedStorage')
local DataSaveFolder = ReplicatedStorage:WaitForChild('DataSaveFolder')
local tableGiveRF = ReplicatedStorage.Remote.RemoteFunctions.PlayerLeavingTablePullRF
--Make data
for i = 8, 20 do --I'm changing this every time just to check if it saves the new data
local data = Instance.new("IntValue", DataSaveFolder)
data.Value = i
end
