Hello,
**Problem:**My game has 800 BoolValues that needs to be saved. There is a 200 variable per function limit. Therefore, instead of having a single Module script, I have six, each with a unique key. However, since I added additional Module scripts with DataStores, they've stopped saving. The old data from before I had multiple DataStores is still saving, but not the new. I receive no errors, and my game is FilteringEnabled.
Here is how DataStore01 is setup as a Module Script inside ServerScriptStorage:
local module = {}
local DataStoreService = game:GetService("DataStoreService")
local InventoryItems = DataStoreService:GetDataStore("XXXXXX")
local ToolGiverCheck = require(script.ToolGiverCheck)
AUTOSAVE_INTERVAL = 120
function loadToolData01(Player)
local Key = "PlayerIdNum-"..Player.UserId.."_ToolItems01"
local DataToGet = InventoryItems:GetAsync(Key)
local InvData = Player:WaitForChild("Inventory1")
local HasM9 = InvData:WaitForChild("HasM9")
--Other variables
if DataToGet == nil then return end
HasM9.Value = DataToGet[1] == 1
--Other variables
print("Data successfully loaded for "..Player.Name)
end
function saveToolData01(Player)
local Key = "PlayerIdNum-"..Player.UserId.."_ToolItems01"
local InvData = Player:WaitForChild("Inventory1")
local HasM9 = InvData:WaitForChild("HasM9")
--Other variables
local DataToSave = {}
if HasM9.Value == true then table.insert(DataToSave, 1) else table.insert(DataToSave, 0) end
--Other variables
InventoryItems:SetAsync(Key, DataToSave)
print("Data successfully saved for "..Player.Name)
end
game.Players.PlayerAdded:Connect(function(Player) -- Leaderstats and Blue Tools
local Key = "PlayerIdNum-"..Player.UserId.."_ToolItems01"
--remove createdata and get data functions
-- TOOLS
local tnew = Instance.new
local ts = tnew("Folder")
ts.Name = "Inventory1"
ts.Parent = Player
local tool1 = tnew("BoolValue")
tool1.Name = "HasM9"
tool1.Value = false
tool1.Parent = ts
--Other variables
loadToolData01(Player)
repeat wait() until Player.Character
ToolGiverCheck.giveTools(Player)
end)
-- PLAYER REMOVING
game.Players.PlayerRemoving:Connect(function(Player)
saveToolData01(Player)
end)
spawn(function()
while wait(AUTOSAVE_INTERVAL) do
for i, Player in pairs (game:GetService("Players"):GetChildren()) do --for every player in the game, save
print("Auto-saving Blue " .. Player.Name .. "'s Data")
saveToolData01(Player)
print("Successfully Auto-saved " .. Player.Name .. "'s Data")
end
end
end)
return module
Unfortunately, despite each Print confirming that the Data loads when the player is added, and saves every 120 seconds, and confirms the save, when the player leaves and returns, the data has not infact saved, despite again received the confirmation that the Data has loaded.
When I only had one DataStore module script it worked fine, I assume I've overloaded this due to having six scripts going at once. What's the workaround if I have so many variables?
Would changing the AutoSave rate help? If they all saved at different intervals? Can I have multiple DataStores hooked up to a single game?
Example: DataStore Script 1
local DataStoreService = game:GetService("DataStoreService")
local InventoryItems = DataStoreService:GetDataStore("DS01")
DataStore Script 2
local DataStoreService = game:GetService("DataStoreService")
local InventoryItems = DataStoreService:GetDataStore("DS02")
I am open to ideas and suggestions. :) Thank you!
