Advertisement
Fyzeq

ObbySavingSystem

Dec 15th, 2020
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1. local DataStoreService = game:GetService("DataStoreService")
  2. local StageDataStore = DataStoreService:GetDataStore("StageData")
  3.  
  4. local function TouchedPart(part, touchedPart)
  5. local ply = game.Players:GetPlayerFromCharacter(touchedPart.Parent)
  6. if ply then
  7. if ply.leaderstats.Stage.Value < tonumber(part.Name) then
  8. ply.leaderstats.Stage.Value = tonumber(part.Name)
  9. end
  10. end
  11. end
  12.  
  13. local function AddTouchStageGiver()
  14. local stageNum = 1
  15. while true do
  16. local part = game.Workspace:FindFirstChild(tostring(stageNum))
  17. if part then
  18. part.Touched:connect(function (touchedPart)
  19. TouchedPart(part, touchedPart)
  20. end)
  21. else
  22. break
  23. end
  24. stageNum = stageNum + 1
  25. wait()
  26. end
  27. end
  28.  
  29. local function GetSavedStage(ply)
  30. return StageDataStore:GetAsync(tostring(ply.UserId)) or 1
  31. end
  32.  
  33. local function SaveCurrentStage(ply)
  34. StageDataStore:SetAsync(tostring(ply.UserId), ply.leaderstats.Stage.Value)
  35. end
  36.  
  37. local SPAWN_OFFSET = Vector3.new(0, 5, 0)
  38.  
  39. local function GetStageSpawnCFrames(stage)
  40. local stageSpawnPart = game.Workspace:FindFirstChild(tostring(stage))
  41.  
  42. if not stageSpawnPart then
  43. return game.Workspace:FindFirstChild("1").CFrame + SPAWN_OFFSET
  44. end
  45.  
  46. return stageSpawnPart.CFrame + SPAWN_OFFSET
  47. end
  48.  
  49. local stageValues = {}
  50.  
  51. local function CharacterAdded(ply, char)
  52. repeat wait() until stageValues[ply]
  53. char:SetPrimaryPartCFrame(GetStageSpawnCFrames(stageValues[ply].Value))
  54. end
  55.  
  56. game.Players.PlayerAdded:connect(function (ply)
  57. local leaderstats = Instance.new("ObjectValue", ply)
  58. leaderstats.Name = "leaderstats"
  59.  
  60. ply.CharacterAdded:connect(function (char)
  61. CharacterAdded(ply, char)
  62. end)
  63.  
  64. local stage = Instance.new("IntValue", leaderstats)
  65. stage.Name = "Stage"
  66. stage.Value = GetSavedStage(ply)
  67.  
  68. stageValues[ply] = stage
  69.  
  70. end)
  71.  
  72. game.Players.PlayerRemoving:connect(function (ply)
  73. SaveCurrentStage(ply)
  74. end)
  75.  
  76. wait(1)
  77. AddTouchStageGiver()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement