Jump to content

- Advertisement -
Photo

[CS16-Scripting] Creare meniu


  • Please log in to reply
No replies to this topic

#1
Andrei;

Andrei;

    Administrator

  • Administrator
  • 3201 posts
  • 398 topics
  • Joined 16-December 12
  • Country: Country Flag

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.

 


  • appLy^NxT likes this




2 user(s) are reading this topic

0 members, 2 guests, 0 anonymous users