Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[
- Script untuk memberikan efek slow motion kepada pemain ketika menyentuh Part ini.
- Letakkan Script ini di dalam Part yang ingin dijadikan pemicu.
- --]]
- -- Variabel Konfigurasi --
- local aktifkanSlowMotion = true -- (boolean) Ganti ke 'false' untuk menonaktifkan efek slow motion ini
- local kecepatanSlowMotion = 8 -- (number) Kecepatan berjalan saat slow motion (Kecepatan normal biasanya 16)
- -------------------------------------------
- -- Jangan ubah kode di bawah ini kecuali Anda tahu apa yang Anda lakukan --
- -------------------------------------------
- local triggerPart = script.Parent -- Mendapatkan referensi ke Part tempat script ini berada
- local kecepatanNormalDefault = 16 -- Kecepatan berjalan standar Humanoid
- local pemainYangTersentuh = {} -- Tabel untuk melacak pemain yang sedang dalam mode slow motion oleh part ini
- -- Fungsi yang dijalankan ketika sebuah objek menyentuh Part ini
- local function onTouch(otherPart)
- -- Periksa apakah fitur slow motion diaktifkan
- if not aktifkanSlowMotion then
- return -- Hentikan fungsi jika fitur dinonaktifkan
- end
- -- Periksa apakah 'otherPart' adalah bagian dari sebuah karakter (model)
- local characterModel = otherPart.Parent
- if not characterModel then
- return
- end
- -- Periksa apakah di dalam model karakter ada Humanoid
- local humanoid = characterModel:FindFirstChildWhichIsA("Humanoid")
- if not humanoid then
- return -- Keluar jika bukan bagian dari karakter yang memiliki Humanoid
- end
- -- Periksa apakah karakter ini adalah pemain
- local player = game.Players:GetPlayerFromCharacter(characterModel)
- if not player then
- return -- Keluar jika bukan pemain (misalnya NPC) - opsional, hapus jika ingin NPC juga terpengaruh
- end
- -- Jika Humanoid ditemukan dan belum dalam status slow motion oleh part ini
- if humanoid and not pemainYangTersentuh[player] then
- print(player.Name .. " memasuki zona slow motion.") -- Pesan debug (opsional)
- -- Simpan kecepatan asli pemain SEBELUM diubah, jika belum disimpan
- -- Ini lebih baik daripada mengasumsikan selalu 16, jika ada efek lain
- if not pemainYangTersentuh[player] then
- pemainYangTersentuh[player] = {
- humanoid = humanoid,
- kecepatanAsli = humanoid.WalkSpeed -- Simpan kecepatan saat ini
- }
- end
- -- Terapkan kecepatan slow motion
- humanoid.WalkSpeed = kecepatanSlowMotion
- end
- end
- -- Fungsi yang dijalankan ketika sebuah objek berhenti menyentuh Part ini
- local function onTouchEnded(otherPart)
- -- Periksa apakah 'otherPart' adalah bagian dari sebuah karakter (model)
- local characterModel = otherPart.Parent
- if not characterModel then
- return
- end
- -- Periksa apakah di dalam model karakter ada Humanoid
- local humanoid = characterModel:FindFirstChildWhichIsA("Humanoid")
- if not humanoid then
- return
- end
- -- Periksa apakah karakter ini adalah pemain
- local player = game.Players:GetPlayerFromCharacter(characterModel)
- if not player then
- return
- end
- -- Periksa apakah pemain ini sebelumnya tercatat menyentuh part ini
- if pemainYangTersentuh[player] then
- -- Perlu sedikit pemeriksaan tambahan: apakah *ada bagian lain* dari karakter yang *masih* menyentuh?
- local masihMenyentuh = false
- local menyentuhParts = triggerPart:GetTouchingParts() -- Dapatkan semua part yang sedang menyentuh triggerPart
- for _, part in ipairs(menyentuhParts) do
- if part.Parent == characterModel then -- Jika salah satu part yang menyentuh adalah bagian dari karakter ini
- masihMenyentuh = true
- break -- Hentikan loop, karena kita sudah tahu masih ada yang menyentuh
- end
- end
- -- Jika tidak ada bagian lain dari karakter yang masih menyentuh
- if not masihMenyentuh then
- print(player.Name .. " meninggalkan zona slow motion.") -- Pesan debug (opsional)
- local dataPemain = pemainYangTersentuh[player]
- -- Kembalikan ke kecepatan asli yang disimpan sebelumnya
- -- Pastikan dataPemain dan humanoid masih valid
- if dataPemain and dataPemain.humanoid and dataPemain.humanoid.Parent then
- dataPemain.humanoid.WalkSpeed = dataPemain.kecepatanAsli
- else
- -- Fallback jika ada masalah, kembalikan ke default
- humanoid.WalkSpeed = kecepatanNormalDefault
- end
- -- Hapus pemain dari tabel pelacakan
- pemainYangTersentuh[player] = nil
- end
- end
- end
- -- Menghubungkan fungsi 'onTouch' ke event 'Touched' pada Part
- triggerPart.Touched:Connect(onTouch)
- -- Menghubungkan fungsi 'onTouchEnded' ke event 'TouchEnded' pada Part
- triggerPart.TouchEnded:Connect(onTouchEnded)
- -- Membersihkan data pemain jika pemain meninggalkan permainan
- game.Players.PlayerRemoving:Connect(function(player)
- if pemainYangTersentuh[player] then
- pemainYangTersentuh[player] = nil -- Hapus dari tabel jika pemain keluar
- end
- end)
- print("Script Slow Motion siap pada Part: " .. triggerPart.Name)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement