Ayuda Menu Select
#1
Buenas tardes!
El plugin que quería era el siguiente.
Cuando el jugador entra en el servidor aparece un menú de elegir equipo de este género:

\r| # WARGAME-CM # |
\yElige tu equipo

\r1. \wEquipo azul
\r2. \wEquipo rojo
\r3. \wEspectador

Y durante el juego cuando se carga en el "M" aparece el mismo menú.

Alguien me puede ayudar por favor?
Responder
#2
podes guiarte de este que hice anteriormente https://amxmodx-es.com/Thread-donde-pued...#pid132703

ahora mismo no estoy en mi pc, por lo que no te lo puedo cuadrar como quieres ni mucho menos probar, si no podes aguantate y mas tarde te lo cuadro si no se adelanta otro en hacerte el favor Guiño
Responder
#3
Es todo bueno, pero cuando el equipo es elegido Yo quería elegir una clase automáticamente.

Por ejemplo, elegía terrorist y iba a quedar con la class leet o elegía counter-terrorist y se quedaba con la gign o entonces las class era elegidas automáticamente.

Porque voy a cambiar los modelos de las class.

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

new const g_MsgArgs[][] = { "#Team_Select","#Team_Select_Spect","#IG_Team_Select","#IG_Team_Select_Spect" 

public 
plugin_init() {
    
register_plugin("Select Team""1.1""Manu & mlibre")
    
    
register_message(get_user_msgid("ShowMenu"),"message_showmenu")
    
register_message(get_user_msgid("VGUIMenu"),"message_vguimenu"
     
    
register_clcmd("chooseteam","cmd_block"), register_clcmd("jointeam","cmd_block"
    
}

public 
message_showmenu(msgid,dest,id) { 
    static 
szMsg[32];get_msg_arg_string(4,szMsg,charsmax(szMsg))

    for(new 
i;sizeof g_MsgArgs;i++) { 
        if(
equal(szMsg,g_MsgArgs[i])) MainMenu(id)
    }


public 
message_vguimenu(msgid,dest,id) { 
    if(
get_msg_arg_int(1) != 2) return PLUGIN_CONTINUE 
    MainMenu
(id); return PLUGIN_HANDLED 


public 
cmd_block(id) { 
    
MainMenu(id
    return 
PLUGIN_HANDLED 


public 
client_connect(idset_user_info(id"_vgui_menus""1"

public 
MainMenu(id)
{
    new 
Item51 ]
    
    new 
szText500 char ];
    
formatexszTextcharsmaxszText ), "\r| # WARGAME-CM # |^n\yEscolhe a equipa");

    new 
Menu menu_createszText"sub_MainMenu" );

    
formatex(Itemcharsmax(Item),"\wEquipa Vermelha")
    
menu_additem(MenuItem"1")
    
    
formatex(Itemcharsmax(Item),"\wEquipa Azul^n")
    
menu_additem(MenuItem"2")
    
    
formatex(Itemcharsmax(Item),"\wEspectador")
    
menu_additem(MenuItem"3")        
    
    
menu_setpropMenuMPROP_EXITNAME"\ySair" );
    
menu_setpropMenuMPROP_NEXTNAME"\ySeguinte" );
    
menu_setpropMenuMPROP_BACKNAME"\yAnterior" );
    
menu_setpropMenuMPROP_EXITMEXIT_ALL );
           
    
menu_displayidMenu);
    return 
PLUGIN_HANDLED
}

