Tweak16

ROBLOX Scripting | Obby Checkpoints

Oct 10th, 2020 (edited)
5,163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.43 KB | None | 0 0
  1. -- Made by Tweakified, Neonblox Games
  2. -- Video: https://youtu.be/WRXBa8AwoXo
  3.  
  4. local Players = game:GetService("Players")
  5.  
  6. local Checkpoints = workspace:WaitForChild("Checkpoints")
  7. local inGameStartupPlayers = {}
  8. local CurrentStage = {}
  9. local TouchDb = {}
  10.  
  11. local function NewCharacter(player, char)
  12.     local TempCurrentStage = CurrentStage[player.UserId]
  13.     if TempCurrentStage ~= nil then
  14.         local TempCheckpoint = Checkpoints:FindFirstChild(TempCurrentStage)
  15.         if TempCheckpoint ~= nil then
  16.             repeat wait(0.1) until char.PrimaryPart ~= nil
  17.             char:SetPrimaryPartCFrame(CFrame.new(TempCheckpoint.Position + Vector3.new(0, 3, 0)) * CFrame.Angles(0, math.rad(TempCheckpoint.Orientation.Y) + math.rad(90), 0))
  18.         end
  19.     end
  20. end
  21.  
  22. local function NewPlayer(player)
  23.     CurrentStage[player.UserId] = 1
  24.    
  25.     local leaderstats = Instance.new("Folder", player)
  26.     leaderstats.Name = "leaderstats"
  27.     local Stage = Instance.new("IntValue", leaderstats)
  28.     Stage.Name = "Stage"
  29.     Stage.Value = 1
  30.    
  31.     local TempChar = player.Character
  32.     if TempChar ~= nil then
  33.         NewCharacter(player, TempChar)
  34.     end
  35.     player.CharacterAdded:Connect(function(char)
  36.         NewCharacter(player, char)
  37.     end)
  38. end
  39.  
  40. Players.PlayerAdded:Connect(function(player)
  41.     if inGameStartupPlayers[player] == nil then
  42.         NewPlayer(player)
  43.     end
  44. end)
  45.  
  46. Players.PlayerRemoving:Connect(function(player)
  47.     CurrentStage[player.UserId] = nil
  48. end)
  49.  
  50. for i,v in pairs(Checkpoints:GetChildren()) do
  51.     local StageNum = tonumber(v.Name)
  52.     v.Touched:Connect(function(hit)
  53.         local char = hit.Parent
  54.         if char ~= nil then
  55.             local Humanoid = char:FindFirstChildOfClass("Humanoid")
  56.             if Humanoid ~= nil and Humanoid.Health > 0 then
  57.                 local player = Players:GetPlayerFromCharacter(char)
  58.                 if player ~= nil and (TouchDb[player.UserId] or 0) + 1 <= os.time() then
  59.                     TouchDb[player.UserId] = os.time()
  60.                     local TempCurrentStage = CurrentStage[player.UserId]
  61.                     if TempCurrentStage == StageNum - 1 then
  62.                         CurrentStage[player.UserId] = StageNum
  63.                         local TempLeaderstats = player:FindFirstChild("leaderstats")
  64.                         if TempLeaderstats ~= nil then
  65.                             local TempStage = TempLeaderstats:FindFirstChild("Stage")
  66.                             if TempStage ~= nil then
  67.                                 TempStage.Value = StageNum
  68.                             end
  69.                         end
  70.                     end
  71.                 end
  72.             end
  73.         end
  74.     end)
  75. end
  76.  
  77. inGameStartupPlayers = Players:GetPlayers()
  78. for i,v in pairs(inGameStartupPlayers) do
  79.     spawn(function()
  80.         NewPlayer(v)
  81.     end)
  82. end
  83.  
  84. inGameStartupPlayers = {}
Add Comment
Please, Sign In to add comment