Zirius
New member
- Messages
- 261
- Points
- 0
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][diff]) > 0) {
rate = tmp;
break;
}
// Allow rate = 0
if ((tmp=pc->level_penalty[type][diff]) == 0) {
rate = 0;
break;
}
}
return rate;
#else
return 100;
#endif
}
allow looping for pc->level_penalty[type][diff]) == 0, then assign rate = 0
src\map\mob.c
#ifdef RENEWAL_EXP
int rate = pc->level_penalty_mod(md->level - (tmpsd)->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!
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][diff]) > 0) {
rate = tmp;
break;
}
// Allow rate = 0
if ((tmp=pc->level_penalty[type][diff]) == 0) {
rate = 0;
break;
}
}
return rate;
#else
return 100;
#endif
}
allow looping for pc->level_penalty[type][diff]) == 0, then assign rate = 0
src\map\mob.c
#ifdef RENEWAL_EXP
int rate = pc->level_penalty_mod(md->level - (tmpsd)->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!
Last edited by a moderator: