first, at renewal environment
db\re\level_penalty.txt
1,12,2,0 1,12,-2,0
meaning 3 level difference, monster won't give any form of experience
src\map\pc.c
int pc_level_penalty_mod(int diff, unsigned char race, uint32 mode, int type)
{
#if defined(RENEWAL_DROP) || defined(RENEWAL_EXP)
int rate = 100, i;
if( diff < 0 )
diff = MAX_LEVEL + ( ~diff + 1 );
for (i = RC_FORMLESS; i < RC_MAX; i++) {
int tmp;
if (race != i) {
if (mode&MD_BOSS && i < RC_BOSS)
i = RC_BOSS;
else if (i <= RC_BOSS)
continue;
}
if ((tmp=pc->level_penalty[type][i][diff]) > 0) {
rate = tmp;
break;
}
// Allow rate = 0
if ((tmp=pc->level_penalty[type][i][diff]) == 0) {
rate = 0;
break;
}
}
return rate;
#else
return 100;
#endif
}
allow looping for pc->level_penalty[type][i][diff]) == 0, then assign rate = 0
src\map\mob.c
#ifdef RENEWAL_EXP int rate = pc->level_penalty_mod(md->level - (tmpsd[i])->status.base_level, md->status.race, md->status.mode, 1); base_exp = (unsigned int)cap_value(base_exp * rate / 100, 0, UINT_MAX); job_exp = (unsigned int)cap_value(job_exp * rate / 100, 0, UINT_MAX); #endif
cap_value(a, min, UINT_MAX), where min was changed to 0 from 1, allow min to be 0. if zero base_exp and job_exp both 0.
But still:
monster is giving 1 exp

Is there other place where this is hardcoded?
Thanks!
Edited by Zirius, 08 April 2016 - 09:15 AM.













