Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --Services
- local DataStoreService = game:GetService("DataStoreService")
- local Players = game:GetService("Players")
- --Services
- --Require
- local Event = require(game.ReplicatedStorage.GenericModules.Event)
- --Require
- --Declarations
- local datastore = DataStoreService:GetDataStore("0")
- --Declarations
- local Data =
- {
- NewPlayerData = Event.new();
- PlayerDataLoaded = Event.new();
- UnloadingPlayerData = Event.new();
- }
- setmetatable(Data,
- {
- __index = function(key)
- pcall(function()
- local data = DataStoreService:GetDataStore(key)
- Data[key] = data
- return data
- end)
- end
- })
- --Connections
- local function PlayerAdded(player)
- local data
- if not pcall(function()
- data = datastore:GetAsync(player.UserId)
- end) then
- player:Kick("Your data failed to load. :/")
- end
- if not data then
- data = {}
- Data.NewPlayerData:Fire(player, data)
- end
- Data.PlayerDataLoaded:Fire(player, data)
- Data[player] = data
- end
- Players.PlayerAdded:Connect(PlayerAdded)
- for k, player in pairs(Players:GetPlayers()) do
- PlayerAdded(player)
- end
- function PlayerRemoving(player)
- local data = Data[player]
- Data.UnloadingPlayerData:Fire(player, data)
- datastore:SetAsync(player.UserId, data)
- Data[player] = nil
- end
- Players.PlayerRemoving:Connect(PlayerRemoving)
- --Connections
- return Data
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement