Урока съм го тествал и нещата се получават , за тези които немогат нека знаят ,че грешката не е в урока.
Препоръчвам ви да работите с текстов едитор notepad ++ понеже има повече опции и е по добър.
в ...\cstrike\addons\amxmodx\scripting\ отваряте constants.inl и намирате
Code: Select all
#define MAX_LEVELS
като добавяте нивото което искате
Отваряте war3ft.inl , намирате
Code: Select all
// 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 ) );
}
Code: Select all
// 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 ) );
}
Code: Select all
// 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) );
}
Code: Select all
// 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) );
}
Code: Select all
// 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 ) );
}
Code: Select all
// 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 ) );
}
Code: Select all
// 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 )
{
Code: Select all
// 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 )
{
Code: Select all
// Store level sprite names
for ( i = 0; i < 11; i++ )
{
formatex( g_szLevelSprites[i], 63, "sprites/warcraft3/level/a_level_%d.spr", i );
}
Code: Select all
// 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 );
}
В xp.inl намирате
Code: Select all
new Float:iLevelMultiplier = ( fCurrentLevel / 10.0 ) + 1.0;
Code: Select all
new Float:iLevelMultiplier = ( fCurrentLevel / float(MAX_LEVELS) ) + 1.0;
Code: Select all
XP_GetByLevel( iLevel )
{
if ( iLevel < 0 || iLevel > 10 )
{
return 0;
}
Code: Select all
XP_GetByLevel( iLevel )
{
if ( iLevel < 0 || iLevel > MAX_LEVELS )
{
return 0;
}
Code: Select all
XP_GivenByLevel( iLevel )
{
if ( iLevel < 0 || iLevel > 10 )
{
return 0;
}
Code: Select all
XP_GivenByLevel( iLevel )
{
if ( iLevel < 0 || iLevel > MAX_LEVELS )
{
return 0;
}
Code: Select all
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;
}
Code: Select all
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;
}
В xp.h намирате
Code: Select all
// 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};
Code: Select all
// 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};
За да промените нивата за уменията трябва да направите следните неща
в constants.inl намирате
Code: Select all
#define MAX_SKILL_LEVEL
Отивате в skill_manager.inl , намирате
Code: Select all
// 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;
}
Code: Select all
// 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;
}
!!!ВАЖНО!!!
на този ред
new iXPLevelSaved[MAX_LEVELS+1] = {0,100,200,400,800,1600,3200,6400,12800,25600,51200};
трябва да калкулирате ило да въведете други стойности след 51200 за да се получи
тоест след тази стойност добавяте нейната x 2.
,51200,102400,204800,...
Добавям и 22 спрайта (sprites)
Изтегли war3ft 22 level sprites