Tutorial
Selamat Pagi, Siang, Sore, Malam, dimanapun anda membaca saat ini, semoga anda semua sehat selalu, aamiin...
Seperti pada judul, kita akan belajar selingan, yaitu Trivia, karena kalau penjelasan terus bikin mumet, dan akhirnya mangkrak wkwkw :D
Jadi gini, saya tergelitik dan sedikit tertantang untuk membuat skript ini, karena mungkin sebagian besar player minecraft belum memahami skript (mungkin benar juga sih, karena player tidak harus membuat server).
Jadi ada studi kasus ketika ada player ingin membuat kuis sendiri, dengan pertanyaan dan jawaban kustom, saya ingin membuat lebih interaktif, karena ada keterbatasan command di minecraft yang tidak bisa membuat argumen dengan spasi kecuali di argumen terakhir, dan itu tidak menyenangkan.
Yuk kita mundur ke Part 2, Skript Minecraft Tutorial: PART 2 - Basic Rule, di post saya sebelumnya sudah menjelaskan indentation, variabel, function, loop, condition, dsb. Kini kita akan mengimplementasikan beberapa hal tersebut dalam sebuah kode skript yang bertujuan untuk menampilkan kuis buatan player yang bisa dijawab oleh player lain
Kita mulai dari awal, yaitu variabel Ketika kita ingin buat kuis, kita harus mengetahui, ada hadiah kah, ada batas waktu untuk menjawab, apakah ada pajak yang dibayar player untuk membuat kuis itu, atau minimal nominal hadiah yang diberikan, semua tergantung kebutuhan
Berikut adalah Variabel yang saya siapkan untuk menampung pertanyaan, jawaban, hadiah, status, dan countdown.

Dan Options sebagai berikut

Dalam Gambar diatas, Kita akan mereset pertanyaan, jawaban, hadiah, dan status, hal ini agar Kuis dijalankan ketika player yang menyelenggarakan kuis sedang online, sedangkan options yang digambar ke dua, kita mensetting berapa minimal uang yang harus dijadikan hadiah untuk kuis, pajak agar player lebih berhati hati dalam membuat kuis dan tidak asal asalan, dan answertime untuk membatasi waktu menjawab dalam kuis.
Sekarang kita akan melakukan logic kode yang lebih mendalam. yaitu command /sendquiz, dan /cancelquiz, pada command /sendquiz, kita akan melakukan perubahan status, yang awalnya kosong menjadi status isi-pertanyaan, dimana kita bisa menulis pertanyaan dikolom chat minecraft tanpa harus khawatir

Dalam hal ini, command hanya bisa digunakan oleh player, hal ini akan berhubungan dengan balance, sebagai hadiah yang bisa dikirimkan ke player. kemudian kita akan mengkondisikan apakah statusnya itu belum di set, maka kita akan menset nya menjadi "isi-pertanyaan", kemudian kita bisa menampilkan langkah langkah yang membuat player mengerti, dan sebaliknya, berarti kuis sedang berjalan, pemain akan dihalangi untuk membuat kuis lagi sebelum kuis yang dibuatnya selesai.

