From c999af595f4a8f7d30b6d7c822e2a1caf3298389 Mon Sep 17 00:00:00 2001 From: Ben Longbons Date: Tue, 15 Jul 2014 21:22:19 -0700 Subject: Revert bounds checks and go back to signed integers --- src/map/atcommand.cpp | 22 +++++++----- src/map/clif.cpp | 2 ++ src/map/mob.cpp | 3 -- src/map/pc.cpp | 94 +++++++++++++++++++++++---------------------------- 4 files changed, 59 insertions(+), 62 deletions(-) (limited to 'src/map') diff --git a/src/map/atcommand.cpp b/src/map/atcommand.cpp index a17838f..11f6eb1 100644 --- a/src/map/atcommand.cpp +++ b/src/map/atcommand.cpp @@ -1457,9 +1457,10 @@ ATCE atcommand_baselevelup(Session *s, dumb_ptr sd, if (sd->status.status_point > 0) { for (i = 0; i > level; i--) - sd->status.status_point -= std::min( - static_cast(sd->status.status_point), - (sd->status.base_level + i + 14) / 4); + sd->status.status_point -= + (sd->status.base_level + i + 14) / 4; + if (sd->status.status_point < 0) + sd->status.status_point = 0; clif_updatestatus(sd, SP::STATUSPOINT); } // to add: remove status points from stats @@ -1520,7 +1521,9 @@ ATCE atcommand_joblevelup(Session *s, dumb_ptr sd, clif_updatestatus(sd, SP::NEXTJOBEXP); if (sd->status.skill_point > 0) { - sd->status.skill_point += std::max(level, -sd->status.skill_point); + sd->status.skill_point += level; + if (sd->status.skill_point < 0) + sd->status.skill_point = 0; clif_updatestatus(sd, SP::SKILLPOINT); } // to add: remove status points from skills @@ -2585,9 +2588,10 @@ ATCE atcommand_character_baselevel(Session *s, dumb_ptr sd, if (pl_sd->status.status_point > 0) { for (i = 0; i > level; i--) - pl_sd->status.status_point -= std::min( - static_cast(pl_sd->status.status_point), - (pl_sd->status.base_level + i + 14) / 4); + pl_sd->status.status_point -= + (pl_sd->status.base_level + i + 14) / 4; + if (pl_sd->status.status_point < 0) + pl_sd->status.status_point = 0; clif_updatestatus(pl_sd, SP::STATUSPOINT); } // to add: remove status points from stats @@ -2668,7 +2672,9 @@ ATCE atcommand_character_joblevel(Session *s, dumb_ptr sd, clif_updatestatus(pl_sd, SP::NEXTJOBEXP); if (pl_sd->status.skill_point > 0) { - pl_sd->status.skill_point += std::max(level, -pl_sd->status.skill_point); + pl_sd->status.skill_point += level; + if (pl_sd->status.skill_point < 0) + pl_sd->status.skill_point = 0; clif_updatestatus(pl_sd, SP::SKILLPOINT); } // to add: remove status points from skills diff --git a/src/map/clif.cpp b/src/map/clif.cpp index 5de3a82..e7557c8 100644 --- a/src/map/clif.cpp +++ b/src/map/clif.cpp @@ -1703,6 +1703,8 @@ not_b0: { case SP::ZENY: trade_verifyzeny(sd); + if (sd->status.zeny < 0) + sd->status.zeny = 0; fixed_b1.value = sd->status.zeny; break; diff --git a/src/map/mob.cpp b/src/map/mob.cpp index f73dc89..1fd8cf3 100644 --- a/src/map/mob.cpp +++ b/src/map/mob.cpp @@ -2461,9 +2461,6 @@ int mob_damage(dumb_ptr src, dumb_ptr md, int damage, } } - if (damage > md->hp) - damage = md->hp; - md->hp -= damage; if (md->hp > 0) diff --git a/src/map/pc.cpp b/src/map/pc.cpp index d726df8..03e2e76 100644 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -1341,7 +1341,7 @@ int pc_calcstatus(dumb_ptr sd, int first) if (sd->sprate != 100) sd->status.max_sp = sd->status.max_sp * sd->sprate / 100; - if (sd->status.max_sp > battle_config.max_sp) + if (sd->status.max_sp < 0 || sd->status.max_sp > battle_config.max_sp) sd->status.max_sp = battle_config.max_sp; //自然回復HP @@ -3016,8 +3016,6 @@ int pc_gainexp_reason(dumb_ptr sd, int base_exp, int job_exp, } } - if (base_exp < 0 && -base_exp > sd->status.base_exp) - base_exp = -sd->status.base_exp; sd->status.base_exp += base_exp; // [Fate] Adjust experience points that healers can extract from this character @@ -3031,6 +3029,9 @@ int pc_gainexp_reason(dumb_ptr sd, int base_exp, int job_exp, sd->heal_xp = max_heal_xp; } + if (sd->status.base_exp < 0) + sd->status.base_exp = 0; + while (pc_checkbaselevelup(sd)) {} @@ -3045,9 +3046,9 @@ int pc_gainexp_reason(dumb_ptr sd, int base_exp, int job_exp, } } - if (job_exp < 0 && -job_exp > sd->status.job_exp) - job_exp = -sd->status.job_exp; sd->status.job_exp += job_exp; + if (sd->status.job_exp < 0) + sd->status.job_exp = 0; while (pc_checkjoblevelup(sd)) {} @@ -3422,8 +3423,6 @@ int pc_damage(dumb_ptr src, dumb_ptr sd, if (damage > sd->status.max_hp >> 2) skill_stop_dancing(sd, 0); - if (damage > sd->status.hp) - damage = sd->status.hp; sd->status.hp -= damage; if (sd->status.hp > 0) @@ -3473,48 +3472,52 @@ int pc_damage(dumb_ptr src, dumb_ptr sd, { if (battle_config.death_penalty_type == 1 && battle_config.death_penalty_base > 0) - sd->status.base_exp -= std::min(sd->status.base_exp, - static_cast(static_cast(pc_nextbaseexp(sd)) * - static_cast(battle_config.death_penalty_base) / 10000)); + sd->status.base_exp -= + static_cast(pc_nextbaseexp(sd)) * + static_cast(battle_config.death_penalty_base) / 10000; if (battle_config.pk_mode && src && src->bl_type == BL::PC) - sd->status.base_exp -= std::min(sd->status.base_exp, - static_cast(static_cast(pc_nextbaseexp(sd)) * - static_cast(battle_config.death_penalty_base) / 10000)); + sd->status.base_exp -= + static_cast(pc_nextbaseexp(sd)) * + static_cast(battle_config.death_penalty_base) / 10000; else if (battle_config.death_penalty_type == 2 && battle_config.death_penalty_base > 0) { if (pc_nextbaseexp(sd) > 0) - sd->status.base_exp -= std::min(sd->status.base_exp, - static_cast(static_cast(sd->status.base_exp) * - static_cast(battle_config.death_penalty_base) / 10000)); + sd->status.base_exp -= + static_cast(sd->status.base_exp) * + static_cast(battle_config.death_penalty_base) / 10000; if (battle_config.pk_mode && src && src->bl_type == BL::PC) - sd->status.base_exp -= std::min(sd->status.base_exp, - static_cast(static_cast(sd->status.base_exp) * - static_cast(battle_config.death_penalty_base) / 10000)); + sd->status.base_exp -= + static_cast(sd->status.base_exp) * + static_cast(battle_config.death_penalty_base) / 10000; } + if (sd->status.base_exp < 0) + sd->status.base_exp = 0; clif_updatestatus(sd, SP::BASEEXP); if (battle_config.death_penalty_type == 1 && battle_config.death_penalty_job > 0) - sd->status.job_exp -= std::min(sd->status.job_exp, - static_cast(static_cast(pc_nextjobexp(sd)) * - static_cast(battle_config.death_penalty_job) / 10000)); + sd->status.job_exp -= + static_cast(pc_nextjobexp(sd)) * + static_cast(battle_config.death_penalty_job) / 10000; if (battle_config.pk_mode && src && src->bl_type == BL::PC) - sd->status.job_exp -= std::min(sd->status.job_exp, - static_cast(static_cast(pc_nextjobexp(sd)) * - static_cast(battle_config.death_penalty_job) / 10000)); + sd->status.job_exp -= + static_cast(pc_nextjobexp(sd)) * + static_cast(battle_config.death_penalty_job) / 10000; else if (battle_config.death_penalty_type == 2 && battle_config.death_penalty_job > 0) { if (pc_nextjobexp(sd) > 0) - sd->status.job_exp -= std::min(sd->status.job_exp, - static_cast(static_cast(sd->status.job_exp) * - static_cast(battle_config.death_penalty_job) / 10000)); + sd->status.job_exp -= + static_cast(sd->status.job_exp) * + static_cast(battle_config.death_penalty_job) / 10000; if (battle_config.pk_mode && src && src->bl_type == BL::PC) - sd->status.job_exp -= std::min(sd->status.job_exp, - static_cast(static_cast(sd->status.job_exp) * - static_cast(battle_config.death_penalty_job) / 10000)); + sd->status.job_exp -= + static_cast(sd->status.job_exp) * + static_cast(battle_config.death_penalty_job) / 10000; } + if (sd->status.job_exp < 0) + sd->status.job_exp = 0; clif_updatestatus(sd, SP::JOBEXP); } } @@ -3707,18 +3710,18 @@ int pc_setparam(dumb_ptr sd, SP type, int val) case SP::BASEEXP: if (pc_nextbaseexp(sd) > 0) { - if (val < 0) - val = 0; sd->status.base_exp = val; + if (sd->status.base_exp < 0) + sd->status.base_exp = 0; pc_checkbaselevelup(sd); } break; case SP::JOBEXP: if (pc_nextjobexp(sd) > 0) { - if (val < 0) - val = 0; sd->status.job_exp = val; + if (sd->status.job_exp < 0) + sd->status.job_exp = 0; pc_checkjoblevelup(sd); } break; @@ -3781,8 +3784,6 @@ int pc_heal(dumb_ptr sd, int hp, int sp) hp = sd->status.max_hp - sd->status.hp; if (sp + sd->status.sp > sd->status.max_sp) sp = sd->status.max_sp - sd->status.sp; - if (-hp >= sd->status.hp) - hp = -sd->status.hp; sd->status.hp += hp; if (sd->status.hp <= 0) { @@ -3790,8 +3791,6 @@ int pc_heal(dumb_ptr sd, int hp, int sp) pc_damage(nullptr, sd, 1); hp = 0; } - if (-sp >= sd->status.sp) - sp = sd->status.sp; sd->status.sp += sp; if (sd->status.sp <= 0) sd->status.sp = 0; @@ -3913,8 +3912,6 @@ int pc_itemheal_effect(dumb_ptr sd, int hp, int sp) hp = sd->status.max_hp - sd->status.hp; if (sp + sd->status.sp > sd->status.max_sp) sp = sd->status.max_sp - sd->status.sp; - if (-hp > sd->status.hp) - hp = -sd->status.hp; sd->status.hp += hp; if (sd->status.hp <= 0) { @@ -3987,16 +3984,11 @@ int pc_percentheal(dumb_ptr sd, int hp, int sp) } else { - if (sp > 0) - { - sd->status.sp += sd->status.max_sp * sp / 100; - if (sd->status.sp > sd->status.max_sp) - sd->status.sp = sd->status.max_sp; - } - if (sp < 0) - { - sd->status.sp -= std::min(sd->status.sp, sd->status.max_sp * -sp / 100); - } + sd->status.sp += sd->status.max_sp * sp / 100; + if (sd->status.sp > sd->status.max_sp) + sd->status.sp = sd->status.max_sp; + if (sd->status.sp < 0) + sd->status.sp = 0; } } if (hp) -- cgit v1.2.3-70-g09d2