Bu derste amxmodx programlamanın en son çıkmış menü sistemine ait tüm özellikleri öğrenebilirsiniz.
Tüm Menü Fonksiyonları, [ newmenus.inc ]
menu_create(const title[], const handler[], ml=0)
Açıklama: Bu fonksiyon menü yaratmak için kullanılır.
1. Parametre: Menünün başlığı
Türü "string"
Buraya yazdığınız başlık, menü açıldığında, menünün en üstünde görünür.
2. Parametre: Menünün işletici fonksiyonu
Türü "string"
Menüler genel olarak 3 fonksiyondan oluşur.
A. Menünün Oluşturulduğu Kısım (menu_create fonksiyonunu kullandığımız kısım)
B. Menüyü İşlettiğimiz Kısım ( Menüde bir tuşa basıldığı zaman çalışacak olan fonksiyon)
C. Menünün geriçağrımı (callback) ( Bu kısım zorunlu değil ancak gelişmiş menülerde kullanılıyor ve bu derste de anlatılacak)
İkinci parametreye B kısmı fonksiyonu yazıyoruz.
3. Parametre: Bir işe yaramıyormuş. Biz sadece ilk iki parametreyi yazıcaz, üçüncü bir parametre girmenize gerek yok.
Return: Bu fonksiyon yaratılan menünün indexine döner.
Yani, bir değişken yaratıp bu fonksiyonu değişkene atarsak, bu değişken menümüzün indexi olacak. Ve bu menü indexi, diğer menü fonksiyonlarında menüyü ayarlamak için kullanılacak. Bu indexi diğer fonksiyonlarda menu olarak göstereceğiz.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
menu_additem(menu, const name[], const info[]="", paccess=0, callback=-1)
Açıklama: Bu fonksiyon yaratılmış bir menüye seçenek eklemek için kullanılır.
1. Parametre: Menünün indexi
Türü "integer"
2. Parametre: Seçeneğin ismi
Türü "string"
Buraya girdiğiniz isim, menüde başlığın altında eklenme sırasına göre liste şeklinde görünür.
3. Parametre: Seçenekle ilgili ekstra bilgi
Türü "string"
Buraya herhangi bir şey yazabiliriz. Buraya yazılan bilgi menüde görünmez. Bilgiyi yazarken seçenek sırasına göre numaralar yazarsak, işletici fonksiyonda, seçilen seçeneği kolayca ayırt edebiliriz. Örneklerde daha iyi anlaşılacaktır.
4. Parametre: Seçeneğe erişim yetkisi
Türü "integer"
Seçeneğe sadece belirli yetkideki kullanıcıların erişebilmesini istiyorsanız bu parametreye ilgili yetkiyi yazarsınız. Örneğin ADMIN_BAN yazarsanız sadece "d" yetkisine sahip kişiler bu seçeneğe basabilir. Herkesin kullanabilmesi için 0 yazın.
5. Parametre: Geriçağrım fonksiyonunun indexi.
Türü "integer"
Seçeneğe bağlamak istediğiniz geriçağrım fonksiyonunu buraya girin. Geriçağrımı anlattığım zaman daha iyi anlaşılacaktır.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
menu_setprop(menu, prop, ...)
Açıklama: Bu fonksiyon yaratılmış bir menünün özelliklerini değiştirir.
1. Parametre: Menünün indexi
Türü "integer"
2. Parametre: Değiştirilecek özellik
Türü "integer"
Buraya girdiğiniz özelliği, üçüncü parametrede değiştirirsiniz.
MPROP_PERPAGE: Bir sayfadaki maksimum seçenek sayısı (standart = 7) (parametre türü = integer)
MPROP_BACKNAME: Menünün "Geri" tuşunun ismi. ( standart = Geri veya Back ) (parametre türü = string )
MPROP_NEXTNAME: Menünün "İleri" tuşunun ismi. ( standart = Ileri veya Next ) (parametre türü = string )
MPROP_EXITNAME: Menünün "Çıkış" tuşunun ismi. ( standart = Cikis veya Exit) ( parametre türü = string )
MPROP_TITLE: Menünün başlığı ( Gereksiz, zaten menu_create fonksiyonu başlığı ayarlıyor ) ( parametre türü = string )
MPROP_EXIT: Çıkış tuşunun işlevi ( standart = MEXIT_ALL ) ( parametre türü = integer )
MPROP_EXIT parametreleri:
MEXIT_ALL: Menüyü kapatır
MEXIT_NEVER: Menüyü kapatma tuşunu kaldırır. Menü kapanmaz.
3. Parametre: Değiştirilecek özelliğin yeni değeri
Türü "integer/string"
2. Parametrede belirtilen özelliğin yeni değerini buraya gireriz.
Return: Bu fonksiyon, işlem başarılı olursa 1'e, başarısız olursa 0'a döner.----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
menu_display(id, menu, page=0)
Açıklama: Bu fonksiyon yaratılmış bir menüyü, belirtilen oyuncuya görüntüler.
1. Parametre: Oyuncu indexi
Türü "integer"
2. Parametre: Menü indexi
Türü "integer"
3. Parametre: Gösterilecek sayfa
Türü "integer"
0 = İlk Sayfa
1 = 2. Sayfa
...
Boş bırakılırsa page=0 olduğundan otomatik 0 olarak kabul eder.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
menu_destroy(menu)
Açıklama: Bu fonksiyon yaratılmış bir menüyü yok eder.
1. Parametre: Menünün indexi
Türü "integer"
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
menu_item_getinfo(menu, item, &access, info[], infolen, name[]="", namelen=0, &callback)
Açıklama: Bu fonksiyon belirtilen seçeneğin indexinden seçeneğe ait bilgileri toplamayı sağlar.
1. Parametre: Menünün indexi
Türü "integer"
2. Parametre: .Seçeneğin indexi
Türü "integer"
Program buraya girdiğiniz indexi kullanarak ilgili seçeneğin bilgilerini toplar.
3. Parametre: Seçeneğin erişim yetkisi
Türü "integer"
Erişim yetkisi, buraya yazdığınız değişkende depolanır.
4. Parametre: Seçeneğin ekstra bilgileri
Türü "string"
Seçeneğe ait ekstra bilgi, buraya yazdığınız değişkende depolanır.
5. Parametre: 4. Parametredeki değişkenin uzunluğu
Türü "integer"
Örneğin: szData[6] ise buraya 5 yazılır. Veya charsmax(szData) yazabilirsiniz.
6. Parametre: Seçeneğin ismi
Türü "string"
Seçeneğin ismi, buraya yazdığınız değişkende depolanır.
7. Parametre: 6. Parametredeki değişkenin uzunluğu
Türü "integer"
8. Parametre: Seçeneğin geriçağrım fonksiyonu
Türü "integer"
Seçeneğin geriçağrım fonksiyonunun indexi, buraya yazılan değişkende depolanır.
Return: Bu fonksiyon, işlem başarılı olursa 1'e, başarısız olursa 0'a döner.----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
menu_pages(menu)
Açıklama: Bu fonksiyon belirtilen menünün kaç sayfadan oluştuğunu verir.
1. Parametre: Menünün indexi
Türü "integer"
Return: Bu fonksiyonun değeri, menünün toplam sayfa sayısına döner.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
menu_items(menu)
Açıklama: Bu fonksiyon belirtilen menünün kaç adet seçenekten oluştuğunu verir.
1. Parametre: Menünün indexi
Türü "integer"
Return: Bu fonksiyonun değeri, menünün toplam seçenek sayısına döner.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
menu_find_id(menu, page, key)
Açıklama: Bu fonksiyon belirtilen sayfada, belirtilen tuştaki seçeneğin indexini verir.
1. Parametre: Menünün indexi
Türü "integer"
2. Parametre: Sayfa numarası
Türü "integer"
3. Parametre: Tuş
Türü "integer"
Return: Belirtilen adresteki seçeneğin indexine döner.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
menu_item_setname(menu, item, const name[])
Açıklama: Bu fonksiyon belirtilen seçeneğin görünen ismini değiştirir.
1. Parametre: Menünün indexi
Türü "integer"
2. Parametre: .Seçeneğin indexi
Türü "integer"
3. Parametre: Seçeneğin yeni ismi
Türü "string"
Return: Bu fonksiyon, işlem başarılı olursa 1'e, başarısız olursa 0'a döner.----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
menu_item_setcmd(menu, item, const info[])
Açıklama: Bu fonksiyon belirtilen seçeneğin ekstra bilgi değerini değiştirir.
1. Parametre: Menünün indexi
Türü "integer"
2. Parametre: .Seçeneğin indexi
Türü "integer"
3. Parametre: Seçeneğin yeni bilgisi
Türü "string"
Return: Bu fonksiyon, işlem başarılı olursa 1'e, başarısız olursa 0'a döner.----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
menu_addblank(menu, slot=1)
Açıklama: Bu fonksiyon belirtilen menüde iki seçenek arasına bir satır boşluk bırakmaya yarar.
1. Parametre: Menünün indexi
Türü "integer"
2. Parametre: Boşluk bırakma metodu
Türü "integer"
1 = Boşluk bırakır ve seçenekleri numaralandırırken 1 numara kaydırarak numaralandırır. Örneğin:
5. Seçenek 5
// BOŞLUK
7. Seçenek 6
0 = Boşluk bırakır ve seçenekleri numaralandırırken, numara sırasını bozmaz. Örneğin:
5. Seçenek 5
// BOŞLUK
6. Seçenek 6
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
menu_addtext(menu, const text[], slot=1)
Açıklama: Bu fonksiyon belirtilen menüde numarasız bir yazı ekler. Seçeneklerden bağımsızdır. Seçilemez.
1. Parametre: Menünün indexi
Türü "integer"
2. Parametre: Görünecek yazı
Türü "string"
3. Parametre: Yazı yazdırma metodu
1 = Yazı ekler ve seçenekleri numaralandırırken 1 numara kaydırarak numaralandırır. Örneğin:
5. Seçenek 5
Örnek Yazı
7. Seçenek 6
0 = Yazı ekler ve seçenekleri numaralandırırken, numara sırasını bozmaz. Örneğin:
5. Seçenek 5
Örnek Yazı
6. Seçenek 6
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
menu_cancel(player)
Açıklama: Bu fonksiyon belirtilen oyuncuya zorla MENU_EXIT seçtirir. Menü görüntülenmeye devam eder ancak seçim yaptığında işlemez.
1. Parametre: Oyuncu indexi
Türü "integer"
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
menu_makecallback(const function[])
Açıklama: Bu fonksiyon bir menü geriçağrım işleticisi yaratır.
1. Parametre: Fonksiyon ismi
Türü "string"
Return: Bu fonksiyon, yaratılan geriçağrım fonksiyonunun indexine döner.----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
menu_item_setcall(menu, item, callback = -1)
Açıklama: Bu fonksiyon belirtilen seçeneğin geriçağrım işleticisini ayarlar.
1. Parametre: Menünün indexi
Türü "integer"
2. Parametre: Seçeneğin indexi
Türü "integer"
3. Parametre: Geriçağrım fonksiyonunun bağlı olduğu değişken
Türü "integer"
Return: Bu fonksiyon, işlem başarılı olursa 1'e, başarısız olursa 0'a döner.
Örnekler:
Menüler local (yerel) ve global (küresel) olmak üzere ikiye ayrılır. Local menüler; tek kullanımlık, sadece kullanılacağı an yaratılan ve hemen kullanılıp yok edilen menülerdir. Global menüler ise plugin_init veya plugin_cfg forwardında bir defa olmak üzere yaratılır, tekrar tekrar yaratılmadan defalarca kez kullanılabilir.
Örnekleri sırayla okumanız önerilir. Bir örnekte anlatılan, sonraki örneklerde anlatılmayacaktır.
Local Menüler
Basit Menü
PHP- Kodu:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <fun>
public plugin_init() {
// Menümüzün açılması için konsola komut kaydettik.
register_clcmd("MenuAc","MenuFunc")
// Bu gerekli değil ancak yaratılmış bir menü nasıl açılır örnek olması açısından ekledim.
}
// A kısmı olarak anlattığımız, menünün oluşturulma fonksiyonunu yaratıyoruz.
public MenuFunc(id) {
// Menümüzü yaratmak için menu_create kullanıyoruz.
// En başta belirttiğimiz gibi, menu_create fonksiyonu, yaratılan menünün indexine döner demiştik.
// Öyleyse bu indexi, diğer fonksiyonlarda kullanabilmek için menu olarak yarattığımız değişkende depoluyoruz.
// Not: Fonksiyonların parametrelerini ayrı ayrı açıklamayacağım. Yukarıda tüm fonksiyonları anlattım zaten.
new menu = menu_create("\r Silah Menusu","MenuHandler")
// Menümüzü yarattık. Şimdi seçeneklerimizi eklemeliyiz.
menu_additem(menu,"AK47", "",ADMIN_BAN)
menu_additem(menu,"M4A1", "",ADMIN_BAN)
menu_additem(menu,"DEAGLE","",ADMIN_BAN)
// Seçenekler de eklendi. Şimdi sıra menünün özelliklerini ayarlamakta;
// Exit tuşuna basıldığında menümüzün kapanmasını istiyoruz. Bu durumda özelliği bu şekilde ayarlıyoruz.
menu_setprop(menu,MPROP_EXIT,MEXIT_ALL)
// Not: Bu ayar default olarak zaten MEXIT_ALL dır. Bu yüzden bunu tekrar yazmak gereksiz. Sadece örnek olması açısından ekledim.
// Menümüzün her şeyini ayarladık. Şimdi bu menüyü, fonksiyonu çalıştıran kişiye gösteriyoruz.
// Not: Eğer zaten ilk sayfayı göstericekseniz, menu_display(id,menu) yazmanız yeterli. Örnek olsun diye ekledim.
menu_display(id,menu,0)
}
// Ve B kısmı olarak anlattığımız bölüm. Yani menüde bir tuşa basıldığında işleyecek olan fonksiyon. Bu kısım menüyü işletir.
public MenuHandle(id, menu, item) {
// item = seçilen seçeneğin indexi demiştik. Seçilen seçeneğin indexinden yola çıkarak oyuncuya silah vereceğiz.
// seçenek indexleri 0 dan başlar. Yani birinci seçeneğin indexi 0 dır. İkinci seçeneğin 1, üçüncününki 2 şeklinde gider.
switch(item) {
case MENU_EXIT:{
// Eğer çıkış tuşuna basılmış ise, seçenek indexi MENU_EXIT olur.
client_print(id,print_chat,"Cikis Tusuna Bastiniz")
}
case 0: {
give_item(id,"weapon_ak47")
client_print(id,print_chat,"AK47 Aldiniz")
}
case 1: {
give_item(id,"weapon_m4a1")
client_print(id,print_chat,"M4A1 Aldiniz")
}
case 2: {
give_item(id,"weapon_deagle")
client_print(id,print_chat,"DEAGLE Aldiniz")
}
}
// Kişiye seçimine ait silahı verdik. Şimdi yarattığımız menüyü yok etme zamanı.
menu_destroy(menu)
return PLUGIN_HANDLED
}
Oyuncu Menüsü
PHP- Kodu:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
public plugin_init() {
register_clcmd("amx_revivemenu","MenuFunc")
}
public MenuFunc(id) {
new menu = menu_create("\r Canlandirmak Istediginiz Oyuncuyu Secin","MenuHandle")
// Oyunda olan oyuncuları buluyoruz.
new players[32],inum;
get_players(players,inum)
// Birkaç değişken de döngü içinde kullanmak için
/**
* Static değikenlerin, new ile yaratılanlarından farkı; her yeni değer atandığında yeninden yıkılıp yapılmamalarıdır. Basit bir örnekle:
* New ile yaratmış olsaydık: döngü içinde tempid tekrar tekrar yaratılacaktı.
* Static ile yaratırsak, döngü boyunca sadece değeri değiştirilecek.
* Kafa karıştırıcı buluyorsanız, bilmeseniz de olur. Sadece bu tür yerlerde bu şekilde kullanımının daha uygun olduğunu bilin yeterli.
**/
static tempid, name[32], szID[6];
for( new i ; i < inum ; i++ ) {
// yazım kolaylığı açısından indexi değişkene bağlıyoruz.
tempid = players[i];
// Eğer kişi canlı ise bu indexi atlıyoruz. Böylece zaten canlı olan kişiler menüde görünmeyecek.
if(is_user_alive(tempid)) continue;
// Seçenek ismi = kişinin ismi olucak. Bu yüzden ismi bulduruyoruz.
// Seçenek bilgisi = kişinin indexi olucak. Böylece menü işleticide direk indexden kişiyi canlandırıcaz.
// Fakat seçenek bilgisi başta belirttiğimiz gibi string olmak zorunda. Bu yüzden önce stringe çeviriyoruz.
get_user_name( tempid, name, 31)
num_to_str( tempid, szID, 5)
// Seçeneği ekliyoruz
menu_additem( menu, name, szID, ADMIN_SLAY )
}
menu_display(id, menu)
}
public MenuHandle(id, menu, item) {
// Eğer çıkışa basmışsa menüyü yok et.
if(item == MENU_EXIT) {
menu_destroy(menu)
return PLUGIN_HANDLED
}
// Basılan seçenek hakkında seçenek indexinden, seçeneğin diğer bilgilerini buldurmak için menu_item_getinfo kullandığımızı en başta göstermiştik
// Şimdi bu fonksiyon için gereken değişkenleri yaratıyoruz.
new szID[6], name[32];
new access, callback;
menu_item_getinfo( menu, item, access, szID, 5, name, 31, callback)
// Seçeneğin indexinden, seçeneğin bilgisini ( info[] ) bulduk. Bu bilgiyi kişinin indexi olarak kaydetmiştik
// Şimdi stringi fonksiyonlarda kullanmak için integer'a çeviriyoruz.
new Uid = str_to_num(szID);
// Eğer kişi oyundaysa ve hala ölüyse kişiyi canlandır.
if(is_user_connected(Uid) && !is_user_alive(Uid)) {
ExecuteHamB(Ham_CS_RoundRespawn,Uid)
}
menu_destroy(menu)
return PLUGIN_HANDLED
}
Oylama Menüsü
PHP- Kodu:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"
new oylar[2]; // Oy sayılarını depolayacak olan değişken
new szSecenekler[2][32]; // Oylanan seceneklerin isimlerini depolayacak olan değişken
new bool:oylama_var; // Oylama olup olmadığını gösteren değişken
public plugin_init() {
register_concmd("amx_vote","cmdVote",ADMIN_VOTE,"<1.secenek> <2.secenek>")
}
public cmdVote(id,level,cid) {
if(!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED
// Eğer oylama varsa, çağrıyı durdur.
if(oylama_var) {
console_print(id,"Zaten Bir Oylama Var")
return PLUGIN_HANDLED
}
// Tüm değişkenleri sıfırla. Önceki oylamadan kalanlar sıfırlanmalı.
oylar[0] = 0;
oylar[1] = 0;
szSecenekler[0][0] = 0;
szSecenekler[1][0] = 0;
// Oylama başladığı için bu değişken true
oylama_var = true;
// Konsolda girilen komutun parametrelerini oku.
new arg1[32],arg2[32];
read_argv(1,arg1,31)
read_argv(2,arg2,31)
// Seçenekleri değişkende depola
copy(szSecenekler[0],31,arg1)
copy(szSecenekler[1],31,arg2)
// Oylama menüsünü yarat
new menu = menu_create("\r Oylama:\y Birini Secin","MenuHandle")
// Oylanacak seçenekleri ekle
menu_additem(menu, arg1, "")
menu_additem(menu, arg2, "")
// Çıkış tuşunu kaldıralım. Böylece herkes oy kullanmak zorunda olsun.
menu_setprop(menu,MPROP_EXIT,MEXIT_NEVER)
// Herkese menüyü gösterelim
new players[32],inum;
get_players(players,inum)
for(new i; i<inum; i++) {
menu_display(players[i],menu)
}
// 15 saniye sonra oylama bitsin ve sonuç açıklansın
set_task(15.0,"OylamaBitir",menu)
return PLUGIN_HANDLED
}
public MenuHandle(id, menu, item) {
// Eğer oylama bitmiş ise, girilen seçenekler geçersiz kabul edilsin.
if(!oylama_var) return PLUGIN_HANDLED
// Oylanan seçeneğin indexine +1 oy.
oylar[item]++;
// Not: Burada sakın menu_destroy kullanmayın. Yoksa ilk oy kullanandan sonra herkesde menü kapanır.
return PLUGIN_HANDLED
}
public OylamaBitir(menu) {
// Oylamayı kapatalım
oylama_var = false;
// Karşılaştırmalar
if(oylar[0] > oylar[1]) {
client_print(0,print_chat,"[Oylama Bitti] Kazanan Secenek: %s",szSecenekler[0])
}
else if( oylar[0] < oylar[1]) {
client_print(0,print_chat,"[Oylama Bitti] Kazanan Secenek: %s",szSecenekler[1])
}
else {
client_print(0,print_chat,"[Oylama Bitti] Iki Secenek Esit Oy Aldi")
}
// Ve menüyü yok edelim.
menu_destroy(menu)
return PLUGIN_HANDLED
}
Alt Menü
PHP- Kodu:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("MenuAc","AnaMenu")
}
public AnaMenu(id) {
new menu = menu_create("\r Ana Menu","AnaMenuHandle")
menu_additem(menu, "Secenek 1","")
menu_additem(menu, "Alt Menu","")
menu_display(id,menu)
return PLUGIN_HANDLED
}
public AnaMenuHandle(id, menu, item) {
switch(item) {
case 0: {
// Secenek 1'e basıldı.
}
case 1: {
// Alt Menü Fonksiyonunu çalıştıralım
AltMenu(id);
}
}
menu_destroy(menu)
return PLUGIN_HANDLED
}
public AltMenu(id) {
new menu = menu_create("\r Alt Menu","AltMenuHandle")
menu_additem(menu, "Alt Secenek 1","")
menu_additem(menu, "Alt Secenek 2","")
// Çıkış tuşunun ismini "Geri" yapalım. Böylece bu tuşa basıldığında, kişi ana menüye geri döneceğini anlasın.
menu_setprop(menu,MPROP_EXITNAME,"Geri")
menu_display(id,menu)
}
public AltMenuHandle(id, menu, item) {
switch(item) {
case 0: {
// Alt Secenek 1 e basıldı
}
case 1: {
// Alt Secenek 2 ye basıldı
}
case MENU_EXIT: {
// Çıkışa basıldı. Yani "Geri" yazan tuşa basıldı.
// Öyleyse ana menüye geri dönelim
AnaMenu(id)
}
}
menu_destroy(menu)
return PLUGIN_HANDLED
}
Birden Çok Menüye Bir İşletici Bağlamak
PHP- Kodu:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"
public plugin_init() {
register_clcmd("MenuAc","AnaMenu")
}
public AnaMenu(id) {
new menu = menu_create("\r Ana Menu","GlobalHandle")
// Menü işleticisinde basılan tuş ana menünün mü alt menünün mü ayırt etmek için seçenek bilgisi kısmına
// Burada "a" diğer menüde "b" yazalım.
menu_additem(menu, "Secenek 1","a")
menu_additem(menu, "Secenek 2","a")
menu_additem(menu, "Alt Menu","a")
menu_display(id,menu)
}
public AltMenu(id) {
// Menü işleticisi, Ana menü işleticisiyle aynı.
new menu = menu_create("\r Alt Menu","GlobalHandle")
menu_additem(menu, "Secenek 1","b")
menu_additem(menu, "Secenek 2","b")
menu_display(id,menu)
}
public GlobalHandle(id, menu, item) {
if(item == MENU_EXIT) {
menu_destroy(menu)
return PLUGIN_HANDLED
}
// Hangi menünün tuşuna basıldığını öğrenmek için, seçenek bilgisi almamız gerek.
new data[6],name[32];
new access, callback;
menu_item_getinfo(menu,item,access,data,5,name,31,callback)
// Seçenek bilgisinin ilk karakterine göre switch alalım.
switch(data[0]) {
case 'a': {
// Ana Menü seçeneğidir.
switch(item) {
case 0:{
// Seçenek 1 e basıldı
}
case 1:{
// Seçenek 2 ye basıldı
}
case 2:{
// Alt Menu ye basıldı
AltMenu(id)
}
}
}
case 'b': {
// Alt Menü seçeneğidir.
switch(item) {
case 0:{
// Seçenek 1 e basıldı
}
case 1:{
// Seçenek 2 ye basıldı
}
}
// İlgili tuşa ait fonksiyonlar işletildikten sonra AnaMenu ye geri dönelim.
AnaMenu(id)
}
}
menu_destroy(menu)
return PLUGIN_HANDLED
}
Geriçağrım ( Callback )
Öncelikle biraz geriçağrımın ne olduğunu anlatayım. Geriçağrım, menüdeki seçenekleri belirli kurallar çerçevesinde devre dışı bırakmak veya aktif etmek için kullanılır. Örneğin devre dışı bırakılmış bir seçenek, menüde sönük renkte (yarı saydam beyaz) görünür ve hiçbir şekilde basılamaz.
PHP- Kodu:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
new gMenuCallBack; // Geriçağrım fonksiyonunu tutacak değişken.
public plugin_init() {
register_clcmd("amx_revivemenu","MenuFunc")
// Geriçağrım fonksiyonu yarattık. Daha sonra istediğimiz seçeneğe bu geriçağrımı göstericez
// Böylece o seçeneğin aktifliği bu fonksiyonun sonucuna göre belirlenicek.
gMenuCallBack = menu_makecallback("MenuCallBack")
}
public MenuFunc(id) {
// Normal oyuncu menüsü yaratıyoruz.
new menu = menu_create("\r Oyuncu Secin","MenuHandle")
new players[32],inum;
get_players(players,inum)
static tempid, name[32], szID[6];
for(new i; i<inum ; i++) {
tempid = players[i];
get_user_name(tempid,name,31)
num_to_str(tempid,szID,5)
// Seçeneği geriçağrım fonksiyonuna bağladık. Bundan sonra geriçağrım ne derse, seçenek onu yapıcak.
menu_additem(menu, name, szID, ADMIN_SLAY, gMenuCallBack)
}
menu_display(id,menu)
return PLUGIN_HANDLED
}
public MenuHandle(id, menu, item) {
// İşletici kısmında bir değişiklik yok.
if(item == MENU_EXIT) {
menu_destroy(menu)
return PLUGIN_HANDLED
}
new szID[6], name[32];
new access, callback;
menu_item_getinfo(menu, item, access, szID, 5, name, 31, callback)
new Uid = str_to_num(szID);
if(is_user_connected(Uid) && !is_user_alive(Uid)) {
ExecuteHamB(Ham_CS_RoundRespawn,Uid)
}
menu_destroy(menu)
return PLUGIN_HANDLED
}
public MenuCallBack(id, menu, item) {
// Basılan seçeneğin özelliklerini toplayalım
new szID[6], name[32];
new access, callback;
menu_item_getinfo(menu, item, access, szID, 5, name, 31, callback)
new Uid = str_to_num(szID);
// Eğer seçenekteki kişi canlı ise, seçenek deaktif olsun. Yani basılamasın ve rengi soluk görünsün.
if(is_user_alive(Uid)) return ITEM_DISABLED
// Eğer canlı değilse seçeneğe dokunma.
// Not: Eğer ITEM_ENABLED dersek, kişinin erişim yetkisi olmasa bile seçeneği aktif ettiğimizden dolayı herkes basabilir.
// Bu yüzden seçeneğe dokunma diyoruz :)
return ITEM_IGNORE
}
Global Menü
PHP- Kodu:
#include <amxmodx>
#include <amxmisc>
new gMenu; // Global menümüzün indexini bu değişkende depolayacağız
public plugin_init() {
register_clcmd("MenuAc","MenuShow")
// Menüyü pluginler yüklenirken yaratalım
gMenu = menu_create("\r Global Menu","MenuHandle")
menu_additem(gMenu, "Secenek 1","")
menu_additem(gMenu, "Secenek 2","")
menu_additem(gMenu, "Secenek 3","")
}
public MenuHandle(id, menu, item) {
switch(item) {
case 0: {
// Secenek 1 e basıldı
}
case 1: {
// Secenek 2 ye basıldı
}
case 2: {
// Secenek 3 e basıldı
}
}
return PLUGIN_HANDLED
}
public MenuShow(id) {
// İsteyene menüyü gösterelim
menu_display(id, gMenu)
}
// NOT: Eğer herhangi bir yerde menu_destroy kullanırsak, kimse bir daha bu menüyü açamaz. Menü silinir.
Ekstra Notlar:
--> Menüyü renklendirirken kullanabileceğiniz renk kodları:
\r - Kırmızı
\y - Sarı
\w - Beyaz
\d - Deaktif rengi / yarı saydam beyaz
--> Yazıları sağa dayalı yapmak için:
\R
--> Bir menü, eğer hiç seçenek eklenmemiş ise kendini göstermeyecektir.
--> Global menüler, local menüler gibi tekrar tekrar yaratıp, yok etme gerektirmez. Bu yüzden performansı daha yüksektir. Daha az CPU tüketir.
--> 10 Seçenek birden göstermek ve Geri, İleri, Çıkış tuşlarını kaldırmak için:
menu_setprop(menu, MPROP_PERPAGE, 0)