Весь опыт находится в файле XP.inl
Функция которая отвечает за выдачу опыта:
Code
stock XP_Give( idUser, iBonusXP )
Code
stock XP_Give( idUser, iBonusXP )
{
if ( !WC3_Check() || !idUser )
{
return 0;
}
// Make sure we have the minimum amount of players
if ( !XP_MinPlayers() )
{
return 0;
}
//CSSB
// Bonus calculated by:
// Bonus XP * (lvl of player/float(MAX_LEVELS) + 1.0)
// I.E. if Player is level MAX_LEVELS, then it will be Bonus XP * 2.0
if ( iBonusXP != 0 )
{
new Float:fCurrentLevel = float( p_data[idUser][P_LEVEL] );
new Float:iLevelMultiplier = ( fCurrentLevel / float(MAX_LEVELS) ) + 1.0;
new iRealBonusXP = floatround(iLevelMultiplier * iBonusXP);
p_data[idUser][P_XP] += iRealBonusXP;
XP_Check( idUser );
return iRealBonusXP;
}
return 0;
}
Если убрать iLevelMultiplier тогда будет выдавать четкое значение не зависящее от уровня.
Заменить нужно весь код ниже:
Code
new Float:fCurrentLevel = float( p_data[idUser][P_LEVEL] );
new Float:iLevelMultiplier = ( fCurrentLevel / float(MAX_LEVELS) ) + 1.0;
new iRealBonusXP = floatround(iLevelMultiplier * iBonusXP);
На:
Code
new iRealBonusXP = iBonusXP;