public 
sub_MainMenu(idMenuitem)
{
    if( 
item == MENU_EXIT )
    {
        
menu_destroy(Menu)
        return 
PLUGIN_HANDLED;
    }
    
    switch( 
item )
    {
        case 
0:        
            
engclient_cmd(id"jointeam""1");        
        case 
1:            
            
engclient_cmd(id"jointeam""2");        
        case 
2:            
            
engclient_cmd(id"jointeam""6");        
    }
    return 
PLUGIN_HANDLED;

[/code][/quote]
Responder
#4
algo asi se auto elije la class

Código PHP:
public team_select(idkey) {
    switch(
key) {
        case 
0engclient_cmd(id"jointeam""1"), /*leet*/engclient_cmd(id"joinclass""2")
        case 
1engclient_cmd(id"jointeam""2"), /*gign*/engclient_cmd(id"joinclass""4")
        case 
2..4menu_teams(id)
        case 
5engclient_cmd(id"jointeam""6")
        case 
6..8menu_teams(id)
        case 
9: {
        }
    }
    return 
PLUGIN_HANDLED

Responder
#5
Sigue apareciendo después de elegir el equipo: http://prntscr.com/foy604

¿Sabes cómo bloquear?
Responder
#6
Explica un poco más el problema.

Yo hacia tiempo ya pregunte por algo similar, quizá te pueda servir -> Bloquear 'menuselect' [SOLUCIONADO]
.
Responder
#7
Código PHP:
public MainMenu(id)
{
    new 
Item51 ]
    
    new 
szText500 char ];
    
formatexszTextcharsmaxszText ), "\r| # WARGAME-CM # |^n\yEscolhe a equipa");

    new 
Menu menu_createszText"sub_MainMenu" );

    
formatex(Itemcharsmax(Item),"\wEquipa Vermelha")
    
menu_additem(MenuItem"1")
    
    
formatex(Itemcharsmax(Item),"\wEquipa Azul^n")
    
menu_additem(MenuItem"2")
    
    
formatex(Itemcharsmax(Item),"\wEspectador")
    
menu_additem(MenuItem"3")        
    
    
menu_setpropMenuMPROP_EXITNAME"\ySair" );
    
menu_setpropMenuMPROP_NEXTNAME"\ySeguinte" );
    
menu_setpropMenuMPROP_BACKNAME"\yAnterior" );
    
menu_setpropMenuMPROP_EXITMEXIT_ALL );
           
    
menu_displayidMenu);
    return 
PLUGIN_HANDLED


>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Código PHP:
public MainMenu(id)
{
 
    new 
Menu menu_create"\r| # WARGAME-CM # |^n\yEscolhe a equipa""sub_MainMenu" );

    
menu_additem(Menu"\wEquipa Vermelha""1")
   
    
menu_additem(Menu"\wEquipa Azul""2")
    
    
menu_additem(Menu,"\wEspectador""3")        
    
    
menu_setpropMenuMPROP_EXITNAME"\ySalir" );
           
    
menu_displayidMenu);


Qué mierda crear un 'Siguiente', 'Anterior' Para 3 opciones... incluso lo de la variable 'Char'... madre mía pacman...

[Imagen: 76561198099584158.png]
Java, Mysql, PHP, Python and more.
Responder
#8
(27/06/2017, 08:02 PM)Chamo. escribió: Explica un poco más el problema.

Yo hacia tiempo ya pregunte por algo similar, quizá te pueda servir -> Bloquear 'menuselect' [SOLUCIONADO]
.

Voy a tratar de explicarme mejor.
Cuando entro en el servidor o carga en el "M" aparece este menú:
[Imagen: unKEbgWCSi68fT2Jrf3N3w.png]

Listo hasta aquí está todo bien.

Después de elegir uno de los equipos (t o ct) aparece esto: [Imagen: zKOau1TiQa6n0A93gZhVlw.png]

No quería que apareciera esto de elegir la class.
Quisiera que cuando se escoja el equipo el jugador entrara inmediatamente en el juego y la clase se elija automáticamente.


ps: Soy portugués. Lo siento si ha mal traducido.
Responder
#9
Creo que falto un "RETURN..." en esta parte:

