AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   amxx menu (https://forums.alliedmods.net/showthread.php?t=132265)

hitmany 07-13-2010 11:21

amxx menu
 
How to add a menu button Next Back?
Menu takes its name from the race lang_GetRaceName, as I understand.
This old style menu?
PHP Code:

public MENU_ChangeRaceidiRaceXP[MAX_RACES] )
{
    
    new 
szRaceName[MAX_RACES+1][64], iposiKeys 0szMenu[512], szXP[16];

    
// Get our race names
    
for ( 0get_pcvar_numCVAR_wc3_races ); i++ )
    {
        
lang_GetRaceName1idszRaceName[i], 63 );
    }

    
pos += formatexszMenu[pos], 512-pos"%L"id"MENU_SELECT_RACE" );

    
// Then add the experience column
    
if ( get_pcvar_numCVAR_wc3_save_xp ) )
    {
        
pos += formatexszMenu[pos], 512-pos"\R%L^n^n"id"MENU_WORD_EXPERIENCE" );
    }
    else
    {
        
pos += formatexszMenu[pos], 512-pos"^n^n" );
    }

    
// Build the changerace menu (for every race)
    
for ( 0get_pcvar_numCVAR_wc3_races ); i++ )
    {
        
num_to_striRaceXP[i], szXP15 );
        
        
// Add the "Select a Hero" message if necessary
        
if ( == )
        {
            
pos += formatszMenu[pos], 512-pos"%L"id"SELECT_HERO" );
        }
        
        
// User's current race
        
if ( == p_data[id][P_RACE] - )
        {
            
pos += formatexszMenu[pos], 512-pos"\d%d. %s\d\R%s^n"1szRaceName[i], ( (get_pcvar_numCVAR_wc3_save_xp )) ? szXP " " ) );

            
iKeys |= (1<<i);
        }

        
// Race the user wants to change to
        
else if ( == p_data[id][P_CHANGERACE] - )
        {
            
pos += formatexszMenu[pos], 512-pos"\r%d. %s\r\R%s^n"1szRaceName[i], ( (get_pcvar_numCVAR_wc3_save_xp )) ? szXP " " ) );

            
iKeys |= (1<<i);
        }

        
// All other cases
        
else
        {
            
/*
            new iRaceLimit = get_pcvar_num( CVAR_wc3_race_limit );
            new bool:bAllowRace = true;

            if ( iRaceLimit > 0 )
            {
                new iTotal[MAX_RACES];

                // Get how many people are using each race
                new iPlayers[32], iNumPlayers, i, iTarget;
                get_players( iPlayers, iNumPlayers );

                for ( i = 0; i < iNumPlayers; i++ )
                {
                    iTarget = iPlayers[i];

                    if ( iTarget != id && p_data[iTarget][P_RACE] > 0 && p_data[iTarget][P_RACE] <= get_pcvar_num( CVAR_wc3_races ) )
                    {
                        iTotal[p_data[iTarget][P_RACE]]++;
                    }
                }
                
                // Now if we have more races selected than iRaceLimit provides us with, then we need to increase iRaceLimit
                while ( HLPR_TotalUsingRaces( iTotal ) > iRaceLimit * get_playersnum() )
                {
                    iRaceLimit++;
                }

                // Check to see if there was an increase that was necessary
                if ( iRaceLimit > get_pcvar_num( CVAR_wc3_race_limit ) )
                {
                    WC3_Log( true, "Error, increase wc3_race_limit to at least %d", iRaceLimit );
                }

                if ( iTotal[i+1] >= iRaceLimit )
                {
                    bAllowRace = false;

                }
            }*/

            
new bool:bAllowRace true;

            
// Check to see if the user can choose this race (are there too many of this race?)
            
if ( bAllowRace )
            {
                
pos += formatexszMenu[pos], 512-pos"\w%d. %s\y\R%s^n"1szRaceName[i], ( (get_pcvar_numCVAR_wc3_save_xp )) ? szXP " " ) );

                
iKeys |= (1<<i);
            }

            
// If not, display the race, but don't give them a key to press
            
else
            {
                
pos += formatexszMenu[pos], 512-pos"\d%d. %s\y\R%s^n"1szRaceName[i], ( (get_pcvar_numCVAR_wc3_save_xp )) ? szXP " " ) );
            }
        }

    }

    
iKeys |= (1<<i);
    
    
// This is needed so we can make the Auto-Select option "0" if the number of races is 9
    
if ( get_pcvar_numCVAR_wc3_races ) == )
    {
        
= -1;
    }

    
pos += formatszMenu[pos], 512-pos"%L"id"SELECT_RACE_FOOTER");
    
    
// Add a cancel button to the bottom
    
if ( get_pcvar_numCVAR_wc3_races ) != )
    {
        
iKeys |= (1<<9);

        
pos += formatszMenu[pos], 512-pos"^n\w0. %L"id"WORD_CANCEL" );
    }
    
    
// Show the menu to the user!
    
show_menuidiKeysszMenu, -);

    return;



Sylwester 07-13-2010 12:42

Re: amxx menu
 
This is how you can create menu with multiple pages using old menu system:
PHP Code:

#define MAX_PLAYERS 32
new g_p_page[MAX_PLAYERS+1]

#define MAX_ITEMS 60
new g_item_name[MAX_ITEMS]


public 
main_menu(id){
    
//...
}


public 
main_menu_handler(idkey){
    switch(
key){
        
//...
        
case SOME_KEYmultiple_pages_menu(id0)
    }
}


public 
multiple_pages_menu(idpage){
    if(
page<0){
        
main_menu(id)
        return 
PLUGIN_HANDLED
    
}
    
g_p_page[id] = page
    
new cache[512]
    new 
pos formatex(cache511"Menu title...^n")
    new 
keys 1<<9
    
new menu_items MAX_ITEMS%8

    
for(new i=0i<menu_itemsi++){
        
pos += formatex(cache[pos], 511-pos"%d. %s^n"i+1g_item_name[page*8+i])
        
keys |= 1<<i
    
}

    if((
page+1)*8<=MAX_ITEMS){
        
pos += formatex(cache[pos], 511-pos"9. Next^n")
        
keys |= 1<<8
    
}else{
        
pos += formatex(cache[pos], 511-pos"\d9. Next^n")
    }
    
pos += formatex(cache[pos], 511-pos"\w0. %s"page>0?"Back":"Exit")
    
show_menu(idkeyscache, -1)
    return 
PLUGIN_HANDLED
}


public 
multiple_pages_menu_handler(idkey){
    switch(
key){
        case 
8multiple_pages_menu(idg_p_page[id]+1)
        case 
9multiple_pages_menu(idg_p_page[id]-1)
        default:{
            new 
item_id g_p_page[id]*8+key
            client_print
(id"You selected item %s"g_item_name[item_id])
        }
    }




All times are GMT -4. The time now is 07:04.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.