diff --git a/src/map/pc.c b/src/map/pc.c index 5729f616b0..b06efa33c7 100755 --- a/src/map/pc.c +++ b/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); } }