PHP- Kodu:
#include <amxmodx>
#include <amxmisc>
/* Her yoneticinin menusundeki ayar farkli gorunecektir.
Bu yüzden değişken bir player array olucak.*/
new sayi[33];
public FuncShowMenu(id) {
new menu = menu_create("\r Menu Basligi","FuncHandleMenu")
menu_additem(menu,"Gravity 0","degistir")
menu_additem(menu,"Uygula","0")
menu_display(id,menu)
}
public FuncHandleMenu(id,menu,item) {
if(item == MENU_EXIT) {
// Menüden çıkıldıysa hafizadaki sayiyi sifirla.
sayi[id] = 0;
menu_destroy(menu)
return PLUGIN_HANDLED
}
if(item == 0) {
// Eğer ilk seçenek seçildiyse:
// Hafizadaki sayiya 100 daha ekle ve 1100'e göre modunu al.
// x mod y = x sayısının y ile bölümünden kalanı verir.
// Yani sayi 1100 olursa 1100 ile bölümünden kalan 0 olacağı için yeni sayi yine 0 olacaktır. Asla sayi 1000'i geçemeyecek.
sayi[id] = (sayi[id] + 100) % 1100;
// İlk seçeneğin ismini değiştir.
new szName[32];
formatex(szName,31,"Gravity %d",sayi[id])
menu_item_setname(menu,0,szName);
}
else {
// Eğer ikinci seçenek seçildiyse:
// Hafizadaki sayiyi cvar ayarı olarak uygula.
set_cvar_num("sv_gravity",sayi[id])
client_print(id,print_center,"Ayar Uygulandi ! Gravity : %d",sayi[id])
}
menu_display(id,menu);
return PLUGIN_HANDLED
}
Ayrıca formatex bir menü sistemi değildir. Formatex fonksiyonu bir string değişkenini düzenlemeye yarar. Menülerde kullanılmasının sebebi, menu fonksiyonlarında değişken belirtilememesidir. Formatex ile değişken yazıya eklenip, öyle seçenek oluşturulur.
Normalde
client_print(id, print_chat, " Oyuncu adi: %s ", name)
şeklinde belirtebiliyoruz. Böyle durumlarda formatexe gerek duyulmuyor ancak menü fonskiyonları gibi fonksiyonlarda
menu_additem(menu, "Oyuncu adi: %s", name, "1")
gibi bir şey yapmak mümkün değil. Bu yüzden önce stringi düzenlemek için formatex kullanıp öyle item adı olarak gösterebiliyoruz.
new Secenek[32]
formatex(Secenek, 31, "Oyuncu adi: %s",name)
menu_additem(menu, Secenek, "1")
Plugin İstek Bölümüne taşındı.