summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBen Longbons <b.r.longbons@gmail.com>2013-04-02 17:03:32 -0700
committerBen Longbons <b.r.longbons@gmail.com>2013-04-02 17:03:32 -0700
commita1c64eebe013bc5b7df72cce44aa85d66ead38e2 (patch)
tree1365911f49e2c87bcfcb5b2525f1c00a983ded26 /src
parent331af48d176bbc0f9a15bc0620eceec903af6eb9 (diff)
downloadtmwa-a1c64eebe013bc5b7df72cce44aa85d66ead38e2.tar.gz
tmwa-a1c64eebe013bc5b7df72cce44aa85d66ead38e2.tar.bz2
tmwa-a1c64eebe013bc5b7df72cce44aa85d66ead38e2.tar.xz
tmwa-a1c64eebe013bc5b7df72cce44aa85d66ead38e2.zip
Fail sooner when the impossible things happen
Diffstat (limited to 'src')
-rw-r--r--src/map/clif.cpp6
-rw-r--r--src/map/pc.cpp1
-rw-r--r--src/map/skill.cpp27
-rw-r--r--src/map/skill.hpp2
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<struct status_change, StatusChange> 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スキルのため