Death penalty
Fixed death penalty overflow. Fixes: http://rathena.org/board/tracker/issue-8522-experience-loss/
This commit is contained in:
parent
e3372f2d5d
commit
b3d622f823
32
src/map/pc.c
32
src/map/pc.c
@ -7009,21 +7009,25 @@ int pc_dead(struct map_session_data *sd,struct block_list *src)
|
||||
&& !map[sd->bl.m].flag.noexppenalty && !map_flag_gvg(sd->bl.m)
|
||||
&& !sd->sc.data[SC_BABY] && !sd->sc.data[SC_LIFEINSURANCE])
|
||||
{
|
||||
unsigned int base_penalty = battle_config.death_penalty_base, job_penalty = battle_config.death_penalty_job;
|
||||
uint32 base_penalty = battle_config.death_penalty_base;
|
||||
uint32 job_penalty = battle_config.death_penalty_job;
|
||||
uint32 zeny_penalty = battle_config.zeny_penalty;
|
||||
|
||||
#ifdef VIP_ENABLE
|
||||
if(pc_isvip(sd)){
|
||||
base_penalty = base_penalty*battle_config.vip_exp_penalty_base;
|
||||
job_penalty = job_penalty*battle_config.vip_exp_penalty_job;
|
||||
base_penalty *= battle_config.vip_exp_penalty_base;
|
||||
job_penalty *= battle_config.vip_exp_penalty_job;
|
||||
}
|
||||
else {
|
||||
base_penalty = base_penalty*battle_config.vip_exp_penalty_base_normal;
|
||||
job_penalty = job_penalty*battle_config.vip_exp_penalty_job_normal;
|
||||
base_penalty *= battle_config.vip_exp_penalty_base_normal;
|
||||
job_penalty *= battle_config.vip_exp_penalty_job_normal;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (base_penalty > 0) {
|
||||
switch (battle_config.death_penalty_type) {
|
||||
case 1: base_penalty = (uint32) ((double)(pc_nextbaseexp(sd) * base_penalty)/10000); break;
|
||||
case 2: base_penalty = (uint32) ((double)(sd->status.base_exp * base_penalty)/10000); break;
|
||||
case 1: base_penalty = (uint32) ( pc_nextbaseexp(sd) * ( base_penalty / 10000. ) ); break;
|
||||
case 2: base_penalty = (uint32) ( sd->status.base_exp * ( base_penalty / 10000. ) ); break;
|
||||
}
|
||||
if (base_penalty > 0){ //recheck after altering to speedup
|
||||
if (battle_config.pk_mode && src && src->type==BL_PC)
|
||||
@ -7032,10 +7036,11 @@ int pc_dead(struct map_session_data *sd,struct block_list *src)
|
||||
clif_updatestatus(sd,SP_BASEEXP);
|
||||
}
|
||||
}
|
||||
|
||||
if(job_penalty > 0) {
|
||||
switch (battle_config.death_penalty_type) {
|
||||
case 1: job_penalty = (uint32) ((double)(pc_nextjobexp(sd) * job_penalty)/10000); break;
|
||||
case 2: job_penalty = (uint32) ((double)(sd->status.job_exp * job_penalty)/10000); break;
|
||||
case 1: job_penalty = (uint32) ( pc_nextjobexp(sd) * ( job_penalty / 10000. ) ); break;
|
||||
case 2: job_penalty = (uint32) ( sd->status.job_exp * ( job_penalty /10000. ) ); break;
|
||||
}
|
||||
if(job_penalty) {
|
||||
if (battle_config.pk_mode && src && src->type==BL_PC)
|
||||
@ -7044,10 +7049,11 @@ int pc_dead(struct map_session_data *sd,struct block_list *src)
|
||||
clif_updatestatus(sd,SP_JOBEXP);
|
||||
}
|
||||
}
|
||||
if(battle_config.zeny_penalty > 0 && !map[sd->bl.m].flag.nozenypenalty) {
|
||||
base_penalty = (unsigned int)((double)sd->status.zeny * (double)battle_config.zeny_penalty / 10000.);
|
||||
if(base_penalty)
|
||||
pc_payzeny(sd, base_penalty, LOG_TYPE_PICKDROP_PLAYER, NULL);
|
||||
|
||||
if( zeny_penalty > 0 && !map[sd->bl.m].flag.nozenypenalty) {
|
||||
zeny_penalty = (uint32)( sd->status.zeny * ( zeny_penalty / 10000. ) );
|
||||
if(zeny_penalty)
|
||||
pc_payzeny(sd, zeny_penalty, LOG_TYPE_PICKDROP_PLAYER, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user