[API] OldMenu 1.2 (update 2016 subido el 2020)
#1
Una simple API para crear menus old style fácilmente.

Código PHP:
stock oldmenu_register()

stock oldmenu_create(const handler[], const title[], any:...)

stock oldmenu_additem(itemnumvalue, const item[], any:...)

stock oldmenu_display(idpage=1display_time=-1)

// fix bug en amxx <= 1.8.2
stock fix_pdata_menu(id)

stock oldmenu_calculate_pages(&maxpages, &start, &end, &page, const maxitems, const perpage=7, const start_offset=0)

// 1.2-2016

// Agrega las opciones de Atras/Siguiente/Salir
stock oldmenu_pagination(pagemaxpagesseparation=true)

stock oldmenu_addtext(const item[], any:...)


// lo olvide, pero por lo que puedo ver devuelve un valor positivo si el menu que el jugador esta mirando esta hecho por esta api
stock oldmenu_current_menu(id

Ejemplo:
Código PHP:
#include <amxmodx>
#include <api_oldmenu>

public plugin_init()
{
 
oldmenu_register()
 
 
register_clcmd("say /menu1""show_menu_test")
 
register_clcmd("say /menu2""show_menu_players")
}

public 
show_menu_test(id)
{
 
oldmenu_create("menu_test""\rTest OldMenu %s:""api")
 
 
oldmenu_additem(15"\r%d. \wItem 1"1)
 
oldmenu_additem(29"\r%s. \wItem 2""2")
 
oldmenu_additem(388"\r3. \wItem 3")
 
oldmenu_additem(4, -51"\r4. \wItem 4")
 
oldmenu_additem(-10"\d5. Item DISABLED")
 
oldmenu_additem(-10"Hola!!")
 
 
oldmenu_additem(0MENU_EXIT"^n\r0.\wSalir")
 
 
oldmenu_display(id)
}

public 
menu_test(iditemnumvaluepage)
{
 
client_print(idprint_chat"itemnum: %d - value: %d - page: %d"itemnumvaluepage)
}

public 
show_menu_players(idpage)
{
 new 
maxpagesstartend
 oldmenu_calculate_pages
(maxpagesstartendpageget_maxplayers())
 
oldmenu_create("menu_players""\rPlayers: %d/%d"pagemaxpages)
 
 new 
name[32]
 
 for(new 
i=1+startcount=1<= endi++, count++)
 {
 if(!
is_user_connected(i)) continue
 
 
get_user_name(iname31)
 
oldmenu_additem(counti"\r%d. \w%s"countname)
 }
 
 if(
page 1oldmenu_additem(80"^n\r8. \wAtras")
 else 
oldmenu_additem(-10"^n\d8. Atras")
 if(
page maxpagesoldmenu_additem(90"\r9. \wSiguiente")
 else 
oldmenu_additem(-10"\d9. Siguiente")
 
oldmenu_additem(00"\r0. \wSalir")
 
 
oldmenu_display(idpage)
}

public 
menu_players(iditemnumvaluepage)
{
 if(
itemnum == 0)
 return

 if(
itemnum == 8)
 {
 
show_menu_players(idpage-1)
 return
 }
 
 if(
itemnum == 9)
 {
 
show_menu_players(idpage+1)
 return
 }
 
 new 
name[32]
 
get_user_name(valuename31)
 
client_print(idprint_chat"playerid: %d - name: %s"valuename)



Solo lo recomiendo para usar con menúes dinámicos donde tengan que regenerar el menu todo el tiempo. Si es estático recomiendo usar el newmenu creándolo solo una vez.


Archivos adjuntos
.inc   oldmenu.inc (Tamaño: 4.88 KB / Descargas: 229)
Responder
#2
Buenisimo, lo probare... pero consume mas o menos que el menu_additem o menu len?
Responder
#3
menu_additem = newmenu
menu len = oldmenu

esta api es lo mismo que usar show_menu con los formatex (oldmenu)
consume menos que el newmenu cuando es un menu dinamico.
Responder
#4
menos ? o.O

yo prefiero el new menu es mas facil de manejar, aparte yo los creo una vez y a lo sumo si la funcion tiene un parametro creo las demas cosas en plugin_init y solo modifico lo que quiero xD

Edit: en mi caso la diferencia es nula, este api seria util en menus como he visto que hacen mucho en el foro que llaman a la funcion y todas las natives cada tanto, ej: show_menu_hola(id) y ahi editan los props y eso.

PD: no me expreso muy bien, buen aporte destro e.e.
Ingeniero agrónomo y desarrollador de Software.

tutoriales-allied
buscas un zp?

"La imitación es la forma más sincera de admiración con la que puede pagar la mediocridad a la grandeza"

Merci Alliedmodders pour m'introduire dans la programmation.
Responder
#5
Como haría para poner un ítem sin numero como
Código PHP:
len += formatex(menu[len], charsmax(menu) - len"Si apretas el 1, moris")
len += formatex(menu[len], charsmax(menu) - len"\r1.\w Morir")
len += formatex(menu[len], charsmax(menu) - len"\r2.\w Vivir"
seria
Código PHP:
oldmenu_additem(-1, -1"Si apretas el 1, moris"
??
(19/06/2014, 11:08 PM)01011001 escribió: No tiene niveles infinitos, llega hasta 2147483648 (Y despues hace un integer overflow)

(19/06/2014, 11:08 PM)[R]ak escribió: Mis conocimientos aumentaron un 500% con este post
Responder
#6
No es mas facil usar el show_menu con el len y listo -.-

Mas halla de eso a alguien le puede ser vastante util, en mi caso prefiero usar el nuevo menu y en otros casos el len. Gracias destro.
Responder
#7
(06/04/2014, 11:06 PM)Kane escribió: Como haría para poner un ítem sin numero como
Código PHP:
len += formatex(menu[len], charsmax(menu) - len"Si apretas el 1, moris")
len += formatex(menu[len], charsmax(menu) - len"\r1.\w Morir")
len += formatex(menu[len], charsmax(menu) - len"\r2.\w Vivir"
seria
Código PHP:
oldmenu_additem(-1, -1"Si apretas el 1, moris"
??
si lo que querés es algo como menu_addtext si.
value puede ser cualquier cosa,no se usa cuando itemnum es -1
Responder
#8
Update 1.1

Nuevo:
Código PHP:
/*Registra el menu base. Llamar en plugin_init() */
stock oldmenu_register()

/*Soluciona el bug con m_iMenu */
stock fix_pdata_menu(id

Mejorado:
Código PHP:
/*Se agrego start_offset*/
stock oldmenu_calculate_pages(&maxpages, &start, &end, &page, const maxitems, const perpage=7, const start_offset=0
Responder
#9
Lo vengo usando hace rato!
Esta muy bueno, me facilito la vida esta API Sonrisa

Podrias darme un ejemplo de como haria un top de jugadores con estos stocks ? por que intente y no pude o sino tengo que hacer una re complicacion con los for's y seguramente este todo mal. De igual manera uso el motd de tu otra publicacion :p pero quisiera saber como se haria con esta api.
Responder
#10
en contre un error ya que empeze a usarlo
Código PHP:
oldmenu_additem(15"\r%d. \wItem 1"1
-------------->
Código PHP:
oldmenu_additem(15"\r%d. \wItem 1""1"
muy bueno ya lo empeze a usar y me gusta.
Crab Crab Crab Crab
Responder
#11
(05/10/2014, 10:19 AM)ivan escribió: en contre un error ya que empeze a usarlo
Código PHP:
oldmenu_additem(15"\r%d. \wItem 1"1
-------------->
Código PHP:
oldmenu_additem(15"\r%d. \wItem 1""1"
muy bueno ya lo empeze a usar y me gusta.

El %d se usa para numeros, el %s para strings.
Esta bien como lo hizo Destro.
Ejemplo:
Código PHP:
oldmenu_additem(10"\r%d. \w%s"1"Item 1"
Otro ejemplo:
Código PHP:
static Nombre[32]; get_user_name(idNombrecharsmax(Nombre))
oldmenu_additem(10"\r1. \w%s \y[Nivel %d]"Nombreg_nivel[id]) 
Responder
#12
no deberia ir asi? ----------------->
Código PHP:
stock oldmenu_maxpages(maxitemsperpage=7)
{
    new 
1perpage
    
while(maxitems i)
    {
        
+= perpage
        p
++
    }
    return 
p

Ingeniero agrónomo y desarrollador de Software.

tutoriales-allied
buscas un zp?

"La imitación es la forma más sincera de admiración con la que puede pagar la mediocridad a la grandeza"

Merci Alliedmodders pour m'introduire dans la programmation.
Responder
#13
(06/08/2019, 08:22 PM)roccoxx escribió: no deberia ir asi? ----------------->
Código PHP:
stock oldmenu_maxpages(maxitemsperpage=7)
{
    new 
1perpage
    
while(maxitems i)
    {
        
+= perpage
        p
++
    }
    return 
p


Sí pero igual fue inteligente porque creo que quiso evitar hacer la división y redondeo lo cual asumo es más costoso que su forma actual (edit: y evitar usar float).

Intenté googlear para ver si se podía hacer de una manera eficiente:
Código PHP:
maxpages = (maxitems perpage) + (maxitems perpage 0
Hacer (int / int) no devuelve decimal (prácticamente redondeado hacía abajo) y lo otro es un +1 cuando hace falta.

Me basé en el siguiente enlace pero !!(int) lo trata como bool y tira warning así que solamente lo acomodé.
https://forums.alliedmods.net/showpost.p...ostcount=5
Responder
#14
es que man de su forma te va a hacer una pagina de mas sin ningun "item" por asi decirlo.

EDIT: por eso le pregunto a él, más que nada para saber porque lo hizo de esa forma. Gracias por responder y tomarte la molestia
EDIT 2: me gusto esto: maxpages = (maxitems / perpage) + (maxitems % perpage ? 1 : 0). lo que es saber matematica, nunca se me hubiera ocurrido.
Ingeniero agrónomo y desarrollador de Software.

tutoriales-allied
buscas un zp?

"La imitación es la forma más sincera de admiración con la que puede pagar la mediocridad a la grandeza"

Merci Alliedmodders pour m'introduire dans la programmation.
Responder
#15
(13/08/2019, 09:54 PM)roccoxx escribió: es que man de su forma te va a hacer una pagina de mas sin ningun "item" por asi decirlo.

EDIT: por eso le pregunto a él, más que nada para saber porque lo hizo de esa forma. Gracias por responder y tomarte la molestia

Claro, mi primer palabra fue "Sí ..." afirmando que tu forma sin el = es la correcta, solamente dije que igual él fue inteligente por evitar usar float y redondear.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)