Добро пожаловать на форум, Гость, это ваша панель
  • Страница 1 из 1
  • 1
Changerace 2nd page
hadeS-
Дата: Вторник, 02.10.2012, 10:49 | Сообщение # 1
офлайн

  • Сообщения: 7
  • Награды: 0
  • Замечания:
 
hello all, i want to know where i wrong at this code, and how to solve it.

Code
// Function will display the changerace menu
public MENU_ChangeRace( id )
{
      
     new szRaceName[MAX_RACES+1][64], i, pos, iKeys = 0, szMenu[512], szXP[16];
     new iTotalRaces = get_pcvar_num( CVAR_wc3_races );
     new iRaceXP[MAX_RACES];

     // Get our race names
     for ( i = 0; i < get_pcvar_num( CVAR_wc3_races ); i++ )
     {
         lang_GetRaceName( i + 1, id, szRaceName[i], 63 );
     }

     pos += formatex( szMenu[pos], 512-pos, "%L", id, "MENU_SELECT_RACE" );

     // Then add the experience column
     if ( get_pcvar_num( CVAR_wc3_save_xp ) )
     {
         pos += formatex( szMenu[pos], 512-pos, "\R%L^n^n", id, "MENU_WORD_LEVEL" );
     }
     else
     {
         pos += formatex( szMenu[pos], 512-pos, "^n^n" );
     }

     // Build the changerace menu (for every race)
     for ( i = 0; i < RACES_PER_PAGE; i++ )
     {
         num_to_str( iRaceXP[i], szXP, 15 );
          
         // Add the "Select a Hero" message if necessary
         /*if ( i == 4 )
         {
             pos += format( szMenu[pos], 512-pos, "%L", id, "SELECT_HERO" );
         }*/
          
         // User's current race
         if ( i == p_data[id][P_RACE] - 1 )
         {
             pos += formatex( szMenu[pos], 512-pos, "\d%d. %s\d\R%s^n", i + 1, szRaceName[i], ( (get_pcvar_num( CVAR_wc3_save_xp )) ? szXP : " " ) );

             iKeys |= (1<<i);
         }

         // Race the user wants to change to
         else if ( i == p_data[id][P_CHANGERACE] - 1 )
         {
             pos += formatex( szMenu[pos], 512-pos, "\r%d. %s\r\R%s^n", i + 1, szRaceName[i], ( (get_pcvar_num( CVAR_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 += formatex( szMenu[pos], 512-pos, "\w%d. %s\y\R%s^n", i + 1, szRaceName[i], ( (get_pcvar_num( CVAR_wc3_save_xp )) ? szXP : " " ) );

                 iKeys |= (1<<i);
             }

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

     }

     // Add a next button to the bottom
     if ( iTotalRaces > 8 )
     {
         iKeys |= (1<<8);

         pos += format( szMenu[pos], 512-pos, "^n\w9. \y%L", id, "WORD_NEXT" );
     }

     iKeys |= (1<<9);
     pos += format( szMenu[pos], 512-pos, "^n\w0. %L", id, "WORD_CANCEL" );
      
     // Show the menu to the user!
     show_menu( id, iKeys, szMenu, -1 );

     return;
}

/*HLPR_TotalUsingRaces( iTotalRaces[MAX_RACES] )
{
     new iTotal = 0;
     for ( new i = 1; i <= get_pcvar_num( CVAR_wc3_races ); i++ )
     {
         WC3_Log( true, "%d", i );
         iTotal += iTotalRaces[i];
     }

     return iTotal;
}*/

public _MENU_ChangeRace( id, key )
{

     if ( !WC3_Check() )
     {
         return PLUGIN_HANDLED;
     }
      
     // User pressed 0 (cancel)
     if ( get_pcvar_num( CVAR_wc3_races ) < 9 && key - 1 == get_pcvar_num( CVAR_wc3_races ) )
     {
         return PLUGIN_HANDLED;
     }

     // Save the current race data before we change
     DB_SaveXP( id, false );

     new iRace, iCancelKey = KEY_0, iNextPageKey = KEY_9;
      
     // Next Page ( 9 )
     if ( key == iNextPageKey )
     {
         menu_changeracedoi(id);
     }
      
     // Cancel ( 0 )
     if ( key == iCancelKey )
     {
         return PLUGIN_HANDLED;
     }

     // Otherwise race is set
     else
     {
         iRace = key + 1;
     }

     if(iRace == 9)   
     {   
         if(!(get_user_flags(id) & ADMIN_LEVEL_H ))   
         {   
             client_print( id, print_center, "You have not acces to this race!");     

             return PLUGIN_HANDLED;   
         }   
     }
   
     // User currently has a race
     if ( p_data[id][P_RACE] != 0 )
     {

         // Change the user's race at the start of next round
         if ( iRace != p_data[id][P_RACE] )
         {
              
             // Special message for csdm
             if ( CVAR_csdm_active > 0 && get_pcvar_num( CVAR_csdm_active ) == 1 )
             {
                 client_print( id, print_center, "Your race will be changed when you respawn" );
             }     
             else
             {
                 client_print( id, print_center, "%L", id, "CENTER_CHANGED_NEXT" );
             }

             p_data[id][P_CHANGERACE] = iRace;
         }

         // Do nothing
         else
         {
             p_data[id][P_CHANGERACE] = 0;
         }
     }

     // User doesn't have a race so give it to him!!!
     else
     {
         WC3_SetRace( id, iRace );
     }

     return PLUGIN_HANDLED;
}

public menu_changeracedoi(id)
{
     new szRaceName[MAX_RACES+1][64], i, pos, iKeys = 0, szMenu[512], szXP[16];
     new iTotalRaces = get_pcvar_num( CVAR_wc3_races );
     new iRaceXP[MAX_RACES];

     // Get our race names
     for ( i = 8; i < get_pcvar_num( CVAR_wc3_races ); i++ )
     {
         lang_GetRaceName( i + 1, id, szRaceName[i], 63 );
     }

     pos += formatex( szMenu[pos], 512-pos, "%L", id, "MENU_SELECT_RACE" );

     // Then add the experience column
     if ( get_pcvar_num( CVAR_wc3_save_xp ) )
     {
         pos += formatex( szMenu[pos], 512-pos, "\R%L^n^n", id, "MENU_WORD_LEVEL" );
     }
     else
     {
         pos += formatex( szMenu[pos], 512-pos, "^n^n" );
     }

     // Build the changerace menu (for every race)
     for ( i = 0; RACES_PER_PAGE; i++ )
     {
         num_to_str( iRaceXP[i], szXP, 15 );
          
         // Add the "Select a Hero" message if necessary
         /*if ( i == 4 )
         {
             pos += format( szMenu[pos], 512-pos, "%L", id, "SELECT_HERO" );
         }*/
          
         // User's current race
         if ( i == p_data[id][P_RACE] - 1 )
         {
             pos += formatex( szMenu[pos], 512-pos, "\d%d. %s\d\R%s^n", i + 1, szRaceName[i], ( (get_pcvar_num( CVAR_wc3_save_xp )) ? szXP : " " ) );

             iKeys |= (1<<i);
         }

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

             iKeys |= (1<<i);
         }

         // All other cases
         else
         {
             new bool:bAllowRace = true;

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

                 iKeys |= (1<<i);
             }

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

     }

     // Add a back button to the bottom
     if ( iTotalRaces > 8 )
     {
         iKeys |= (1<<8);

         pos += format( szMenu[pos], 512-pos, "^n\w9. \y%L", id, "WORD_BACK" );
     }

     iKeys |= (1<<9);
     pos += format( szMenu[pos], 512-pos, "^n\w0. %L", id, "WORD_CANCEL" );
      
     // Show the menu to the user!
     show_menu( id, iKeys, szMenu, -1 );

     return;
}

public _menu_changeracedoi(id, key)
{

     if ( !WC3_Check() )
     {
         return PLUGIN_HANDLED;
     }
      
     // User pressed 0 (cancel)
     if ( get_pcvar_num( CVAR_wc3_races ) < 9 && key - 1 == get_pcvar_num( CVAR_wc3_races ) )
     {
         return PLUGIN_HANDLED;
     }

     // Save the current race data before we change
     DB_SaveXP( id, false );

     new iRace, iCancelKey = KEY_0, iBackPageKey = KEY_9;
      
     // NExt Page ( 9 )
     if ( key == iBackPageKey )
     {
         MENU_ChangeRace(id);
     }
      
     // Cancel ( 0 )
     if ( key == iCancelKey )
     {
         return PLUGIN_HANDLED;
     }

     // Otherwise race is set
     else
     {
         iRace = key + 1;
     }

     if(iRace == 9)   
     {   
         if(!(get_user_flags(id) & ADMIN_LEVEL_H ))   
         {   
             client_print( id, print_center, "You have not acces to this race!");     

             return PLUGIN_HANDLED;   
         }   
     }
   
     // User currently has a race
     if ( p_data[id][P_RACE] != 0 )
     {

         // Change the user's race at the start of next round
         if ( iRace != p_data[id][P_RACE] )
         {
              
             // Special message for csdm
             if ( CVAR_csdm_active > 0 && get_pcvar_num( CVAR_csdm_active ) == 1 )
             {
                 client_print( id, print_center, "Your race will be changed when you respawn" );
             }     
             else
             {
                 client_print( id, print_center, "%L", id, "CENTER_CHANGED_NEXT" );
             }

             p_data[id][P_CHANGERACE] = iRace;
         }

         // Do nothing
         else
         {
             p_data[id][P_CHANGERACE] = 0;
         }
     }

     // User doesn't have a race so give it to him!!!
     else
     {
         WC3_SetRace( id, iRace );
     }

     return PLUGIN_HANDLED;
}


When i press 9 for next page the server crash, and in logs doesn't appear any errors.
 
  • Страница 1 из 1
  • 1
Поиск: