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!