|
Оффлайн
Вторник, 12.02.2013, 16:53 | Сообщение # 1
|
|
Для тех кто хочет внести разнообразие в свой сервер. Статья как увеличить максимальный уровень прокачки рас и как сделать, чтобы умения качались дальше.
Все что нам нужно это исходние War3ft мода. В папке "scripting" ищем папку war3ft в которой лежат различные файлы, отвечающие за мод. Итак поехали:
Повышаем максимальный уровень
1. В constants.inl находим следующую строчку. В ней и меняем 10 на нужное Вам количество уровней (строка №240) Код #define MAX_LEVELS 10
2. В war3ft.inl ищем: (строка №720) Код // User is under level 10 else if ( p_data[id][P_LEVEL] < 10 ) { pos += formatex( szRaceInfo[pos], 255, "%s %L: %d XP: %d/%d ", szShortRaceName, id, "WORD_LEVEL", p_data[id][P_LEVEL], p_data[id][P_XP], XP_GetByLevel( p_data[id][P_LEVEL]+1) ); formatex( szXPInfo, 31, "%L: %d XP: %d/%d", id, "WORD_LEVEL", p_data[id][P_LEVEL], p_data[id][P_XP], XP_GetByLevel( p_data[id][P_LEVEL]+1 ) ); }
и меняем на следующее: Код // User is under level 10 else if ( p_data[id][P_LEVEL] < MAX_LEVELS ) { pos += formatex( szRaceInfo[pos], 255, "%s %L: %d XP: %d/%d ", szShortRaceName, id, "WORD_LEVEL", p_data[id][P_LEVEL], p_data[id][P_XP], XP_GetByLevel( p_data[id][P_LEVEL]+1) ); formatex( szXPInfo, 31, "%L: %d XP: %d/%d", id, "WORD_LEVEL", p_data[id][P_LEVEL], p_data[id][P_XP], XP_GetByLevel( p_data[id][P_LEVEL]+1 ) ); }
Далее там же ищем: (строка №754) Код // User is under level 10 else if ( p_data[id][P_LEVEL] < 10 ) { pos += formatex( szRaceInfo[pos], 255, "%s %L: %d^nXP: %d/%d^n", szShortRaceName, id, "WORD_LEVEL", p_data[id][P_LEVEL], p_data[id][P_XP], XP_GetByLevel( p_data[id][P_LEVEL]+1) );
}
Заменяем на: Код // User is under level 10 else if ( p_data[id][P_LEVEL] < MAX_LEVELS ) { pos += formatex( szRaceInfo[pos], 255, "%s %L: %d^nXP: %d/%d^n", szShortRaceName, id, "WORD_LEVEL", p_data[id][P_LEVEL], p_data[id][P_XP], XP_GetByLevel( p_data[id][P_LEVEL]+1) );
}
Ищем: (строка №968) Код // User is under level 10 else if ( p_data[iTargetID][P_LEVEL] < 10 ) { iMsgPos += formatex( szMsg, 511, "%s %L: %d XP: %d/%d", szRaceName, id, "WORD_LEVEL", p_data[iTargetID][P_LEVEL], p_data[iTargetID][P_XP], XP_GetByLevel( p_data[iTargetID][P_LEVEL]+1 ) ); }
Меняем на: Код // User is under level 10 else if ( p_data[iTargetID][P_LEVEL] < MAX_LEVELS-1 ) { iMsgPos += formatex( szMsg, 511, "%s %L: %d XP: %d/%d", szRaceName, id, "WORD_LEVEL", p_data[iTargetID][P_LEVEL], p_data[iTargetID][P_XP], XP_GetByLevel( p_data[iTargetID][P_LEVEL]+1 ) ); }
Ищем: (строка №644) Код // Do we need to give this user XP? new iStartLevel = get_pcvar_num( CVAR_wc3_start_level ); if ( p_data[id][P_XP] < XP_GetByLevel( iStartLevel ) && iStartLevel > 0 && iStartLevel <= 10 ) {
Меняем: Код // Do we need to give this user XP? new iStartLevel = get_pcvar_num( CVAR_wc3_start_level ); if ( p_data[id][P_XP] < XP_GetByLevel( iStartLevel ) && iStartLevel > 0 && iStartLevel <= MAX_LEVELS ) {
Ищем: (строка №127) Код // Store level sprite names for ( i = 0; i < 11; i++ ) { formatex( g_szLevelSprites, 63, "sprites/warcraft3/level/a_level_%d.spr", i ); }
Меняем на: Код // Store level sprite names for ( i = 0; i < MAX_LEVELS+1; i++ ) { formatex( g_szLevelSprites[i], 63, "sprites/warcraft3/level/a_level_%d.spr", i ); }
На этом с этим файлом все. Сохраняем.
3. В файле xp.inl находим: (строка №732) Код new Float:iLevelMultiplier = ( fCurrentLevel / 10.0 ) + 1.0;
Меняем на: Код new Float:iLevelMultiplier = ( fCurrentLevel / float(MAX_LEVELS) ) + 1.0;
Находим: (строка №387) Код XP_GetByLevel( iLevel ) { if ( iLevel < 0 || iLevel > 10 ) { return 0; }
Меняем на: Код XP_GetByLevel( iLevel ) { if ( iLevel < 0 || iLevel > MAX_LEVELS ) { return 0; }
Находим: (строка №406) Код XP_GivenByLevel( iLevel ) { if ( iLevel < 0 || iLevel > 10 ) { return 0; }
Меняем на: Код XP_GivenByLevel( iLevel ) { if ( iLevel < 0 || iLevel > MAX_LEVELS ) { return 0; }
4. В файле admin.inl находим: (строка №91) Код new iLevel = str_to_num( szArg2 );
if ( iLevel < 0 || iLevel >= 11 ) { ADMIN_Print( id, "%s Error, level must be in between (or equal to) 0 and 17", g_MODclient );
return PLUGIN_HANDLED; }
Меняем на: Код new iLevel = str_to_num( szArg2 );
if ( iLevel < 0 || iLevel >= MAX_LEVELS+1 ) { ADMIN_Print( id, "%s Error, level must be in between (or equal to) 0 and 17", g_MODclient );
return PLUGIN_HANDLED; }
5. В файле xp.h находим: (строка №47) Код // Amount of XP needed to gain a level new iXPLevelShortTerm[11] = {0,150,300,600,1000,1500,2100,2800,3400,4500,5500}; new iXPLevelSaved[11] = {0,100,200,400,800,1600,3200,6400,12800,25600,51200};
// Amount of XP awarded when killing a user of this level new iXPGivenShortTerm[11] = {10,15,25,35,40,50,60,70,80,90,95}; new iXPGivenSaved[11] = {6,8,10,12,14,16,18,20,24,28,32};
Меняем на: Код // Amount of XP needed to gain a level new iXPLevelShortTerm[MAX_LEVELS+1] = {0,150,300,600,1000,1500,2100,2800,3400,4500,5500}; new iXPLevelSaved[MAX_LEVELS+1] = {0,100,200,400,800,1600,3200,6400,12800,25600,51200};
// Amount of XP awarded when killing a user of this level new iXPGivenShortTerm[MAX_LEVELS+1] = {10,15,25,35,40,50,60,70,80,90,95}; new iXPGivenSaved[MAX_LEVELS+1] = {6,8,10,12,14,16,18,20,24,28,32};
Цитата new iXPLevelShortTerm[MAX_LEVELS+1] <<< хп не сохраняется new iXPLevelSaved[MAX_LEVELS+1] << хп сохраняется
new iXPGivenShortTerm[MAX_LEVELS+1] << сколько даётся опыта за килл при не сохранении хп new iXPGivenSaved[MAX_LEVELS+1] << сколько даётся опыта за килл при сохранении хп
В фигурные скобки вы должны добавить числа,чтобы их было столько,сколько у вас уровней включая нулевой.
Вот так будет выглядеть для 13 уровней: Код new iXPLevelSaved[14] = {0,100,200,400,800,1600,3200,6400,12800,25600,51200,60000,70000,80000};
Продлеваем прокачку скилов
1. В файле constants.inl находим: (строка №544) Код #define MAX_SKILLS 36 #define MAX_RACE_SKILLS 3 #define MAX_SKILL_LEVEL 3
Меняем на: Код #define MAX_SKILLS 36 - если у вас 13 уровней,то на 48.Если 16,на 60...Формула расчета "36 + (Вам максимальный уровень - 10) * 4"
#define MAX_RACE_SKILLS 3 #define MAX_SKILL_LEVEL 3 Каждые +3 левла добавляется +1 к этим двум параметрам
Находим: (строка №569) Код // Constants for Abilities new const Float:p_vampiric[3] = {0.10,0.20,0.30} // Vampiric Aura (skill 1) new Float:p_unholy[3] = {265.0,285.0,300.0} // Unholy Aura (skill 2) new Float:p_unholy_dod[3] = {33.3,66.6,100.0} // Unholy Aura (skill 2) new const Float:p_levitation[3] = {0.8,0.6,0.4} // Levitation (skill 3)
new const p_invisibility[3] = {200,175,135} // Invisibility (skill 1) new const p_devotion = 15 // Devotion Aura (skill 2) new const Float:p_bash[3] = {0.10,0.20,0.30} // Bash (skill 3)
new const Float:p_critical[3] = {0.25,0.50,0.75} // Critical Strike (skill 1) new const Float:p_grenade[3] = {2.0,3.0,4.0} // Critical Grenade (skill 2) new const Float:p_ankh[3] = {0.333,0.666,1.0} // Equipment reincarnation (skill 3)
new const Float:p_evasion[3] = {0.1,0.175,0.25} // Evasion (skill 1) new const Float:p_thorns[3] = {0.05,0.1,0.15} // Thorns Aura (skill 2) new const Float:p_trueshot[3] = {0.1,0.2,0.35} // Trueshot Aura (skill 3)
new const Float:p_phoenix[3] = {0.333,0.666,1.0} // Phoenix (skill 1) new const p_phoenix_dod[3] = {300,600,900} // Phoenix - DOD (skill 1) new const Float:p_banish[3] = {0.05,0.10,0.15} // Banish (skill 2) new const Float:p_mana[3] = {0.02,0.04,0.08} // Siphon Mana (skill 3) new const Float:p_resistant[11] = {0.02, 0.04, 0.08, 0.12, 0.16, 0.20, 0.24, 0.28, 0.32, 0.36, 0.40} // Resistant Skin (Skill 4)
new const Float:p_heal[3] = {6.0,4.0,2.0} // Healing Wave (skill 1) new const Float:p_hex[3] = {0.05,0.10,0.15} // Hex (skill 2) new const p_serpent[3] = {1,2,3} // Serpent Ward (skill 3) new const Float:p_concoction[11] = {0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.10, 0.15} // Unstable Concoction (Skill 4)
new const Float:p_fan[3] = {0.05,0.10,0.15} // Fan of Knives (skill 1) new const Float:p_blink[3] = {0.333,0.666,1.0} // Blink (skill 2) new const Float:p_shadow[3] = {0.05,0.10,0.15} // Shadow Strike (skill 3) new const Float:p_harden[11] = {0.03, 0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 0.35, 0.40, 0.45, 0.50} // Hardened Skin (Skill 4)
new const Float:p_impale[3] = {0.05,0.1,0.15} // Impale (skill 1) new const Float:p_spiked[3] = {0.05,0.1,0.15} // Spiked Carapace (skill 2) new const Float:p_carrion[3] = {0.05,0.10,0.15} // Carrion Beetle (skill 3) new const Float:p_orb[11] = {0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.10, 0.15} // Orb of Annihilation (Skill 4)
Это скилы наших рас. [3] - означает наши старые уровни, числа в фигурных скобках - это коофициенты, проценты и т.д. бонусы от скилов
Меняем на: Код // Constants for Abilities new const Float:p_vampiric[4] = {0.10,0.20,0.30,0.40} // Vampiric Aura (skill 1) new Float:p_unholy[4] = {265.0,285.0,300.0,320.0} // Unholy Aura (skill 2) new Float:p_unholy_dod[4] = {33.3,66.6,100.0,133.3} // Unholy Aura (skill 2) new const Float:p_levitation[4] = {0.8,0.6,0.4,0.3} // Levitation (skill 3)
new const p_invisibility[4] = {200,175,135,120} // Invisibility (skill 1) new const p_devotion = 15 // Devotion Aura (skill 2) new const Float:p_bash[4] = {0.10,0.20,0.30,0.40} // Bash (skill 3)
new const Float:p_critical[4] = {0.25,0.50,0.75,0.85} // Critical Strike (skill 1) new const Float:p_grenade[4] = {2.0,3.0,4.0,5.0} // Critical Grenade (skill 2) new const Float:p_ankh[4] = {0.333,0.666,0.788,1.0} // Equipment reincarnation (skill 3)
new const Float:p_evasion[4] = {0.1,0.175,0.25,0.275} // Evasion (skill 1) new const Float:p_thorns[4] = {0.05,0.1,0.15,0.2} // Thorns Aura (skill 2) new const Float:p_trueshot[4] = {0.1,0.2,0.35,0.45} // Trueshot Aura (skill 3)
new const Float:p_phoenix[4] = {0.333,0.666,0.788,1.0} // Phoenix (skill 1) new const p_phoenix_dod[4] = {300,600,900,1200} // Phoenix - DOD (skill 1) new const Float:p_banish[4] = {0.05,0.10,0.15,0.20} // Banish (skill 2) new const Float:p_mana[4] = {0.02,0.04,0.08,0.12} // Siphon Mana (skill 3) new const Float:p_resistant[14] = {0.02, 0.04, 0.08, 0.12, 0.16, 0.20, 0.24, 0.28, 0.32, 0.34, 0.36,0.38,0.40,0.42} // Resistant Skin new const Float:p_heal[4] = {6.0,4.0,2.0,1.5} // Healing Wave (skill 1) new const Float:p_hex[4] = {0.05,0.10,0.15,0.20} // Hex (skill 2) new const p_serpent[4] = {1,2,3,4} // Serpent Ward (skill 3) new const Float:p_concoction[14] = {0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.10, 0.11,0.12,0.13,0.14} // Unstable Concoction (Skill 4)
new const Float:p_fan[4] = {0.05,0.10,0.15,0.20} // Fan of Knives (skill 1) new const Float:p_blink[4] = {0.333,0.666,0.8,1.0} // Blink (skill 2) new const Float:p_shadow[4] = {0.05,0.10,0.15,0.20} // Shadow Strike (skill 3) new const Float:p_harden[14] = {0.03, 0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 0.35, 0.37, 0.40, 0.43,0.46,0.50,0.55} // Hardened Skin (Skill 4)
new const Float:p_impale[4] = {0.05,0.1,0.15,0.2} // Impale (skill 1) new const Float:p_spiked[4] = {0.05,0.1,0.15,0.2} // Spiked Carapace (skill 2) new const Float:p_carrion[4] = {0.05,0.10,0.15,0.2} // Carrion Beetle (skill 3) new const Float:p_orb[14] = {0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.10, 0.11,0.12,0.13,0.15} // Orb of Annihilation (Skill 4)
Это пример для 13 уровней, который дал нам еще по 1 лвл каждому скилу. Поэтому [3] заменилось на [4] и в фигурных скобках добавилось еще одно число. Соответственно каждые +3 левела будут добавлять +1 к [3] и одно число в фигурныъ скобках.
Для 16-го [4] изменится на [5] и 5 чисел в фигурных скобках.
Вы так же можете здесь изменять силы эффектов и в конечном итоге усилить скилы или наоборот сделать слабее на максимальном уровне.
2. В файле skill_manager.inl находим: (строка №294) Код // Technically we shouldn"t have a skill level EVER greater than 3 right? if ( iLevel > 3 ) { WC3_Log( false, "Setting skill %d to %d wtf?? (%d)", skill_id, iLevel, iDebugID );
log_error( AMX_ERR_NATIVE, "Setting skill %d to %d wtf?? (%d)", skill_id, iLevel, iDebugID );
return; }
Именно это условие проверяет не превышает ли уровень скила 3 (по умолчанию). Меняем на: Код // Technically we shouldn"t have a skill level EVER greater than 3 right? if ( iLevel > MAX_SKILL_LEVEL ) { WC3_Log( false, "Setting skill %d to %d wtf?? (%d)", skill_id, iLevel, iDebugID );
log_error( AMX_ERR_NATIVE, "Setting skill %d to %d wtf?? (%d)", skill_id, iLevel, iDebugID );
return; }
MAX_SKILL_LEVEL в этом коде меняем на число уровней скила. Будь это 4 или 5 и т.д.
Создаем спрайты для новых уровней Без них сервер попросту не запустится и в логах увидите ошибку вида "Missed sprite file" (Что то типа того) Идем в папку sprites/war3ft/level и видим там файлики a_level_*.spr, * - число от 0 до 10. Вам нужно чтобы количество спрайтов было равно вашему новому уровню. К примеру для 13 левела, вам нужно добавить их до a_level_13.spr и т.д.
На этом все. Остается только скомпилить плагин и поставить на сервер
Лечим ульт Wardena для карт типа 35hp и прочих где в начале отнимается более 50 hp
Как вы знаете ульт Wardena заключается в возможности воскреснуть после смерти на базе с 50 хп или просто телепортнутся живым туда с 50 хп. Но на картах где в начале раунда отнимается более 50 хп, варден не может этого сделать. Решение простое, но дающее вардену небольшой +.
Открываем файл race_warden.inl и ищем: Код #define VENGEANCE_HEALTH 50
Меняем на: Код #define VENGEANCE_HEALTH 100
Теперь варден при воскрешении имеет 100 хп. Если у вас нет карт которые отнимают более 65 хп, то можно написать не 100, а 66. Тогда воскрешаться будет с 1 хп, а на обычных мапах разница между 50 хп и 66 хп не так велика.
Тут так же потребуется компилить плагин
Удачи в редактировании =)
|
|