Advertisement
Guest User

DataStore

a guest
Mar 2nd, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.99 KB | None | 0 0
  1. local self = {}
  2. self.StarterData = nil
  3. self.DSS = game:GetService('DataStoreService')
  4. self.DS = self.DSS:GetDataStore("PlayerStats")
  5. self.MainBindable = Instance.new('BindableEvent')
  6. self.FolderName = nil
  7. self.playersplaying = 0
  8. self.BindableEvent = Instance.new('BindableEvent')
  9.  
  10. function self:GetFolderName(name)
  11. self.FolderName = name
  12. end
  13.  
  14. function self:GetStarterData(Table)
  15. self.StarterData = Table
  16. end
  17.  
  18. function self:LoadStarterData(plr)
  19. if self.StarterData == nil then warn("StarterData has not been set") return end
  20. local Stats = Instance.new('Folder',plr)
  21. Stats.Name = self.FolderName
  22. for a,b in pairs(self.StarterData) do
  23. if type(b) == 'number' then
  24. local numstat = Instance.new('IntValue',Stats)
  25. numstat.Name = a
  26. numstat.Value = b
  27. elseif type(b) == 'boolean' then
  28. local boolstat = Instance.new('BoolValue',Stats)
  29. boolstat.Name = a
  30. boolstat.Value = b
  31. elseif type(b) == 'string' then
  32. local stringstat = Instance.new('StringValue',Stats)
  33. stringstat.Name = a
  34. stringstat.Value = b
  35. end
  36. end
  37. end
  38.  
  39. function self:LoadData(plr)
  40. if self.StarterData == nil then warn("StarterData has not been set") return end
  41. local Key = "Stats: "..plr.UserId
  42. local Data
  43. local s,e = pcall(function()
  44. Data = self.DS:GetAsync(Key)
  45. end)
  46.  
  47. if s then
  48. print("Getting "..plr.Name.."'s data is successful")
  49. else
  50. warn("Something went wrong when loading "..plr.Name.."'s data")
  51. end
  52. if Data then
  53. for a,b in pairs(Data) do
  54. plr[self.FolderName][a].Value = b
  55. end
  56. print(plr.Name.."'s data has been loaded")
  57. else
  58. print(plr.Name..' has no data! Generating new data.')
  59. end
  60. end
  61.  
  62. function self:SaveData(plr)
  63. if self.StarterData == nil then warn("StarterData has not been set") return end
  64. local Key = "Stats: "..plr.UserId
  65. local Data = {}
  66. for a,b in pairs(plr[self.FolderName]:GetChildren()) do
  67. Data[b.Name] = b.Value
  68. end
  69. local s,e = pcall(function()
  70. self.DS:SetAsync(Key,Data)
  71. end)
  72. if s then
  73. print(plr.Name.."'s data has been successfully saved")
  74. else
  75. error(e)
  76. warn("Something went wrong while saving "..plr.Name.."'s data")
  77. end
  78. end
  79.  
  80. function self:GetStatValue(plr,statname)
  81. return plr[self.FolderName][statname].Value
  82. end
  83.  
  84. function self:GetUpdatedStatSignal(plr,statname,statprop)
  85. if statprop then
  86. return plr[self.FolderName][statname]:GetPropertyChangedSignal(statprop)
  87. else
  88. return plr[self.FolderName][statname].Changed
  89. end
  90. end
  91.  
  92. function self:UpdateStat(plr,statname,statvalue,ChangeType)
  93. if ChangeType == "add" then
  94. plr[self.FolderName][statname].Value = plr[self.FolderName][statname].Value + statvalue
  95. elseif ChangeType == "subtract" or ChangeType == "takeaway" then
  96. plr[self.FolderName][statname].Value = plr[self.FolderName][statname].Value - statvalue
  97. elseif ChangeType == "multiply" then
  98. plr[self.FolderName][statname].Value = plr[self.FolderName][statname].Value * statvalue
  99. elseif ChangeType == nil then
  100. plr[self.FolderName][statname].Value = statvalue
  101. end
  102. end
  103.  
  104. return self
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement