Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local PlayerData = {}
- local ReplicatedStorage = game:GetService("ReplicatedStorage")
- local RunService = game:GetService("RunService")
- local Players = game:GetService("Players")
- local Config = ReplicatedStorage.Config
- local Shared = require(ReplicatedStorage.Initialization.Shared)
- local DataTemplate = require(Config.Templates).PlayerDataTemplate
- local ReplicationEvent = ReplicatedStorage.Replicate
- local ChangedEvent = ReplicatedStorage.DataChanged
- local DataBase = {}
- local YIELD_WARNING_TIME = 10
- local function ReturnPlayer(Object)
- if not Object:IsDescendantOf(Players) then
- warn("Given profile was not a descendant of players.")
- Object = Shared["PlayerUtil"]:GetPlayer(Object) or nil
- end
- return Object
- end
- function PlayerData:Subsidary(Character)
- local Player = Players:GetPlayerFromCharacter(Character)
- ReplicationEvent:FireClient(Player, _, true)
- DataBase[Player.Name] = DataTemplate
- print("New player on database:",Character.Name)
- print("New data base values:",DataBase)
- end
- function PlayerData:DeInit(Player)
- DataBase[Player.Name] = nil
- end
- function PlayerData:GetValue(Player, Key)
- Player = ReturnPlayer(Player)
- if not Player then return end
- return DataBase[Player.Name][Key]
- end
- function PlayerData:GetAllValues(Player)
- Player = ReturnPlayer(Player)
- if not Player then return end
- return DataBase[Player.Name]
- end
- function PlayerData:SetValue(Player, Key, Value)
- Player = ReturnPlayer(Player)
- if not Player then return end
- DataBase[Player.Name][Key] = Value
- if RunService:IsServer() then
- ReplicationEvent:FireClient(Player, {Key = Value)
- else
- ChangedEvent:Fire(Key, Value)
- end
- end
- function PlayerData:ValueChangedWait(Player, Key)
- Player = ReturnPlayer(Player)
- if not Player then return end
- local Value = DataBase[Player.Name][Key]
- local YieldBeginTime = os.clock()
- repeat
- task.wait()
- local DeltaTime = os.clock() - YieldBeginTime
- if DeltaTime >= YIELD_WARNING_TIME then
- warn("Potential infinite yield on data point:",Key)
- break
- end
- until DataBase[Player.Name][Key] ~= Value
- end
- return PlayerData
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement