Un lucru destul de interesant este ca puteam realiza meniuri. Exista 2 stiluri: cel vechi si cel nou. Cel nou este mult mai puternic si mai usor de explica, folosit, inteles, asa ca despre el vom discuta.
#include <amxmodx> public plugin_init() { //un meniu poate sa fie afisat si fara comanda, este doar un exemplu register_clcmd( "say /menu", "ClCmdMenu"); } public ClCmdMenu( id ) { //Declaram variabila menu care va retine meniul nostru //menu_create( titlu, handler ) creeaza un meniu nou //titlul este Titlul meniului //handler este publicul chemat cand un player apasa un item in meniu new menu = menu_create( "Primul meu meniu", "menu_handler" ); //Acum avem un meniu dar nu are niciun item, hai sa adaugam 2 //menu_additem( menu, item, data, acces, callback ) //menu este meniul nostru //item este numele itemului. Itemele sunt numerotate automat //data este un parametru neglijabil //acces ne permite sa setam un anumit acces de admin pentru acel item //daca punem 0, atunci itemul este disponibil pentru toti playerii menu_additem( menu, "Item1", "", 0 ); menu_additem( menu, "Item2", "", 0, ADMIN_LEVEL_H); //menu_setprop seteaza o proprietate a meniului //menu este meniul nostru //MPROP_EXIT pe care vrem sa o modificam //MEXIT_ALL este proprietatea MPROP_EXIT //setand MEXIT_NEVER va face ca optiunea de inchidere a meniului sa dispara //nu este obligatoriu sa adaugam menu_setprop pentru MEXIT_ALL, este default menu_setprop( menu, MPROP_EXIT, MEXIT_ALL ); //Acum ca avem un meniu, trebuie sa il aratam playerului //id este playerul caruia ii aratam meniul //menu este meniul pe care il aratam // 0 este pagina de la care pornim menu_display( id, menu, 0 ); } public menu_handler( id, menu, item )//chemat cand un item e apasat { //id este indexul celui care apasa itemul //menu este meniul //item este itemul apasat. Putem verifica si cu if(item == 0 ) //dar este mai optimizat daca folosim switch //primul item din meniu este mereu 0 switch( item ) { case 0: { //a apasat primul item } case 1: { //a pasat cel de-al doilea item } } menu_destroy( menu );//distruge meniul menu return PLUGIN_HANDLED;//oprim functia }
Explicatiile le aveti in cod, cred ca e cel mai simplu de inteles asa.
Cateva notiuni pe care nu le-am explicat:
- CallBack: ce sa se execute cand un item e apasat, putem de exemplu sa verificam daca are bani si sa dezactivam itemul intr-un stil mai elegant, decat sa adaugam verificarea in fiecare item.
- Puteti inregistra mai multe meniuri cu acelasi handler
- Daca vreti sa faceti un meniu care nu se schimba in functie de player, il puteti crea in plugin_cfg si sa il salvati intr-o variabila globala, apoi sa folositi menu_display cand e nevoie.
- menu_destroy distruge un meniu, pentru a il inchide folositi menu_cancel( util in cazul de mai sus)
- Culorile pentru un meniu sunt: alb(\w), galben(\y), rosu(\r), gri(\d)
- Puteti adauga spatii goale intre iteme pentru a face meniul mai aerisit cu menu_addblank
- show_menu( id, 0, "^n", 1 ) va inchide un meniu.
- Pentru a lasa un rand intre itemele unui meniu se mai poate utiliza ^n
- menu_setprop( menu, MPROP_PERPAGE, 0 ) sterge butoanele next,back,exit, astfel puteti afisa 10 iteme pe pagina, in loc de 7
- Daca nu adaugati iteme intr-un meniul el nu se va afisa.
- In handler este bine sa verificati daca userul e conectat cand folositi menu_cancel.