Advertisement
TaylorsRus

Untitled

May 12th, 2023
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.12 KB | None | 0 0
  1. local PlayerData = {}
  2.  
  3. local ReplicatedStorage = game:GetService("ReplicatedStorage")
  4. local RunService = game:GetService("RunService")
  5. local Players = game:GetService("Players")
  6.  
  7. local Config = ReplicatedStorage.Config
  8.  
  9. local Shared = require(ReplicatedStorage.Initialization.Shared)
  10. local DataTemplate = require(Config.Templates).PlayerDataTemplate
  11.  
  12. local ReplicationEvent = ReplicatedStorage.Replicate
  13. local ChangedEvent = ReplicatedStorage.DataChanged
  14.  
  15. local DataBase = {}
  16.  
  17. local YIELD_WARNING_TIME = 10
  18.  
  19. local function ReturnPlayer(Object)
  20. if not Object:IsDescendantOf(Players) then
  21. warn("Given profile was not a descendant of players.")
  22. Object = Shared["PlayerUtil"]:GetPlayer(Object) or nil
  23. end
  24.  
  25. return Object
  26. end
  27.  
  28. function PlayerData:Subsidary(Character)
  29. local Player = Players:GetPlayerFromCharacter(Character)
  30. ReplicationEvent:FireClient(Player, _, true)
  31. DataBase[Player.Name] = DataTemplate
  32.  
  33. print("New player on database:",Character.Name)
  34. print("New data base values:",DataBase)
  35. end
  36.  
  37. function PlayerData:DeInit(Player)
  38. DataBase[Player.Name] = nil
  39. end
  40.  
  41. function PlayerData:GetValue(Player, Key)
  42. Player = ReturnPlayer(Player)
  43. if not Player then return end
  44.  
  45. return DataBase[Player.Name][Key]
  46. end
  47.  
  48. function PlayerData:GetAllValues(Player)
  49. Player = ReturnPlayer(Player)
  50. if not Player then return end
  51.  
  52. return DataBase[Player.Name]
  53. end
  54.  
  55. function PlayerData:SetValue(Player, Key, Value)
  56. Player = ReturnPlayer(Player)
  57. if not Player then return end
  58.  
  59. DataBase[Player.Name][Key] = Value
  60.  
  61. if RunService:IsServer() then
  62. ReplicationEvent:FireClient(Player, {Key = Value)
  63. else
  64. ChangedEvent:Fire(Key, Value)
  65. end
  66. end
  67.  
  68. function PlayerData:ValueChangedWait(Player, Key)
  69. Player = ReturnPlayer(Player)
  70. if not Player then return end
  71.  
  72. local Value = DataBase[Player.Name][Key]
  73. local YieldBeginTime = os.clock()
  74.  
  75. repeat
  76. task.wait()
  77.  
  78. local DeltaTime = os.clock() - YieldBeginTime
  79. if DeltaTime >= YIELD_WARNING_TIME then
  80. warn("Potential infinite yield on data point:",Key)
  81. break
  82. end
  83. until DataBase[Player.Name][Key] ~= Value
  84. end
  85.  
  86. return PlayerData
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement