Advertisement
Guest User

Data

a guest
Dec 13th, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.26 KB | None | 0 0
  1. --Services
  2. local DataStoreService = game:GetService("DataStoreService")
  3. local Players = game:GetService("Players")
  4. --Services
  5.  
  6. --Require
  7. local Event = require(game.ReplicatedStorage.GenericModules.Event)
  8. --Require
  9.  
  10. --Declarations
  11. local datastore = DataStoreService:GetGlobalDataStore()
  12. local bannedPlayersStore = DataStoreService:GetDataStore("BannedPlayers")
  13. --Declarations
  14.  
  15. local Data =
  16. {
  17. NewPlayerData = Event.new();
  18. PlayerDataLoaded = Event.new();
  19. UnloadingPlayerData = Event.new();
  20. }
  21. setmetatable(Data,
  22. {
  23. __index = function(key)
  24. pcall(function()
  25. local data = DataStoreService:GetDataStore(key)
  26. Data[key] = data
  27. return data
  28. end)
  29. end
  30. })
  31.  
  32. local function ToPlayerId(playerOrId)
  33. if type(playerOrId) ~= "number" then
  34. if typeof(playerOrId) == "Instance" then
  35. if playerOrId.ClassName == "Player" then
  36. return playerOrId.UserId
  37. end
  38. end
  39. error("Expected Player instance or id, got " .. typeof(playerOrId))
  40. else
  41. return playerOrId
  42. end
  43. end
  44.  
  45. function Data:WipePlayerData(player)
  46. datastore:RemoveAsync(ToPlayerId(player))
  47. end
  48.  
  49. function Data:BanPlayer(player, dontKick)
  50. bannedPlayersStore:SetAsync(ToPlayerId(player), true)
  51. if not dontKick and typeof(player) == "Instance" then
  52. player:Kick(" ")
  53. end
  54. end
  55.  
  56. function Data:UnbanPlayer(player)
  57. bannedPlayersStore:RemoveAsync(ToPlayerId(player))
  58. end
  59.  
  60. --Connections
  61. local function PlayerAdded(player)
  62. local data
  63. if not pcall(function()
  64. data = datastore:GetAsync(player.UserId)
  65. end) then
  66. player:Kick("Your data failed to load. :/")
  67. end
  68. if not data then
  69. data = {}
  70. Data.NewPlayerData:Fire(player, data)
  71. end
  72. Data.PlayerDataLoaded:Fire(player, data)
  73. Data[player] = data
  74.  
  75. local banned
  76. if not pcall(function()
  77. banned = bannedPlayersStore:GetAsync(player.UserId)
  78. end) then
  79. player:Kick("Your data failed to load. :/")
  80. elseif banned then
  81. player:Kick(" ")
  82. end
  83. end
  84. Players.PlayerAdded:Connect(PlayerAdded)
  85.  
  86. for k, player in pairs(Players:GetPlayers()) do
  87. PlayerAdded(player)
  88. end
  89.  
  90. function PlayerRemoving(player)
  91. local data = Data[player]
  92. Data.UnloadingPlayerData:Fire(player, data)
  93. datastore:SetAsync(player.UserId, data)
  94. Data[player] = nil
  95. end
  96. Players.PlayerRemoving:Connect(PlayerRemoving)
  97. --Connections
  98.  
  99. return Data
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement