From d63618c82d0d3da038511658b200e54b6ed9df5e Mon Sep 17 00:00:00 2001 From: Hourier Date: Tue, 2 Jun 2020 20:38:56 +0900 Subject: [PATCH] [Refactor] #40399 Moved inven_takeoff() from object2.c/h to inventory-object.c/h --- src/inventory/inventory-object.c | 55 ++++++++++++++++++++++++++++++++++++ src/inventory/inventory-object.h | 1 + src/object/object2.c | 61 ---------------------------------------- src/object/object2.h | 1 - 4 files changed, 56 insertions(+), 62 deletions(-) diff --git a/src/inventory/inventory-object.c b/src/inventory/inventory-object.c index 9a8c3cb5b..979c3d957 100644 --- a/src/inventory/inventory-object.c +++ b/src/inventory/inventory-object.c @@ -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; +} diff --git a/src/inventory/inventory-object.h b/src/inventory/inventory-object.h index b8cbc8865..a2175d02a 100644 --- a/src/inventory/inventory-object.h +++ b/src/inventory/inventory-object.h @@ -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); diff --git a/src/object/object2.c b/src/object/object2.c index cdf4464a3..403c2b2b4 100644 --- a/src/object/object2.c +++ b/src/object/object2.c @@ -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; -} diff --git a/src/object/object2.h b/src/object/object2.h index f7f18b196..8d62df1c3 100644 --- a/src/object/object2.h +++ b/src/object/object2.h @@ -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 の内部からのみ呼ばれていた. -- 2.11.0