Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local PlayerStore = game:GetService("DataStoreService"):GetDataStore("Data")
- local Players = game:GetService("Players")
- local saved = {}
- local datastore = {}
- datastore.__index = datastore
- function datastore.new(player)
- if saved[player] then return saved[player] end
- local self = setmetatable({}, datastore)
- self.Name = player.Name
- self.UserID = player.UserId
- self.FirstRetrieve = true
- self.Cache = {}
- Players.PlayerRemoving:Connect(function(_player)
- if player == _player then
- xpcall(function()
- PlayerStore:SetAsync(self.UserID, self.Cache)
- end, function(err)
- warn("Data could not be set for player", self.Name)
- end)
- end
- end)
- saved[player] = self
- return self
- end
- function datastore:SaveData(key, value)
- local success, result = xpcall(function()
- PlayerStore:UpdateAsync(self.UserID, function(current)
- current[key] = value
- return current
- end)
- end, function(err)
- print("Data could not be set for player", self.Name)
- end)
- self.Cache[key] = value
- end
- function datastore:GetData(key)
- if self.FirstRetrieve then
- local success, result = xpcall(function()
- local data = PlayerStore:GetAsync(self.UserID)
- self.Cache = data
- return data
- end, function(err)
- print("Data could not be retrieved for player", self.Name)
- end)
- if not success then
- return self.Cache[key] or nil
- end
- self.FirstRetrieve = false
- return result[key]
- end
- return self.Cache[key]
- end
- return datastore
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement