Penguin Enthusiast
Join Date: Jun 2016
Location: Macedonia
|
08-07-2019
, 07:31
Menu calls MENU_EXIT
|
#1
|
I got this code which adds a team menu, where you can change every player's team, it works if there's 6-32 players but when there's only 1-5 (the last check) when I press the switch button, it calls MENU_EXIT, which confuses me..
PHP Code:
public Function( id )
{
case 9:
{
if( ~ get_user_flags( id ) & g_iConfig[ TEAM_FLAG ] )
{
client_print( id, print_console, "%s %L", g_iConfig[ SYSTEM_PREFIX ], id, "NO_ACCESS_MENU" );
return PLUGIN_HANDLED;
}
new iPlayers[ MAX_PLAYERS ], iNum, iTempId, szName[ MAX_NAME_LENGTH*2 ], szSwitch[ 64 ], szPlayerTeam[ 20 ], szId[ 3 ], iCount, bool:bSwitchAdded;
get_players( iPlayers, iNum );
if( g_iTeamSwitch[ id ] == TEAM_UNASSIGNED )
{
get_user_team( id ) == TEAM_T ? ( g_iTeamSwitch[ id ] = TEAM_CT ) : ( g_iTeamSwitch[ id ] = TEAM_T );
GetTeamName( g_iTeamSwitch[ id ], g_szTeamSwitch[ id ], charsmax( g_szTeamSwitch[ ] ) ); // CT
}
formatex( szMenuTitle, charsmax( szMenuTitle ), "%L", id, "TEAM_MENU" );
iMenu2 = menu_create( szMenuTitle, "@TeamMenu" );
formatex( szSwitch, charsmax( szSwitch ), "%L: \r%s", id, "CURRENT_SWITCH_TEAM", g_szTeamSwitch[ id ] ); // switch CT
if( iNum > 6 ) // more than 6 players, if we want switch to always be 7th we have to stop adding items and add the switch
{
for( new i; i < iNum; i++ )
{
iTempId = iPlayers[ i ];
if( iCount == 6 && ! bSwitchAdded )
{
menu_additem( iMenu2, szSwitch, "switch" );
bSwitchAdded = true;
}
get_user_name( iTempId, szName, charsmax( szName ) );
get_user_team( iTempId, szPlayerTeam, charsmax( szPlayerTeam ) );
num_to_str( iTempId, szId, charsmax( szId ) );
if( ! equali( szPlayerTeam, g_szTeamSwitch[ id ] ) )
{
format( szName, charsmax( szName ), "%s \y[%s]", szName, szPlayerTeam );
}
else
{
format( szName, charsmax( szName ), "\d%s [%s]", szName, szPlayerTeam );
}
menu_additem( iMenu2, szName, szId );
iCount++;
}
}
else
{
if( iNum == 6 ) // if theres 6 players no need to add blanks
{
for( new i; i < iNum; i++ )
{
iTempId = iPlayers[ i ];
get_user_name( iTempId, szName, charsmax( szName ) );
get_user_team( iTempId, szPlayerTeam, charsmax( szPlayerTeam ) );
num_to_str( iTempId, szId, charsmax( szId ) );
if( ! equali( szPlayerTeam, g_szTeamSwitch[ id ] ) )
{
format( szName, charsmax( szName ), "%s \y[%s]", szName, szPlayerTeam );
}
else
{
format( szName, charsmax( szName ), "\d%s [%s]", szName, szPlayerTeam );
}
menu_additem( iMenu2, szName, szId );
}
menu_additem( iMenu2, szSwitch, "switch" );
}
else // need to add blanks
{
for( new i; i < iNum; i++ ) // add all players to the list
{
iTempId = iPlayers[ i ];
get_user_name( iTempId, szName, charsmax( szName ) );
get_user_team( iTempId, szPlayerTeam, charsmax( szPlayerTeam ) );
num_to_str( iTempId, szId, charsmax( szId ) );
if( ! equali( szPlayerTeam, g_szTeamSwitch[ id ] ) )
{
format( szName, charsmax( szName ), "%s \y[%s]", szName, szPlayerTeam );
}
else
{
format( szName, charsmax( szName ), "\d%s [%s]", szName, szPlayerTeam );
}
menu_additem( iMenu2, szName, szId );
}
new iCalculateBlanks = 6 - iNum; // calculate how many blanks we need
for( new i = 1; i <= iCalculateBlanks; i++ )
{
menu_addblank( iMenu2, 1 ); // add the blanks
}
menu_additem( iMenu2, szSwitch, "switch" ); // add switch
}
}
}
}
@TeamMenu( id, iMenu, iItem )
{
if( iItem == MENU_EXIT )
{
client_print( id, print_chat, "EXIT" );
g_iTeamSwitch[ id ] = 0;
arrayset( g_szTeamSwitch[ id ], 0, sizeof( g_szTeamSwitch[ ] ) );
menu_destroy( iMenu );
return PLUGIN_HANDLED;
}
new iAccess, szInfo[ 10 ], iCallback;
menu_item_getinfo( iMenu, iItem, iAccess, szInfo, charsmax( szInfo ), _, _, iCallback );
if( equali( szInfo, "switch" ) )
{
// if it's TEAM_SPEC (3), reset back to TEAM_T (1), otherwise increase by 1 (TEAM_T becomes TEAM_CT, TEAM_CT becomes TEAM_SPEC)
switch( g_iTeamSwitch[ id ] )
{
case TEAM_T:
{
g_iTeamSwitch[ id ] = TEAM_CT;
}
case TEAM_CT:
{
g_iTeamSwitch[ id ] = TEAM_SPEC;
}
case TEAM_SPEC:
{
g_iTeamSwitch[ id ] = TEAM_T;
}
}
GetTeamName( g_iTeamSwitch[ id ], g_szTeamSwitch[ id ], charsmax( g_szTeamSwitch[ ] ) );
menu_destroy( iMenu );
set_task( 0.1, "ReOpenTeamMenu", id + TASK_TEAM_MENU );
return PLUGIN_HANDLED;
}
new iPlayer = str_to_num( szInfo );
if( ! is_user_connected( iPlayer ) )
{
CC_SendMessage( id, "&x04%s %L", g_iConfig[ SYSTEM_PREFIX ], id, "PLAYER_NOT_FOUND_COLORED" );
return PLUGIN_HANDLED;
}
new szTeam[ 20 ];
get_user_team( iPlayer, szTeam, charsmax( szTeam ) );
if( equali( szTeam, g_szTeamSwitch[ id ] ) )
{
menu_destroy( iMenu );
set_task( 0.1, "ReOpenTeamMenu", id + TASK_TEAM_MENU );
return PLUGIN_HANDLED;
}
new iImmunityLevel = GetImmunityLevel( id );
new iImmunityLevelTarget = GetImmunityLevel( iPlayer );
if( iImmunityLevel < iImmunityLevelTarget )
{
CC_SendMessage( id, "&x04%s %L", g_iConfig[ SYSTEM_PREFIX ], id, "CANT_PERFORM_IMMUNITY_COLORED" );
return PLUGIN_HANDLED;
}
new szSteamIdAdmin[ MAX_AUTHID_LENGTH ], szNameAdmin[ MAX_NAME_LENGTH ], szNamePlayer[ MAX_NAME_LENGTH ], szTeamFinal[ 20 ];
get_user_authid( id, szSteamIdAdmin, charsmax( szSteamIdAdmin ) );
get_user_name( id, szNameAdmin, charsmax( szNameAdmin ) );
get_user_name( iPlayer, szNamePlayer, charsmax( szNamePlayer ) );
if( equali( g_szTeamSwitch[ id ], "TERRORIST" ) )
{
eas_set_user_team( iPlayer, 1 );
copy( szTeamFinal, charsmax( szTeamFinal ), "Terrorist" );
}
else if( equali( g_szTeamSwitch[ id ], "CT" ) )
{
eas_set_user_team( iPlayer, 2 );
copy( szTeamFinal, charsmax( szTeamFinal ), "Counter-Terrorist" );
}
else if( equali( g_szTeamSwitch[ id ], "SPECTATOR" ) )
{
eas_set_user_team( iPlayer, 3 );
copy( szTeamFinal, charsmax( szTeamFinal ), "Spectator" );
}
CC_SendMatched( 0, iPlayer, "&x04%s %L", g_iConfig[ SYSTEM_PREFIX ], LANG_PLAYER, "TEAM_CHANGE", szNameAdmin, szNamePlayer, szTeamFinal );
log_to_file( g_iConfig[ Logs_File ], "%L", LANG_PLAYER, "TEAM_CHANGE_LOG", szNameAdmin, szSteamIdAdmin, szNamePlayer, szTeamFinal );
menu_destroy( iMenu );
set_task( 0.1, "ReOpenTeamMenu", id + TASK_TEAM_MENU );
return PLUGIN_HANDLED;
}
Block of code which is bugged
Code:
else // need to add blanks
{
for( new i; i < iNum; i++ ) // add all players to the list
{
iTempId = iPlayers [ i ];
get_user_name( iTempId, szName, charsmax ( szName ) );
get_user_team( iTempId, szPlayerTeam, charsmax ( szPlayerTeam ) );
num_to_str( iTempId, szId, charsmax ( szId ) );
if( ! equali( szPlayerTeam, g_szTeamSwitch [ id ] ) )
{
format( szName, charsmax ( szName ), "%s \y[%s]", szName, szPlayerTeam );
}
else
{
format( szName, charsmax ( szName ), "\d%s [%s]", szName, szPlayerTeam );
}
menu_additem( iMenu2, szName, szId );
}
new iCalculateBlanks = 6 - iNum; // calculate how many blanks we need
for( new i = 1; i <= iCalculateBlanks; i++ )
{
menu_addblank( iMenu2, 1 ); // add the blanks
}
menu_additem( iMenu2, szSwitch, "switch" ); // game counts this as MENU_EXIT for some reason }
__________________
Last edited by edon1337; 08-08-2019 at 08:52.
|
|