7) Регестрируем наши скиллы в langugage.inl. Находим функцию LANG_GetSkillInfo( skill_id, idUser, skill_description[], len ) {
И добавляем в конец:
// Название вашей рассы case SKILL_ВАШ_СКИЛЛ_1: formatex ( skill_description, len, "%L", id, "SKILL_I_36" ); case SKILL_ВАШ_СКИЛЛ_2: formatex ( skill_description, len, "%L", id, "SKILL_I_37" ); case SKILL_ВАШ_СКИЛЛ_3: formatex ( skill_description, len, "%L", id, "SKILL_I_38" ); case ULTIMATE_ВАШ_СУПЕР_НАВЫК: formatex ( skill_description, len, "%L", id, "SKILL_I_39" );
8) Далее нам нужно создать скиллы и ультимэйт ( создаете сами ) Только скажу одно, что скиллы должны быть аттакующие и защищающие и их нужно регестрировать в файле events.inl
9) Создаем ультимэйт: он подразделяется на 2 типа: 1) который ищит жертву ( слышно по звуку пикания ) 2) который работает без поиска жертвы ( пример ультимэйт вардена. Далее нам нужно регестрировать ультимэйты в файле ClientCommands.inl и Events.inl ( нужно регестрировать только при 1 типе ультимэйта )
10) Заходим в ultimates.h и видим
new g_UltimateIcons[10][32] = { "dmg_rad", // Undead "item_longjump", // Human Alliance "dmg_shock", // Orcish Horde "item_healthkit", // Night Elf "dmg_heat", // Blood Mage "suit_full", // Shadow Hunter "cross", // Warden "dmg_gas", // Crypt Lord "", // Хамелеон если 9 рассой стоит хамелеон то ковычки должны быть пустые! "dmg_cold" // Ваша расса, dmg_cold - значок снежинки };
11) Заходим в ultimates.inl и ищем
// Each race has its on color for its icon... switch ( iRaceID ) { case 1: r=255, g=0, b=0; // Undead case 2: r=0, g=120, b=120; // Human case 3: r=255, g=255, b=255; // Orc case 4: r=0, g=0, b=255; // Night Elf case 5: r=255, g=0, b=0; // Blood Mage case 6: r=0, g=200, b=200; // Shadow Hunter case 7: r=255, g=0, b=0; // Warden case 8: r=0, g=255, b=0; // Crypt Lord case 9: r=0, g=0, b=0; // Хамелеон case 10: r=0, g=255, b=255; // Цвет значка вашей рассы }
12) Идем в skills.inl и изменяем значение MAX_SKILLS. Оно меняется по записи ваших скиллов в constants.inl, если последняя запись была
#define PASS_ВАША_ПАССИВКА 40 то MAX_SKILLS будет равняться 41 ( т.е механизм такой constants.inl + 1)
13) Заходим в menus.inl и ищем функцию
Код
public MENU_ChangeRace( idUser, iRaceXP[MAX_RACES] ) и public _MENU_ChangeRace( idUser, key )
и заменяем ее под 10 расс:
// Function will display the changerace menu public MENU_ChangeRace( idUser, iRaceXP[MAX_RACES] ) {
new szRaceName[MAX_RACES+1][64], i, pos, iKeys = 0, szMenu[512], szXP[16];
// Get our race names for ( i = 0; i < 10; i++ ) { lang_GetRaceName( i + 1, idUser, szRaceName, 63 ); }
// Build the changerace menu (for every race) for ( i = 0; i < 10; i++ ) { num_to_str( iRaceXP, szXP, 15 );
// Add the "Select a Hero" message if necessary if ( i == 4 ) { pos += format( szMenu[pos], charsmax(szMenu)-pos, "%L", LANG_PLAYER, "SELECT_HERO" ); }
// User's current race if ( i == p_data[idUser][P_RACE] - 1 ) { pos += formatex( szMenu[pos], charsmax(szMenu)-pos, "\d%d. %s\d\R%s^n", i + 1, szRaceName, ( (get_pcvar_num( CVAR_wc3_save_xp )) ? szXP : " " ) );
iKeys |= (1<<i); }
// Race the user wants to change to else if ( i == p_data[idUser][P_CHANGERACE] - 1 ) { pos += formatex( szMenu[pos], charsmax(szMenu)-pos, "\r%d. %s\r\R%s^n", i + 1, szRaceName, ( (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], charsmax(szMenu)-pos, "\w%d. %s\y\R%s^n", i + 1, szRaceName, ( (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], charsmax(szMenu)-pos, "\d%d. %s\y\R%s^n", i + 1, szRaceName, ( (get_pcvar_num( CVAR_wc3_save_xp )) ? szXP : " " ) ); } }
}
iKeys |= (1<<i);
// Show the menu to the user! show_menu( idUser, iKeys, szMenu, -1 );
return; }
public _MENU_ChangeRace( idUser, key ) {
if ( !WC3_Check() ) { return PLUGIN_HANDLED; }
// Save the current race data before we change DB_SaveXP( idUser, false );
new iRace;
iRace = key + 1;
// User currently has a race if ( p_data[idUser][P_RACE] != 0 ) {
// Change the user's race at the start of next round if ( iRace != p_data[idUser][P_RACE] ) {
// Special message for csdm if ( CVAR_csdm_active > 0 && get_pcvar_num( CVAR_csdm_active ) == 1 ) { client_print( idUser, print_center, "%L",LANG_PLAYER,"CLIENT_PRINT_MENU_CHANGE_RACE");