From a1c64eebe013bc5b7df72cce44aa85d66ead38e2 Mon Sep 17 00:00:00 2001 From: Ben Longbons Date: Tue, 2 Apr 2013 17:03:32 -0700 Subject: Fail sooner when the impossible things happen --- src/map/clif.cpp | 6 +++--- src/map/pc.cpp | 1 + src/map/skill.cpp | 27 ++++++++++++++------------- src/map/skill.hpp | 2 +- 4 files changed, 19 insertions(+), 17 deletions(-) diff --git a/src/map/clif.cpp b/src/map/clif.cpp index 24060a4..1691959 100644 --- a/src/map/clif.cpp +++ b/src/map/clif.cpp @@ -3018,7 +3018,7 @@ int clif_skillinfo(struct map_session_data *sd, SkillID skillid, int type, else WFIFOW(fd, 12) = range; memset(WFIFOP(fd, 14), 0, 24); - WFIFOB(fd, 38) = bool(sd->status.skill[skillid].lv < skill_get_max_raise(skillid)); + WFIFOB(fd, 38) = sd->status.skill[skillid].lv < skill_get_max_raise(skillid); WFIFOSET(fd, clif_parse_func_table[0x147].len); return 0; @@ -3054,7 +3054,7 @@ int clif_skillinfoblock(struct map_session_data *sd) range = battle_get_range(&sd->bl) - (range + 1); WFIFOW(fd, len + 10) = range; memset(WFIFOP(fd, len + 12), 0, 24); - WFIFOB(fd, len + 36) = bool(sd->status.skill[i].lv < skill_get_max_raise(i)); + WFIFOB(fd, len + 36) = sd->status.skill[i].lv < skill_get_max_raise(i); len += 37; } } @@ -3083,7 +3083,7 @@ int clif_skillup(struct map_session_data *sd, SkillID skill_num) if (range < 0) range = battle_get_range(&sd->bl) - (range + 1); WFIFOW(fd, 8) = range; - WFIFOB(fd, 10) = bool(sd->status.skill[skill_num].lv < skill_get_max_raise(skill_num)); + WFIFOB(fd, 10) = sd->status.skill[skill_num].lv < skill_get_max_raise(skill_num); WFIFOSET(fd, clif_parse_func_table[0x10e].len); return 0; diff --git a/src/map/pc.cpp b/src/map/pc.cpp index 050bd4e..a344839 100644 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -856,6 +856,7 @@ int pc_checkweighticon(struct map_session_data *sd) if (sd->weight * 10 >= sd->max_weight * 9) flag = 2; + // this is horribly hackish and may have caused crashes if (flag == 1) { if (!sd->sc_data[StatusChange::SC_WEIGHT50].timer) diff --git a/src/map/skill.cpp b/src/map/skill.cpp index 8a2deb2..4375541 100644 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -761,7 +761,7 @@ int skill_status_change_active(struct block_list *bl, StatusChange type) return sc_data[type].timer != nullptr; } -int skill_status_change_end(struct block_list *bl, StatusChange type, TimerData *tid) +void skill_status_change_end(struct block_list *bl, StatusChange type, TimerData *tid) { eptr sc_data; int opt_flag = 0, calc_flag = 0; @@ -771,29 +771,32 @@ int skill_status_change_end(struct block_list *bl, StatusChange type, TimerData Opt2 *opt2; Opt3 *opt3; - nullpo_ret(bl); + nullpo_retv(bl); if (bl->type != BL::PC && bl->type != BL::MOB) { if (battle_config.error_log) PRINTF("skill_status_change_end: neither MOB nor PC !\n"); - return 0; + return; } sc_data = battle_get_sc_data(bl); if (not sc_data) - return 0; + return; sc_count = battle_get_sc_count(bl); - nullpo_ret(sc_count); + nullpo_retv(sc_count); option = battle_get_option(bl); - nullpo_ret(option); + nullpo_retv(option); opt1 = battle_get_opt1(bl); - nullpo_ret(opt1); + nullpo_retv(opt1); opt2 = battle_get_opt2(bl); - nullpo_ret(opt2); + nullpo_retv(opt2); opt3 = battle_get_opt3(bl); - nullpo_ret(opt3); + nullpo_retv(opt3); + + if (!sc_data[type].timer) + return; + assert ((*sc_count) > 0); + assert (sc_data[type].timer == tid || !tid); - if ((*sc_count) > 0 && sc_data[type].timer - && (sc_data[type].timer == tid || !tid)) { if (!tid) @@ -854,8 +857,6 @@ int skill_status_change_end(struct block_list *bl, StatusChange type, TimerData if (bl->type == BL::PC && calc_flag) pc_calcstatus((struct map_session_data *) bl, 0); /* ステータス再計算 */ } - - return 0; } int skill_update_heal_animation(struct map_session_data *sd) diff --git a/src/map/skill.hpp b/src/map/skill.hpp index 10b6d89..a724781 100644 --- a/src/map/skill.hpp +++ b/src/map/skill.hpp @@ -86,7 +86,7 @@ int skill_status_change_start(struct block_list *bl, StatusChange type, int val1, interval_t tick); int skill_status_change_active(struct block_list *bl, StatusChange type); // [fate] -int skill_status_change_end(struct block_list *bl, StatusChange type, TimerData *tid); +void skill_status_change_end(struct block_list *bl, StatusChange type, TimerData *tid); int skill_status_change_clear(struct block_list *bl, int type); // mobスキルのため -- cgit v1.2.3-70-g09d2