Advertisement
Guest User

Untitled

a guest
Feb 20th, 2020
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.65 KB | None | 0 0
  1. --// Services
  2. local Players = game:GetService("Players")
  3. local ReplicatedStorage = game:GetService("ReplicatedStorage")
  4. local RunService = game:GetService("RunService")
  5. local DSS = game:GetService("DataStoreService")
  6.  
  7. --// Assets
  8. local Remotes = ReplicatedStorage:WaitForChild("Remotes")
  9. local DataEvent = Remotes:WaitForChild("Data")
  10. local Buy = Remotes:WaitForChild("Buy")
  11.  
  12. local Modules = ReplicatedStorage:WaitForChild("Modules")
  13. local ClassInfo = require(Modules:WaitForChild("Class Info"))
  14.  
  15. --// Variables
  16. local MaxTries = 5
  17. local Version = 1
  18.  
  19. local DataStore = DSS:GetDataStore("Player's Datastore: "..Version)
  20.  
  21. --// Settings
  22. local StartingData = {
  23.     Data = {
  24.         Stats = {
  25.             Level = 1,
  26.             Exp = 0,
  27.             MaxExp = 100,
  28.             Cash = 0   
  29.         },
  30.    
  31.         Characters = {
  32.             ["Naruto"] = {
  33.                 Naruto = "Locked",
  34.                 Sasuke = "Locked",
  35.                 Kakashi = "Locked",
  36.             },
  37.             ["One Piece"] = {  
  38.                 Luffy = "Locked",
  39.                 Zoro = "Locked",
  40.                 Sanji = "Locked",  
  41.             },
  42.         }  
  43.     }
  44. }
  45.  
  46. local ServerData = {}
  47.  
  48. --// Functions
  49. local function DataRetry(Player, DataFunction, Argument)
  50.     local success, errormsg, Tries, Data = false, nil, 0, nil
  51.    
  52.     while Tries < MaxTries and not success do
  53.         Tries = Tries +1
  54.         success, errormsg = pcall(function()
  55.             Data = DataFunction(Player, Argument)
  56.         end)
  57.        
  58.         if success then
  59.             print("Data rety successfull for: "..Player.Name)
  60.         else
  61.             warn("DATABASE ERROR: "..errormsg.."For : "..Player.Name)
  62.             wait(1)
  63.         end
  64.     end
  65.     return Data
  66. end
  67.  
  68. local function Save(Player, DataToSave)
  69.     DataStore:SetAsync(Player.UserId, DataToSave)  
  70. end
  71.  
  72. local function Get(Player)
  73.     local Data = DataStore:GetAsync(Player.UserId)
  74.     return Data
  75. end
  76.  
  77. local function UpdateClient(Player)
  78.     while ServerData[Player].Data == nil do
  79.         wait(1)
  80.     end
  81.     DataEvent:FireClient(Player, ServerData[Player].Data)
  82. end
  83.  
  84. --// Module
  85. local module = {
  86.     NewPlayer = function(Player)
  87.         if RunService:IsStudio() then
  88.             ServerData[Player].Data = StartingData.Data
  89.         else
  90.             local Data = DataRetry(Player, Get)
  91.            
  92.             if Data == nil then
  93.                 ServerData[Player].Data = StartingData.Data
  94.                 print(Player.Name.." has no Data")
  95.             else
  96.                 ServerData[Player].Data = Data
  97.                 print(Player.Name.."'s Data has been loaded")
  98.             end
  99.         end
  100.         UpdateClient(Player)
  101.     end,
  102.    
  103.     returnData = function(Player)
  104.         while ServerData[Player].Data == nil do
  105.             wait(1)
  106.         end
  107.         return ServerData[Player].Data
  108.     end,
  109.    
  110.     updateClient = function(Player)
  111.         while ServerData[Player].Data == nil do
  112.             wait(1)
  113.         end
  114.         DataEvent:FireClient(Player, ServerData[Player].Data)
  115.     end,
  116.    
  117.     changeData = function(Player, DataTree, Stat, NewStat)
  118.         ServerData[Player].Data[DataTree][Stat] = NewStat
  119.         UpdateClient(Player)
  120.     end,
  121.    
  122.     updateData = function(Player, DataTree, Stat, Type, Amount)
  123.         if Type == "Add" then
  124.             ServerData[Player].Data[DataTree][Stat] = ServerData[Player].Data[DataTree][Stat] +Amount
  125.         elseif Type == "Subtract" then
  126.             ServerData[Player].Data[DataTree][Stat] = ServerData[Player].Data[DataTree][Stat] -Amount
  127.         elseif Type == "Divide" then
  128.             ServerData[Player].Data[DataTree][Stat] = ServerData[Player].Data[DataTree][Stat] / Amount
  129.         elseif Type == "Multiply" then
  130.             ServerData[Player].Data[DataTree][Stat] = ServerData[Player].Data[DataTree][Stat] *Amount
  131.         end
  132.         UpdateClient(Player)
  133.     end
  134.    
  135. }
  136.  
  137. --// Main
  138. Players.PlayerAdded:Connect(function(Player)
  139.     ServerData[Player] = {}
  140.     module.NewPlayer(Player)
  141. end)
  142.  
  143. Players.PlayerRemoving:Connect(function(Player)
  144.     if RunService:IsStudio() then return end
  145.     DataRetry(Player, Save, ServerData[Player].Data)
  146. end)
  147.  
  148. game:BindToClose(function()
  149.     if RunService:IsStudio() then return end
  150.     local List = Players:GetPlayers()
  151.     for index = 1,#List do
  152.         local Player = List[index]
  153.         DataRetry(Players, Save, ServerData[Player].Data)
  154.         print("Safe Saving: "..Player.Name.."'s Data")
  155.     end
  156. end)
  157.  
  158. -- Remotes
  159. DataEvent.OnServerEvent:Connect(function(Player, Arguments, Task)
  160.     if Task == "update Data" then
  161.        
  162.     end
  163. end)
  164.  
  165. Buy.OnServerInvoke = function(Player, Arguments)
  166.     if ClassInfo[Arguments.Anime][Arguments.Character].Price == "Free" then
  167.         ServerData[Player].Data.Characters[Arguments.Anime][Arguments.Character] = "Unlocked"
  168.         UpdateClient(Player)
  169.         return true
  170.     else
  171.         if ServerData[Player].Data.Stats.Cash >= ClassInfo[Arguments.Anime][Arguments.Character].Price then
  172.             ServerData[Player].Data.Stats.Cash = ServerData[Player].Data.Stats.Cash - ClassInfo[Arguments.Anime][Arguments.Character].Price
  173.             ServerData[Player].Data.Characters[Arguments.Anime][Arguments.Character] = "Unlocked"
  174.             UpdateClient(Player)
  175.             return true
  176.         else
  177.             UpdateClient(Player)
  178.             return false
  179.         end
  180.     end
  181. end
  182.  
  183. return module
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement