Advertisement
HanzerCopy

Checkpoint

May 13th, 2025
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.36 KB | Source Code | 0 0
  1. local Players = game:GetService("Players")
  2. local checkpointsFolder = workspace:WaitForChild("Checkpoints") -- Folder tempat menyimpan semua checkpoint
  3. -- Simpan posisi checkpoint berdasarkan nomor
  4. local checkpointPositions = {}
  5. -- Ambil semua checkpoint dari folder
  6. for _, part in pairs(checkpointsFolder:GetChildren()) do
  7.     if part:IsA("BasePart") then
  8.         local name = part.Name
  9.         local num = string.match(name, "^cek(%d+)$") -- Cari nama yang sesuai format "cek<number>"
  10.         if num then
  11.             local number = tonumber(num)
  12.             if number and number >= 0 and number <= 10000 then
  13.                 checkpointPositions[number] = part.Position
  14.             end
  15.         end
  16.     end
  17. end
  18. -- Pasang deteksi sentuhan ke setiap checkpoint
  19. local function connectCheckpointTouch(part, checkpointNumber)
  20.     part.Touched:Connect(function(hit)
  21.         local character = hit.Parent
  22.         local player = Players:GetPlayerFromCharacter(character)
  23.         if player then
  24.             local current = player:GetAttribute("Checkpoint") or 0
  25.             if checkpointNumber > current then
  26.                 player:SetAttribute("Checkpoint", checkpointNumber)
  27.                 print(player.Name .. " mencapai checkpoint: cek" .. checkpointNumber)
  28.             end
  29.         end
  30.     end)
  31. end
  32. -- Hubungkan semua checkpoint dengan deteksi
  33. for number, _ in pairs(checkpointPositions) do
  34.     local part = checkpointsFolder:FindFirstChild("cek" .. number)
  35.     if part then
  36.         connectCheckpointTouch(part, number)
  37.     end
  38. end
  39. -- Respawn pemain di checkpoint terakhir setelah mati
  40. Players.PlayerAdded:Connect(function(player)
  41.     player:SetAttribute("Checkpoint", 0)
  42.     player.CharacterAdded:Connect(function(character)
  43.         local checkpoint = player:GetAttribute("Checkpoint")
  44.         local spawnPos = checkpointPositions[checkpoint]
  45.         if spawnPos then
  46.             task.wait(0.1) -- tunggu karakter siap
  47.             local hrp = character:WaitForChild("HumanoidRootPart")
  48.             hrp.CFrame = CFrame.new(spawnPos + Vector3.new(0, 5, 0)) -- spawn sedikit di atas checkpoint
  49.         end
  50.     end)
  51. end)
  52. --[[
  53.     Kalian bisa ubah bagian ini sesuai yang kalian mau:
  54.     workspace:WaitForChild("Checkpoints")
  55.     > Kalian bisa ubah nama folder "Checkpoints" menjadi nama lain sesuai keinginan.
  56.       Ini hanya nama folder tempat menyimpan semua balok checkpoint.
  57.     local num = string.match(name, "^cek(%d+)$")
  58.     > Kalian bisa ubah "cek" dengan nama lain seperti "point", misalnya:
  59.       string.match(name, "^point(%d+)$")
  60.       Maka nama balok yang dikenali menjadi: point0, point1, point2, dst.
  61. ]]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement