Advertisement
Guest User

Untitled

a guest
Feb 24th, 2020
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.35 KB | None | 0 0
  1. local Players = game:GetService("Players")
  2. local DSService = game:GetService("DataStoreService")
  3. local data = DSService:GetDataStore("Pets")
  4. Players.PlayerAdded:Connect(function(player)
  5. Instance.new("Folder",player).Name = "Pets"
  6. --Instance.new("Folder",player).Name = "PetsEquipped"
  7. Instance.new("NumberValue",player:WaitForChild("Main")).Name = "BoostCandy"
  8. Instance.new("NumberValue",player:WaitForChild("Main")).Name = "BoostCoins"
  9. local key = player.UserId
  10. local Pets = player:WaitForChild("Pets")
  11. for i,v in pairs(game.ReplicatedStorage:WaitForChild("Pets"):GetChildren()) do
  12. Instance.new("IntValue",Pets).Name = tostring(v)
  13. end
  14. wait(1)
  15. local tries = 0
  16. local max = 5
  17. local success
  18. local SavedLevel
  19. while not success and tries < max do
  20. success = pcall(function()
  21. SavedLevel = data:GetAsync(key)
  22. end)
  23. wait(tries)
  24. tries = tries + 1
  25. end
  26. if SavedLevel then
  27. for i, data in pairs(SavedLevel) do
  28. local pet = Pets:FindFirstChild(data[1])
  29. if pet then
  30. pet.Value = data[2]
  31. else
  32. local instance = Instance.new(data[3])
  33. if instance then
  34. instance.Name = data[1]
  35. instance.Value = data[2]
  36. instance.Parent = Pets
  37. end
  38. end
  39. end
  40. else
  41. data:SetAsync(key, {})
  42. end
  43.  
  44. local autoSaveInterval = 180
  45. coroutine.resume(coroutine.create(function()
  46. while wait(autoSaveInterval) do
  47. local savedLevel = data:GetAsync(key)
  48. local objData = {}
  49. for i, obj in pairs(Pets:GetChildren()) do
  50. table.insert(objData, {obj.Name, obj.Value, obj.ClassName})
  51. end
  52. local tries = 0
  53. local max = 5
  54. local success
  55. while not success and tries < max do
  56. success = pcall(function()
  57. if savedLevel == nil then
  58. data:SetAsync(key, objData)
  59. else
  60. data:UpdateAsync(key, function(oldValue)
  61. oldValue = objData
  62. return objData
  63. end)
  64. end
  65. end)
  66. tries = tries + 1
  67. wait(tries)
  68. end
  69. end
  70. end))
  71.  
  72. end)
  73. Players.PlayerRemoving:Connect(function(player)
  74. local key = player.UserId
  75. local savedLevel = data:GetAsync(key)
  76. local Pets = player:FindFirstChild("Pets")
  77. if not Pets then return end
  78. Pets = Pets:GetChildren()
  79. local objData = {}
  80. for i, obj in pairs(Pets) do
  81. table.insert(objData, {obj.Name, obj.Value, obj.ClassName})
  82. end
  83. local tries = 0
  84. local max = 5
  85. local success
  86. while not success and tries < max do
  87. success = pcall(function()
  88. if savedLevel == nil then
  89. data:SetAsync(key, objData)
  90. else
  91. data:UpdateAsync(key, function(oldValue)
  92. oldValue = objData
  93. return objData
  94. end)
  95. end
  96. end)
  97. tries = tries + 1
  98. wait(tries)
  99. end
  100. end)
  101. game:BindToClose(function()
  102. for i, player in pairs(Players:GetPlayers()) do
  103. local key = player.UserId
  104. local savedLevel = data:GetAsync(key)
  105. local pets = player:FindFirstChild("Pets")
  106. if not pets then return end
  107. pets = pets:GetChildren()
  108. local objData = {}
  109. for i, obj in pairs(pets) do
  110. table.insert(objData, {obj.Name, obj.Value, obj.ClassName})
  111. end
  112. local tries = 0
  113. local max = 5
  114. local success
  115. while not success and tries < max do
  116. success = pcall(function()
  117. if savedLevel == nil then
  118. data:SetAsync(key, objData)
  119. else
  120. data:UpdateAsync(key, function(oldValue)
  121. oldValue = objData
  122. return objData
  123. end)
  124. end
  125. end)
  126. tries = tries + 1
  127. wait(tries)
  128. end
  129. end
  130. wait(3)
  131. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement