Advertisement
Sungmingamerpro13

SaveData Pets + Premium Pet

Mar 7th, 2023
1,004
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
CSS 5.10 KB | None | 0 0
  1. local Players = game:GetService("Players")
  2. local DS = game:GetService("DataStoreService"):GetDataStore("PetsSave")
  3. local SaveOnChange = true
  4. local Cooldown = 0
  5.  
  6. local function Thread(f)
  7.     coroutine.resume(coroutine.create(f))
  8. end
  9.  
  10. local Array = {
  11.     ["Stats"] = {
  12.     },
  13.     ["PlayerValues"] = {
  14.     },
  15.     ["Pets"] = {
  16.         ['CurrentPet'] = '',
  17.         ["Orange puppy"] = 'unowned',
  18.         ["Amazing Pet"] = 'unowned',
  19.         ["Uncommon Pet"] = 'unowned',
  20.         ["Unobtainable Pet"] = 'unowned',
  21.         ["Rare Pet"] = 'unowned',
  22.         ["Premium Pet"] = 'unowned',
  23.         ["Monster Pet"] = 'unowned',
  24.     }  
  25. }
  26.  
  27. Players.PlayerAdded:connect(function(plr)
  28.     for i,v in pairs(Array.PlayerValues) do
  29.         local x
  30.         if type(v) == "number" then
  31.             x = Instance.new("NumberValue", plr)
  32.             x.Name = tostring(i)
  33.             x.Value = v
  34.  
  35.         elseif type(v)=="string" then
  36.             x=Instance.new("StringValue",plr)
  37.             x.Name=tostring(i)
  38.             x.Value=v
  39.  
  40.         elseif type(v)=="boolean" then
  41.             x=Instance.new("BoolValue",plr)
  42.             x.Name=tostring(i) x.Value=v
  43.  
  44.         end
  45.     end
  46.     local ID = plr.userId
  47.     if DS:GetAsync("User_"..tostring(ID)) == nil then
  48.         print("Player "..plr.Name.."("..tostring(ID)..") has no data file, creating a new data file.")
  49.         local NewData=DS:SetAsync("User_"..tostring(ID),Array)
  50.     end
  51.     local Data = DS:GetAsync("User_"..tostring(ID))
  52.     repeat wait() until Data ~= nil
  53.     print("User_"..tostring(ID).." Data Loading...")
  54.     --Create leaderstats
  55.     local Stats = Instance.new("IntValue",plr)
  56.     Stats.Name = "leaderstats"
  57.     --Create Pets
  58.     local Pets = Instance.new("Configuration",plr)
  59.     Pets.Name = "Pets"
  60.     Thread(function()
  61.         for i,v in pairs(Array.Stats) do
  62.             local x
  63.             if type(v) == "number" then
  64.                 x = Instance.new("NumberValue",Stats)
  65.                 x.Name = tostring(i)
  66.                 x.Value = Data.Stats[i] or v
  67.  
  68.             elseif type(v) == "string" then
  69.                 x = Instance.new("StringValue",Stats)
  70.                 x.Name = tostring(i)
  71.                 x.Value = Data.Stats[i] or v
  72.  
  73.             elseif type(v) == "boolean" then
  74.                 x = Instance.new("BoolValue",Stats)
  75.                 x.Name = tostring(i)
  76.                 x.Value = Data.Stats[i] or v
  77.  
  78.             end
  79.             if x == nil or x["Value"] == nil or SaveOnChange == false then
  80.                 return
  81.             end
  82.             local Deb = false
  83.             x.Changed:connect(function(val)
  84.                 Deb=true
  85.                 local NewArray = {["Stats"]={};["Pets"]={}}
  86.                 Thread(function()
  87.                     for i,v in pairs(plr:WaitForChild("leaderstats"):GetChildren()) do
  88.                         NewArray.Stats[v.Name] = v.Value
  89.                     end
  90.                 end)
  91.                 for i,v in pairs(plr:WaitForChild("Pets"):GetChildren()) do
  92.                     NewArray.Pets[v.Name]=v.Value
  93.                 end
  94.                 DS:UpdateAsync("User_"..tostring(ID), function(OldVal)
  95.                     local NewVal=NewArray or OldVal
  96.                     return NewVal
  97.                 end)
  98.                 wait(Cooldown)
  99.                 Deb=false
  100.             end)   
  101.         end
  102.     end)
  103.     for i,v in pairs(Array.Pets) do
  104.         local x
  105.         if type(v) == "number" then
  106.             x = Instance.new("NumberValue", Pets)
  107.             x.Name = tostring(i)
  108.             x.Value = Data.Pets[i] or v
  109.  
  110.         elseif type(v)=="string" then
  111.             x=Instance.new("StringValue",Pets)
  112.             x.Name=tostring(i)
  113.             x.Value=Data.Pets[i] or v
  114.  
  115.         elseif type(v)=="boolean" then
  116.             x=Instance.new("BoolValue",Pets)
  117.             x.Name=tostring(i) x.Value=Data.Pets[i] or v
  118.  
  119.         end
  120.         if x==nil or x["Value"]==nil or SaveOnChange==false then
  121.             return
  122.         end
  123.         local Deb=false
  124.         x.Changed:connect(function(val)
  125.             Deb=true
  126.             local NewArray={["Stats"]={};["Pets"]={}}
  127.             Thread(function()
  128.                 for i,v in pairs(plr:WaitForChild("leaderstats"):GetChildren()) do
  129.                     NewArray.Stats[v.Name] = v.Value
  130.                 end
  131.             end)
  132.             for i,v in pairs(plr:WaitForChild("Pets"):GetChildren()) do
  133.                 NewArray.Pets[v.Name]=v.Value
  134.             end
  135.             DS:UpdateAsync("User_"..tostring(ID),function(OldVal)
  136.                 local NewVal = NewArray or OldVal
  137.                 return NewVal
  138.             end)
  139.             wait(Cooldown)
  140.             Deb=false
  141.         end)
  142.     end
  143.     print(plr.Name.."("..tostring(ID)..")'s Data is ready.")
  144. end)
  145.  
  146. Players.PlayerRemoving:connect(function(plr)
  147.     local ID=plr.userId
  148.     local Data=DS:GetAsync("User_"..tostring(ID))
  149.     if Data==nil then
  150.         return
  151.     end
  152.     local NewArray={["Stats"]={};["Pets"]={}}
  153.     Thread(function()
  154.         for i,v in pairs(plr:WaitForChild("leaderstats"):GetChildren()) do
  155.             NewArray.Stats[v.Name]=v.Value
  156.         end
  157.     end)
  158.     for i,v in pairs(plr:WaitForChild("Pets"):GetChildren()) do
  159.         NewArray.Pets[v.Name]=v.Value
  160.     end
  161.     DS:UpdateAsync("User_"..tostring(ID), function(OldVal)
  162.         local NewVal = NewArray or OldVal
  163.         return NewVal
  164.     end)
  165. end)
  166.  
  167. local function SaveAll()
  168.     for _,v in ipairs(Players:GetPlayers()) do
  169.         Thread(function()
  170.             local ID = v.userId
  171.             local Data = DS:GetAsync("User_"..tostring(ID))
  172.             if Data ~= nil then
  173.                 local NewArray = {["Stats"] = {}; ["Pets"] = {}}
  174.                 Thread(function()
  175.                     for _,v2 in pairs(v:WaitForChild("leaderstats"):GetChildren()) do
  176.                         NewArray.Stats[v2.Name] = v2.Value
  177.                     end
  178.                 end)
  179.                 for _,v2 in pairs(v:WaitForChild("Pets"):GetChildren()) do
  180.                     NewArray.Pets[v2.Name] = v2.Value
  181.                 end
  182.                 DS:UpdateAsync("User_"..tostring(ID), function(OldVal)
  183.                     local NewVal=NewArray or OldVal
  184.                     return NewVal
  185.                 end)
  186.  
  187.             end
  188.         end)
  189.     end
  190. end
  191.  
  192. game:BindToClose(function()
  193.     SaveAll()
  194. end)
Tags: Roblox
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement