diff options
author | Ben Longbons <b.r.longbons@gmail.com> | 2014-10-16 11:05:17 -0700 |
---|---|---|
committer | Ben Longbons <b.r.longbons@gmail.com> | 2014-10-16 11:05:17 -0700 |
commit | e5549ae35fed284799115aed7e67049e5107c988 (patch) | |
tree | de041d9e81e7576272fcb8b8ab7fc09f1f203b80 /src | |
parent | 33bbbf30f461b030c04e4de866cafafce19d5232 (diff) | |
download | tmwa-e5549ae35fed284799115aed7e67049e5107c988.tar.gz tmwa-e5549ae35fed284799115aed7e67049e5107c988.tar.bz2 tmwa-e5549ae35fed284799115aed7e67049e5107c988.tar.xz tmwa-e5549ae35fed284799115aed7e67049e5107c988.zip |
Fix crash on login due to invalid map
Diffstat (limited to 'src')
-rw-r--r-- | src/map/map.cpp | 5 | ||||
-rw-r--r-- | src/map/pc.cpp | 29 |
2 files changed, 20 insertions, 14 deletions
diff --git a/src/map/map.cpp b/src/map/map.cpp index 3d14637..dbb54d6 100644 --- a/src/map/map.cpp +++ b/src/map/map.cpp @@ -327,6 +327,11 @@ void map_foreachinarea(std::function<void(dumb_ptr<block_list>)> func, { std::vector<dumb_ptr<block_list>> bl_list; + // there are some broadcasts during startup + // disable then + if (m == borrow(undefined_gat)) + abort(); + if (x0 < 0) x0 = 0; if (y0 < 0) diff --git a/src/map/pc.cpp b/src/map/pc.cpp index 0497e5b..68d478e 100644 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -685,20 +685,6 @@ int pc_authok(AccountId id, int login_id2, TimeT connect_until_time, sd->sc_data[i].val1 = 0; } sd->sc_count = 0; - { - Opt0 old_option = sd->status.option; - sd->status.option = Opt0::ZERO; - - // This would leak information. - // It's better to make it obvious that players can see you. - if (false && bool(old_option & Opt0::INVISIBILITY)) - is_atcommand(sd->sess, sd, "@invisible"_s, GmLevel()); - - if (bool(old_option & Opt0::HIDE)) - is_atcommand(sd->sess, sd, "@hide"_s, GmLevel()); - // atcommand_hide might already send it, but also might not - clif_changeoption(sd); - } // パーティー関係の初期化 sd->party_sended = 0; @@ -714,6 +700,21 @@ int pc_authok(AccountId id, int login_id2, TimeT connect_until_time, pc_setpos(sd, sd->status.last_point.map_, sd->status.last_point.x, sd->status.last_point.y, BeingRemoveWhy::GONE); + { + Opt0 old_option = sd->status.option; + sd->status.option = Opt0::ZERO; + + // This would leak information. + // It's better to make it obvious that players can see you. + if (false && bool(old_option & Opt0::INVISIBILITY)) + is_atcommand(sd->sess, sd, "@invisible"_s, GmLevel()); + + if (bool(old_option & Opt0::HIDE)) + is_atcommand(sd->sess, sd, "@hide"_s, GmLevel()); + // atcommand_hide might already send it, but also might not + clif_changeoption(sd); + } + // パーティ、ギルドデータの要求 if (sd->status.party_id && party_search(sd->status.party_id).is_none()) |