I'm trying to make a datastore for a game but it's giving me some trouble. I'm pretty new to datastore, I made this script and have been working on it for a while but I still can't seem to fix it. Any Idea's as to why is not working?
Server Script in ServerScriptService:
local DSS = game:GetService("DataStoreService") local RepStorage = game:GetService("ReplicatedStorage") local saveData = RepStorage.saveData local RedlinePlayerDS = DSS:GetDataStore("RedLineRacing[Datastore]") local Tutorial = RepStorage.TutorialEvent SessionData = {} local PlayerDataTemplate = { --["Name"] = {"ValueType"}, ["Rowg Coins"] = {"NumberValue", 15000}, ["Miles Driven"] = {"NumberValue", 0}, ["Rank"] = {"StringValue", "Permit"}, ["Ae86"] = {"BoolValue", false}, ["180SX"] = {"BoolValue", false}, ["1968 Challenger"] = {"BoolValue", false}, ["911"] = {"BoolValue", false}, ["Accord"] = {"BoolValue", false}, ["Camaro SS"] = {"BoolValue", false}, ["Corvette Z06"] = {"BoolValue", false}, ["Huracan Performante"] = {"BoolValue", false}, ["LFA"] = {"BoolValue", false}, ["Lancer Evolution"] = {"BoolValue", false}, ["Miata"] = {"BoolValue", false}, ["ModelS"] = {"BoolValue", false}, ["Senna"] = {"BoolValue", false}, ["Supra"] = {"BoolValue", false} } game.Players.PlayerAdded:Connect(function(player) --Variables local playerKey = "player_"..player.UserId local CarStorage = Instance.new("Folder", player) CarStorage.Name = "OwnedCars" local leaderstats = Instance.new("Folder",player) leaderstats.Name = "leaderstats" --simple generic-for loop to make new value instances: for name, object in pairs(PlayerDataTemplate) do local newValue = Instance.new(object[1]) newValue.Name = name newValue.Value = object[2] if object[1] == "NumberValue" or object[1] == "StringValue" then newValue.Parent = leaderstats else newValue.Parent = CarStorage end end local GetSave; local success, message = pcall(function() GetSave = RedlinePlayerDS:GetAsync(playerKey) end) if success then --DataStore worked and retrieved something. We continue. if GetSave then SessionData[playerKey] = GetSave for _, object in ipairs(CarStorage:GetChildren()) do if object:IsA("BoolValue") then print(object.Name, GetSave[object.Name]) object.Value = GetSave[object.Name] end end for _, object in ipairs(leaderstats:GetChildren()) do if object:IsA("StringValue") or object:IsA("NumberValue") then print(object.Name, GetSave[object.Name]) object.Value = GetSave[object.Name] end end print("Data loaded for "..player.Name) else print("Welcome "..player.Name.." To RedLine Racing!") SessionData[playerKey] = { ["Rowg Coins"] = 15000; ["Miles Driven"] = 0; Rank = "Permit"; Cars = { ["Ae86"] = false; ["180SX"] = false; ["1968 Challenger"] = false; ["911"] = false; ["Accord"] = false; ["Camaro SS"] = false; ["Corvette Z06"] = false; ["Huracan Performante"] = false; ["LFA"] = false; ["Lancer Evolution"] = false; ["Miata"] = false; ["ModelS"] = false; ["Senna"] = false; ["Supra"] = false; } } end else warn("Can't Load Player Data! Reload Server.") end end) game.Players.PlayerRemoving:Connect(function(player) print(player.Name.." Has Left!") local playerKey = "player_"..player.UserId local CarStorage = player.OwnedCars local leaderstats = player.leaderstats local GetSave = RedlinePlayerDS:GetAsync(playerKey) for _, object in ipairs(CarStorage:GetChildren()) do if object:IsA("BoolValue") then SessionData[playerKey].Cars.object.Name = object.Value end end for _, object in ipairs(leaderstats:GetChildren()) do if object:IsA("StringValue") or object:IsA("NumberValue") then SessionData[playerKey].object.Name = object.Value end end local success, message = pcall(function() RedlinePlayerDS:SetAsync(playerKey, SessionData[playerKey]) end) if success then print("saved success for "..player.Name) else warn("Did not save because: "..message) end end)