Tengo una pregunta por que se separan los items? a diferencia de los que se crean desde un plugin.
Código PHP:
#include <amxmodx>
#include <amxmisc>
new gFileName[] = "menu.ini"; //Definimos el nombre de nuestro archivo.
#define MAXITEMS 10 //Definimos la cantidad de items que tendrá nuestro menú.
#define ITEMSLEN 32 //Definimos la cantidad de caracteres que podrá poseer el nombre de cada item del menu.
/* Items */
new gItems[MAXITEMS+1][ITEMSLEN+1]; //Aquí guardaremos los items de nuestro menú.
public plugin_init()
{
/* Plugin Registration */
register_plugin("[GUIA] Menu by *.ini file", "0.0.1", "SicknessArG");
/* Command */
register_clcmd("say /menu", "cmdMenu");
}
public cmdMenu(id)
{
new menu = menu_create("\yMenu\w", "cmdMenuHandler"); //Creamos el menú.
new Path[256]; //Creamos esta variable para luego usarla para obtener la ruta de la carpeta configs.
get_configsdir(Path, charsmax(Path)); //Que RÁPIDO! ... Obtenemos la ruta a la carpeta configs.
formatex(Path, charsmax(Path),"%s/%s", Path, gFileName); //Declaramos que Path ahora es la ruta a nuestro archivo.
if(!file_exists(Path)) //Chequeamos si nuestro archivo existe.
{
client_print(id, print_chat, "[AMXX] El archivo %s no existe", gFileName);
return PLUGIN_HANDLED; //Sino, paramos ahí y no hacemos mas nada y seguís leyendo al pedo.
}
new f = fopen(Path, "rt"); //Si existe, leemos el texto del archivo (r = read) (t = text).
new iName[ITEMSLEN+1]; //Creamos una variable para el nombre de cada item del menu.
new Item; //Creamos una variable para el numero de cada item.
while(!feof(f)) //Mientras que nuestro archivo este abierto...
{
fgets(f, iName, charsmax(iName)); //Obtenemos el nombre de cada item y lo guardamos dentro de la variable iName.
if(!iName[0] || iName[0] == ';' //(No necesario, pero sirve), esto es para que si en el archivo un texto comienza con
|| iName[0] == '/' && iName[1] == '/' ) continue; // ; o // no sea leído y por lo tanto no aparezca en nuestro menú.
copy(gItems[Item], charsmax(gItems), iName); //Copiamos cada item dentro de la variable gItems.
Item++; //Aumentamos la cantidad de items, cuyo valor es igual a la cantidad puesta en el archivo ini
//pero menor o igual a la cantidad definida en MAXITEMS.
if(Item >= MAXITEMS) break; //Porque si la cantidad de items supera a MAXITEMS se rompe el loop y no continua nuestro plugin.
menu_additem(menu, iName, gItems[Item]); //Pero sino, adherimos cada item en el menú.
}
fclose(f); //Cerramos nuestro archivo.
menu_display(id, menu); //Mostramos el menú.
return PLUGIN_HANDLED;
}
public cmdMenuHandler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new iData[6];
new iName[ITEMSLEN+1];
new Access;
new Callback;
menu_item_getinfo(menu, item, Access, iData, charsmax(iData), iName, charsmax(iName), Callback);
client_print(id, print_chat, "Haz elegido %s", iName); //Y al elegir un item se mostrará el nombre en el chat.
menu_destroy(menu); //Cerramos el menú.
return PLUGIN_HANDLED; //FIN.
}