Advertisement
HanzerCopy

Untitled

Apr 6th, 2025
21
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.76 KB | Source Code | 0 0
  1.  
  2. --[[
  3. Script untuk memberikan efek slow motion kepada pemain ketika menyentuh Part ini.
  4. Letakkan Script ini di dalam Part yang ingin dijadikan pemicu.
  5. --]]
  6.  
  7. -- Variabel Konfigurasi --
  8. local aktifkanSlowMotion = true -- (boolean) Ganti ke 'false' untuk menonaktifkan efek slow motion ini
  9. local kecepatanSlowMotion = 8   -- (number) Kecepatan berjalan saat slow motion (Kecepatan normal biasanya 16)
  10.  
  11. -------------------------------------------
  12. -- Jangan ubah kode di bawah ini kecuali Anda tahu apa yang Anda lakukan --
  13. -------------------------------------------
  14.  
  15. local triggerPart = script.Parent -- Mendapatkan referensi ke Part tempat script ini berada
  16. local kecepatanNormalDefault = 16 -- Kecepatan berjalan standar Humanoid
  17. local pemainYangTersentuh = {} -- Tabel untuk melacak pemain yang sedang dalam mode slow motion oleh part ini
  18.  
  19. -- Fungsi yang dijalankan ketika sebuah objek menyentuh Part ini
  20. local function onTouch(otherPart)
  21.     -- Periksa apakah fitur slow motion diaktifkan
  22.     if not aktifkanSlowMotion then
  23.         return -- Hentikan fungsi jika fitur dinonaktifkan
  24.     end
  25.  
  26.     -- Periksa apakah 'otherPart' adalah bagian dari sebuah karakter (model)
  27.     local characterModel = otherPart.Parent
  28.     if not characterModel then
  29.         return
  30.     end
  31.  
  32.     -- Periksa apakah di dalam model karakter ada Humanoid
  33.     local humanoid = characterModel:FindFirstChildWhichIsA("Humanoid")
  34.     if not humanoid then
  35.         return -- Keluar jika bukan bagian dari karakter yang memiliki Humanoid
  36.     end
  37.  
  38.     -- Periksa apakah karakter ini adalah pemain
  39.     local player = game.Players:GetPlayerFromCharacter(characterModel)
  40.     if not player then
  41.         return -- Keluar jika bukan pemain (misalnya NPC) - opsional, hapus jika ingin NPC juga terpengaruh
  42.     end
  43.  
  44.     -- Jika Humanoid ditemukan dan belum dalam status slow motion oleh part ini
  45.     if humanoid and not pemainYangTersentuh[player] then
  46.         print(player.Name .. " memasuki zona slow motion.") -- Pesan debug (opsional)
  47.  
  48.         -- Simpan kecepatan asli pemain SEBELUM diubah, jika belum disimpan
  49.         -- Ini lebih baik daripada mengasumsikan selalu 16, jika ada efek lain
  50.         if not pemainYangTersentuh[player] then
  51.             pemainYangTersentuh[player] = {
  52.                 humanoid = humanoid,
  53.                 kecepatanAsli = humanoid.WalkSpeed -- Simpan kecepatan saat ini
  54.             }
  55.         end
  56.  
  57.         -- Terapkan kecepatan slow motion
  58.         humanoid.WalkSpeed = kecepatanSlowMotion
  59.     end
  60. end
  61.  
  62. -- Fungsi yang dijalankan ketika sebuah objek berhenti menyentuh Part ini
  63. local function onTouchEnded(otherPart)
  64.     -- Periksa apakah 'otherPart' adalah bagian dari sebuah karakter (model)
  65.     local characterModel = otherPart.Parent
  66.     if not characterModel then
  67.         return
  68.     end
  69.  
  70.     -- Periksa apakah di dalam model karakter ada Humanoid
  71.     local humanoid = characterModel:FindFirstChildWhichIsA("Humanoid")
  72.     if not humanoid then
  73.         return
  74.     end
  75.  
  76.     -- Periksa apakah karakter ini adalah pemain
  77.     local player = game.Players:GetPlayerFromCharacter(characterModel)
  78.     if not player then
  79.         return
  80.     end
  81.  
  82.     -- Periksa apakah pemain ini sebelumnya tercatat menyentuh part ini
  83.     if pemainYangTersentuh[player] then
  84.         -- Perlu sedikit pemeriksaan tambahan: apakah *ada bagian lain* dari karakter yang *masih* menyentuh?
  85.         local masihMenyentuh = false
  86.         local menyentuhParts = triggerPart:GetTouchingParts() -- Dapatkan semua part yang sedang menyentuh triggerPart
  87.         for _, part in ipairs(menyentuhParts) do
  88.             if part.Parent == characterModel then -- Jika salah satu part yang menyentuh adalah bagian dari karakter ini
  89.                 masihMenyentuh = true
  90.                 break -- Hentikan loop, karena kita sudah tahu masih ada yang menyentuh
  91.             end
  92.         end
  93.  
  94.         -- Jika tidak ada bagian lain dari karakter yang masih menyentuh
  95.         if not masihMenyentuh then
  96.             print(player.Name .. " meninggalkan zona slow motion.") -- Pesan debug (opsional)
  97.             local dataPemain = pemainYangTersentuh[player]
  98.  
  99.             -- Kembalikan ke kecepatan asli yang disimpan sebelumnya
  100.             -- Pastikan dataPemain dan humanoid masih valid
  101.             if dataPemain and dataPemain.humanoid and dataPemain.humanoid.Parent then
  102.                 dataPemain.humanoid.WalkSpeed = dataPemain.kecepatanAsli
  103.             else
  104.                 -- Fallback jika ada masalah, kembalikan ke default
  105.                 humanoid.WalkSpeed = kecepatanNormalDefault
  106.             end
  107.  
  108.             -- Hapus pemain dari tabel pelacakan
  109.             pemainYangTersentuh[player] = nil
  110.         end
  111.     end
  112. end
  113.  
  114. -- Menghubungkan fungsi 'onTouch' ke event 'Touched' pada Part
  115. triggerPart.Touched:Connect(onTouch)
  116.  
  117. -- Menghubungkan fungsi 'onTouchEnded' ke event 'TouchEnded' pada Part
  118. triggerPart.TouchEnded:Connect(onTouchEnded)
  119.  
  120. -- Membersihkan data pemain jika pemain meninggalkan permainan
  121. game.Players.PlayerRemoving:Connect(function(player)
  122.     if pemainYangTersentuh[player] then
  123.         pemainYangTersentuh[player] = nil -- Hapus dari tabel jika pemain keluar
  124.     end
  125. end)
  126.  
  127. print("Script Slow Motion siap pada Part: " .. triggerPart.Name)
  128.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement