New hud menu system
#1
Bueno este es un sistema de menu por hud, siempre quise hacer uno cuando era un adolecente pero no tenía la capacidad para poder hacerlo, así que se los comparto. Lo publico más como un aporte que como un plugin porque la idea es que les sea de guía y que hagan las modificaciones que crean necesarias en cuanto a las posiciones del menu y los items.

El sistema utiliza 3 dhud: 1 para el título, X para los items y 1 para las opciones Salir, Volver, Siguiente.

Donde X depende del contenido de los items, mínimo 1 DHUD.

Tiene soporte tanto para menues estáticos como para menues dinámicos.

Natives

Código PHP:
#if defined _hudmenu_included
 #endinput
#endif

#define _hudmenu_included

#include <amxmisc>

// DON'T TOUCH
const KEYSMENU MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0;

#define hud_menu_register(%0,%1) register_menu(%0, KEYSMENU, %1, 1)

// GET MENU INDEX
native hud_menu_get_menu_index(const iClient);

// CREATE MENU TITLE
native hud_menu_create_title(const szText[], const iRed, const iGreen, const iBlue, const Float:fPosX 0.0, const Float:fPosY 0.4);

// DESTROY MENU
native hud_menu_destroy(const iClient, const iStatic);

// GET MENU PAGE
native hud_menu_get_page(const iClient);

// BACK PAGE
native hud_menu_back_page(const iClient);

// NEXT PAGE
native hud_menu_next_page(const iClient);

// GET ITEM INDEX
native hud_menu_get_selected_option(const iClientiKey);

// GET MAX MENU ITEMS
native hud_menu_get_max_items(const iMenu);

// GET MAX MENU ITEMS PER PAGE
native hud_menu_get_page_max_items()

// GET ITEM NAME
native hud_menu_get_item_name(const iMenu, const iItemszItem[], const iItemLenght);

// ADD ITEM TO THE MENU
native hud_menu_additem(const iMenu, const szText[], const szPos[], const iRed 255, const iGreen 255, const iBlue 255);

// DISPLAY MENU
native hud_menu_display(const iClient, const iMenuiPage); 

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

#pragma semicolon 1

new g_iStaticHudMenu;

public 
plugin_init(){
 
register_plugin("Testing Hud Menues""1.0""Roccoxx");

 
register_clcmd("say probando""clcmdTest");

 
register_clcmd("say probando2""ShowMenuPlayers");

 
CreateStaticHudMenu();
}

CreateStaticHudMenu(){
 
g_iStaticHudMenu hud_menu_create_title("Quien es el más pijudo?"02550);
 
hud_menu_register("Quien es el más pijudo?""hud_menu_test");

 
hud_menu_additem(g_iStaticHudMenu"Roccoxx""-"25500);
 
hud_menu_additem(g_iStaticHudMenu"Metita""2"02550);
 
hud_menu_additem(g_iStaticHudMenu"Manu""3"255255255);
 
hud_menu_additem(g_iStaticHudMenu"Federicomb""4"00255);
 
hud_menu_additem(g_iStaticHudMenu"Metalicross""5"2552550);
 
hud_menu_additem(g_iStaticHudMenu"Skylar""6"2552550);
 
hud_menu_additem(g_iStaticHudMenu"Hypnotize""7"2552550);
 
hud_menu_additem(g_iStaticHudMenu"Totopizza""8"2552550);
 
hud_menu_additem(g_iStaticHudMenu"Matias_Esf""9"2552550);
 
hud_menu_additem(g_iStaticHudMenu"Hud""10"2552550);
 
hud_menu_additem(g_iStaticHudMenu"Neeeeeeeeeeeeeeeeeel.-""11"2552550);
 
hud_menu_additem(g_iStaticHudMenu"Flys""12"2552550);
 
hud_menu_additem(g_iStaticHudMenu"MarioAR""13"2552550);
 
hud_menu_additem(g_iStaticHudMenu"R0ma'""14"2552550);
 
hud_menu_additem(g_iStaticHudMenu"Kikizon""15"2552550);
}

public 
clcmdTest(const iClient){
 
hud_menu_display(iClientg_iStaticHudMenu0);
}

public 
hud_menu_test(iClientiKey)
{
 if(!
is_user_connected(iClient)){
 
hud_menu_destroy(iClient1);
 return 
PLUGIN_HANDLED;
 }

 if(
iKey == 9){
 
hud_menu_destroy(iClient1);
 return 
PLUGIN_HANDLED;
 }

 if(
iKey == 7){
 
hud_menu_back_page(iClient);
 return 
PLUGIN_HANDLED;
 }

 if(
iKey == 8){
 
hud_menu_next_page(iClient);
 return 
PLUGIN_HANDLED;
 }

 new 
iMenu hud_menu_get_menu_index(iClient);

 if(
iKey >= hud_menu_get_page_max_items()){
 
hud_menu_display(iClientiMenuhud_menu_get_page(iClient));
 return 
PLUGIN_HANDLED;
 }

 new 
iOption hud_menu_get_selected_option(iClientiKey);

 if(
iOption >= hud_menu_get_max_items(iMenu)){
 
hud_menu_display(iClientiMenuhud_menu_get_page(iClient));
 return 
PLUGIN_HANDLED;
 }

 new 
szItem[100]; hud_menu_get_item_name(iMenuiOptionszItemcharsmax(szItem));

 new 
szName[32]; get_user_name(iClientszNamecharsmax(szName));

 
client_print(0print_chat"%s Elegio la opcion #%d: %s"szNameiOptionszItem);
 
hud_menu_destroy(iClient1);
 return 
PLUGIN_HANDLED;
}

