Lewati ke konten utama

Menu Guide

Sebuah tutorial pendek yang menjelaskan bagaimana cara menggunakan sistem menu pada game. Sistem menu ini sangat berbeda dengan SA-MP dialog dan lebih mencerminkan UI tradisional dari gim aslinya.

Menu kelihatannya sangat rumit dan susah dibuat scriptnya untuk kebanyakan pengguna, namun sebenarnya tidak. Disini saya akan menunjukkan bagaimana cara membuat menu simpel. Dan nantinya kita akan membuat sebuah teleport menu.

Langkah pertama menu

Pertama kita harus membuat sebuah menu. Prefix sebelumnya adalah Menu: ini adalah variable tag yang benar. Terdapat beberapa tipe dari beberapa penggunaan seperti Float: bool: Text3D: dan lain-lain. Buatlah kodenya diposisi paling atas di kode kalian:

new Menu:teleportmenu;

Oke, kita sudah membuat variable untuk menaruh menu. Sekarang kita membuat menu dan menetapkan variable yang sudah dibuat ke menu. Ketik ini pada OnGameModeInit:

teleportmenu = CreateMenu("Teleportmenu", 2, 200.0, 100.0, 150.0, 150.0);

Sedikit penjelasan tentang argumen CreateMenu.

Parameters:

ParameterMenentukan
titleJudul menu
columnsAngka yang menentukan berapa banyak kolom yang digunakan (maksimal 2)
Float:xUntuk menentukan posisi tinggi dari menu pada layar (kiri ke kanan)
Float:yUntuk menentukan lebar dari menu pada layar (atas dan bawah)
Float:col1widthLebar dari kolom pertama
Float:col2widthLebar dari kolom kedua

Menambahkan beberapa menu item

Ok, sekarang kita sudah dapat Menu nya, tapi sekarang kita butuh beberapa item, yang dimana dapat dipilih di dalam menu. Kalian dapat menambahkannya di bawah CreateMenu yang sebelumnya kita buat.

AddMenuItem(teleportmenu, 0, "LS");
AddMenuItem(teleportmenu, 0, "LS");
AddMenuItem(teleportmenu, 0, "SF");
AddMenuItem(teleportmenu, 0, "SF");
AddMenuItem(teleportmenu, 0, "LV");
AddMenuItem(teleportmenu, 0, "LV");

AddMenuItem(teleportmenu, 1, "Grove Street");
AddMenuItem(teleportmenu, 1, "Starfish Tower");
AddMenuItem(teleportmenu, 1, "Wheel Arch Angels");
AddMenuItem(teleportmenu, 1, "Jizzys");
AddMenuItem(teleportmenu, 1, "4 Dragons");
AddMenuItem(teleportmenu, 1, "Come-a-Lot");

Penjelasan mengenai AddMenuItem:

menuidmenuid dari menu yang dimana item akan ditampilkan
columnKolom tempat item akan ditampilkan
textTeks dari item

Membuat efek pada item

Oke, sekarang kita sudah membuat menu lengkap dengan terdapat item, apa yang harus terjadi jika kalian memilih item? Dalam contoh kami, kami ingin membuat teleportmenu, jadi seharusnya kita bisa teleport ke posisi yang kita pilih. Ketika player memilih sebuah item pada menu, script akan memanggil callback OnPlayerSelectedMenuRow. Cara yang paling bagus untuk dilakukan adalah menggunakan switch, ini seperti beberapa statement if untuk memastikan jika sebuah variable sangat bernilai untuk value tertentu. Tapi pertama kita hanya ingin membuat efek untuk menu yang kita ingin, jadi kita harus membuat variable yang menampung menu ketika menu dilihat oleh player, ini dilakukan dengan GetPlayerMenu:

new Menu:CurrentMenu = GetPlayerMenu(playerid);

Sekarang, ketika seseorang memilih sesuatu di dalam menu, menuid mereka akan disimpan pada CurrentMenu.

