OSDN Git Service

[Fix] 敵の攻撃効果が無効値 RBE_NONE なら攻撃を打ち切る
authortaotao54321 <taotao54321@gmail.com>
Wed, 10 Feb 2021 13:28:28 +0000 (22:28 +0900)
committertaotao54321 <taotao54321@gmail.com>
Wed, 10 Feb 2021 13:28:28 +0000 (22:28 +0900)
effect == RBE_NONE なら打撃が命中したと判定するロジックになっていたが、
これは単に v2.2.1 の誤ったロジックを引き継いだにすぎない。
敵が打撃を行う際に effect == RBE_NONE となることは理論上あり得ないので、
命中判定の条件からは外す。安全のため、万一 RBE_NONE が現れたらそこで攻撃
を打ち切る。

src/monster-attack/monster-attack-player.c

index cb814b0..1851fa6 100644 (file)
@@ -385,13 +385,19 @@ static bool process_monster_blows(player_type *target_ptr, monap_type *monap_ptr
         if (!check_monster_attack_terminated(target_ptr, monap_ptr))
             break;
 
+        // effect が RBE_NONE (無効値)になることはあり得ないはずだが、万一そう
+        // なっていたら単に攻撃を打ち切る。
+        if (monap_ptr->effect == RBE_NONE) {
+            plog("unexpected: monap_ptr->effect == RBE_NONE");
+            break;
+        }
+
         if (monap_ptr->method == RBM_SHOOT)
             continue;
 
         power = mbe_info[monap_ptr->effect].power;
         monap_ptr->ac = target_ptr->ac + target_ptr->to_a;
-        if ((monap_ptr->effect == RBE_NONE)
-            || check_hit_from_monster_to_player(target_ptr, power, monap_ptr->rlev, monster_stunned_remaining(monap_ptr->m_ptr))) {
+        if (check_hit_from_monster_to_player(target_ptr, power, monap_ptr->rlev, monster_stunned_remaining(monap_ptr->m_ptr))) {
             (void)process_monster_attack_hit(target_ptr, monap_ptr);
         } else {
             process_monster_attack_evasion(target_ptr, monap_ptr);