OSDN Git Service

[Fix] 対邪悪結界で打撃を撃退した際は落馬/変わり身処理を行わない
authortaotao54321 <taotao54321@gmail.com>
Fri, 12 Feb 2021 13:50:18 +0000 (22:50 +0900)
committertaotao54321 <taotao54321@gmail.com>
Fri, 12 Feb 2021 13:50:18 +0000 (22:50 +0900)
process_monster_attack_hit() の戻り値を無視していたため、撃退したのに落
馬/変わり身処理が発動するようになっていた。
なお、#21 での議論により、撃退時も思い出処理は行うこととした (v2.2.1 か
らの仕様変更)。

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

index 7942e74..55f7d1b 100644 (file)
@@ -411,10 +411,16 @@ static bool process_monster_blows(player_type *target_ptr, monap_type *monap_ptr
         power = mbe_info[monap_ptr->effect].power;
         monap_ptr->ac = target_ptr->ac + target_ptr->to_a;
         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);
+            // 命中した。命中処理と思い出処理を行う。
+            // 打撃そのものは対邪悪結界で撃退した可能性がある
+            const bool protect = !process_monster_attack_hit(target_ptr, monap_ptr);
             increase_blow_type_seen(target_ptr, monap_ptr);
+
+            // 撃退成功時はそのまま次の打撃へ移行。
+            if (protect)
+                continue;
+
+            // 撃退失敗時は落馬処理、変わり身のテレポート処理を行う。
             check_fall_off_horse(target_ptr, monap_ptr);
             if (target_ptr->special_defense & NINJA_KAWARIMI) {
                 // 変わり身のテレポートが成功したら攻撃を打ち切り、プレイヤーが離脱した旨を返す。