Advertisement
HowToRoblox

LevelHandler

Feb 7th, 2020
4,509
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.54 KB | None | 0 0
  1. local Players = game:GetService("Players")
  2. local DataStoreService = game:GetService("DataStoreService")
  3. local SaveDataStore = DataStoreService:GetDataStore("SaveData")
  4.  
  5.  
  6. local function SavePlayerData(player)
  7.    
  8.     local success, errormsg = pcall(function()
  9.    
  10.         local SaveData = {}
  11.        
  12.         for i, stats in pairs(player.leaderstats:GetChildren()) do
  13.            
  14.             SaveData[stats.Name] = stats.Value
  15.         end
  16.         SaveDataStore:SetAsync(player.UserId, SaveData)
  17.     end)
  18.    
  19.     if not success then
  20.         return errormsg
  21.     end        
  22. end
  23.  
  24.  
  25. Players.PlayerAdded:Connect(function(player)
  26.    
  27.     local Stats = Instance.new("Folder")
  28.     Stats.Name = "leaderstats"
  29.     Stats.Parent = player
  30.    
  31.     local level = Instance.new("IntValue")
  32.     level.Name = "Level"
  33.     level.Value = 0
  34.     level.Parent = Stats
  35.    
  36.     local experience = Instance.new("IntValue")
  37.     experience.Name = "Total XP"
  38.     experience.Value = 0
  39.     experience.Parent = Stats
  40.    
  41.  
  42.     local Data = SaveDataStore:GetAsync(player.UserId)
  43.    
  44.     if Data then
  45.        
  46.         for i, stats in pairs(Stats:GetChildren()) do
  47.            
  48.             stats.Value = Data[stats.Name]
  49.         end    
  50.            
  51.     else       
  52.         print(player.Name .. " has no data.")          
  53.     end
  54.            
  55.    
  56.     local expToLevelUp
  57.        
  58.     local expForPreviousLevel = 0
  59.    
  60.    
  61.     while wait() do
  62.        
  63.         local levelBar = player.PlayerGui:WaitForChild("LevelBar") 
  64.        
  65.         if level.Value < 1 then
  66.            
  67.             expToLevelUp = 100
  68.            
  69.         else
  70.            
  71.             expToLevelUp = math.floor(level.Value ^ 1.3) * 200 + math.floor(level.Value ^ 4)
  72.         end
  73.        
  74.        
  75.         if experience.Value >= expToLevelUp then
  76.            
  77.             level.Value = level.Value + 1  
  78.         end
  79.        
  80.         expForPreviousLevel = math.floor((level.Value - 1) ^ 1.3) * 200 + math.floor((level.Value - 1) ^ 4)
  81.        
  82.        
  83.         local expDifference = expToLevelUp - expForPreviousLevel
  84.  
  85.         local expDifference2 = experience.Value - expForPreviousLevel
  86.            
  87.        
  88.         levelBar.Bar:TweenSize(
  89.             UDim2.new(levelBar.BarBackground.Size.X.Scale * (expDifference2 / expDifference), 0, levelBar.BarBackground.Size.Y.Scale, 0),
  90.             Enum.EasingDirection.InOut, Enum.EasingStyle.Quint, 0.001
  91.         )
  92.        
  93.         levelBar.Experience.Text = expDifference2 .. "/" .. expDifference
  94.        
  95.         levelBar.Level.Text = "Level: " .. level.Value
  96.        
  97.        
  98.         experience.Value = experience.Value + 1
  99.     end        
  100. end)
  101.  
  102.  
  103. Players.PlayerRemoving:Connect(function(player)
  104.    
  105.     local errormsg = SavePlayerData(player)
  106.    
  107.     if errormsg then   
  108.         warn(errormsg)     
  109.     end
  110. end)
  111.  
  112. game:BindToClose(function()
  113.     for i, player in pairs(Players:GetPlayers()) do
  114.        
  115.         local errormsg = SavePlayerData(player)
  116.         if errormsg then
  117.             warn(errormsg)
  118.         end        
  119.     end
  120.     wait(2)
  121. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement