Lewati ke konten

5. Tambahkan hazard

Di akhir materi ini, kamu akan bisa:

  • Mengorganisir rintangan bahaya di dalam Folder Hazards.
  • Membuat HazardService di ServerScriptService.
  • Mengaitkan event Touched ke seluruh rintangan secara otomatis.
  • Mengeliminasi atau mengurangi Health Humanoid saat menyentuh hazard.
  • Menyeimbangkan posisi rintangan agar rute permainan tetap adil.

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.

  • Selesaikan materi Buat sistem coin.
  • Tentukan bagian platform yang ingin diberi risiko bahaya.
  1. Di dalam Workspace.Map (atau Workspace.World), buat sebuah Folder bernama Hazards.
  2. Tambahkan sebuah Part ke dalam folder tersebut.
  3. Ubah warnanya menjadi merah menyala atau gunakan material neon agar mudah dikenali pemain sebagai bahaya.
  4. Aktifkan Anchored = true dan pastikan CanCollide = true (atau false jika berupa cairan/laser yang bisa dilewati).
  5. Letakkan di celah rute atau di atas platform sebagai rintangan.
  6. 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”
  1. Di ServerScriptService, buat sebuah Script baru.
  2. Beri nama HazardService.
  3. 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

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.

Materi ini selesai jika:

  • Seluruh part berbahaya berada di dalam folder Hazards;
  • HazardService aktif di dalam ServerScriptService;
  • menyentuh hazard mengeliminasi karakter pemain;
  • karakter respawn kembali di spawn awal secara normal;
  • tidak ada pesan error merah di jendela Output.

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.

Kamu telah membuat rintangan berbahaya terorganisir dengan HazardService. Seluruh bahaya di map dikelola langsung dari satu tempat di server.