Código PHP:
public message_showmenu(msgid,dest,id

    static 
szMsg[32];get_msg_arg_string(4,szMsg,charsmax(szMsg))

    for (new 
isizeof g_MsgArgsi++)
    {
        if (
equal(szMsgg_MsgArgs[i]))
        {
            
MainMenu(id)
            return 
PLUGIN_HANDLED// Este
        
}
    }

    return 
PLUGIN_CONTINUE;


Pero ahora que recuerdo, eso no arregla el problema, pero si evita otras cosas por lo que recuerdo.

Prueba esto:

Código PHP:
new PI_UserMsgID[33];

public 
message_showmenu(msgid,dest,id

    static 
szMsg[32];get_msg_arg_string(4,szMsg,charsmax(szMsg))

    for(new 
i;sizeof g_MsgArgs;i++) 
    { 
         if(
equal(szMsg,g_MsgArgs[i]))
        {
            
MainMenu(id)
            
PI_UserMsgID[id] = msgid
            
return PLUGIN_HANDLED;
        }
    }
    return 
PLUGIN_CONTINUE;


public 
message_vguimenu(msgid,dest,id

    if(
get_msg_arg_int(1) != 2) return PLUGIN_CONTINUE 
    MainMenu
(id); 
    
PI_UserMsgID[id] = msgid
    
return PLUGIN_HANDLED 
}

// Y la parte donde asignas el equipo: "engclient_cmd(id, "jointeam", "1");" >>>>>

// Estos son solo ejemplos.

EnterPlayer(id// Para equipo y clase al azar
EnterPlayer(id"1"// Para equipo T y clase al azar
EnterPlayer(id"2""2"// Para equipo CT y clase #2 (No recuerdo el nombre)

EnterPlayer(const Client, const SZ_Team[] = "5", const SZ_Class[] = "5")
{
    static 
MsgBlockType;

    
MsgBlockType get_msg_block(PI_UserMsgID[Client])

    
set_msg_block(PI_UserMsgID[Client], BLOCK_SET// Como verán, anteriormente había obtenido el ID del mensaje VGUI/ShowMenu

    
engclient_cmd(Client"jointeam"SZ_Team)
    
engclient_cmd(Client"joinclass"SZ_Class)

    
set_msg_block(PI_UserMsgID[Client], MsgBlockType)

    
//SetUserStatus(Client, STATUS_ONLINE)

Responder
#10
Si me pongo así aparece en la misma escena para elegir la clase.
Código PHP:
public team_select(idkey) {
    switch(
key) {
        case 
0engclient_cmd(id"jointeam""1"), /*leet*/engclient_cmd(id"joinclass""2")
        case 
1engclient_cmd(id"jointeam""2"), /*gign*/engclient_cmd(id"joinclass""4")
        case 
2..4menu_teams(id)
        case 
5engclient_cmd(id"jointeam""6")
        case 
6..8menu_teams(id)
        case 
9: {
        }
    }
    return 
PLUGIN_HANDLED

Responder
#11
Sencillamente porque sólo elijes 'Terrorista' y no cuál...

@Mlibree te pasó el código correcto, y acá te dejo esa línea específica
Código PHP:
engclient_cmd(id"jointeam""1")
>>>
engclient_cmd(id"jointeam""1"), /*leet*/engclient_cmd(id"joinclass""2"

(27/06/2017, 04:52 PM)mlibre escribió: algo asi se auto elije la class

Código PHP:
public team_select(idkey) {
    switch(
key) {
        case 
0engclient_cmd(id"jointeam""1"), /*leet*/engclient_cmd(id"joinclass""2")
        case 
1engclient_cmd(id"jointeam""2"), /*gign*/engclient_cmd(id"joinclass""4")
        case 
2..4menu_teams(id)
        case 
5engclient_cmd(id"jointeam""6")
        case 
6..8menu_teams(id)
        case 
9: {
        }
    }
    return 
PLUGIN_HANDLED


[Imagen: 76561198099584158.png]
Java, Mysql, PHP, Python and more.
Responder
#12
Estoy teniendo este error:

Welcome to the AMX Mod X 1.8.1-300 Compiler.
Copyright © 1997-2013 ITB CompuPhase, AMX Mod X Team

Error: Undefined symbol "PVars" on line 129
Warning: Expression has no effect on line 129
Error: Expected token: ";", but found "]" on line 129
Error: Invalid expression, assumed zero on line 129
Error: Too many error messages on one line on line 129

Compilation aborted.
4 Errors.
Could not locate output file C:\Users\Utilizador\Desktop\Plugins\MenuWarGame2.amx (compile failed).



Código PHP:
#include < amxmodx >
#include < amxmisc >
#include < cstrike >
#include < colorchat >

new AI_UserMsgID[33];

new const 
g_MsgArgs[][] = { "#Team_Select","#Team_Select_Spect","#IG_Team_Select","#IG_Team_Select_Spect" 

public 
plugin_init() {
    
register_plugin("Select Team""1.1""Manu & mlibre")
    
    
register_message(get_user_msgid("ShowMenu"),"message_showmenu")
    
register_message(get_user_msgid("VGUIMenu"),"message_vguimenu"
     
    
register_clcmd("chooseteam","cmd_block"), register_clcmd("jointeam","cmd_block"
    
    
register_menu"MainMenu"1023"sub_MainMenu" );
}
/*
public message_showmenu(msgid,dest,id) { 
    static szMsg[32];get_msg_arg_string(4,szMsg,charsmax(szMsg))

    for(new i;i < sizeof g_MsgArgs;i++) { 
        if(equal(szMsg,g_MsgArgs[i])) MainMenu(id)
    }


public message_vguimenu(msgid,dest,id) { 
    if(get_msg_arg_int(1) != 2) return PLUGIN_CONTINUE 
    MainMenu(id); return PLUGIN_HANDLED 

*/
public message_showmenu(msgid,dest,id

    static 
szMsg[32];get_msg_arg_string(4,szMsg,charsmax(szMsg))

    for(new 
i;sizeof g_MsgArgs;i++) 
    { 
             if(
equal(szMsg,g_MsgArgs[i]))
        {
            
MainMenu(id)
            
AI_UserMsgID[id] = msgid
            
return PLUGIN_HANDLED;
        }
    }
    return 
PLUGIN_CONTINUE;


public 
message_vguimenu(msgid,dest,id

    if(
get_msg_arg_int(1) != 2) return PLUGIN_CONTINUE 
    MainMenu
(id); 
    
AI_UserMsgID[id] = msgid
    
return PLUGIN_HANDLED 
}

public 
cmd_block(id) { 
    
MainMenu(id)
    return 
PLUGIN_HANDLED 


public 
client_connect(idset_user_info(id"_vgui_menus""1"

public 
MainMenu(id)
{
    new 
szT,szCT
    
for(new id=1id<=32id++) {
            if(
is_user_connected(id)) {
                    switch(
cs_get_user_team(id)) {
                        case 
CS_TEAM_T: {
                                
szT++
                        } case 
CS_TEAM_CT: {
                                
szCT++
                        }
                    }
        }    
    }
    
    static 
szMenu512 ], iLeniKeys

    iKeys 
MENU_KEY_1 MENU_KEY_2 MENU_KEY_5 MENU_KEY_6 MENU_KEY_0
        
    iLen    
=    formatexszMenucharsmaxszMenu ), "\r| # WARGAME-CM # |^n\yEscolhe a equipa^n^n");
    
iLen    +=    formatexszMenuiLen ], 511 iLen"\r1. \wEquipa Vermelha \r[%i]^n",szT );
    
iLen    +=    formatexszMenuiLen ], 511 iLen"\r2. \wEquipa Azul \r[%i]^n^n",szCT );
    
iLen    +=    formatexszMenuiLen ], 511 iLen"\r5. \wEscolha Automatica^n" );        
    
iLen    +=    formatexszMenuiLen ], 511 iLen"\r6. \wEspectador^n^n^n" );        
        
    
iLen    +=    formatexszMenuiLen ], 511 iLen"\r0. \yMenu Principal" );
        
    
show_menuidiKeysszMenu, -1"MainMenu" );    
        
}
public 
sub_MainMenuidiKey )
{
    switch( ( 
iKey ) % 10 )
    {
        case 
1:    
        {
            
//engclient_cmd(id, "jointeam", "1")
            
EnterPlayer(id"1""1")
            
ColorChat(idRED,"^4[^1-^4WG^1-^4] ^1- Entraste na ^4Equipa ^3Vermelha^1! Bom Jogo!")
        }
        case 
2:    
        {
            
//engclient_cmd(id, "jointeam", "2")
            
EnterPlayer(id"2""2")
            
ColorChat(idBLUE,"^4[^1-^4WG^1-^4] ^1- Entraste na ^4Equipa ^3Azul^1! Bom Jogo!")
        }
        case 
5:    
        {
            
//engclient_cmd(id, "jointeam", "5");  
            
EnterPlayer(id"5""1")
        }        
        case 
6:    
        {
            
//engclient_cmd(id, "jointeam", "6"); 
            
EnterPlayer(id"6")
        }
    }
    return 
PLUGIN_HANDLED;
}

EnterPlayer(const Client, const SZ_Team[] = "5", const SZ_Class[] = "5")
{
    static 
MsgBlockType;

    
MsgBlockType get_msg_block(PVars[Client][P_MSG_JOIN_ID])

    
set_msg_block(AI_UserMsgID[id], BLOCK_SET// Como verán, anteriormente había obtenido el ID del mensaje VGUI/ShowMenu

    
engclient_cmd(Client"jointeam"SZ_Team)
    
engclient_cmd(Client"joinclass"SZ_Class)

    
set_msg_block(AI_UserMsgID[id], MsgBlockType)

    
//SetUserStatus(Client, STATUS_ONLINE)

Responder
#13
(28/06/2017, 03:58 PM)Dieguito escribió: Sencillamente porque sólo elijes 'Terrorista' y no cuál...

@Mlibree te pasó el código correcto, y acá te dejo esa línea específica
Código PHP:
engclient_cmd(id"jointeam""1")
>>>
engclient_cmd(id"jointeam""1"), /*leet*/engclient_cmd(id"joinclass""2"

(27/06/2017, 04:52 PM)mlibre escribió: algo asi se auto elije la class

Código PHP:
public team_select(idkey) {
    switch(
key) {
        case 
0engclient_cmd(id"jointeam""1"), /*leet*/engclient_cmd(id"joinclass""2")
        case 
1engclient_cmd(id"jointeam""2"), /*gign*/engclient_cmd(id"joinclass""4")
        case 
2..4menu_teams(id)
        case 
5engclient_cmd(id"jointeam""6")
        case 
6..8menu_teams(id)
        case 
9: {
        }
    }
    return 
PLUGIN_HANDLED


Código PHP:
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"


public plugin_init() 
{
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
register_clcmd("test""test")
}

public 
test(const I_Player)
{
    
engclient_cmd(I_Player"jointeam""1"), /*leet*/engclient_cmd(I_Player"joinclass""2")
    
    
/* Y obvio es lo mismo que esto:
    engclient_cmd(id, "jointeam", "1")
    engclient_cmd(id, "joinclass", "2") 
    
    Por por ciertas razones, dejo el original
    */


Si te da prueba eso con VGUIMenu y ShowMenu (setinfo _vgui_menus 1/0 respectivamente).

Y luego me dices los resultados Genius.



@MonSter .RUCA error mio como siempre por escribir rápido:

Código PHP:
EnterPlayer(const Client, const SZ_Team[] = "5", const SZ_Class[] = "5")
{
    static 
MsgBlockType;

    
MsgBlockType get_msg_block(PVars[Client][P_MSG_JOIN_ID])

    
set_msg_block(AI_UserMsgID[id], BLOCK_SET// Como verán, anteriormente había obtenido el ID del mensaje VGUI/ShowMenu

    
engclient_cmd(Client"jointeam"SZ_Team)
    
engclient_cmd(Client"joinclass"SZ_Class)

    
set_msg_block(AI_UserMsgID[id], MsgBlockType)

    
//SetUserStatus(Client, STATUS_ONLINE)


>>>>>>>>>>

Código PHP:
EnterPlayer(const Client, const SZ_Team[] = "5", const SZ_Class[] = "5")
{
    static 
MsgBlockType;

    
MsgBlockType get_msg_block(AI_UserMsgID[Client])

    
set_msg_block(AI_UserMsgID[Client], BLOCK_SET// Como verán, anteriormente había obtenido el ID del mensaje VGUI/ShowMenu

    
engclient_cmd(Client"jointeam"SZ_Team)
    
engclient_cmd(Client"joinclass"SZ_Class)

    
set_msg_block(AI_UserMsgID[Client], MsgBlockType)

    
//SetUserStatus(Client, STATUS_ONLINE)

Responder
#14
¡Funcionó!
Muchas gracias @Chamo.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)