Sekarang kita harus memeriksa apakah menu yang mereka pilih adalah menu yang kita inginkan:

public OnPlayerSelectedMenuRow(playerid, row)
{
new Menu:CurrentMenu = GetPlayerMenu(playerid);
if (CurrentMenu == teleportmenu)
{
//stuff
}
return 1;
}

Sekarang diantara braket ini adalah tempat switch berada, ini memastikan item apa yang pemain pilih atau row bisa digunakan dengan statement if untuk memeriksa apa benar itu row, tapi switch adalah cara yang jauh lebih sederhana untuk menulisnya.

if(CurrentMenu == teleportmenu)
{
switch(row)
{
case 0: //Grove Street
{
SetPlayerPos(playerid, 2493.9133, -1682.3986, 13.3382);
SetPlayerInterior(playerid, 0);
SendClientMessage(playerid, 0xFFFFFFFF, "Selamat datang di Grove Street");
}
case 1: //Starfish Tower
{
SetPlayerPos(playerid, 1541.2833, -1362.4741, 329.6457);
SetPlayerInterior(playerid, 0);
SendClientMessage(playerid, 0xFFFFFFFF, "Selamat datang di atas Starfish Tower");
}
case 2: //Wheel Arch Angels
{
SetPlayerPos(playerid, -2705.5503, 206.1621, 4.1797);
SetPlayerInterior(playerid, 0);
SendClientMessage(playerid, 0xFFFFFFFF, "Selamat datang di Wheel Arch Angels tuning-shop");
}
case 3: //Jizzys
{
SetPlayerPos(playerid, -2617.5156, 1390.6353, 7.1105);
SetPlayerInterior(playerid, 0);
SendClientMessage(playerid, 0xFFFFFFFF, "Selamat datang di Jizzy's Nightclub!");
}
case 4: //4Dragons
{
SetPlayerPos(playerid, 2028.5538, 1008.3543, 10.8203);
SetPlayerInterior(playerid, 0);
SendClientMessage(playerid, 0xFFFFFFFF, "Selamat datang di Four Dragons Casino");
}
case 5: //Come-a-Lot
{
SetPlayerPos(playerid, 2169.1838, 1122.5426, 12.6107);
SetPlayerInterior(playerid, 0);
SendClientMessage(playerid, 0xFFFFFFFF, "Selamat datang di Come-a-Lot casino!");
}
}
}

Langkah terakhir

Sekarang kita membutuhkan perintah untuk menampilkan menu. Ini adalah cara yang paling mudah. Dibandingkan dengan strcmp dan ShowMenuForPlayer. Ini bisa dilakukan dengan OnPlayerCommandText. Atau, jika kalian sudah memiliki command processor, gunakanlah itu sebagai ganti dari ShowMenuForPlayer.

if(strcmp(cmdtext, "/teleport", true) == 0)
{
ShowMenuForPlayer(teleportmenu,playerid);
return 1;
}

Sangat mudah, bukan?

Kata terakhir

Oke, setelah kalian membaca ini dan memahaminya, cobalah untuk membuat menu kalian sendiri. Seperti yang kalian lihat, ini tidaklah sulit, tapi ini akan membuat pemain di dalam server kamu sangat terkesan. Dan kalian dapat membuatnya lebih keren daripada ini. Ini sangatlah berguna bagi general store dan supermarket untuk membeli sesuatu. Lalu kalian dapat mengurangi uang sebagai efek dan harga yang ditampilkan di kolom lain pada menu. Tapi sekarang, buatlah sesuai kebutuhan kalian.

Kalian dapat menambahkan TogglePlayerControllable dengan false setelah ShowPlayerMenu dan TogglePlayerControllable dengan true pada akhir OnPlayerSelectedMenuRow, jadi pemain tidak dapat berpindah ketika memilih sesuatu di dalam menu.

Saya harap kalian dapat mempelajari sesuatu dari tutorial ini. Jika kamu memiliki pertanyaan, silahkan bertanya di forum/discord.