From: Hourier Date: Wed, 4 Aug 2021 15:15:40 +0000 (+0900) Subject: [Refactor] #929 Separated change_virtue_non_beginner() from mon_take_hit() X-Git-Tag: vmacos3.0.0-alpha52~139^2~2^2~19 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=2e2ac18a0353b7b6174e028ee9f9786b54827ab7;p=hengbandforosx%2Fhengbandosx.git [Refactor] #929 Separated change_virtue_non_beginner() from mon_take_hit() --- diff --git a/src/monster/monster-damage.cpp b/src/monster/monster-damage.cpp index bb61b4da2..1e187b185 100644 --- a/src/monster/monster-damage.cpp +++ b/src/monster/monster-damage.cpp @@ -107,20 +107,7 @@ bool MonsterDamageProcessor::mon_take_hit(concptr note) monster_desc(this->target_ptr, m_name, m_ptr, MD_TRUE_NAME); this->death_amberites(m_name); this->dying_scream(m_name); - if (d_info[this->target_ptr->dungeon_idx].flags.has_not(DF::BEGINNER)) { - if (!this->target_ptr->current_floor_ptr->dun_level && !this->target_ptr->ambush_flag && !this->target_ptr->current_floor_ptr->inside_arena) { - chg_virtue(this->target_ptr, V_VALOUR, -1); - } else if (r_ptr->level > this->target_ptr->current_floor_ptr->dun_level) { - if (randint1(10) <= (r_ptr->level - this->target_ptr->current_floor_ptr->dun_level)) - chg_virtue(this->target_ptr, V_VALOUR, 1); - } - if (r_ptr->level > 60) { - chg_virtue(this->target_ptr, V_VALOUR, 1); - } - if (r_ptr->level >= 2 * (this->target_ptr->lev + 1)) - chg_virtue(this->target_ptr, V_VALOUR, 2); - } - + this->change_virtue_non_beginner(); if (r_ptr->flags1 & RF1_UNIQUE) { if (r_ptr->flags3 & (RF3_EVIL | RF3_GOOD)) chg_virtue(this->target_ptr, V_HARMONY, 2); @@ -502,6 +489,32 @@ void MonsterDamageProcessor::dying_scream(GAME_TEXT *m_name) #endif } +void MonsterDamageProcessor::change_virtue_non_beginner() +{ + auto *floor_ptr = this->target_ptr->current_floor_ptr; + auto *m_ptr = &floor_ptr->m_list[this->m_idx]; + auto *r_ptr = &r_info[m_ptr->r_idx]; + if (d_info[this->target_ptr->dungeon_idx].flags.has(DF::BEGINNER)) { + return; + } + + if ((floor_ptr->dun_level == 0) && !this->target_ptr->ambush_flag && !floor_ptr->inside_arena) { + chg_virtue(this->target_ptr, V_VALOUR, -1); + } else if (r_ptr->level > floor_ptr->dun_level) { + if (randint1(10) <= (r_ptr->level - floor_ptr->dun_level)) { + chg_virtue(this->target_ptr, V_VALOUR, 1); + } + } + + if (r_ptr->level > 60) { + chg_virtue(this->target_ptr, V_VALOUR, 1); + } + + if (r_ptr->level >= 2 * (this->target_ptr->lev + 1)) { + chg_virtue(this->target_ptr, V_VALOUR, 2); + } +} + /*! * @brief モンスターに与えたダメージを元に経験値を加算する / * Calculate experience point to be get diff --git a/src/monster/monster-damage.h b/src/monster/monster-damage.h index 9ef5d3846..f4b98bb7d 100644 --- a/src/monster/monster-damage.h +++ b/src/monster/monster-damage.h @@ -29,6 +29,7 @@ private: void increase_kill_numbers(); void death_amberites(GAME_TEXT *m_name); void dying_scream(GAME_TEXT *m_name); + void change_virtue_non_beginner(); void set_redraw(); void summon_special_unique(); };