Okay, so I have a DataStore that is currently 188 lines long. And while it works, I don't believe it's efficient, so I'm wondering if there's a way to shorten it.
Right now, the reason it's so long is because I'm saving every individual value into a table and then saving that table. I was thinking, maybe I could put all the values into a folder outside the DataStore and then save the folder. If this was possible I would be able to significantly cut down on code in my DataStore. It would also allow me to add new values easier and faster than before. Even if this isn't possible, if anyone knows an alternative, I would greatly appreciate it.
This might be a pointless question though, seeing as I have no idea how other people save data and they may have over 1k lines.
This is currently my code, you can see why I have so many lines now:
local DataStoreService = game:GetService("DataStoreService") local Data = DataStoreService:GetDataStore("DataStore11") game.Players.PlayerAdded:Connect(function(player) game.Players:WaitForChild(player.Name) player:WaitForChild("leaderstats") player:WaitForChild("SpeedMulti") game.Workspace:WaitForChild(player.Name) wait(1) local Key = player.UserId local Leaderstats = player.leaderstats local Speed = player.Speed local Rebirths = Leaderstats.Rebirths local TimePlayed = player.TPValue local Gems = player.Gems local RebirthCost = player.RebirthCost local SpeedMulti = player.SpeedMulti local SpdUpgCost = player.SpdUpgCost local JmpUpgCost = player.JmpUpgCost local JumpMulti = player.JumpMulti local JumpPower = player.JumpPower local Cardio = Leaderstats.Cardio local CardioMulti = player.CardioMulti local TotalSpeed = player.TotalSpeed local TotalJumpPower = player.TotalJumpPower local TotalCardio = player.TotalCardio local TotalGems = player.TotalGems local DefaultStats = { 4, -- 1/Speed 0, -- 2/Rebirths 0, -- 3/Time Played 0, -- 4/Gems 1000, -- 5/Rebirth Cost 1, -- 6/Speed Multiplier 100, -- 7/Speed Upgrade Cost 100, -- 8/Jump Upgrade Cost 1, -- 9/Jump Multiplier 64, -- 10/Jump Power 68, -- 11/Cardio 1, -- 12/CardioMulti 4, -- 13/TotalSpeed 64, -- 14/TotalJumpPower 68, -- 15/TotalCardio 0 -- 16/TotalGems } local Stats = { Speed.Value, -- 1 Rebirths.Value, -- 2 TimePlayed.Value, -- 3 Gems.Value, -- 4 RebirthCost.Value, -- 5 SpeedMulti.Value, -- 6 SpdUpgCost.Value, -- 7 JmpUpgCost.Value, -- 8 JumpMulti.Value, -- 9 JumpPower.Value, -- 10 Cardio.Value, -- 11 CardioMulti.Value, -- 12 TotalSpeed.Value, -- 13 TotalJumpPower.Value, -- 14 TotalCardio.Value, -- 15 TotalGems.Value -- 16 } local LoadStats local success, err = pcall(function() LoadStats = Data:GetAsync(Key) end) if LoadStats == nil then Speed.Value = DefaultStats[1] Rebirths.Value = DefaultStats[2] TimePlayed.Value = DefaultStats[3] Gems.Value = DefaultStats[4] RebirthCost.Value = DefaultStats[5] SpeedMulti.Value = DefaultStats[6] SpdUpgCost.Value = DefaultStats[7] JmpUpgCost.Value = DefaultStats[8] JumpMulti.Value = DefaultStats[9] JumpPower.Value = DefaultStats[10] Cardio.Value = DefaultStats[11] CardioMulti.Value = DefaultStats[12] TotalSpeed.Value = DefaultStats[13] TotalJumpPower.Value = DefaultStats[14] TotalCardio.Value = DefaultStats[15] TotalGems.Value = DefaultStats[16] Data:SetAsync(Key, Stats) print("No data to load. Setting data...") else Speed.Value = LoadStats[1] Rebirths.Value = LoadStats[2] TimePlayed.Value = LoadStats[3] Gems.Value = LoadStats[4] RebirthCost.Value = LoadStats[5] SpeedMulti.Value = LoadStats[6] SpdUpgCost.Value = LoadStats[7] JmpUpgCost.Value = LoadStats[8] JumpMulti.Value = LoadStats[9] JumpPower.Value = LoadStats[10] Cardio.Value = LoadStats[11] CardioMulti.Value = LoadStats[12] TotalSpeed.Value = LoadStats[13] TotalJumpPower.Value = LoadStats[14] TotalCardio.Value = LoadStats[15] TotalGems.Value = LoadStats[16] print("Data loaded!") end while wait(300) do local success, err = pcall(function() Data:UpdateAsync(Key, function(oldValue) return Stats end) end) if success then print("Data auto saved!") else print("Auto save failed.") warn(err) end end end) game.Players.PlayerRemoving:Connect(function(player) local Key = player.UserId local Leaderstats = player.leaderstats local Speed = player.Speed local Rebirths = Leaderstats.Rebirths local TimePlayed = player.TPValue local Gems = player.Gems local RebirthCost = player.RebirthCost local SpeedMulti = player.SpeedMulti local SpdUpgCost = player.SpdUpgCost local JmpUpgCost = player.JmpUpgCost local JumpMulti = player.JumpMulti local JumpPower = player.JumpPower local Cardio = Leaderstats.Cardio local CardioMulti = player.CardioMulti local TotalSpeed = player.TotalSpeed local TotalJumpPower = player.TotalJumpPower local TotalCardio = player.TotalCardio local TotalGems = player.TotalGems local Stats = { Speed.Value, Rebirths.Value, TimePlayed.Value, Gems.Value, RebirthCost.Value, SpeedMulti.Value, SpdUpgCost.Value, JmpUpgCost.Value, JumpMulti.Value, JumpPower.Value, Cardio.Value, CardioMulti.Value, TotalSpeed.Value, TotalJumpPower.Value, TotalCardio.Value, TotalGems.Value } local success, err = pcall(function() Data:UpdateAsync(Key, function(oldData) return Stats end) end) if success then print("Data saved!") else print("Data didn't save.") warn(err) end end) game:BindToClose(function() wait(10) end)