5. Tambahkan hazard
Yang akan kamu pelajari
Section titled “Yang akan kamu pelajari”Di akhir materi ini, kamu akan bisa:
- Mengorganisir rintangan bahaya di dalam Folder
Hazards. - Membuat
HazardServicediServerScriptService. - Mengaitkan event
Touchedke seluruh rintangan secara otomatis. - Mengeliminasi atau mengurangi Health
Humanoidsaat menyentuh hazard. - Menyeimbangkan posisi rintangan agar rute permainan tetap adil.
Lihat prosesnya dulu
Section titled “Lihat prosesnya dulu”Video singkat resmi Roblox ini memperlihatkan peran hazard sebagai konsekuensi saat pemain menyentuh area berbahaya. Tonton untuk memahami hasil akhirnya, lalu ikuti halaman ini untuk membangun dan menyeimbangkan hazard-mu sendiri.
Video resmi Roblox Documentation. Durasi dan bahasa mengikuti video aslinya.
Sebelum mulai
Section titled “Sebelum mulai”- Selesaikan materi Buat sistem coin.
- Tentukan bagian platform yang ingin diberi risiko bahaya.
1. Siapkan Folder Hazards di Workspace
Section titled “1. Siapkan Folder Hazards di Workspace”- Di dalam
Workspace.Map(atauWorkspace.World), buat sebuah Folder bernamaHazards. - Tambahkan sebuah
Partke dalam folder tersebut. - Ubah warnanya menjadi merah menyala atau gunakan material neon agar mudah dikenali pemain sebagai bahaya.
- Aktifkan
Anchored = truedan pastikanCanCollide = true(ataufalsejika berupa cairan/laser yang bisa dilewati). - Letakkan di celah rute atau di atas platform sebagai rintangan.
- Kamu bisa menduplikasi part hazard ini ke beberapa titik rute lainnya di dalam folder
Hazards.
2. Buat HazardService di ServerScriptService
Section titled “2. Buat HazardService di ServerScriptService”- Di
ServerScriptService, buat sebuahScriptbaru. - Beri nama
HazardService. - Isi kodenya dengan:
flowchart LR classDef trigger fill:#0369a1,stroke:#38bdf8,stroke-width:2px,color:#ffffff; classDef condition fill:#b45309,stroke:#f59e0b,stroke-width:2px,color:#ffffff; classDef action fill:#047857,stroke:#10b981,stroke-width:2px,color:#ffffff; classDef finish fill:#334155,stroke:#94a3b8,stroke-width:2px,color:#ffffff;
Touch["<b>Hazard Disentuh</b><br/>hazard.Touched"]:::trigger Check{"<b>Validasi</b><br/>Pemain aktif & Health > 0?"}:::condition Kill["<b>Eliminasi Karakter</b><br/>humanoid.Health = 0"]:::action Respawn(["<b>Respawn</b><br/>Karakter muncul di checkpoint"]):::finish Ignore(["<b>Abaikan</b><br/>Bukan pemain aktif"]):::finish
Touch --> Check Check -- "Ya" --> Kill --> Respawn Check -- "Tidak" --> Ignore- Baris 1-3: Mengambil service
PlayersdanWorkspace. - Baris 5-8: Menemukan folder
Hazardsdi dalam map dan mengambil semua part rintangan di dalamnya. - Baris 10-21: Fungsi
onHazardTouchedmemvalidasi apakah part yang menyentuh berasal dari pemain sungguhan (Players:GetPlayerFromCharacter), lalu mengeliminasi karakter dengan mengaturhumanoid.Health = 0. - Baris 24-28: Loop
forsecara otomatis memasang event sentuhan ke seluruh objek hazard yang ada di folder, sehingga menambah hazard baru di map tidak membutuhkan skrip tambahan.
local Players = game:GetService("Players")local Workspace = game:GetService("Workspace")
-- Folder Hazardslocal mapFolder = Workspace:WaitForChild("Map")local hazardsFolder = mapFolder:WaitForChild("Hazards")local hazards = hazardsFolder:GetChildren()
local function onHazardTouched(otherPart) local character = otherPart.Parent local player = Players:GetPlayerFromCharacter(character)
if player then local humanoid = character:FindFirstChildWhichIsA("Humanoid") if humanoid and humanoid.Health > 0 then humanoid.Health = 0 print(player.Name .. " terkena hazard!") end endend
-- Hubungkan deteksi sentuh ke seluruh part di dalam folder Hazardsfor _, hazard in ipairs(hazards) do if hazard:IsA("BasePart") then hazard.Touched:Connect(onHazardTouched) endendSalin prompt berikut ke chat AI di Visual Studio Code (dengan Roblox Studio MCP aktif):
Buatkan Script bernama "HazardService" di ServerScriptService:- Deteksi semua part bahaya di Workspace.Map.Hazards.- Jika disentuh karakter pemain, ubah Health menjadi 0 agar karakter respawn.Atur tingkat bahaya
Section titled “Atur tingkat bahaya”Rintangan yang adil memberikan kesempatan bagi pemain untuk membaca pola dan melompat di waktu yang tepat. Pastikan ada ruang aman di depan dan di belakang hazard agar pemain tidak langsung terkena bahaya saat baru mendarat.
Checkpoint
Section titled “Checkpoint”Materi ini selesai jika:
- Seluruh part berbahaya berada di dalam folder
Hazards; HazardServiceaktif di dalamServerScriptService;- menyentuh hazard mengeliminasi karakter pemain;
- karakter respawn kembali di spawn awal secara normal;
- tidak ada pesan error merah di jendela Output.
Tantangan
Section titled “Tantangan”Coba buat variasi hazard yang hanya mengurangi darah (misal humanoid:TakeDamage(25)) alih-alih langsung mengeliminasi seketika. Pertimbangkan jeda cooldown agar darah pemain tidak habis dalam 1 milidetik.
Rangkuman
Section titled “Rangkuman”Kamu telah membuat rintangan berbahaya terorganisir dengan HazardService. Seluruh bahaya di map dikelola langsung dari satu tempat di server.