[ Обновленные темы · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Alena_kill  
Делаем более 10 уровней(level`s) в WAR3FT моде
Оффлайн
Вторник, 12.02.2013, 16:53 | Сообщение # 1
Сообщений:
89
Награды:
122
Для тех кто хочет внести разнообразие в свой сервер. Статья как увеличить максимальный уровень прокачки рас и как сделать, чтобы умения
качались дальше.

Все что нам нужно это исходние 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 хп не так
велика.

Тут так же потребуется компилить плагин

Удачи в редактировании =)

  • Страница 1 из 1
  • 1
Поиск:

Администрация не несёт ответственности за содержащие файлы на данном портале.
Все материалы на сайте принадлежат исключительно их владельцам!
Главный администратор сайта na3uTuB4uk | | Sitemap | Sitemap-Forum | RSS лента NK-CS.RU