OSDN Git Service

[Fix] #41173 ウィンドウフラグに装備を表示した状態で射撃武器を装備すると強制終了する不具合
authorHabu <habu@users.sourceforge.jp>
Fri, 15 Jan 2021 09:34:51 +0000 (18:34 +0900)
committerHabu <habu@users.sourceforge.jp>
Fri, 15 Jan 2021 09:35:19 +0000 (18:35 +0900)
player_ptr->tval_ammo には、calc_bonuses() において装備している射撃武器に合った矢弾の tval がセットされる。
しかし、射撃武器を装備した時にサブウィンドウに装備を描画する段階では
まだ player_ptr->tval_ammo が更新されておらず TV_NONE になっている。
この状態で空欄になっている装備スロットに対し describe_flavor() が呼ばれると
装備無しスロットは tval が TV_NONE なので player_ptr->tval_ammo と一致してしまい、
空欄に対して矢弾のダメージ表記を計算しようとしてしまう。
空欄なので weight が 0 であるため、0除算が発生して強制終了となる。
player_ptr->tval_ammo は使用せず、bow_tval_ammo() を直接呼び出して正しい矢弾の種類を得るようにする。

src/flavor/flavor-describer.c

index 12902b5..1546bfb 100644 (file)
@@ -26,6 +26,7 @@
 #include "object/object-kind.h"
 #include "perception/object-perception.h"
 #include "player/player-status-table.h"
+#include "specific-object/bow.h"
 #include "sv-definition/sv-lite-types.h"
 #include "util/bit-flags-calculator.h"
 #include "util/string-processor.h"
@@ -487,7 +488,7 @@ void describe_flavor(player_type *player_ptr, char *buf, object_type *o_ptr, BIT
     describe_tval(player_ptr, flavor_ptr);
     describe_named_item_tval(flavor_ptr);
     flavor_ptr->bow_ptr = &player_ptr->inventory_list[INVEN_BOW];
-    if ((flavor_ptr->bow_ptr->k_idx != 0) && (flavor_ptr->o_ptr->tval == player_ptr->tval_ammo))
+    if ((flavor_ptr->bow_ptr->k_idx != 0) && (flavor_ptr->o_ptr->tval == bow_tval_ammo(flavor_ptr->bow_ptr)))
         describe_bow_power(player_ptr, flavor_ptr);
     else if ((player_ptr->pclass == CLASS_NINJA) && (flavor_ptr->o_ptr->tval == TV_SPIKE))
         describe_spike_power(player_ptr, flavor_ptr);