-- Services
local CollectionService = game:GetService("CollectionService")
local Rep = game:GetService("ReplicatedStorage")
local ServerStorage = game:GetService("ServerStorage")
-- Children in Rep
local Packages = Rep:WaitForChild("Packages")
local GameConfig = Rep:WaitForChild("GameConfig")
-- Modules in Packages
local Replica = require(Packages.Replica)
local DataSettings = require(GameConfig.Data)
return {
Data = {},
KnitInit = function(self)
shared.ProfileToken = Replica.NewClassToken(DataSettings.DataStore)
end,
KnitStart = function(self)
for _, leaderboard in CollectionService:GetTagged("Leaderboard")do
shared.Classes.Leaderboard.new(leaderboard)
end
end,
GetPlayerData = function(self, player: Player)
if not rawget(self.Data, player) then warn(`{player.Name} does not have any data`)return end
return rawget(self.Data, player).Replica
end,
Logout = function(self, player: Player)
local id = player.UserId
local data = rawget(self.Data, player)
if data then
data.Profile:Release()
rawset(self.Data, player, nil)
end
end,
Login = function(self, player)
self:InitializeData(player)
end,
InitializeData = function(self, player: Player)
if rawget(self.Data, player) then warn(player.DisplayName.." already has data") end
local data = shared.Classes.Data.new(player)
rawset(self.Data, player, data)
if not data then
player:Kick(DataSettings.Message)
end
end,
SetLeaderboard = function(self, player: Player, ...)
local plrData = self:GetPlayerData(player)
plrData:SetLeaderboard()
end,
}