local players = game:GetService("Players") local playerData = script.PlayerData local dataStoreService = game:GetService("DataStoreService") local dataStore = dataStoreService:GetDataStore("Data") local key = "TestKey1" local remotes = game.ReplicatedStorage.Remotes local bank = remotes.Bank local area = remotes.Area local function LoadData(player) for i, v in pairs(playerData:GetChildren()) do v:Clone().Parent = player end local data local success, errorMsg = pcall(function() data = dataStore:GetAsync(player.UserId .. key) if not data then return end for key, folder in pairs(data) do if key == "leaderstats" then for item, amount in pairs(folder) do if item == "Coins" then player.leaderstats.Coins.Value = amount elseif item == "Diamonds" then player.leaderstats.Diamonds.Value = amount end end end if key == "Areas" then for item, amount in pairs(folder) do if not player.Areas:FindFirstChild(item) then local value = Instance.new("StringValue", player.Areas) value.Name = item area:FireClient(player, workspace.Areas[value.Name].Barrier) end end end end print("Loaded data") print(data) end) if not success then warn(errorMsg) wait(5) LoadData(player) end end local function SaveData(player) local data = {} local success, errorMsg = pcall(function() for i, folder in pairs(player:GetChildren()) do if folder:IsA("Folder") then data[folder.Name] = {} for i, item in pairs(folder:GetChildren()) do if item.Value then data[folder.Name][item.Name] = item.Value end end end end dataStore:SetAsync(player.UserId .. key, data) end) if not success then warn(errorMsg) wait(5) SaveData(player) end print("Saved data") print(data) end players.PlayerAdded:Connect(LoadData) players.PlayerRemoving:Connect(SaveData) bank.OnServerEvent:Connect(function(player, action, currency, amount) if action == "+" then if currency == "Coins" then player.leaderstats.Coins.Value += amount elseif currency == "Diamonds" then player.leaderstats.Diamonds.Value += amount end end end)