public 
ShowMenuPlayers(const iClient){
 new 
iMenu hud_menu_create_title("Menu de jugadores"2550255);

 
hud_menu_register("Menu de jugadores""MenuPlayers");

 new 
szPos[4], szName[32];
 for(new 
1<= MAX_PLAYERSi++){
 if(!
is_user_connected(i)) continue;

 
get_user_name(iszNamecharsmax(szName));
 
num_to_str(iszPoscharsmax(szPos));
 
hud_menu_additem(iMenuszNameszPos0255255);
 }
 
 
hud_menu_display(iClientiMenu0);
}

public 
MenuPlayers(iClientiKey)
{
 if(!
is_user_connected(iClient)){
 
hud_menu_destroy(iClient0);
 return 
PLUGIN_HANDLED;
 }

 if(
iKey == 9){
 
hud_menu_destroy(iClient0);
 return 
PLUGIN_HANDLED;
 }

 if(
iKey == 7){
 
hud_menu_back_page(iClient);
 return 
PLUGIN_HANDLED;
 }

 if(
iKey == 8){
 
hud_menu_next_page(iClient);
 return 
PLUGIN_HANDLED;
 }

 new 
iMenu hud_menu_get_menu_index(iClient);

 if(
iKey >= hud_menu_get_page_max_items()){
 
hud_menu_display(iClientiMenuhud_menu_get_page(iClient));
 return 
PLUGIN_HANDLED;
 }

 new 
iOption hud_menu_get_selected_option(iClientiKey);

 if(
iOption >= hud_menu_get_max_items(iMenu)){
 
hud_menu_display(iClientiMenuhud_menu_get_page(iClient));
 return 
PLUGIN_HANDLED;
 }

 new 
szItem[100]; hud_menu_get_item_name(iMenuiOptionszItemcharsmax(szItem));
 new 
szName[32]; get_user_name(iClientszNamecharsmax(szName));

 
client_print(0print_chat"%s Elegio al jugador: %s"szNameszItem);
 
hud_menu_destroy(iClient0);
 return 
PLUGIN_HANDLED;


Importante: el titulo de hud_menu_register y hud_menu_create_title debe coincidir!

Creditos:
Matias_Esf -> Por ayudarme a testear
Metalicross -> Por guiarme hacia el sdk del juego para investigar sobre los dhud
r0ma' -> Por las sugerencias <3

Colocar HudMenu.amxx antes de sus plugins que utilizen el menu.

Algunas Imagenes
[Imagen: GglvuCg.jpg]
[Imagen: O1VbVN8.jpg]
[Imagen: XTF9tUi.jpg]


Archivos adjuntos
.sma   Descargar AMXX / HudMenu.sma (Tamaño: 8.85 KB / Descargas: 9)
.sma   Descargar AMXX / TestHudMenu.sma (Tamaño: 4.14 KB / Descargas: 5)
.inc   hudmenu.inc (Tamaño: 1.33 KB / Descargas: 8)
futuro ingeniero agrónomo.

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"

volví a vender plugins, contactame
Responder
#2
Tremendo el pihud menu , buen aporte Proud
Responder
#3
wenardo
No contesto mensajes de soporte. Pregunta en los foros.
Si buscas algún trabajo privado, envíame un MP.
www.BELIALGAMING.net
Responder
#4
Lindo aporte, estaría bueno que se pueda modificar X,Y.
MENU_ITEM_POS no lo usas nunca solo haces el copy :d

Algo así seria para poder modificar X, Y y también que si X es 1.0 ponga los numeros al final del texto:
Código PHP:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <engine>

#pragma semicolon 1

new const szName[] = "Hud Menu";
new const 
szVersion[] = "1.0";
new const 
szAuthor[] = "Roccoxx";

/* DON'T MODIFY */
#define MAX_LENGHT_TITLE 100
#define MAX_LENGHT_ITEM 60
/* END */

#define MAX_ITEMS_PER_PAGE 4 // MAX 6
#define MAX_MENU_COUNT 100 // 1 MENU PER PLAYER = 33 + Statics MENUES
#define MAX_ITEMS_COUNT 50

/*const Float:fTitlePosX = 0.0;
const Float:fTitlePosy = 0.4;

const Float:fItemPositionX = 0.0;*/
new const Float:fItemPositionYDiff[] = {
    
0.050.080.110.14
};

const 
MENU_NONE = -1;

enum _:MENU_TITLE_DATA
{
    
MENU_TITLE_TEXT[MAX_LENGHT_TITLE],
    
MENU_HANDLER[100],
    
MENU_TITLE_RED,
    
MENU_TITLE_GREEN,
    
MENU_TITLE_BLUE,
    
Float:MENU_POS_X,
    
Float:MENU_POS_Y
}

enum _:MENU_ITEM_DATA
{
    
MENU_ITEM_TEXT[MAX_LENGHT_ITEM],
    
MENU_ITEM_POS[4],
    
MENU_ITEM_RED,
    
MENU_ITEM_GREEN,
    
MENU_ITEM_BLUE
}

new Array:
g_MenuTitle, Array:g_MenuItems[MAX_MENU_COUNT];

new 
g_iMenuCountg_iItemCount[MAX_MENU_COUNT];

new 
g_iMenuDisplay[33] = {-1, ...}, g_iMenuPage[33];

const 
KEYSMENU MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0;

public 
plugin_init(){
    
register_plugin(szNameszVersionszAuthor);

    
g_MenuTitle ArrayCreate(MENU_TITLE_DATA);

    new 
iEnt create_entity("info_target");
    if(
is_valid_ent(iEnt)){
        
RegisterHamFromEntity(Ham_ThinkiEnt"HudMenuEntity");
        
entity_set_float(iEntEV_FL_nextthinkget_gametime() + 5.0);
    }
}

public 
plugin_end(){
    
ArrayDestroy(g_MenuTitle);
    for(new 
iMAX_MENU_COUNTi++) ArrayDestroy(g_MenuItems[i]);
}

public 
plugin_natives(){
    
register_native("hud_menu_get_menu_index""hud_menu_get_menu_index"1);
    
register_native("hud_menu_destroy""hud_menu_destroy"1);
    
register_native("hud_menu_back_page""hud_menu_back_page"1);
    
register_native("hud_menu_next_page""hud_menu_next_page"1);
    
register_native("hud_menu_get_selected_option""hud_menu_get_selected_option"1);
    
register_native("hud_menu_get_max_items""hud_menu_get_max_items"1);
    
register_native("hud_menu_get_item_name""hud_menu_get_item_name"1);
    
register_native("hud_menu_create_title""hud_menu_create_title"1);
    
register_native("hud_menu_additem""hud_menu_additem"1);
    
register_native("hud_menu_display""hud_menu_display"1);
}

public 
client_putinserver(id){
    
g_iMenuDisplay[id] = MENU_NONEg_iMenuPage[id] = 0;
}

public 
hud_menu_back_page(const iClient, const iStatic){
    if(
g_iMenuPage[iClient] > 0hud_menu_display(iClientg_iMenuDisplay[iClient], (g_iMenuPage[iClient]-1));
    else 
hud_menu_destroy(iClientiStatic);
}

public 
hud_menu_next_page(const iClient, const iStatic){
    new 
iPagesCount = (g_iItemCount[g_iMenuDisplay[iClient]] / MAX_ITEMS_PER_PAGE);
    if(
g_iMenuPage[iClient] < iPagesCounthud_menu_display(iClientg_iMenuDisplay[iClient], (g_iMenuPage[iClient]+1));
    else 
hud_menu_destroy(iClientiStatic);
}

public 
hud_menu_get_selected_option(const iClientiKey){
    if(
g_iMenuPage[iClient] > 0iKey = (iKey + (g_iMenuPage[iClient] * MAX_ITEMS_PER_PAGE));

    return 
iKey;
}

public 
hud_menu_destroy(const iClient, const iStatic){
    if(!
iStatic){
        new 
iMenu g_iMenuDisplay[iClient];

        
ArrayDeleteItem(g_MenuTitleiMenu);

        new 
iLastMenu iMenu;

        for(new 
iMenuIndexiMenuIndex MAX_MENU_COUNTiMenuIndex++){
            
// EMPTY MENU
            
if(g_iItemCount[iMenuIndex] == 0) continue;

            if(
iMenuIndex iMenu){
                
iLastMenu iMenuIndex;

                
g_iItemCount[iMenuIndex-1] = g_iItemCount[iMenuIndex];
                
g_MenuItems[iMenuIndex-1] = ArrayClone(g_MenuItems[iMenuIndex]);
            }
        }

        
ArrayDestroy(g_MenuItems[iLastMenu]);
        
g_iItemCount[iLastMenu] = 0;

        for(new 
iPlayers 1iPlayers <= MAX_PLAYERSiPlayers++){
            if(!
is_user_connected(iPlayers) || iClient == iPlayers) continue;

            if(
g_iMenuDisplay[iPlayers] > g_iMenuDisplay[iClient]) g_iMenuDisplay[iPlayers]--;
        }

        
g_iMenuCount--;
    }

    
g_iMenuDisplay[iClient] = MENU_NONEg_iMenuPage[iClient] = 0;
}

public 
hud_menu_get_menu_index(const iClient) return g_iMenuDisplay[iClient];

public 
hud_menu_get_max_items(const iMenu) return g_iItemCount[iMenu];

public 
hud_menu_get_item_name(const iMenu, const iItemszItem[], const iItemLenght){
    new 
iDataItem[MENU_ITEM_DATA]; ArrayGetArray(g_MenuItems[iMenu], iItemiDataItem);

    
param_convert(3); copy(szItemiItemLenghtiDataItem[MENU_ITEM_TEXT]);
}

public 
hud_menu_create_title(const szText[], const iRed, const iGreen, const iBlue, const Float:fPosX, const Float:fPosY){
    if(
g_iMenuCount >= MAX_MENU_COUNT){
        
log_amx("You can create only %d menues!"MAX_MENU_COUNT);
        return 
PLUGIN_HANDLED;
    }

    
param_convert(1);

    if(
strlen(szText) > MAX_LENGHT_TITLE){
        
log_amx("Maximum %d Chracters!"MAX_LENGHT_TITLE);
        return 
PLUGIN_HANDLED;
    }

    new 
iData[MENU_TITLE_DATA];
    
copy(iData[MENU_TITLE_TEXT], charsmax(iData), szText);
    
iData[MENU_TITLE_RED] = iRediData[MENU_TITLE_GREEN] = iGreeniData[MENU_TITLE_BLUE] = iBlue;
    
iData[MENU_POS_X] = fPosX;
    
iData[MENU_POS_Y] = fPosY;
    
    
g_MenuItems[g_iMenuCount] = ArrayCreate(MENU_ITEM_DATA);

    
g_iMenuCount++;
    
    return 
ArrayPushArray(g_MenuTitleiData);
}

public 
hud_menu_additem(const iMenu, const szText[], const szPos[], const iRed, const iGreen, const iBlue){
    if(
g_iItemCount[iMenu] >= MAX_ITEMS_COUNT){
        
log_amx("You can create only %d items per menu!"MAX_ITEMS_COUNT);
        return;
    }

    
param_convert(2);

    if(
strlen(szText) > MAX_LENGHT_ITEM){
        
log_amx("Maximum %d Chracters!"MAX_LENGHT_ITEM);
        return;
    }

    
param_convert(3);

    
g_iItemCount[iMenu]++;

    new 
iData[MENU_ITEM_DATA];
    
copy(iData[MENU_ITEM_TEXT], charsmax(iData), szText); copy(iData[MENU_ITEM_POS], charsmax(iData), szPos);
    
iData[MENU_ITEM_RED] = iRediData[MENU_ITEM_GREEN] = iGreeniData[MENU_ITEM_BLUE] = iBlue;
    
ArrayPushArray(g_MenuItems[iMenu], iData);
}

public 
hud_menu_display(const iClient, const iMenuiPage){
    if(
iPage > (g_iItemCount[iMenu] / MAX_ITEMS_PER_PAGE)) iPage 0;

    
g_iMenuDisplay[iClient] = iMenug_iMenuPage[iClient] = iPage;

    new 
iDataTitle[MENU_TITLE_DATA]; ArrayGetArray(g_MenuTitleiMenuiDataTitle);
    
show_menu(iClientKEYSMENU"^n", -1iDataTitle[MENU_TITLE_TEXT]);
}

ShowHudMenu(const iClient, const iMenu, const iPage){
    static 
iDataTitle[MENU_TITLE_DATA]; ArrayGetArray(g_MenuTitleiMenuiDataTitle);
    
    
set_dhudmessage(iDataTitle[MENU_TITLE_RED], iDataTitle[MENU_TITLE_GREEN], iDataTitle[MENU_TITLE_BLUE], iDataTitle[MENU_POS_X], iDataTitle[MENU_POS_Y], 01.00.10.10.9);
    
show_dhudmessage(iClientiDataTitle[MENU_TITLE_TEXT]);

    static 
iStartiStart = (MAX_ITEMS_PER_PAGE iPage); static iEndiEnd = (MAX_ITEMS_PER_PAGE * (iPage 1));
    if(
iEnd g_iItemCount[iMenu]) iEnd g_iItemCount[iMenu];

    static 
iDataItem[MENU_ITEM_DATA], iPositioniPosition 0;

    static 
i;
    for(
iStartiEndi++){
        
ArrayGetArray(g_MenuItems[iMenu], iiDataItem);

        
set_dhudmessage(iDataItem[MENU_ITEM_RED], iDataItem[MENU_ITEM_GREEN], iDataItem[MENU_ITEM_BLUE], iDataTitle[MENU_POS_X], iDataTitle[MENU_POS_Y]+fItemPositionYDiff[iPosition], 01.00.10.11.0);
        if(
iDataTitle[MENU_POS_X] == 1.0)
            
show_dhudmessage(iClient"^n%s %d"iDataItem[MENU_ITEM_TEXT], iPosition+1);
        else
            
show_dhudmessage(iClient"^n%d %s"iPosition+1iDataItem[MENU_ITEM_TEXT]);
        
iPosition++;
    }

    static 
iPagesCountiPagesCount = (g_iItemCount[iMenu] / MAX_ITEMS_PER_PAGE);

    static 
szBuffer[40];
    if(
iDataTitle[MENU_POS_X] == 1.0) {
        
formatex(szBuffercharsmax(szBuffer), "EXIT 0");

        if(
iPage 0format(szBuffercharsmax(szBuffer), "%s^nBACK 8"szBuffer);
        if(
iPage iPagesCountformat(szBuffercharsmax(szBuffer), "%s^nNEXT 9"szBuffer);
    }
    else {
        
formatex(szBuffercharsmax(szBuffer), "0 EXIT");

        if(
iPage 0format(szBuffercharsmax(szBuffer), "%s^n8 BACK"szBuffer);
        if(
iPage iPagesCountformat(szBuffercharsmax(szBuffer), "%s^n9 NEXT"szBuffer);
    }
    
    
set_dhudmessage(255255255iDataTitle[MENU_POS_X], iDataTitle[MENU_POS_Y] + fItemPositionYDiff[iPosition-1] + 0.101.00.10.11.0);
    
show_dhudmessage(iClientszBuffer);
}

public 
HudMenuEntity(const iEnt){
    if(!
is_valid_ent(iEnt)) return HAM_IGNORED;

    for(new 
iClient 1iClient <= MAX_PLAYERSiClient++){
        if(!
is_user_connected(iClient) || g_iMenuDisplay[iClient] == MENU_NONE) continue;

        
ShowHudMenu(iClientg_iMenuDisplay[iClient], g_iMenuPage[iClient]);
    }

    
entity_set_float(iEntEV_FL_nextthinkget_gametime() + 1.0);
    return 
HAM_IGNORED;

y la native:
Código PHP:
native hud_menu_create_title(const szText[], const iRed 255, const iGreen 255, const iBlue 255, const Float:fPosX 0.0, const Float:fPosY=0.4); 

Lo unico que si fPosY es mayor a 0.6-0.7 aprox se van a empezar a pisar los hud.
Panda Nuestro
Sistema de Cuentas
Discord: fran_romaniello#7612
Responder
#5
Buenos pijudos jajajaa. Buen aporte.
[Imagen: 76561198350936449.png]

Cita:Los precios en la moneda venezolana se fijarán a partir de la reconversión monetaria y valdrá mucho menos de lo que cuesta una Cachapa con queso.

(14/03/2019, 10:26 PM)KrR10VnZl escribió: en Venezuela aprendes a ser desde bombas molotov hasta velas, es algo así como supervivencia al desnudo jaja
Responder
#6
Muy bueno, eso significa que tenés la pija grande.
Responder
#7
(15/09/2020, 08:57 PM)r0ma escribió: Lindo aporte, estaría bueno que se pueda modificar X,Y.
MENU_ITEM_POS no lo usas nunca solo haces el copy :d

Algo así seria para poder modificar X, Y y también que si X es 1.0 ponga los numeros al final del texto:
Código PHP:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <engine>

#pragma semicolon 1

new const szName[] = "Hud Menu";
new const 
szVersion[] = "1.0";
new const 
szAuthor[] = "Roccoxx";

/* DON'T MODIFY */
#define MAX_LENGHT_TITLE 100
#define MAX_LENGHT_ITEM 60
/* END */

#define MAX_ITEMS_PER_PAGE 4 // MAX 6
#define MAX_MENU_COUNT 100 // 1 MENU PER PLAYER = 33 + Statics MENUES
#define MAX_ITEMS_COUNT 50

/*const Float:fTitlePosX = 0.0;
const Float:fTitlePosy = 0.4;

const Float:fItemPositionX = 0.0;*/
new const Float:fItemPositionYDiff[] = {
 
0.050.080.110.14
};

const 
MENU_NONE = -1;

enum _:MENU_TITLE_DATA
{
 
MENU_TITLE_TEXT[MAX_LENGHT_TITLE],
 
MENU_HANDLER[100],
 
MENU_TITLE_RED,
 
MENU_TITLE_GREEN,
 
MENU_TITLE_BLUE,
 
Float:MENU_POS_X,
 
Float:MENU_POS_Y
}

enum _:MENU_ITEM_DATA
{
 
MENU_ITEM_TEXT[MAX_LENGHT_ITEM],
 
MENU_ITEM_POS[4],
 
MENU_ITEM_RED,
 
MENU_ITEM_GREEN,
 
MENU_ITEM_BLUE
}

new Array:
g_MenuTitle, Array:g_MenuItems[MAX_MENU_COUNT];

new 
g_iMenuCountg_iItemCount[MAX_MENU_COUNT];

new 
g_iMenuDisplay[33] = {-1, ...}, g_iMenuPage[33];

const 
KEYSMENU MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0;

public 
plugin_init(){
 
register_plugin(szNameszVersionszAuthor);

 
g_MenuTitle ArrayCreate(MENU_TITLE_DATA);

 new 
iEnt create_entity("info_target");
 if(
is_valid_ent(iEnt)){
 
RegisterHamFromEntity(Ham_ThinkiEnt"HudMenuEntity");
 
entity_set_float(iEntEV_FL_nextthinkget_gametime() + 5.0);
 }
}

public 
plugin_end(){
 
ArrayDestroy(g_MenuTitle);
 for(new 
iMAX_MENU_COUNTi++) ArrayDestroy(g_MenuItems[i]);
}

public 
plugin_natives(){
 
register_native("hud_menu_get_menu_index""hud_menu_get_menu_index"1);
 
register_native("hud_menu_destroy""hud_menu_destroy"1);
 
register_native("hud_menu_back_page""hud_menu_back_page"1);
 
register_native("hud_menu_next_page""hud_menu_next_page"1);
 
register_native("hud_menu_get_selected_option""hud_menu_get_selected_option"1);
 
register_native("hud_menu_get_max_items""hud_menu_get_max_items"1);
 
register_native("hud_menu_get_item_name""hud_menu_get_item_name"1);
 
register_native("hud_menu_create_title""hud_menu_create_title"1);
 
register_native("hud_menu_additem""hud_menu_additem"1);
 
register_native("hud_menu_display""hud_menu_display"1);
}

public 
client_putinserver(id){
 
g_iMenuDisplay[id] = MENU_NONEg_iMenuPage[id] = 0;
}

public 
hud_menu_back_page(const iClient, const iStatic){
 if(
g_iMenuPage[iClient] > 0hud_menu_display(iClientg_iMenuDisplay[iClient], (g_iMenuPage[iClient]-1));
 else 
hud_menu_destroy(iClientiStatic);
}

public 
hud_menu_next_page(const iClient, const iStatic){
 new 
iPagesCount = (g_iItemCount[g_iMenuDisplay[iClient]] / MAX_ITEMS_PER_PAGE);
 if(
g_iMenuPage[iClient] < iPagesCounthud_menu_display(iClientg_iMenuDisplay[iClient], (g_iMenuPage[iClient]+1));
 else 
hud_menu_destroy(iClientiStatic);
}

public 
hud_menu_get_selected_option(const iClientiKey){
 if(
g_iMenuPage[iClient] > 0iKey = (iKey + (g_iMenuPage[iClient] * MAX_ITEMS_PER_PAGE));

 return 
iKey;
}

public 
hud_menu_destroy(const iClient, const iStatic){
 if(!
iStatic){
 new 
iMenu g_iMenuDisplay[iClient];

 
ArrayDeleteItem(g_MenuTitleiMenu);

 new 
iLastMenu iMenu;

 for(new 
iMenuIndexiMenuIndex MAX_MENU_COUNTiMenuIndex++){
 
// EMPTY MENU
 
if(g_iItemCount[iMenuIndex] == 0) continue;

 if(
iMenuIndex iMenu){
 
iLastMenu iMenuIndex;

 
g_iItemCount[iMenuIndex-1] = g_iItemCount[iMenuIndex];
 
g_MenuItems[iMenuIndex-1] = ArrayClone(g_MenuItems[iMenuIndex]);
 }
 }

 
ArrayDestroy(g_MenuItems[iLastMenu]);
 
g_iItemCount[iLastMenu] = 0;

 for(new 
iPlayers 1iPlayers <= MAX_PLAYERSiPlayers++){
 if(!
is_user_connected(iPlayers) || iClient == iPlayers) continue;

 if(
g_iMenuDisplay[iPlayers] > g_iMenuDisplay[iClient]) g_iMenuDisplay[iPlayers]--;
 }

 
g_iMenuCount--;
 }

 
g_iMenuDisplay[iClient] = MENU_NONEg_iMenuPage[iClient] = 0;
}

public 
hud_menu_get_menu_index(const iClient) return g_iMenuDisplay[iClient];

public 
hud_menu_get_max_items(const iMenu) return g_iItemCount[iMenu];

public 
hud_menu_get_item_name(const iMenu, const iItemszItem[], const iItemLenght){
 new 
iDataItem[MENU_ITEM_DATA]; ArrayGetArray(g_MenuItems[iMenu], iItemiDataItem);

 
param_convert(3); copy(szItemiItemLenghtiDataItem[MENU_ITEM_TEXT]);
}

public 
hud_menu_create_title(const szText[], const iRed, const iGreen, const iBlue, const Float:fPosX, const Float:fPosY){
 if(
g_iMenuCount >= MAX_MENU_COUNT){
 
log_amx("You can create only %d menues!"MAX_MENU_COUNT);
 return 
PLUGIN_HANDLED;
 }

 
param_convert(1);

 if(
strlen(szText) > MAX_LENGHT_TITLE){
 
log_amx("Maximum %d Chracters!"MAX_LENGHT_TITLE);
 return 
PLUGIN_HANDLED;
 }

 new 
iData[MENU_TITLE_DATA];
 
copy(iData[MENU_TITLE_TEXT], charsmax(iData), szText);
 
iData[MENU_TITLE_RED] = iRediData[MENU_TITLE_GREEN] = iGreeniData[MENU_TITLE_BLUE] = iBlue;
 
iData[MENU_POS_X] = fPosX;
 
iData[MENU_POS_Y] = fPosY;
 
 
g_MenuItems[g_iMenuCount] = ArrayCreate(MENU_ITEM_DATA);

 
g_iMenuCount++;
 
 return 
ArrayPushArray(g_MenuTitleiData);
}

public 
hud_menu_additem(const iMenu, const szText[], const szPos[], const iRed, const iGreen, const iBlue){
 if(
g_iItemCount[iMenu] >= MAX_ITEMS_COUNT){
 
log_amx("You can create only %d items per menu!"MAX_ITEMS_COUNT);
 return;
 }

 
param_convert(2);

 if(
strlen(szText) > MAX_LENGHT_ITEM){
 
log_amx("Maximum %d Chracters!"MAX_LENGHT_ITEM);
 return;
 }

 
param_convert(3);

 
g_iItemCount[iMenu]++;

 new 
iData[MENU_ITEM_DATA];
 
copy(iData[MENU_ITEM_TEXT], charsmax(iData), szText); copy(iData[MENU_ITEM_POS], charsmax(iData), szPos);
 
iData[MENU_ITEM_RED] = iRediData[MENU_ITEM_GREEN] = iGreeniData[MENU_ITEM_BLUE] = iBlue;
 
ArrayPushArray(g_MenuItems[iMenu], iData);
}

public 
hud_menu_display(const iClient, const iMenuiPage){
 if(
iPage > (g_iItemCount[iMenu] / MAX_ITEMS_PER_PAGE)) iPage 0;

 
g_iMenuDisplay[iClient] = iMenug_iMenuPage[iClient] = iPage;

 new 
iDataTitle[MENU_TITLE_DATA]; ArrayGetArray(g_MenuTitleiMenuiDataTitle);
 
show_menu(iClientKEYSMENU"^n", -1iDataTitle[MENU_TITLE_TEXT]);
}

ShowHudMenu(const iClient, const iMenu, const iPage){
 static 
iDataTitle[MENU_TITLE_DATA]; ArrayGetArray(g_MenuTitleiMenuiDataTitle);
 
 
set_dhudmessage(iDataTitle[MENU_TITLE_RED], iDataTitle[MENU_TITLE_GREEN], iDataTitle[MENU_TITLE_BLUE], iDataTitle[MENU_POS_X], iDataTitle[MENU_POS_Y], 01.00.10.10.9);
 
show_dhudmessage(iClientiDataTitle[MENU_TITLE_TEXT]);

 static 
iStartiStart = (MAX_ITEMS_PER_PAGE iPage); static iEndiEnd = (MAX_ITEMS_PER_PAGE * (iPage 1));
 if(
iEnd g_iItemCount[iMenu]) iEnd g_iItemCount[iMenu];

 static 
iDataItem[MENU_ITEM_DATA], iPositioniPosition 0;

 static 
i;
 for(
iStartiEndi++){
 
ArrayGetArray(g_MenuItems[iMenu], iiDataItem);

 
set_dhudmessage(iDataItem[MENU_ITEM_RED], iDataItem[MENU_ITEM_GREEN], iDataItem[MENU_ITEM_BLUE], iDataTitle[MENU_POS_X], iDataTitle[MENU_POS_Y]+fItemPositionYDiff[iPosition], 01.00.10.11.0);
 if(
iDataTitle[MENU_POS_X] == 1.0)
 
show_dhudmessage(iClient"^n%s %d"iDataItem[MENU_ITEM_TEXT], iPosition+1);
 else
 
show_dhudmessage(iClient"^n%d %s"iPosition+1iDataItem[MENU_ITEM_TEXT]);
 
iPosition++;
 }

 static 
iPagesCountiPagesCount = (g_iItemCount[iMenu] / MAX_ITEMS_PER_PAGE);

 static 
szBuffer[40];
 if(
iDataTitle[MENU_POS_X] == 1.0) {
 
formatex(szBuffercharsmax(szBuffer), "EXIT 0");

 if(
iPage 0format(szBuffercharsmax(szBuffer), "%s^nBACK 8"szBuffer);
 if(
iPage iPagesCountformat(szBuffercharsmax(szBuffer), "%s^nNEXT 9"szBuffer);
 }
 else {
 
formatex(szBuffercharsmax(szBuffer), "0 EXIT");

 if(
iPage 0format(szBuffercharsmax(szBuffer), "%s^n8 BACK"szBuffer);
 if(
iPage iPagesCountformat(szBuffercharsmax(szBuffer), "%s^n9 NEXT"szBuffer);
 }
 
 
set_dhudmessage(255255255iDataTitle[MENU_POS_X], iDataTitle[MENU_POS_Y] + fItemPositionYDiff[iPosition-1] + 0.101.00.10.11.0);
 
show_dhudmessage(iClientszBuffer);
}

public 
HudMenuEntity(const iEnt){
 if(!
is_valid_ent(iEnt)) return HAM_IGNORED;

 for(new 
iClient 1iClient <= MAX_PLAYERSiClient++){
 if(!
is_user_connected(iClient) || g_iMenuDisplay[iClient] == MENU_NONE) continue;

 
ShowHudMenu(iClientg_iMenuDisplay[iClient], g_iMenuPage[iClient]);
 }

 
entity_set_float(iEntEV_FL_nextthinkget_gametime() + 1.0);
 return 
HAM_IGNORED;

y la native:
Código PHP:
native hud_menu_create_title(const szText[], const iRed 255, const iGreen 255, const iBlue 255, const Float:fPosX 0.0, const Float:fPosY=0.4); 

Lo unico que si fPosY es mayor a 0.6-0.7 aprox se van a empezar a pisar los hud.

Actualizado muchas gracias Meliodas :3
futuro ingeniero agrónomo.

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"

volví a vender plugins, contactame
Responder
#8
Muy buen aporte.

PD: La posición de los DHUD puede variar dependiendo de la resolución que el usuario tenga?, ya que hace tiempo hice un plugin donde uní 3 DHUD y según mi resolución los veía perfecto, pero un amigo lo veía corrido (hice una frase simulando espacios entre las palabras, y cada palabra tenia un color diferente).
Responder
#9
(15/09/2020, 10:02 PM)Zeta escribió: Muy buen aporte.

PD: La posición de los DHUD puede variar dependiendo de la resolución que el usuario tenga?, ya que hace tiempo hice un plugin donde uní 3 DHUD y según mi resolución los veía perfecto, pero un amigo lo veía corrido (hice una frase simulando espacios entre las palabras, y cada palabra tenia un color diferente).

Si puede variar.
futuro ingeniero agrónomo.

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"

volví a vender plugins, contactame
Responder
#10
buen aporte
Quieres rentar un servidor en USA o BRASIL, envíame un Mensaje Privado.
Envía mensaje privado si vas a pagar por el servicio.
[Imagen: b_350_20_ff0505_381007_ffffff_000000.png]
[Imagen: b_350_20_ff0505_381007_ffffff_000000.png]

[Imagen: 76561198283253977.png]
(05/07/2018, 11:09 PM)meTaLiCroSS escribió: Esa es la diferencia, por eso no cualquier mandril puede programar
(16/05/2014, 08:22 AM)mongito100 escribió: Esto debería ir en tutoriales para q después un moderador/neeeeeel lo ponga en el tacho
(08/04/2020, 05:10 PM)asgasgasgasgasg escribió: bola de estupidos con retrasomental hijos de la gran puta por que putas ayudan a todo mundo y no a mi pedi un midnight dakness para zp y nadie me lo hizo malditos basuras bastardos tontos estupidos virgenes de mierda no van a conseguri nada tontos mierdaaaaaaaaaaaaaaaaaaaaaaaaaa
(26/07/2020, 12:37 AM)Hypnotize escribió: [Imagen: xdxd.png]


(26/07/2020, 07:21 PM)Ricardo01 escribió: Que problema tenés conmigo LA CONCHA DE TU MADRE.... La re mil que te parió te crees porque tenés "47" de recuperación eres todo anda hacerte coger seguramente le pagaste a alguien para que te dé reputación porque eres una basura de persona... Jamás vi una persona tan basura eh ignorante como vos...

(26/07/2020, 08:12 PM)Ricardo01 escribió: SOS pelotuda o te haces me tenés en cosas que nada que ver.... Man no tenes vida? Que estás tan aldp2 que haces todo esto? Busca una novia oh anda a pajearte un rato. Debes ser un gordo con lente que tiene poster de anime de culo virgen de mierda..

(26/07/2020, 08:25 PM)Ricardo01 escribió: Y que tiene? Lo ví me gustó y lo puse aparte? Que problema tenés conmigo si yo no te hice nada.. yo tiro post no es obligación que me ayudes... Nose que carajo te pasa conmigo. De la nada me empezaste a bardear y etc. Si tenés problema con tu familia o tu vida. agarratela con ellos no con gente que no conoces..

(26/07/2020, 11:18 PM)Ricardo01 escribió: Buena te crees porque sabes programar se crees superior pelotudo de mierda. Yo voy a crear todas las cuentas que quieras la concha de tu madre gordo virgen. Anda a mirar porno de anime. Yo te voy a insultar todo lo que quiera pelotudo... Te crees superior y crees que tenés derecho a molestar a otras personas que ni conoces... Aparte que me importa si sabes programa nadie te pide ayuda acá. Son millones no eres el único..



Responder
#11
(16/09/2020, 12:04 AM)Hypnotize escribió: buen aporte

pd: obvio q gano yo entre esos maniseros
[Imagen: 76561198095047868.png]
Responder
#12
voten por mi banda!
Quieres rentar un servidor en USA o BRASIL, envíame un Mensaje Privado.
Envía mensaje privado si vas a pagar por el servicio.
[Imagen: b_350_20_ff0505_381007_ffffff_000000.png]
[Imagen: b_350_20_ff0505_381007_ffffff_000000.png]

[Imagen: 76561198283253977.png]
(05/07/2018, 11:09 PM)meTaLiCroSS escribió: Esa es la diferencia, por eso no cualquier mandril puede programar
(16/05/2014, 08:22 AM)mongito100 escribió: Esto debería ir en tutoriales para q después un moderador/neeeeeel lo ponga en el tacho
(08/04/2020, 05:10 PM)asgasgasgasgasg escribió: bola de estupidos con retrasomental hijos de la gran puta por que putas ayudan a todo mundo y no a mi pedi un midnight dakness para zp y nadie me lo hizo malditos basuras bastardos tontos estupidos virgenes de mierda no van a conseguri nada tontos mierdaaaaaaaaaaaaaaaaaaaaaaaaaa
(26/07/2020, 12:37 AM)Hypnotize escribió: [Imagen: xdxd.png]


(26/07/2020, 07:21 PM)Ricardo01 escribió: Que problema tenés conmigo LA CONCHA DE TU MADRE.... La re mil que te parió te crees porque tenés "47" de recuperación eres todo anda hacerte coger seguramente le pagaste a alguien para que te dé reputación porque eres una basura de persona... Jamás vi una persona tan basura eh ignorante como vos...

(26/07/2020, 08:12 PM)Ricardo01 escribió: SOS pelotuda o te haces me tenés en cosas que nada que ver.... Man no tenes vida? Que estás tan aldp2 que haces todo esto? Busca una novia oh anda a pajearte un rato. Debes ser un gordo con lente que tiene poster de anime de culo virgen de mierda..

(26/07/2020, 08:25 PM)Ricardo01 escribió: Y que tiene? Lo ví me gustó y lo puse aparte? Que problema tenés conmigo si yo no te hice nada.. yo tiro post no es obligación que me ayudes... Nose que carajo te pasa conmigo. De la nada me empezaste a bardear y etc. Si tenés problema con tu familia o tu vida. agarratela con ellos no con gente que no conoces..

(26/07/2020, 11:18 PM)Ricardo01 escribió: Buena te crees porque sabes programar se crees superior pelotudo de mierda. Yo voy a crear todas las cuentas que quieras la concha de tu madre gordo virgen. Anda a mirar porno de anime. Yo te voy a insultar todo lo que quiera pelotudo... Te crees superior y crees que tenés derecho a molestar a otras personas que ni conoces... Aparte que me importa si sabes programa nadie te pide ayuda acá. Son millones no eres el único..



Responder
#13
(15/09/2020, 08:08 PM)LeanPPP escribió: Tremendo el pihud menu , buen aporte  Proud
(12/03/2014, 08:11 PM)roccoxx escribió: jajajajajajajajajajajajajajajaajajajajajaajajajajajajajajajajajajajajajajajajajajajajajajajjajajjajajajajaja

todo eso elevado a la quinta potencia.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)