From 4359c56be31e4de17b1712f46d49c87f8f516483 Mon Sep 17 00:00:00 2001 From: deskull Date: Mon, 10 Aug 2020 13:51:39 +0900 Subject: [PATCH] =?utf8?q?[Refactor]=20#40514=20have=5Fimmune=5Felec()=20?= =?utf8?q?=E3=82=92=20calc=5Fbonuses()=E3=80=80=E3=81=8B=E3=82=89=E5=88=86?= =?utf8?q?=E9=9B=A2=EF=BC=8E=20/=20Separated=20have=5Fimmune=5Felec()=20fr?= =?utf8?q?om=20calc=5Fbonuses().?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/player/player-status-flags.c | 21 +++++++++++++++++++++ src/player/player-status-flags.h | 1 + src/player/player-status.c | 9 +++------ 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/player/player-status-flags.c b/src/player/player-status-flags.c index 482b8d8cb..a4507774e 100644 --- a/src/player/player-status-flags.c +++ b/src/player/player-status-flags.c @@ -1982,3 +1982,24 @@ void have_immune_acid(player_type *creature_ptr) creature_ptr->immune_acid = TRUE; } } + +void have_immune_elec(player_type *creature_ptr) +{ + object_type *o_ptr; + BIT_FLAGS flgs[TR_FLAG_SIZE]; + creature_ptr->immune_elec = FALSE; + if (creature_ptr->ele_immune) { + if (creature_ptr->special_defense & DEFENSE_ELEC) + creature_ptr->immune_elec = TRUE; + } + + for (int i = INVEN_RARM; i < INVEN_TOTAL; i++) { + o_ptr = &creature_ptr->inventory_list[i]; + if (!o_ptr->k_idx) + continue; + + object_flags(creature_ptr, o_ptr, flgs); + if (have_flag(flgs, TR_IM_ELEC)) + creature_ptr->immune_elec = TRUE; + } +} diff --git a/src/player/player-status-flags.h b/src/player/player-status-flags.h index 7a8b6cc7c..ea3b870b6 100644 --- a/src/player/player-status-flags.h +++ b/src/player/player-status-flags.h @@ -68,5 +68,6 @@ void have_resist_time(player_type *creature_ptr); void have_resist_water(player_type *creature_ptr); void have_resist_fear(player_type *creature_ptr); void have_immune_acid(player_type *creature_ptr); +void have_immune_elec(player_type *creature_ptr); diff --git a/src/player/player-status.c b/src/player/player-status.c index b473c0bd3..5b51f39c0 100644 --- a/src/player/player-status.c +++ b/src/player/player-status.c @@ -560,7 +560,6 @@ static void delayed_visual_update(player_type *player_ptr) */ static void clear_creature_bonuses(player_type *creature_ptr) { - creature_ptr->immune_elec = FALSE; creature_ptr->immune_fire = FALSE; creature_ptr->immune_cold = FALSE; creature_ptr->two_handed_weapon = FALSE; @@ -731,6 +730,7 @@ void calc_bonuses(player_type *creature_ptr) have_resist_time(creature_ptr); have_resist_fear(creature_ptr); have_immune_acid(creature_ptr); + have_immune_elec(creature_ptr); calc_race_status(creature_ptr); @@ -4441,9 +4441,7 @@ void calc_timelimit_status(player_type *creature_ptr) } if (creature_ptr->ele_immune) { - if (creature_ptr->special_defense & DEFENSE_ELEC) - creature_ptr->immune_elec = TRUE; - else if (creature_ptr->special_defense & DEFENSE_FIRE) + if (creature_ptr->special_defense & DEFENSE_FIRE) creature_ptr->immune_fire = TRUE; else if (creature_ptr->special_defense & DEFENSE_COLD) creature_ptr->immune_cold = TRUE; @@ -4477,8 +4475,7 @@ void calc_equipment_status(player_type *creature_ptr) creature_ptr->immune_fire = TRUE; if (have_flag(flgs, TR_IM_COLD)) creature_ptr->immune_cold = TRUE; - if (have_flag(flgs, TR_IM_ELEC)) - creature_ptr->immune_elec = TRUE; + if (o_ptr->tval == TV_CAPTURE) continue; -- 2.11.0