Pada /cancelquiz, perintah ini bisa dijalankan oleh pemain saat pemain sudah mengakses /sendquiz, jika quiz itu sudah dimulai ditandai dengan status "quiz-mulai" maka player tersebut dihalangi untuk membatalkan kuisnya, dan jika belum melakukan /sendquiz, akan diberikan warning bahwa player harus melakukan /sendquiz terlebih dahulu, pada /cancelquiz ini, jika belum memulai quiz, semua variabel yang ada diplayer dihapus agar tidak menimbulkan bug, dan dapat menggunakan /sendquiz kembali.
Kemudian saatnya paling vital, yaitu event on chat, dimana event ini menangkap isian pertanyaan, jawaban, hadiah, serta saat kuis dimulai dan player menjawab kuis, hingga mengambil hadiah serta menarik pajak
on chat:
if {quizzez::%player%::status} = "isi-pertanyaan":
set {quizzez::%player%::pertanyaan} to message
set {quizzez::%player%::status} to "isi-jawaban"
send "&6------------[&eLangkah 2&6]------------" to player
send "&aPertanyaan Disimpan: &e%{quizzez::%player%::pertanyaan}%" to player
send "&6Berikan jawabanmu dichat" to player
send "&6Jika jawabanmu kami anggap hanya untuk prank, kami berhak untuk &cmemenjarakanmu" to player
send "&6Ingat, &e/rules&6 masih berlaku :D" to player
send "&6Untuk membatalkan, ketik command &c/cancelquiz" to player
cancel event
else if {quizzez::%player%::status} is "isi-jawaban":
set {quizzez::%player%::jawaban} to message
set {quizzez::%player%::status} to "hadiah"
send "&6------------[&eLangkah 3&6]------------" to player
send "&aJawaban Disimpan: &e%{quizzez::%player%::jawaban}%" to player
send "&6Berikan hadiahmu berupa uang jika pertanyaanmu bisa dijawab player!" to player
send "&6Namun kami akan menarik pajak {@tax}%% dari hadiah yang kamu berikan" to player
send "&6Untuk membatalkan, ketik command &c/cancelquiz" to player
cancel event
else if {quizzez::%player%::status} is "hadiah":
if message parsed as number is not a number:
send "&aHadiah berupa uang, pastinya harus ANGKA :)" to player
send "&6Untuk membatalkan, ketik command &c/cancelquiz" to player
cancel event
stop trigger
if message parsed as number < {@minimummoney}:
send "&aTidak mencapai uang minimum, masukan ${@minimummoney} atau lebih" to player
send "&6Untuk membatalkan, ketik command &c/cancelquiz" to player
cancel event
stop trigger
set {quizzez::%player%::hadiah} to message
set {quizzez::%player%::status} to "konfirmasi"
send "&6------------[&eLangkah 4&6]------------" to player
send "&6Pertanyaan: &a%{quizzez::%player%::pertanyaan}%" to player
send "&6Jawaban: &a%{quizzez::%player%::jawaban}%" to player
send "&6Hadiah: &a$%{quizzez::%player%::hadiah}%&6"
send "&6---------------------------------------" to player
send "&6Kami akan mengambil uang hadiahmu"
send "&6Ditambah pajak {@tax}%% menjadi &a$%({quizzez::%player%::hadiah} parsed as number + ({quizzez::%player%::hadiah} parsed as number * ({@tax}/100)))%"
send "&6Ingat, &e/rules&6 masih berlaku :D" to player
send "&6Untuk konfirmasi dan mulai kuis, ketik &aconfirm" to player
send "&6Untuk membatalkan, ketik command &c/cancelquiz" to player
cancel event
else if {quizzez::%player%::status} is "konfirmasi":
if message is "confirm":
# Pengambilan Uang
set {_takenmoneyplustax} to ({quizzez::%player%::hadiah} parsed as number + ({quizzez::%player%::hadiah} parsed as number * ({@tax}/100)))
if player's balance >= {_takenmoneyplustax}:
subtract {_takenmoneyplustax} from player's balance
send "&aMengambil uang sebesar $%{_takenmoneyplustax}% dari balancemu!" to player
else:
send "&cTidak ada uang $%{_takenmoneyplustax}% dari balancemu!" to player
send "&6Jika uangmu sudah cukup dan ingin mulai kuis, ketik &aconfirm" to player
send "&6Untuk membatalkan, ketik command &c/cancelquiz" to player
cancel event
stop trigger
# Broadcast & Mengubah Mode
set {quizzez::%player%::status} to "quiz-mulai"
set {quizzez::%player%::countdown} to {@answertime}
broadcast " &7- &e%player% &6Memulai kuis berhadiah &a$%{quizzez::%player%::hadiah}%! &7-"
broadcast ""
broadcast " &a%{quizzez::%player%::pertanyaan}%"
broadcast ""
broadcast " &7- &eWaktu Menjawab adalah {@answertime} detik &7-"
cancel event
loop all players:
if {quizzez::%loop-player%::status} = "quiz-mulai":
if message is {quizzez::%loop-player%::jawaban}:
if player is loop-player:
send "&cKamu tidak bisa menjawab pertanyaanmu sendiri ya sayang :D"
cancel event
stop trigger
clear {quizzez::%loop-player%::status}
set {_time} to ({quizzez::%loop-player%::countdown} - {@answertime})
clear {quizzez::%loop-player%::countdown}
broadcast "&e%player% memenangkan quiz dari %loop-player%, dan mendapat hadiah &a$%{quizzez::%loop-player%::hadiah}%!"
broadcast "&e%player% menjawab quiz dengan waktu %{_time}% detik"
give {quizzez::%loop-player%::hadiah} parsed as number to player's balance
Terlalu panjang?, kita akan bedah satu persatu, yaitu sebagai berikut.
on chat:
Sebuah penanda bahwa event yang ditangkap adalah saat player melakukan chat. hal ini bersifat universal, segala chat yang dilakukan oleh pemain, akan dibaca oleh event on chat ini

Ketika ada chat masuk, cek dulu, apakah variabel quizzez::%player%::status adalah "isi-pertanyaan", yang mana status "isi-pertanyaan" didapatkan dari perintah /sendquiz diatas, jika memang benar, kita akan menangkap isi chat tersebut untuk dijadikan pertanyaan, dan kita akan menyimpan, dan mempreview di chat minecraftnya, kemudian kita berikan langkah berikutnya yaitu mengisi jawaban, dengan mengubah variabel quizzez::%player%::status menjadi "isi-jawaban".

Sama saat mengecek pertanyaan, kita akan cek dulu variabel quizzez::%player%::status adalah "isi-jawaban", yang mana status "isi-jawaban" didapatkan saat setelah mengisi pertanyaan di chat, dan jika memang benar, kita akan menangkap isi chat sebagai jawaban atas pertanyaan yang diisi sebelumnya, dan tidak lupa pula kita akan preview isi jawaban yang diberikan serta langkah selanjutnya yaitu mengisi hadiah, langkah berikutnya kita mengubah variabel quizzez::%player%::status menjadi "hadiah".

Dibagian hadiah ini, kita akan sedikit rumit, kita harus memastikan bahwa player ini memiliki uang yang sesuai dengan minimal uang untuk melakukan kuis, dan memastikan bahwa inputan hadiah harus berbentuk angka. kita memerlukan pengkondisian pertama, yaitu apakah isian chat berbentuk angka, kemudian pengkondisian kedua, yaitu apakah yang dimasukan kurang dari mimimal uang untuk menjalankan kuis, setelah hal itu terpenuhi semuanya, kita akan mengubah variabel quizzez::%player%::status menjadi "konfirmasi", dan dilanjutkan menampilkan pertanyaan, jawaban, hadiah, serta penambahan pajak, serta mengingatkan bahwa ada /rules yang berlaku.

Saat kita menuliskan "confirm" pada chat, kita akan memproses semua inputan, ada pengkondisian balance, dimana kita akan mengecek balance dari player, jika balance player lebih besar dari sama dengan nominal hadiah ditambah pajak, maka kita bisa lanjutkan kuis pada status "quiz-mulai", namun ketika player tidak punya uang, kita masih menyimpan pertanyaan, jawaban, dan hadiah yang dimasukan sebelumnya, barang kali ada balance masuk dari sesama pemain yang sering berinteraksi dengan player yang membuat kuis, atau player bisa mengakses /cancelquiz untuk membatalkan kuis.
Jika semua terpenuhi, kita mengubah variabel quizzez::%player%::status menjadi "quiz-mulai" yang menandakan kuis sudah dimulai dan membroadcast penyelenggara kuis, hadiahnya, kemudian pertanyaan, yang akan dijawab oleh player selain penyelenggara kuis.

loop all players yang sedang online, kita akan melakukan perulangan di tiap player yang online, jika player tersebut menyelenggarakan kuis dengan variabel quizzez::%player%::status menjadi "quiz-mulai" maka kita bisa lanjutkan untuk menangkap jawaban player, dimana kita akan melakukan pengkondisian apakah chat yang di isi player sesuai dengan jawaban yang diberikan di kuis, dan kita melakukan pengkondisian agar penyelenggara kuis tidak menjawab pertanyaannya sendiri Agar tidak ngeprank, nanya sendiri, jawab sendiri, kita pun mengurangi countdown dengan answertime agar player dapat mengetahui berapa detik player menyelesaikan kuis yang dibuat, serta menghapus variabel quizzez::%player%::status dan variabel quizzez::%player%::countdown, dan memberikan hadiah yang sudah diberikan

Pada event every 1 second, kita mengurangi countdown saat kuis sedang berjalan, kemudian kita pun dapat membuat warning seperti "30 detik" atau "15 detik" sesuai kebutuhan, pada saat player tidak dapat menjawab pertanyaan yang diberikan penyelenggara kuis, hadiah akan dikembalikan dengan dipotong pajak
Mungkin cukup sekian trivia kali ini, Untuk Sumber kodenya ada di github saya Sumber Kode semoga bisa bermanfaat bagi pembaca dan memotivasi diri ini untuk membuat blog lebih baik lagi
Demo Video dapat diakses disini
Terima kasih.