OSDN Git Service

[Refactor] #929 Separated increase_kill_numbers() from mon_take_hit()
authorHourier <grapefox.whitelucifer.0408@gmail.com>
Wed, 4 Aug 2021 14:38:34 +0000 (23:38 +0900)
committerHourier <grapefox.whitelucifer.0408@gmail.com>
Sun, 8 Aug 2021 12:16:45 +0000 (21:16 +0900)
src/monster/monster-damage.cpp
src/monster/monster-damage.h

index 1b04bbf..37689f8 100644 (file)
@@ -98,30 +98,11 @@ bool MonsterDamageProcessor::mon_take_hit(concptr note)
     auto *r_ptr = &r_info[m_ptr->r_idx];
     if (m_ptr->hp < 0) {
         this->death_special_flag_monster(m_ptr);
-
-        /* Count all monsters killed */
         if (r_ptr->r_akills < MAX_SHORT) {
             r_ptr->r_akills++;
         }
 
-        /* Recall even invisible uniques or winners */
-        if ((m_ptr->ml && !this->target_ptr->image) || (r_ptr->flags1 & RF1_UNIQUE)) {
-            /* Count kills this life */
-            if (m_ptr->mflag2.has(MFLAG2::KAGE) && (r_info[MON_KAGE].r_pkills < MAX_SHORT))
-                r_info[MON_KAGE].r_pkills++;
-            else if (r_ptr->r_pkills < MAX_SHORT)
-                r_ptr->r_pkills++;
-
-            /* Count kills in all lives */
-            if (m_ptr->mflag2.has(MFLAG2::KAGE) && (r_info[MON_KAGE].r_tkills < MAX_SHORT))
-                r_info[MON_KAGE].r_tkills++;
-            else if (r_ptr->r_tkills < MAX_SHORT)
-                r_ptr->r_tkills++;
-
-            /* Hack -- Auto-recall */
-            monster_race_track(this->target_ptr, m_ptr->ap_r_idx);
-        }
-
+        this->increase_kill_numbers(m_ptr);
         GAME_TEXT m_name[MAX_NLEN];
         monster_desc(this->target_ptr, m_name, m_ptr, MD_TRUE_NAME);
 
@@ -484,6 +465,28 @@ void MonsterDamageProcessor::death_combined_uniques(
     }
 }
 
+void MonsterDamageProcessor::increase_kill_numbers(monster_type *m_ptr)
+{
+    auto *r_ptr = &r_info[m_ptr->r_idx];
+    if (((m_ptr->ml == 0) || this->target_ptr->image) && none_bits(r_ptr->flags1, RF1_UNIQUE)) {
+        return;
+    }
+
+    if (m_ptr->mflag2.has(MFLAG2::KAGE) && (r_info[MON_KAGE].r_pkills < MAX_SHORT)) {
+        r_info[MON_KAGE].r_pkills++;
+    } else if (r_ptr->r_pkills < MAX_SHORT) {
+        r_ptr->r_pkills++;
+    }
+
+    if (m_ptr->mflag2.has(MFLAG2::KAGE) && (r_info[MON_KAGE].r_tkills < MAX_SHORT)) {
+        r_info[MON_KAGE].r_tkills++;
+    } else if (r_ptr->r_tkills < MAX_SHORT) {
+        r_ptr->r_tkills++;
+    }
+
+    monster_race_track(this->target_ptr, m_ptr->ap_r_idx);
+}
+
 /*!
  * @brief モンスターに与えたダメージを元に経験値を加算する /
  * Calculate experience point to be get
index bed5b48..6f0122f 100644 (file)
@@ -25,6 +25,7 @@ private:
     void death_unique_monster(monster_race_type r_idx);
     bool check_combined_unique(const monster_race_type r_idx, std::vector<monster_race_type> *combined_uniques);
     void death_combined_uniques(const monster_race_type r_idx, std::vector<std::tuple<monster_race_type, monster_race_type, monster_race_type>> *combined_uniques);
+    void increase_kill_numbers(monster_type *m_ptr);
     void set_redraw();
     void summon_special_unique(monster_type *m_ptr);
 };