From 6f63741061e9fe48a199e52b41704bc1b002a0a4 Mon Sep 17 00:00:00 2001 From: Habu Date: Mon, 28 Dec 2020 23:27:28 +0900 Subject: [PATCH] [fix] Ticket #41079 MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 耐酸・耐電・耐火・耐冷のエゴ盾を発動した時、 一時耐性を付ける前に酸・電撃・火炎・氷の指輪の判定を行い 違う時は関数を抜けているため耐性を得ることができていなかった。 耐性を得た上で指輪の場合のみ追加でボール魔法を発動するのが意図した動作なので、 一時耐性の取得を先に行ってから指輪かどうかの判定を行うようにする。 --- src/object-activation/activation-resistance.c | 32 +++++++++++++++++---------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/src/object-activation/activation-resistance.c b/src/object-activation/activation-resistance.c index d560b88c5..6b280f490 100644 --- a/src/object-activation/activation-resistance.c +++ b/src/object-activation/activation-resistance.c @@ -23,15 +23,17 @@ bool activate_resistance_elements(player_type *user_ptr) } /*! - * @brief アシッド・ボールを放ち、更に酸耐性を得る + * @brief 酸の一時耐性を得る。酸の指輪の場合はさらにアシッド・ボールを放つ。 * @param user_ptr プレーヤーへの参照ポインタ * @param o_ptr 発動対象アイテムへの参照ポインタ * @param name アイテム名 - * @return ボールを当てられるならばTRUE + * @return アシッド・ボールの発動をキャンセルした場合FALSE、それ以外はTRUEを返す */ bool activate_resistance_acid(player_type *user_ptr, object_type *o_ptr, concptr name) { msg_format(_("%sが黒く輝いた...", "The %s grows black."), name); + (void)set_oppose_acid(user_ptr, randint1(20) + 20, FALSE); + if ((o_ptr->tval != TV_RING) || (o_ptr->sval != SV_RING_ACID)) return TRUE; @@ -40,20 +42,22 @@ bool activate_resistance_acid(player_type *user_ptr, object_type *o_ptr, concptr return FALSE; (void)fire_ball(user_ptr, GF_ACID, dir, 100, 2); - (void)set_oppose_acid(user_ptr, randint1(20) + 20, FALSE); + return TRUE; } /*! - * @brief サンダー・ボールを放ち、更に電撃耐性を得る + * @brief 電撃の一時耐性を得る。電撃の指輪の場合はさらにサンダー・ボールを放つ。 * @param user_ptr プレーヤーへの参照ポインタ * @param o_ptr 発動対象アイテムへの参照ポインタ * @param name アイテム名 - * @return ボールを当てられるならばTRUE + * @return サンダー・ボールの発動をキャンセルした場合FALSE、それ以外はTRUEを返す */ bool activate_resistance_elec(player_type *user_ptr, object_type *o_ptr, concptr name) { msg_format(_("%sが青く輝いた...", "The %s grows blue."), name); + (void)set_oppose_elec(user_ptr, randint1(20) + 20, FALSE); + if ((o_ptr->tval != TV_RING) || (o_ptr->sval != SV_RING_ELEC)) return TRUE; @@ -62,20 +66,22 @@ bool activate_resistance_elec(player_type *user_ptr, object_type *o_ptr, concptr return FALSE; (void)fire_ball(user_ptr, GF_ELEC, dir, 100, 2); - (void)set_oppose_elec(user_ptr, randint1(20) + 20, FALSE); + return TRUE; } /*! - * @brief ファイア・ボールを放ち、更に火炎耐性を得る + * @brief 火炎の一時耐性を得る。火炎の指輪の場合はさらにファイア・ボールを放つ。 * @param user_ptr プレーヤーへの参照ポインタ * @param o_ptr 発動対象アイテムへの参照ポインタ * @param name アイテム名 - * @return ボールを当てられるならばTRUE + * @return ファイア・ボールの発動をキャンセルした場合FALSE、それ以外はTRUEを返す */ bool activate_resistance_fire(player_type *user_ptr, object_type *o_ptr, concptr name) { msg_format(_("%sが赤く輝いた...", "The %s grows red."), name); + (void)set_oppose_fire(user_ptr, randint1(20) + 20, FALSE); + if ((o_ptr->tval != TV_RING) || (o_ptr->sval != SV_RING_FLAMES)) return TRUE; @@ -84,20 +90,22 @@ bool activate_resistance_fire(player_type *user_ptr, object_type *o_ptr, concptr return FALSE; (void)fire_ball(user_ptr, GF_FIRE, dir, 100, 2); - (void)set_oppose_fire(user_ptr, randint1(20) + 20, FALSE); + return TRUE; } /*! - * @brief アイス・ボールを放ち、更に冷気耐性を得る + * @brief 冷気の一時耐性を得る。氷の指輪の場合はさらにアイス・ボールを放つ。 * @param user_ptr プレーヤーへの参照ポインタ * @param o_ptr 発動対象アイテムへの参照ポインタ * @param name アイテム名 - * @return ボールを当てられるならばTRUE + * @return アイス・ボールの発動をキャンセルした場合FALSE、それ以外はTRUEを返す */ bool activate_resistance_cold(player_type *user_ptr, object_type *o_ptr, concptr name) { msg_format(_("%sが白く輝いた...", "The %s grows white."), name); + (void)set_oppose_cold(user_ptr, randint1(20) + 20, FALSE); + if ((o_ptr->tval != TV_RING) || (o_ptr->sval != SV_RING_ICE)) return TRUE; @@ -106,7 +114,7 @@ bool activate_resistance_cold(player_type *user_ptr, object_type *o_ptr, concptr return FALSE; (void)fire_ball(user_ptr, GF_COLD, dir, 100, 2); - (void)set_oppose_cold(user_ptr, randint1(20) + 20, FALSE); + return TRUE; } -- 2.11.0