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.
|
|
| |