Enviar respuesta 
[TUT] Tutorial de menues.
Autor Mensaje
[Anti] Sin conexión
Miembro Sr.


Mensajes: 725
Registro en: Oct 2013
Reputación: 20
Mensaje: #1
[TUT] Tutorial de menues.
Hola, les dejo un tuto de como hacer varios tipos de menu y otras herramientas.
Tienen que tener una base en scripting de pawn.

Creo que esta bastante bien explicado, cualquier duda consulten.


Sistema Nuevo
Código PHP:
#include <amxmodx>

public plugin_init()
{
    
register_plugin("Menu Basico""1.0""[Anti]");
    
register_clcmd"say /menu""cmdMenu" );
}

public 
cmdMenu(id)
{
    new 
gMenu menu_create("\rHola soy un menu""handlerMenu")
    
//creamos el menu en la variable 'Menu' con el titulo 'Hola soy un menu'
    //que segun la opcion que elija el usuario va a llamar a la funcion 'handlerMenu'
    
    
menu_additem(gMenu"\wOpcion #1""1")    //Blanco = \w
    
menu_additem(gMenu"\dOpcion #2""2")    //Transparente = \d
    
menu_additem(gMenu"\yOpcion #3""3")    //Amarillo = \y
                                            //Rojo = \r
    //adderimos opciones al menu 'Menu' y le ponemos el numero de opcion
    
    
menu_display(idgMenu0)
    
//aca le mostramos el menu 'Menu' al 'id'(indice de player) que queramos.
    //el '0' es la pagina del menu que le vamos a mostrar.
}

public 
handlerMenu(idmenuitem)        //los parametros deben ir en este orden
{
    if ( 
item == MENU_EXIT )    //si el item seleccionado es igual a '0'(Exit[Salir])
    
{
        
menu_destroy(menu)        //destruimos el menu
        
return PLUGIN_HANDLED;    //y returnamos la funcion
    
}
    switch(
item)    //hacemos un swicheo de los posibles resultados:
    
{
        case 
0:        //en caso de que precione 1: le mandamos un msj
        
{
            
client_print(idprint_center"HOLA SOY LA OPCION #1.")
        }
        case 
1:        //en caso de que precione 2: le mandamos otro msj
        
{
            
client_print(idprint_center"HOLA SOY LA OPCION #2.")
        }
        case 
2:        //en caso de que precione 3: le mandamos otro msj
        
{
            
client_print(idprint_center"HOLA SOY LA OPCION #3 MUAJAJAJA(?.")
        }
    }
    return 
PLUGIN_HANDLED;    // returnamos la funcion...



Sistema Viejo
Código PHP:
#include <amxmodx>
#include <amxmisc>

new KEYSMENU MENU_KEY_0 MENU_KEY_1 MENU_KEY_2;

public 
plugin_init()
{
    
register_plugin("Menu con Len""1.0""[Anti]");
    
register_clcmd"say /menu""cmdOtroMenu");
    
register_menu("Menu"KEYSMENU"HandMenu");
    
//registramos el menu 'Menu', con las teclas KEYSMENU
    //y el handler que al que va a llamar 'HandMenu'
}

public 
cmdOtroMenu(id)
{
    new 
menu[100], len;
    
// 'menu' es donde se va a alojar el string del menu,
    // en este caso le damos 99 celdas para sus caracteres

    
len 0;
    
    
len += formatex(menu[len], sizeof menu len"\r Menu:^n");
    
len += formatex(menu[len], sizeof menu len"\y[1]\wOpcion #1^n");
    
len += formatex(menu[len], sizeof menu len"\y[2]\wOpcion #2^n^n");
    
len += formatex(menu[len], sizeof menu len"\r[0]\wSalir");
    
    
show_menu(idKEYSMENUmenu, -1"Menu");
    
//mostramos el menu al 'id' deseado, con las teclas ya definidas, el menu 'menu'
    //el timpo es lo que tarda el menu en cerrarse en este caso -1 que es infinito, como lo registre en el init 'Menu')
}

public 
HandMenu(idkeysmenu)        //los parametros deben ir en este orden
{
    switch(
keys)    //hacemos un swicheo de los posibles resultados:
    
{
        case 
0:    client_print(idprint_chat"HOLA SOY LA OPCION #1");        //en caso de que precione 1: le mostramos el menu 'gMenu', en la pagina '0'
        
case 1:    client_print(idprint_center"HOLA SOY LA OPCION #2");    //en caso de que precione 2: le mandamos un msj
        
case 9:    menu_destroy(menu)        //en caso de que precione 0: le destruimos el menu...
    
}



2 Menus 1 Handled
Código PHP:
#include <amxmodx>

public plugin_init()
{
    
register_plugin"2 Menus 1 Handled""1.0""[Anti]" );
    
register_clcmd("say /menu""cmdMenu");
}

