Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local StatFile = game:GetService("ServerStorage"):WaitForChild("StatFile")
- local data = {}
- data.DataStore = game:GetService("DataStoreService"):GetDataStore("test")
- local DS = data.DataStore
- data.Default = {
- ["statnumbers"] = {
- ["Munny"] = 0,
- ["Kills"] = 0,
- ["InventorySlot"] = "Empty",
- ["Cats"] = false,
- },
- ["AnotherFolder"] = {
- ["Munny"] = 0,
- ["BagSlot"] = "Empty",
- ["Dogs"] = 0,
- ["Nothing"] = false,
- }
- }
- local Types = {
- ["table"] = "Folder",
- ["string"] = "StringValue",
- ["boolean"] = "BoolValue",
- ["number"] = "IntValue",
- }
- local function createDictionary(start)
- local dict = {}
- for i,v in pairs(start):GetChildren() do
- if v:IsA("Folder") then
- dict[v.Name] = createDictionary(v) --// this reminds me, make a video on recursion
- else
- dict[v.Name] = v.Value
- end
- end
- return dict
- end
- local function load(player, start, parent)
- for i,v in pairs(start) do
- local valueType = Types[typeof(v)]
- local new = Instance.new(valueType)
- if valueType == 'Folder' then
- for ii,vv in pairs(v) do --// if i comment this loop out none of the string/int/bool values are created
- load(player, v, new)
- end
- else
- new.Value = v
- end
- new.Name = i
- new.Parent = parent
- end
- end
- function data:SaveData(player)
- DS:SetAsync(player.userId, createDictionary(StatFile[player.Name]))
- end
- function data:LoadData(player)
- local playerData = DS:GetAsync(player.userId)
- local playerDataFolder = Instance.new("Folder", StatFile)
- playerDataFolder.Name = player.Name
- if playerData then
- load(player, playerData, playerDataFolder)
- else
- load(player, data.Default, playerDataFolder)
- end
- print('Datastore takes up '..game:GetService("HttpService"):JSONEncode(data.Default):len())
- end
- return data
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement