Advertisement
drakon-firestone

DataServer

May 10th, 2023
901
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.67 KB | None | 0 0
  1. local players = game:GetService("Players")
  2.  
  3. local playerData = script.PlayerData
  4.  
  5. local dataStoreService = game:GetService("DataStoreService")
  6. local dataStore = dataStoreService:GetDataStore("Data")
  7. local key = "TestKey1"
  8.  
  9. local remotes = game.ReplicatedStorage.Remotes
  10. local bank = remotes.Bank
  11. local area = remotes.Area
  12.  
  13.  
  14. local function LoadData(player)
  15.     for i, v in pairs(playerData:GetChildren()) do
  16.         v:Clone().Parent = player
  17.     end
  18.    
  19.     local data
  20.    
  21.     local success, errorMsg = pcall(function()
  22.        
  23.         data = dataStore:GetAsync(player.UserId .. key)
  24.        
  25.         for key, folder in pairs(data) do
  26.             if key == "leaderstats" then
  27.                 for item, amount in pairs(folder) do
  28.                     if item == "Coins" then
  29.                         player.leaderstats.Coins.Value = amount
  30.                     elseif item == "Diamonds" then
  31.                         player.leaderstats.Diamonds.Value = amount
  32.                     end
  33.                 end
  34.             end
  35.            
  36.             if key == "Areas" then
  37.                 for item, _ in pairs(folder) do
  38.                     if not player.Areas:FindFirstChild(item) then
  39.                         local value = Instance.new("StringValue", player.Areas)
  40.                         value.Name = item
  41.                         area:FireClient(player, workspace.Areas[value.Name].Barrier)
  42.                     end
  43.                 end
  44.             end
  45.         end
  46.         print("Loaded data")
  47.         print(data)
  48.     end)
  49.    
  50.     if not success then
  51.         warn(errorMsg)
  52.         wait(5)
  53.         LoadData(player)
  54.     end
  55.    
  56. end
  57.  
  58.  
  59. -- Funkcja 'SaveData', która zapisuje dane gracza na serwerze
  60. local function SaveData(player)
  61.     -- Definiujemy zmienną 'data' i
  62.     -- przeglądamy wszystkie dzieci gracza, zapisując ich wartości do zmiennej 'data'
  63.     local data = {}
  64.     local success, errorMsg = pcall(function()
  65.         for i, folder in pairs(player:GetChildren()) do
  66.             data[folder.Name] = {}
  67.             for i, item in pairs(folder:GetChildren()) do
  68.                 data[folder.Name][item.Name] = item.Value
  69.             end
  70.         end
  71.         -- Wywołujemy funkcję 'SetAsync' na obiekcie 'dataStore', zapisując dane gracza
  72.         dataStore:SetAsync(player.UserId .. key, data)
  73.     end)
  74.     -- Jeżeli wykonanie zadania nie udało się, wyświetlamy błąd i ponownie zapisujemy dane
  75.     if not success then
  76.         warn(errorMsg)
  77.         wait(5)
  78.         SaveData(player)
  79.     end
  80.  
  81.     print("Saved data")
  82.     print(data)
  83. end
  84. -- Podpinamy funkcje 'LoadData' i 'SaveData' do eventów 'PlayerAdded' i 'PlayerRemoving'
  85. players.PlayerAdded:Connect(LoadData)
  86. players.PlayerRemoving:Connect(SaveData)
  87. -- Podpinamy funkcję do eventu 'OnServerEvent' na obiekcie 'bank',
  88. -- umożliwiającej graczom dodawanie środków do konta
  89. bank.OnServerEvent:Connect(function(player, action, currency, amount)
  90.     if action == "+" then
  91.         if currency == "Coins" then
  92.             player.leaderstats.Coins.Value += amount
  93.         elseif currency == "Diamonds" then
  94.             player.leaderstats.Diamonds.Value += amount
  95.         end
  96.     end
  97. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement