Arief
Arief Interested in Game Development & Embedded System

Cara Membuat System Daily Rewards Menggunakan Fungsi Date & Time pada Game Maker: Studio

Cara Membuat System Daily Rewards Menggunakan Fungsi Date & Time pada Game Maker: Studio

Di dalam sebuah game, terkadang kita menginginkan player mendapatkan sebuah reward setiap harinya saat memainkan game. Atau kita ingin membatasi penggunaan item tertentu tiap player per-harinya. Hal ini disebut dengan Daily Rewards atau Hadiah Harian. Lalu, Bagaimana Cara menerapkannya pada Game Maker: Studio?

Pada Game Maker: Studio terdapat sebuah fungsi yang digunakan untuk membaca dan mengatur waktu pada perangkat yang digunakan. Menggunakan fungsi Date & Time, kita bisa membuat sistem semacam ini dengan mudah. Untuk lebih jelasnya silahkan baca link berikut.

Date & Time Functions

Ada banyak fungsi yang dapat digunakan pada fungsi Date & Time, tetapi kita hanya akan menggunakan date_current_datetime(), date_compare_date(), dan date_get_second_of_hour(). Berikut penjelasan fungsi-fungsi tersebut.

- date_current_datetime() : Mengembalikan nilai waktu saat ini dalam bentuk bilangan real (sesuai dengan zona waktu saat ini).

- date_compare_date(date1, date2) : Membandingan 2 buah waktu dan mengembalikan nilainya menjadi, 0 apabila tanggal pada kedua waktu tersebut sama, 1 apabila tanggal pada date1 > date2, dan -1 apabila tanggal pada date1 < date2.

Ok, sebelum memulai, seperti biasa buatlah sebuah project baru dengan nama apapun. Lalu, buatlah sprite untuk dijadikan tombol. gms_sprite

Setelah itu, buatlah sebuah object dengan nama obj_ctrl. Lalu, tambahkan Create Event pada object tersebut. Kemudian, isikan kode berikut.

///Initialize

//Buka file save.ini
ini_open("save.ini");

var currTime = date_current_datetime();//Waktu saat ini

//Deklarasikan variabel global.lastTime, lalu isi dengan data pada section "Time" dan key "last_time" dari save.ini
global.lastTime = ini_read_real("Time", "last_time", currTime);//Jika data pada file tidak ada, maka diisi dengan currTime

//Deklarasikan variabel untuk mengecek apakah reward sudah diterima sebelumnya
global.rewardClaimed = ini_read_real("Time", "reward_claimed", false);

//Jika waktu hari ini > waktu tersimpan set variabel berikut menjadi false
if(date_compare_date(currTime, global.lastTime)>0){
    global.rewardClaimed = false;
}

//Tutup file save.ini untuk mencegah kebocoran memory
ini_close();

obj_ctrl

Selanjutnya, buatlah object dengan nama obj_button dan ganti sprite-nya dengan sprite tombol yang telah kita buat sebelumnya. Tambahkan Left Pressed Event. Ketikkan kode berikut.

///Claim Rewards

var currTime = date_current_datetime();

//Jika waktu sekarang > waktu tersimpan atau reward belum diterima
if(date_compare_date(currTime, global.lastTime) == 1 || !global.rewardClaimed){
    
    show_message("Kamu mendapatkan reward!");
    
    //Set reward telah diterima
    global.rewardClaimed = true;
    
    global.lastTime = currTime;
    
    //Buka file save.ini
    ini_open("save.ini");
    
    //Simpan waktu terakhir
    ini_write_real("Time", "last_time", currTime);
    
    //Simpan reward_claimed menjadi true
    ini_write_real("Time", "reward_claimed", true);
    
    //Tutup file save.ini untuk mencegah kebocoran memory
    ini_close();
} else {
	//Reward tidak bisa diambil
    show_message("reward sudah diterima sebelumnya!");
}

obj_button

Buatlah sebuah room , lalu tambahkan obj_ctrl dan obj_button pada room tersebut. Kemudian, tutup dan simpan room tersebut. obj_button

Tekan tombol run dan jalankan gamenya. Lalu, klik tombol yang ada pada room. Jika berhasil, maka akan tampil pesan seperti berikut. obj_button

Lalu, coba tekan lagi tombol tersebut. Jika hasilnya seperti ini, maka berhasil. obj_button

Untuk membuktikan apakah sistem yang kita buat tadi benar-benar berhasil, cobalah ganti waktu pada perangkat anda. Sistem yang saya buat hanya dasarnya saja. Kita bisa menambahkan hal-hal lain pada sistem ini agar gamenya lebih menarik.

Sekian tutorial kali ini, jika ada yang masih bingung dan ingin ditanyakan, silahkan tanyakan pada kolom komentar di bawah:point_down::point_down:.

comments powered by Disqus