OSDN Git Service

[Refactor] #40399 Moved inven_takeoff() from object2.c/h to inventory-object.c/h
authorHourier <hourier@users.sourceforge.jp>
Tue, 2 Jun 2020 11:38:56 +0000 (20:38 +0900)
committerHourier <hourier@users.sourceforge.jp>
Tue, 2 Jun 2020 13:23:23 +0000 (22:23 +0900)
src/inventory/inventory-object.c
src/inventory/inventory-object.h
src/object/object2.c
src/object/object2.h

index 9a8c3cb..979c3d9 100644 (file)
@@ -1,6 +1,7 @@
 #include "inventory/inventory-object.h"
 #include "floor/floor-object.h"
 #include "object/object-flavor.h"
+#include "object/object-hook.h"
 #include "object/object-mark-types.h"
 #include "object/object-value.h"
 #include "object/object2.h" // 暫定、相互参照している.
@@ -365,3 +366,57 @@ bool check_store_item_to_inventory(object_type *o_ptr)
 
     return FALSE;
 }
+
+/*!
+ * @brief 装備スロットからオブジェクトを外すメインルーチン /
+ * Take off (some of) a non-cursed equipment item
+ * @param owner_ptr プレーヤーへの参照ポインタ
+ * @param item オブジェクトを外したい所持テーブルのID
+ * @param amt 外したい個数
+ * @return 収められた所持スロットのID、拾うことができなかった場合-1を返す。
+ * @details
+ * Note that only one item at a time can be wielded per slot.\n
+ * Note that taking off an item when "full" may cause that item\n
+ * to fall to the ground.\n
+ * Return the inventory slot into which the item is placed.\n
+ */
+INVENTORY_IDX inven_takeoff(player_type *owner_ptr, INVENTORY_IDX item, ITEM_NUMBER amt)
+{
+    INVENTORY_IDX slot;
+    object_type forge;
+    object_type *q_ptr;
+    object_type *o_ptr;
+    concptr act;
+    GAME_TEXT o_name[MAX_NLEN];
+    o_ptr = &owner_ptr->inventory_list[item];
+    if (amt <= 0)
+        return -1;
+
+    if (amt > o_ptr->number)
+        amt = o_ptr->number;
+    q_ptr = &forge;
+    object_copy(q_ptr, o_ptr);
+    q_ptr->number = amt;
+    object_desc(owner_ptr, o_name, q_ptr, 0);
+    if (((item == INVEN_RARM) || (item == INVEN_LARM)) && object_is_melee_weapon(o_ptr)) {
+        act = _("を装備からはずした", "You were wielding");
+    } else if (item == INVEN_BOW) {
+        act = _("を装備からはずした", "You were holding");
+    } else if (item == INVEN_LITE) {
+        act = _("を光源からはずした", "You were holding");
+    } else {
+        act = _("を装備からはずした", "You were wearing");
+    }
+
+    inven_item_increase(owner_ptr, item, -amt);
+    inven_item_optimize(owner_ptr, item);
+
+    slot = store_item_to_inventory(owner_ptr, q_ptr);
+#ifdef JP
+    msg_format("%s(%c)%s。", o_name, index_to_label(slot), act);
+#else
+    msg_format("%s %s (%c).", act, o_name, index_to_label(slot));
+#endif
+
+    return slot;
+}
index b8cbc88..a2175d0 100644 (file)
@@ -10,3 +10,4 @@ void combine_pack(player_type *owner_ptr);
 void reorder_pack(player_type *owner_ptr);
 s16b store_item_to_inventory(player_type *owner_ptr, object_type *o_ptr);
 bool check_store_item_to_inventory(object_type *o_ptr);
+INVENTORY_IDX inven_takeoff(player_type *owner_ptr, INVENTORY_IDX item, ITEM_NUMBER amt);
index cdf4464..403c2b2 100644 (file)
@@ -3136,64 +3136,3 @@ bool object_sort_comp(object_type *o_ptr, s32b o_value, object_type *j_ptr)
 
        return o_value > object_value(j_ptr);
 }
-
-
-/*!
- * @brief 装備スロットからオブジェクトを外すメインルーチン /
- * Take off (some of) a non-cursed equipment item
- * @param owner_ptr プレーヤーへの参照ポインタ
- * @param item オブジェクトを外したい所持テーブルのID
- * @param amt 外したい個数
- * @return 収められた所持スロットのID、拾うことができなかった場合-1を返す。
- * @details
- * Note that only one item at a time can be wielded per slot.\n
- * Note that taking off an item when "full" may cause that item\n
- * to fall to the ground.\n
- * Return the inventory slot into which the item is placed.\n
- */
-INVENTORY_IDX inven_takeoff(player_type *owner_ptr, INVENTORY_IDX item, ITEM_NUMBER amt)
-{
-       INVENTORY_IDX slot;
-       object_type forge;
-       object_type *q_ptr;
-       object_type *o_ptr;
-       concptr act;
-       GAME_TEXT o_name[MAX_NLEN];
-       o_ptr = &owner_ptr->inventory_list[item];
-       if (amt <= 0) return -1;
-
-       if (amt > o_ptr->number) amt = o_ptr->number;
-       q_ptr = &forge;
-       object_copy(q_ptr, o_ptr);
-       q_ptr->number = amt;
-       object_desc(owner_ptr, o_name, q_ptr, 0);
-       if (((item == INVEN_RARM) || (item == INVEN_LARM)) &&
-               object_is_melee_weapon(o_ptr))
-       {
-               act = _("を装備からはずした", "You were wielding");
-       }
-       else if (item == INVEN_BOW)
-       {
-               act = _("を装備からはずした", "You were holding");
-       }
-       else if (item == INVEN_LITE)
-       {
-               act = _("を光源からはずした", "You were holding");
-       }
-       else
-       {
-               act = _("を装備からはずした", "You were wearing");
-       }
-
-       inven_item_increase(owner_ptr, item, -amt);
-       inven_item_optimize(owner_ptr, item);
-
-       slot = store_item_to_inventory(owner_ptr, q_ptr);
-#ifdef JP
-       msg_format("%s(%c)%s。", o_name, index_to_label(slot), act);
-#else
-       msg_format("%s %s (%c).", act, o_name, index_to_label(slot));
-#endif
-
-       return slot;
-}
index f7f18b1..8d62df1 100644 (file)
@@ -23,5 +23,4 @@ void apply_magic(player_type *owner_type, object_type *o_ptr, DEPTH lev, BIT_FLA
 OBJECT_IDX drop_near(player_type *owner_type, object_type *o_ptr, PERCENTAGE chance, POSITION y, POSITION x);
 void floor_item_charges(floor_type *owner_ptr, INVENTORY_IDX item);
 bool object_sort_comp(object_type *o_ptr, s32b o_value, object_type *j_ptr);
-INVENTORY_IDX inven_takeoff(player_type *owner_ptr, INVENTORY_IDX item, ITEM_NUMBER amt);
 void floor_item_describe(player_type *player_ptr, INVENTORY_IDX item); // 暫定、元々object2.c の内部からのみ呼ばれていた.