public 
cmdMenu(id)
{
    if ( 
get_user_team(id) == )        //Si es del team TT.
        
Menu_TT(id);                    //Mandamos al Menu TT.
    
else if ( get_user_team(id) == )    //Si es del team CT.
        
Menu_CT(id);                    //Mandamos al Menu TT.
}

public 
Menu_TT(id)
{
    new 
menu menu_create("\rMenu TT:""handMenu");
    
    
menu_additem(menu"Opcion 1#""T");
    
menu_additem(menu"Opcion 2#""T");
    
menu_additem(menu"Opcion 3#""T");
    
    
menu_display(idmenu0);            //Mostramos el menu
}

public 
Menu_CT(id)
{
    new 
menu menu_create("\rMenu CT:""handMenu");
    
    
menu_additem(menu"Opcion 1#""C");
    
menu_additem(menu"Opcion 2#""C");
    
menu_additem(menu"Opcion 3#""C");
    
    
menu_display(idmenu0);            //Mostramos el menu
}

public 
handMenu(idmenuitem)
{
    if ( 
item == MENU_EXIT )            //si el item seleccionado es igual a '0'(Exit[Salir])
    
{
        
menu_destroymenu );            //destruimos el menu.
        
return PLUGIN_HANDLED;            //Returnamos la funcion.
    
}
    
    new 
szData[2];
    new 
item_accessitem_callback;
    
menu_item_getinfomenuitemitem_accessszData,charsmaxszData ), __item_callback );
    
//obtenemos informacion del menu y el item elegido.
    
    
switch( szData[0] )        //Vemos la letra que hay en la primera celda de szData
    
{
        case 
'T':            //En este caso si es "T".
        
{
            switch( 
item )    //Switch del Menu TT
            
{
                case 
0:    {}// Opcion 1# TT's
                
case 1:    {}// Opcion 2# TT's
                
case 2:    {}// Opcion 3# TT's
            
}
        }
        case 
'C':            //En este caso si es "C".
        
{
            switch( 
item )    //Switch del Menu CT
            
{
                case 
0:    {}// Opcion 1# CT's
                
case 1:    {}// Opcion 2# CT's
                
case 2:    {}// Opcion 3# CT's
            
}
        }
    }
    
menu_destroy(menu);        //Destruimos el menu
    
return PLUGIN_HANDLED;    //Returnamos el Handled



Diferentes natives(solo para el sistema nuevo)
Código PHP:
//Establece propiedades en un menu. Propiedades:
#define MPROP_PERPAGE        /* Numero de items en cada pagina (default 7)*/
#define MPROP_BACKNAME        /* Nombre del boton "Back" */
#define MPROP_NEXTNAME        /* Nombre del boton "Next" */
#define MPROP_EXITNAME        /* Nombre del boton "Exit" */
#define MPROP_TITLE            /* Establece el titulo de un menu */
#define MPROP_EXIT            /* Establece la funcion del exit con MEXIT_NEVER(no aparece la opcion exit) y MEXIT_ALL(aparece la opcion exit[default]) */
#define MPROP_NOCOLORS        /* Establece si los colores son automaticos */
#define MPROP_NUMBER_COLOR    /* Establece el color de los numeros(default rojo) */

menu_setprop(menuprop, ...);


//Cancela el menu de un player.
menu_cancel(player);

//Adiere una linea de texto al menu.
menu_addtext(menu, const text[], slot=1);

//Adiere un espacio en blanco al menu.
menu_addblank(menuslot=1);

//Destruye el menu.
menu_destroy(menu);

//Establece un texto para un item.
menu_item_setname(menuitem, const name[]);

//Obtiene el indice de item del menu y la pagina indicada(devuelve menor a 0 si es un item especial como MENU_EXIT)
menu_find_id(menupagekey);

//Muestra a una player un menu.
menu_display(idmenupage=0);

//Obtiene la cantidad de items en un menu.
menu_items(menu);

//Obtiene la cantidad de paginas en un menu.
menu_pages(menu); 
(Este mensaje fue modificado por última vez en: 08/12/2014 05:51 PM por [Anti].)
08/11/2013 07:09 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Cootto Sin conexión
Miembro


Mensajes: 162
Registro en: Oct 2013
Reputación: 0
Mensaje: #2
RE: [TUT] Tipos de menues
como hago para que cuando ponga la opcion salir, vuelva al menu principal si es que estoy en un submenu
09/11/2013 02:50 AM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
LA BANDA Sin conexión
Miembro


Plugin developer
Mensajes: 200
Registro en: Oct 2013
Reputación: 1
Mensaje: #3
RE: [TUT] Tipos de menues
Vease: if ( item == MENU_EXIT ) le das al menu que quieres returnar y le returneas.



Anti: en cuanto a tu opinion que menu es mejor y porque?



Buen tutorial
09/11/2013 05:01 AM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
[Anti] Sin conexión
Miembro Sr.


Mensajes: 725
Registro en: Oct 2013
Reputación: 20
Mensaje: #4
RE: [TUT] Tipos de menues
LA BANDA: dependiendo, si es un menu ordinario sin necesidad de incertar una variable preferiria el primer metodo por comodidad, si es necesaeio mostrar un string o numero des preferible el segundo metodo. Mas alla de eso no hay muchas diferencias ni por optimizacion ni nada. Gracia Sonrisa
09/11/2013 06:16 AM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Metrikcz Sin conexión
Miembro Destacado


Plugin developer
Mensajes: 827
Registro en: Oct 2013
Reputación: 19
Mensaje: #5
RE: [TUT] Tipos de menues
Para mi siempre es el mejor el primero, uso formatex y ya y para que no se puedan salir de un menu es algo asi:

menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER)

Es algo asi pero deseguro lo escribi mal pruebalo.

Todos los MODS VHL totalmente gratuitos Descarga Aqui

Mis plugins:
FB: fb.com/rwoong
Venta plugins a pedido en México mándame MP
09/11/2013 11:35 AM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
RauliTop Sin conexión
Miembro Héroe


El protector 1k
Mensajes: 1,955
Registro en: Oct 2013
Reputación: 36
Mensaje: #6
RE: [TUT] Tipos de menues
cuando aprietas exit no hace falta mandar menu_destroy, con el return ya te cierra el menú

(17/04/2015 03:36 PM)Neeeeeeeeeel.- escribió:  No se va a volver a conectar a internet en toda su puta vida... nadie sube porno a mi foro y vive para contarlo.
09/11/2013 02:03 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
alan_el_more Sin conexión
Miembro Destacado


Plugin developer
Mensajes: 986
Registro en: Oct 2013
Reputación: 16
Mensaje: #7
RE: [TUT] Tipos de menues
(09/11/2013 02:03 PM)RauliTop escribió:  cuando aprietas exit no hace falta mandar menu_destroy, con el return ya te cierra el menú



En realidad si es necesario para liberar memoria


Ni te molestes en enviarme un mensaje privado para pedirme ayuda porque NO lo voy a contestar.
Gracias por su atención.
09/11/2013 02:08 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
RauliTop Sin conexión
Miembro Héroe


El protector 1k
Mensajes: 1,955
Registro en: Oct 2013
Reputación: 36
Mensaje: #8
RE: [TUT] Tipos de menues
(09/11/2013 02:08 PM)alan_el_more escribió:  
(09/11/2013 02:03 PM)RauliTop escribió:  cuando aprietas exit no hace falta mandar menu_destroy, con el return ya te cierra el menú

En realidad si es necesario para liberar memoria

Rainbow

es verdad, https://forums.alliedmods.net/showthread.php?t=187159

no sabia, pero si lo vas a utilizar más de 1 vez (como es el caso de la mayoría de los menús) no se debe hacer

(17/04/2015 03:36 PM)Neeeeeeeeeel.- escribió:  No se va a volver a conectar a internet en toda su puta vida... nadie sube porno a mi foro y vive para contarlo.
(Este mensaje fue modificado por última vez en: 09/11/2013 03:14 PM por RauliTop.)
09/11/2013 03:12 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
[Anti] Sin conexión
Miembro Sr.


Mensajes: 725
Registro en: Oct 2013
Reputación: 20
Mensaje: #9
Re: RE: [TUT] Tipos de menues
(09/11/2013 11:35 AM)Metrikcz escribió:  Para mi siempre es el mejor el primero, uso formatex y ya y para que no se puedan salir de un menu es algo asi:
menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER)
Es algo asi pero deseguro lo escribi mal pruebalo.

No estoy en la pc ahora pero si, era algo asi, con menu_set_prop podes editar varias cosas del menu.
Ej: el nombre del Exit, los numeros al lado de cada item, el nombre del next y back y algunas cosas mas.
09/11/2013 03:29 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
alan_el_more Sin conexión
Miembro Destacado


Plugin developer
Mensajes: 986
Registro en: Oct 2013
Reputación: 16
Mensaje: #10
RE: [TUT] Tipos de menues
Lo que hago yo es crear un menu solo una vez con el índice del menu global, así te ahorras el llamado de las natives para crear el menu cada vez que lo queres mostrar


Ni te molestes en enviarme un mensaje privado para pedirme ayuda porque NO lo voy a contestar.
Gracias por su atención.
09/11/2013 03:33 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Enviar respuesta 


Salto de foro:


Usuario(s) navegando en este tema: 1 invitado(s)

Contáctanos | Allied Modders en español | Volver arriba | Volver al contenido | Archivo (Modo simple) | Sindicación RSS