OSDN Git Service

[Refactor] #40560 Separated process_destroy_magic_book() from do_cmd_destory()
authorHourier <hourier@users.sourceforge.jp>
Thu, 20 Aug 2020 06:59:01 +0000 (15:59 +0900)
committerHourier <hourier@users.sourceforge.jp>
Thu, 20 Aug 2020 06:59:01 +0000 (15:59 +0900)
src/cmd-item/cmd-destroy.c

index 01463fc..8a5f322 100644 (file)
@@ -149,6 +149,29 @@ static void gain_exp_by_destroying_magic_book(player_type *creature_ptr, destroy
     gain_exp(creature_ptr, tester_exp * destroy_ptr->amt);
 }
 
+static void process_destroy_magic_book(player_type *creature_ptr, destroy_type *destroy_ptr)
+{
+    if (!item_tester_high_level_book(destroy_ptr->q_ptr))
+        return;
+
+    gain_exp_by_destroying_magic_book(creature_ptr, destroy_ptr);
+    if (item_tester_high_level_book(destroy_ptr->q_ptr) && destroy_ptr->q_ptr->tval == TV_LIFE_BOOK) {
+        chg_virtue(creature_ptr, V_UNLIFE, 1);
+        chg_virtue(creature_ptr, V_VITALITY, -1);
+    } else if (item_tester_high_level_book(destroy_ptr->q_ptr) && destroy_ptr->q_ptr->tval == TV_DEATH_BOOK) {
+        chg_virtue(creature_ptr, V_UNLIFE, -1);
+        chg_virtue(creature_ptr, V_VITALITY, 1);
+    }
+
+    if ((destroy_ptr->q_ptr->to_a != 0) || (destroy_ptr->q_ptr->to_h != 0) || (destroy_ptr->q_ptr->to_d != 0))
+        chg_virtue(creature_ptr, V_ENCHANT, -1);
+
+    if (object_value_real(creature_ptr, destroy_ptr->q_ptr) > 30000)
+        chg_virtue(creature_ptr, V_SACRIFICE, 2);
+    else if (object_value_real(creature_ptr, destroy_ptr->q_ptr) > 10000)
+        chg_virtue(creature_ptr, V_SACRIFICE, 1);
+}
+
 /*!
  * @brief \83A\83C\83e\83\80\82ð\94j\89ó\82·\82é\83R\83}\83\93\83h\82Ì\83\81\83C\83\93\83\8b\81[\83`\83\93 / Destroy an item
  * @param creature_ptr \83v\83\8c\81[\83\84\81[\82Ö\82Ì\8eQ\8fÆ\83|\83C\83\93\83^
@@ -184,25 +207,7 @@ void do_cmd_destroy(player_type *creature_ptr)
     sound(SOUND_DESTITEM);
     reduce_charges(destroy_ptr->o_ptr, destroy_ptr->amt);
     vary_item(creature_ptr, destroy_ptr->item, -destroy_ptr->amt);
-    if (item_tester_high_level_book(destroy_ptr->q_ptr)) {
-        gain_exp_by_destroying_magic_book(creature_ptr, destroy_ptr);
-        if (item_tester_high_level_book(destroy_ptr->q_ptr) && destroy_ptr->q_ptr->tval == TV_LIFE_BOOK) {
-            chg_virtue(creature_ptr, V_UNLIFE, 1);
-            chg_virtue(creature_ptr, V_VITALITY, -1);
-        } else if (item_tester_high_level_book(destroy_ptr->q_ptr) && destroy_ptr->q_ptr->tval == TV_DEATH_BOOK) {
-            chg_virtue(creature_ptr, V_UNLIFE, -1);
-            chg_virtue(creature_ptr, V_VITALITY, 1);
-        }
-
-        if ((destroy_ptr->q_ptr->to_a != 0) || (destroy_ptr->q_ptr->to_h != 0) || (destroy_ptr->q_ptr->to_d != 0))
-            chg_virtue(creature_ptr, V_ENCHANT, -1);
-
-        if (object_value_real(creature_ptr, destroy_ptr->q_ptr) > 30000)
-            chg_virtue(creature_ptr, V_SACRIFICE, 2);
-        else if (object_value_real(creature_ptr, destroy_ptr->q_ptr) > 10000)
-            chg_virtue(creature_ptr, V_SACRIFICE, 1);
-    }
-
+    process_destroy_magic_book(creature_ptr, destroy_ptr);
     if ((destroy_ptr->q_ptr->to_a != 0) || (destroy_ptr->q_ptr->to_d != 0) || (destroy_ptr->q_ptr->to_h != 0))
         chg_virtue(creature_ptr, V_HARMONY, 1);