From ede00c21f38ed035f7268ef752f0ecd7d17c4615 Mon Sep 17 00:00:00 2001 From: Hourier Date: Mon, 1 Jun 2020 23:29:40 +0900 Subject: [PATCH] [Refactor] #40399 Separated object-value.c/h from object2.c/h --- Hengband/Hengband/Hengband.vcxproj | 2 + Hengband/Hengband/Hengband.vcxproj.filters | 6 + src/Makefile.am | 1 + src/autopick/autopick-destroyer.c | 2 +- src/autopick/autopick-matcher.c | 1 + src/cmd-item/cmd-item.c | 1 + src/floor/floor-events.c | 2 +- src/inventory/inventory-object.c | 1 + src/io/load.c | 1 + src/market/building-craft-fix.c | 1 + src/object/object-value.c | 315 +++++++++++++++++++++++++++++ src/object/object-value.h | 6 + src/object/object2.c | 276 +------------------------ src/object/object2.h | 2 - src/player/player-effects.c | 1 + src/spell/spells3.c | 1 + src/store/store-util.c | 1 + src/store/store.c | 1 + src/wizard/wizard-special-process.c | 1 + src/wizard/wizard-spoiler.c | 1 + 20 files changed, 344 insertions(+), 279 deletions(-) create mode 100644 src/object/object-value.c create mode 100644 src/object/object-value.h diff --git a/Hengband/Hengband/Hengband.vcxproj b/Hengband/Hengband/Hengband.vcxproj index 9f070961f..655287c89 100644 --- a/Hengband/Hengband/Hengband.vcxproj +++ b/Hengband/Hengband/Hengband.vcxproj @@ -212,6 +212,7 @@ + @@ -494,6 +495,7 @@ + diff --git a/Hengband/Hengband/Hengband.vcxproj.filters b/Hengband/Hengband/Hengband.vcxproj.filters index e8260b8f8..6db9434c1 100644 --- a/Hengband/Hengband/Hengband.vcxproj.filters +++ b/Hengband/Hengband/Hengband.vcxproj.filters @@ -1079,6 +1079,9 @@ inventory + + object + @@ -2308,6 +2311,9 @@ inventory + + object + diff --git a/src/Makefile.am b/src/Makefile.am index a9f3c35ed..de777275c 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -304,6 +304,7 @@ hengband_SOURCES = \ object/object-hook.c object/object-hook.h \ object/object-kind.c object/object-kind.h \ object/object-kind-hook.c object/object-kind-hook.h \ + object/object-value.c object/object-value.h \ object/lite-processor.c object/lite-processor.h \ object/torch.c object/torch.h \ object/tr-types.h object/trc-types.h object/tval-type.h \ diff --git a/src/autopick/autopick-destroyer.c b/src/autopick/autopick-destroyer.c index 9f8a97a24..7d8942b9a 100644 --- a/src/autopick/autopick-destroyer.c +++ b/src/autopick/autopick-destroyer.c @@ -12,7 +12,7 @@ #include "object/object-flavor.h" #include "object/object-hook.h" #include "object/object-mark-types.h" -#include "object/object2.h" +#include "object/object-value.h" #include "object/special-object-flags.h" #include "object/sv-other-types.h" #include "object/sv-wand-types.h" diff --git a/src/autopick/autopick-matcher.c b/src/autopick/autopick-matcher.c index d7a3ba5f7..15ef7b150 100644 --- a/src/autopick/autopick-matcher.c +++ b/src/autopick/autopick-matcher.c @@ -12,6 +12,7 @@ #include "object/object-appraiser.h" #include "object/object-hook.h" #include "object/object-kind.h" +#include "object/object-value.h" #include "object/object2.h" #include "object/special-object-flags.h" diff --git a/src/cmd-item/cmd-item.c b/src/cmd-item/cmd-item.c index b1fae8fa9..bf144b647 100644 --- a/src/cmd-item/cmd-item.c +++ b/src/cmd-item/cmd-item.c @@ -42,6 +42,7 @@ #include "object/special-object-flags.h" #include "object/sv-lite-types.h" #include "object/trc-types.h" +#include "object/object-value.h" #include "player/avatar.h" #include "player/player-class.h" #include "player/player-effects.h" diff --git a/src/floor/floor-events.c b/src/floor/floor-events.c index eaf436394..ee2497177 100644 --- a/src/floor/floor-events.c +++ b/src/floor/floor-events.c @@ -11,7 +11,7 @@ #include "object/object-hook.h" #include "object/object-kind.h" #include "object/object-mark-types.h" -#include "object/object2.h" +#include "object/object-value.h" #include "object/special-object-flags.h" #include "object/sv-amulet-types.h" #include "object/sv-protector-types.h" diff --git a/src/inventory/inventory-object.c b/src/inventory/inventory-object.c index 74b7cf3ff..dfa01fa0d 100644 --- a/src/inventory/inventory-object.c +++ b/src/inventory/inventory-object.c @@ -1,5 +1,6 @@ #include "inventory/inventory-object.h" #include "object/object-flavor.h" +#include "object/object-value.h" #include "object/object2.h" // 暫定、相互参照している. #include "player/player-effects.h" // 暫定、相互参照している. #include "view/object-describer.h" diff --git a/src/io/load.c b/src/io/load.c index 2e6214453..d440b2486 100644 --- a/src/io/load.c +++ b/src/io/load.c @@ -70,6 +70,7 @@ #include "object/object-mark-types.h" #include "object/object2.h" #include "object/old-ego-extra-values.h" // TODO v1.5.0以前のセーブファイルをロードする処理を分離する. +#include "object/object-value.h" #include "object/sv-armor-types.h" #include "object/sv-lite-types.h" #include "object/tr-types.h" diff --git a/src/market/building-craft-fix.c b/src/market/building-craft-fix.c index 3eb4b53f4..9f5ab16ea 100644 --- a/src/market/building-craft-fix.c +++ b/src/market/building-craft-fix.c @@ -9,6 +9,7 @@ #include "object/object-flavor.h" #include "object/object-hook.h" #include "object/object-kind.h" +#include "object/object-value.h" #include "object/object2.h" #include "object/special-object-flags.h" #include "object/sv-other-types.h" diff --git a/src/object/object-value.c b/src/object/object-value.c new file mode 100644 index 000000000..4039a47a7 --- /dev/null +++ b/src/object/object-value.c @@ -0,0 +1,315 @@ +#include "object/object-value.h" +#include "object/artifact.h" +#include "object/object-appraiser.h" +#include "object/object-broken.h" +#include "object/object-curse.h" +#include "object/object-ego.h" +#include "object/object-hook.h" +#include "object/object-kind.h" +#include "object/object1.h" +#include "object/object2.h" // 暫定、相互参照している. +#include "object/special-object-flags.h" + +/*! + * @brief 未鑑定なベースアイテムの基本価格を返す / + * Return the "value" of an "unknown" item Make a guess at the value of non-aware items + * @param o_ptr 未鑑定価格を確認したいオブジェクトの構造体参照ポインタ + * @return オブジェクトの未鑑定価格 + */ +static PRICE object_value_base(object_type *o_ptr) +{ + if (object_is_aware(o_ptr)) + return (k_info[o_ptr->k_idx].cost); + + switch (o_ptr->tval) { + case TV_FOOD: + return (5L); + case TV_POTION: + return (20L); + case TV_SCROLL: + return (20L); + case TV_STAFF: + return (70L); + case TV_WAND: + return (50L); + case TV_ROD: + return (90L); + case TV_RING: + return (45L); + case TV_AMULET: + return (45L); + case TV_FIGURINE: { + DEPTH level = r_info[o_ptr->pval].level; + if (level < 20) + return level * 50L; + else if (level < 30) + return 1000 + (level - 20) * 150L; + else if (level < 40) + return 2500 + (level - 30) * 350L; + else if (level < 50) + return 6000 + (level - 40) * 800L; + else + return 14000 + (level - 50) * 2000L; + } + case TV_CAPTURE: + if (!o_ptr->pval) + return 1000L; + else + return ((r_info[o_ptr->pval].level) * 50L + 1000); + } + + return (0L); +} + +/*! + * @brief オブジェクト価格算出のメインルーチン / + * Return the price of an item including plusses (and charges) + * @param o_ptr 判明している現価格を確認したいオブジェクトの構造体参照ポインタ + * @return オブジェクトの判明している現価格 + * @details + * This function returns the "value" of the given item (qty one)\n + *\n + * Never notice "unknown" bonuses or properties, including "curses",\n + * since that would give the player information he did not have.\n + *\n + * Note that discounted items stay discounted forever, even if\n + * the discount is "forgotten" by the player via memory loss.\n + */ +PRICE object_value(object_type *o_ptr) +{ + PRICE value; + + if (object_is_known(o_ptr)) { + if (object_is_broken(o_ptr)) + return (0L); + if (object_is_cursed(o_ptr)) + return (0L); + + value = object_value_real(o_ptr); + } else { + if ((o_ptr->ident & (IDENT_SENSE)) && object_is_broken(o_ptr)) + return (0L); + if ((o_ptr->ident & (IDENT_SENSE)) && object_is_cursed(o_ptr)) + return (0L); + + value = object_value_base(o_ptr); + } + + if (o_ptr->discount) + value -= (value * o_ptr->discount / 100L); + + return (value); +} + +/*! + * @brief オブジェクトの真の価格を算出する / + * Return the value of the flags the object has... + * @param o_ptr 本価格を確認したいオブジェクトの構造体参照ポインタ + * @return オブジェクトの本価格 + * @details + * Return the "real" price of a "known" item, not including discounts\n + *\n + * Wand and staffs get cost for each charge\n + *\n + * Armor is worth an extra 100 gold per bonus point to armor class.\n + *\n + * Weapons are worth an extra 100 gold per bonus point (AC,TH,TD).\n + *\n + * Missiles are only worth 5 gold per bonus point, since they\n + * usually appear in groups of 20, and we want the player to get\n + * the same amount of cash for any "equivalent" item. Note that\n + * missiles never have any of the "pval" flags, and in fact, they\n + * only have a few of the available flags, primarily of the "slay"\n + * and "brand" and "ignore" variety.\n + *\n + * Armor with a negative armor bonus is worthless.\n + * Weapons with negative hit+damage bonuses are worthless.\n + *\n + * Every wearable item with a "pval" bonus is worth extra (see below).\n + */ +PRICE object_value_real(object_type *o_ptr) +{ + BIT_FLAGS flgs[TR_FLAG_SIZE]; + object_kind *k_ptr = &k_info[o_ptr->k_idx]; + + if (!k_info[o_ptr->k_idx].cost) + return (0L); + + PRICE value = k_info[o_ptr->k_idx].cost; + object_flags(o_ptr, flgs); + if (object_is_fixed_artifact(o_ptr)) { + artifact_type *a_ptr = &a_info[o_ptr->name1]; + if (!a_ptr->cost) + return (0L); + + value = a_ptr->cost; + value += flag_cost(o_ptr, o_ptr->pval); + return (value); + } else if (object_is_ego(o_ptr)) { + ego_item_type *e_ptr = &e_info[o_ptr->name2]; + if (!e_ptr->cost) + return (0L); + + value += e_ptr->cost; + value += flag_cost(o_ptr, o_ptr->pval); + } else { + bool flag = FALSE; + for (int i = 0; i < TR_FLAG_SIZE; i++) + if (o_ptr->art_flags[i]) + flag = TRUE; + + if (flag) + value += flag_cost(o_ptr, o_ptr->pval); + } + + /* Analyze pval bonus for normal object */ + switch (o_ptr->tval) { + case TV_SHOT: + case TV_ARROW: + case TV_BOLT: + case TV_BOW: + case TV_DIGGING: + case TV_HAFTED: + case TV_POLEARM: + case TV_SWORD: + case TV_BOOTS: + case TV_GLOVES: + case TV_HELM: + case TV_CROWN: + case TV_SHIELD: + case TV_CLOAK: + case TV_SOFT_ARMOR: + case TV_HARD_ARMOR: + case TV_DRAG_ARMOR: + case TV_LITE: + case TV_AMULET: + case TV_RING: + if (!o_ptr->pval) + break; + if (o_ptr->pval < 0) + return (0L); + + if (have_flag(flgs, TR_STR)) + value += (o_ptr->pval * 200L); + if (have_flag(flgs, TR_INT)) + value += (o_ptr->pval * 200L); + if (have_flag(flgs, TR_WIS)) + value += (o_ptr->pval * 200L); + if (have_flag(flgs, TR_DEX)) + value += (o_ptr->pval * 200L); + if (have_flag(flgs, TR_CON)) + value += (o_ptr->pval * 200L); + if (have_flag(flgs, TR_CHR)) + value += (o_ptr->pval * 200L); + if (have_flag(flgs, TR_MAGIC_MASTERY)) + value += (o_ptr->pval * 100); + if (have_flag(flgs, TR_STEALTH)) + value += (o_ptr->pval * 100L); + if (have_flag(flgs, TR_SEARCH)) + value += (o_ptr->pval * 100L); + if (have_flag(flgs, TR_INFRA)) + value += (o_ptr->pval * 50L); + if (have_flag(flgs, TR_TUNNEL)) + value += (o_ptr->pval * 50L); + if (have_flag(flgs, TR_BLOWS)) + value += (o_ptr->pval * 5000L); + if (have_flag(flgs, TR_SPEED)) + value += (o_ptr->pval * 10000L); + break; + } + + switch (o_ptr->tval) { + case TV_WAND: { + /* Pay extra for charges, depending on standard number of + * charges. Handle new-style wands correctly. -LM- + */ + value += (value * o_ptr->pval / o_ptr->number / (k_ptr->pval * 2)); + break; + } + case TV_STAFF: { + /* Pay extra for charges, depending on standard number of + * charges. -LM- + */ + value += (value * o_ptr->pval / (k_ptr->pval * 2)); + break; + } + case TV_RING: + case TV_AMULET: { + if (o_ptr->to_h + o_ptr->to_d + o_ptr->to_a < 0) + return (0L); + + value += ((o_ptr->to_h + o_ptr->to_d + o_ptr->to_a) * 200L); + break; + } + case TV_BOOTS: + case TV_GLOVES: + case TV_CLOAK: + case TV_CROWN: + case TV_HELM: + case TV_SHIELD: + case TV_SOFT_ARMOR: + case TV_HARD_ARMOR: + case TV_DRAG_ARMOR: { + if (o_ptr->to_a < 0) + return (0L); + + value += (((o_ptr->to_h - k_ptr->to_h) + (o_ptr->to_d - k_ptr->to_d)) * 200L + (o_ptr->to_a) * 100L); + break; + } + case TV_BOW: + case TV_DIGGING: + case TV_HAFTED: + case TV_SWORD: + case TV_POLEARM: { + if (o_ptr->to_h + o_ptr->to_d < 0) + return (0L); + + value += ((o_ptr->to_h + o_ptr->to_d + o_ptr->to_a) * 100L); + value += (o_ptr->dd - k_ptr->dd) * o_ptr->ds * 250L; + value += (o_ptr->ds - k_ptr->ds) * o_ptr->dd * 250L; + break; + } + case TV_SHOT: + case TV_ARROW: + case TV_BOLT: { + if (o_ptr->to_h + o_ptr->to_d < 0) + return (0L); + + value += ((o_ptr->to_h + o_ptr->to_d) * 5L); + value += (o_ptr->dd - k_ptr->dd) * o_ptr->ds * 5L; + value += (o_ptr->ds - k_ptr->ds) * o_ptr->dd * 5L; + break; + } + case TV_FIGURINE: { + DEPTH level = r_info[o_ptr->pval].level; + if (level < 20) + value = level * 50L; + else if (level < 30) + value = 1000 + (level - 20) * 150L; + else if (level < 40) + value = 2500 + (level - 30) * 350L; + else if (level < 50) + value = 6000 + (level - 40) * 800L; + else + value = 14000 + (level - 50) * 2000L; + break; + } + case TV_CAPTURE: { + if (!o_ptr->pval) + value = 1000L; + else + value = ((r_info[o_ptr->pval].level) * 50L + 1000); + break; + } + case TV_CHEST: { + if (!o_ptr->pval) + value = 0L; + break; + } + } + + if (value < 0) + return 0L; + + return (value); +} diff --git a/src/object/object-value.h b/src/object/object-value.h new file mode 100644 index 000000000..456b007cb --- /dev/null +++ b/src/object/object-value.h @@ -0,0 +1,6 @@ +#pragma once + +#include "system/angband.h" + +PRICE object_value(object_type *o_ptr); +PRICE object_value_real(object_type *o_ptr); diff --git a/src/object/object2.c b/src/object/object2.c index 86d2097fb..b35803002 100644 --- a/src/object/object2.c +++ b/src/object/object2.c @@ -33,6 +33,7 @@ #include "object/object-hook.h" #include "object/object-kind.h" #include "object/object-mark-types.h" +#include "object/object-value.h" // 暫定、相互参照している. #include "object/special-object-flags.h" #include "object/sv-amulet-types.h" #include "object/sv-armor-types.h" @@ -404,45 +405,6 @@ byte value_check_aux2(object_type *o_ptr) /*! - * @brief 未鑑定なベースアイテムの基本価格を返す / - * Return the "value" of an "unknown" item Make a guess at the value of non-aware items - * @param o_ptr 未鑑定価格を確認したいオブジェクトの構造体参照ポインタ - * @return オブジェクトの未鑑定価格 - */ -static PRICE object_value_base(object_type *o_ptr) -{ - if (object_is_aware(o_ptr)) - return (k_info[o_ptr->k_idx].cost); - - switch (o_ptr->tval) - { - case TV_FOOD: return (5L); - case TV_POTION: return (20L); - case TV_SCROLL: return (20L); - case TV_STAFF: return (70L); - case TV_WAND: return (50L); - case TV_ROD: return (90L); - case TV_RING: return (45L); - case TV_AMULET: return (45L); - case TV_FIGURINE: - { - DEPTH level = r_info[o_ptr->pval].level; - if (level < 20) return level * 50L; - else if (level < 30) return 1000 + (level - 20) * 150L; - else if (level < 40) return 2500 + (level - 30) * 350L; - else if (level < 50) return 6000 + (level - 40) * 800L; - else return 14000 + (level - 50) * 2000L; - } - case TV_CAPTURE: - if (!o_ptr->pval) return 1000L; - else return ((r_info[o_ptr->pval].level) * 50L + 1000); - } - - return (0L); -} - - -/*! * @brief オブジェクトのフラグ類から価格を算出する / * Return the value of the flags the object has... * @param o_ptr フラグ価格を確認したいオブジェクトの構造体参照ポインタ @@ -650,242 +612,6 @@ PRICE flag_cost(object_type *o_ptr, int plusses) /*! - * @brief オブジェクトの真の価格を算出する / - * Return the value of the flags the object has... - * @param o_ptr 本価格を確認したいオブジェクトの構造体参照ポインタ - * @return オブジェクトの本価格 - * @details - * Return the "real" price of a "known" item, not including discounts\n - *\n - * Wand and staffs get cost for each charge\n - *\n - * Armor is worth an extra 100 gold per bonus point to armor class.\n - *\n - * Weapons are worth an extra 100 gold per bonus point (AC,TH,TD).\n - *\n - * Missiles are only worth 5 gold per bonus point, since they\n - * usually appear in groups of 20, and we want the player to get\n - * the same amount of cash for any "equivalent" item. Note that\n - * missiles never have any of the "pval" flags, and in fact, they\n - * only have a few of the available flags, primarily of the "slay"\n - * and "brand" and "ignore" variety.\n - *\n - * Armor with a negative armor bonus is worthless.\n - * Weapons with negative hit+damage bonuses are worthless.\n - *\n - * Every wearable item with a "pval" bonus is worth extra (see below).\n - */ -PRICE object_value_real(object_type *o_ptr) -{ - BIT_FLAGS flgs[TR_FLAG_SIZE]; - object_kind *k_ptr = &k_info[o_ptr->k_idx]; - - if (!k_info[o_ptr->k_idx].cost) return (0L); - - PRICE value = k_info[o_ptr->k_idx].cost; - object_flags(o_ptr, flgs); - if (object_is_fixed_artifact(o_ptr)) - { - artifact_type *a_ptr = &a_info[o_ptr->name1]; - if (!a_ptr->cost) return (0L); - - value = a_ptr->cost; - value += flag_cost(o_ptr, o_ptr->pval); - return (value); - } - else if (object_is_ego(o_ptr)) - { - ego_item_type *e_ptr = &e_info[o_ptr->name2]; - if (!e_ptr->cost) return (0L); - - value += e_ptr->cost; - value += flag_cost(o_ptr, o_ptr->pval); - } - else - { - bool flag = FALSE; - for (int i = 0; i < TR_FLAG_SIZE; i++) - if (o_ptr->art_flags[i]) flag = TRUE; - - if (flag) value += flag_cost(o_ptr, o_ptr->pval); - } - - /* Analyze pval bonus for normal object */ - switch (o_ptr->tval) - { - case TV_SHOT: - case TV_ARROW: - case TV_BOLT: - case TV_BOW: - case TV_DIGGING: - case TV_HAFTED: - case TV_POLEARM: - case TV_SWORD: - case TV_BOOTS: - case TV_GLOVES: - case TV_HELM: - case TV_CROWN: - case TV_SHIELD: - case TV_CLOAK: - case TV_SOFT_ARMOR: - case TV_HARD_ARMOR: - case TV_DRAG_ARMOR: - case TV_LITE: - case TV_AMULET: - case TV_RING: - if (!o_ptr->pval) break; - if (o_ptr->pval < 0) return (0L); - - if (have_flag(flgs, TR_STR)) value += (o_ptr->pval * 200L); - if (have_flag(flgs, TR_INT)) value += (o_ptr->pval * 200L); - if (have_flag(flgs, TR_WIS)) value += (o_ptr->pval * 200L); - if (have_flag(flgs, TR_DEX)) value += (o_ptr->pval * 200L); - if (have_flag(flgs, TR_CON)) value += (o_ptr->pval * 200L); - if (have_flag(flgs, TR_CHR)) value += (o_ptr->pval * 200L); - if (have_flag(flgs, TR_MAGIC_MASTERY)) value += (o_ptr->pval * 100); - if (have_flag(flgs, TR_STEALTH)) value += (o_ptr->pval * 100L); - if (have_flag(flgs, TR_SEARCH)) value += (o_ptr->pval * 100L); - if (have_flag(flgs, TR_INFRA)) value += (o_ptr->pval * 50L); - if (have_flag(flgs, TR_TUNNEL)) value += (o_ptr->pval * 50L); - if (have_flag(flgs, TR_BLOWS)) value += (o_ptr->pval * 5000L); - if (have_flag(flgs, TR_SPEED)) value += (o_ptr->pval * 10000L); - break; - } - - switch (o_ptr->tval) - { - case TV_WAND: - { - /* Pay extra for charges, depending on standard number of - * charges. Handle new-style wands correctly. -LM- - */ - value += (value * o_ptr->pval / o_ptr->number / (k_ptr->pval * 2)); - break; - } - case TV_STAFF: - { - /* Pay extra for charges, depending on standard number of - * charges. -LM- - */ - value += (value * o_ptr->pval / (k_ptr->pval * 2)); - break; - } - case TV_RING: - case TV_AMULET: - { - if (o_ptr->to_h + o_ptr->to_d + o_ptr->to_a < 0) return (0L); - - value += ((o_ptr->to_h + o_ptr->to_d + o_ptr->to_a) * 200L); - break; - } - case TV_BOOTS: - case TV_GLOVES: - case TV_CLOAK: - case TV_CROWN: - case TV_HELM: - case TV_SHIELD: - case TV_SOFT_ARMOR: - case TV_HARD_ARMOR: - case TV_DRAG_ARMOR: - { - if (o_ptr->to_a < 0) return (0L); - - value += (((o_ptr->to_h - k_ptr->to_h) + (o_ptr->to_d - k_ptr->to_d)) * 200L + (o_ptr->to_a) * 100L); - break; - } - case TV_BOW: - case TV_DIGGING: - case TV_HAFTED: - case TV_SWORD: - case TV_POLEARM: - { - if (o_ptr->to_h + o_ptr->to_d < 0) return (0L); - - value += ((o_ptr->to_h + o_ptr->to_d + o_ptr->to_a) * 100L); - value += (o_ptr->dd - k_ptr->dd) * o_ptr->ds * 250L; - value += (o_ptr->ds - k_ptr->ds) * o_ptr->dd * 250L; - break; - } - case TV_SHOT: - case TV_ARROW: - case TV_BOLT: - { - if (o_ptr->to_h + o_ptr->to_d < 0) return (0L); - - value += ((o_ptr->to_h + o_ptr->to_d) * 5L); - value += (o_ptr->dd - k_ptr->dd) * o_ptr->ds * 5L; - value += (o_ptr->ds - k_ptr->ds) * o_ptr->dd * 5L; - break; - } - case TV_FIGURINE: - { - DEPTH level = r_info[o_ptr->pval].level; - if (level < 20) value = level * 50L; - else if (level < 30) value = 1000 + (level - 20) * 150L; - else if (level < 40) value = 2500 + (level - 30) * 350L; - else if (level < 50) value = 6000 + (level - 40) * 800L; - else value = 14000 + (level - 50) * 2000L; - break; - } - case TV_CAPTURE: - { - if (!o_ptr->pval) value = 1000L; - else value = ((r_info[o_ptr->pval].level) * 50L + 1000); - break; - } - case TV_CHEST: - { - if (!o_ptr->pval) value = 0L; - break; - } - } - - if (value < 0) return 0L; - - return (value); -} - - -/*! - * @brief オブジェクト価格算出のメインルーチン / - * Return the price of an item including plusses (and charges) - * @param o_ptr 判明している現価格を確認したいオブジェクトの構造体参照ポインタ - * @return オブジェクトの判明している現価格 - * @details - * This function returns the "value" of the given item (qty one)\n - *\n - * Never notice "unknown" bonuses or properties, including "curses",\n - * since that would give the player information he did not have.\n - *\n - * Note that discounted items stay discounted forever, even if\n - * the discount is "forgotten" by the player via memory loss.\n - */ -PRICE object_value(object_type *o_ptr) -{ - PRICE value; - - if (object_is_known(o_ptr)) - { - if (object_is_broken(o_ptr)) return (0L); - if (object_is_cursed(o_ptr)) return (0L); - - value = object_value_real(o_ptr); - } - else - { - if ((o_ptr->ident & (IDENT_SENSE)) && object_is_broken(o_ptr)) return (0L); - if ((o_ptr->ident & (IDENT_SENSE)) && object_is_cursed(o_ptr)) return (0L); - - value = object_value_base(o_ptr); - } - - if (o_ptr->discount) value -= (value * o_ptr->discount / 100L); - - return (value); -} - - -/*! * @brief 魔法棒やロッドのスロット分割時に使用回数を分配する / * Distribute charges of rods or wands. * @param o_ptr 分割元オブジェクトの構造体参照ポインタ source item diff --git a/src/object/object2.h b/src/object/object2.h index afcadedc3..01af4cbae 100644 --- a/src/object/object2.h +++ b/src/object/object2.h @@ -18,8 +18,6 @@ OBJECT_IDX get_obj_num(player_type *o_ptr, DEPTH level, BIT_FLAGS mode); byte value_check_aux1(object_type *o_ptr); byte value_check_aux2(object_type *o_ptr); -PRICE object_value(object_type *o_ptr); -PRICE object_value_real(object_type *o_ptr); void distribute_charges(object_type *o_ptr, object_type *q_ptr, int amt); void reduce_charges(object_type *o_ptr, int amt); int object_similar_part(object_type *o_ptr, object_type *j_ptr); diff --git a/src/player/player-effects.c b/src/player/player-effects.c index 20cd9da67..a7ecc643b 100644 --- a/src/player/player-effects.c +++ b/src/player/player-effects.c @@ -39,6 +39,7 @@ #include "object/object-ego.h" #include "object/object-hook.h" #include "object/object-kind.h" +#include "object/object-value.h" #include "object/object2.h" #include "object/special-object-flags.h" #include "object/sv-armor-types.h" diff --git a/src/spell/spells3.c b/src/spell/spells3.c index 5db3ea564..6eb3919f2 100644 --- a/src/spell/spells3.c +++ b/src/spell/spells3.c @@ -50,6 +50,7 @@ #include "object/object-hook.h" #include "object/object-kind.h" #include "object/object-mark-types.h" +#include "object/object-value.h" #include "object/object2.h" #include "object/special-object-flags.h" #include "object/tr-types.h" diff --git a/src/store/store-util.c b/src/store/store-util.c index 0a9b103a3..7f4670ed0 100644 --- a/src/store/store-util.c +++ b/src/store/store-util.c @@ -10,6 +10,7 @@ #include "object/object-appraiser.h" #include "object/object-hook.h" #include "object/object-kind.h" +#include "object/object-value.h" #include "object/object2.h" #include "object/special-object-flags.h" #include "object/sv-lite-types.h" diff --git a/src/store/store.c b/src/store/store.c index 4ac6e07a9..5dc834ac3 100644 --- a/src/store/store.c +++ b/src/store/store.c @@ -48,6 +48,7 @@ #include "object/object-flavor.h" #include "object/object-hook.h" #include "object/object-kind.h" +#include "object/object-value.h" #include "object/object2.h" #include "object/special-object-flags.h" #include "player/avatar.h" diff --git a/src/wizard/wizard-special-process.c b/src/wizard/wizard-special-process.c index 68c7193e8..5919f36bd 100644 --- a/src/wizard/wizard-special-process.c +++ b/src/wizard/wizard-special-process.c @@ -40,6 +40,7 @@ #include "object/object-flavor.h" #include "object/object-hook.h" #include "object/object-kind.h" +#include "object/object-value.h" #include "object/object2.h" #include "object/trc-types.h" #include "player/patron.h" diff --git a/src/wizard/wizard-spoiler.c b/src/wizard/wizard-spoiler.c index 8c3d121c3..d24cdeeba 100644 --- a/src/wizard/wizard-spoiler.c +++ b/src/wizard/wizard-spoiler.c @@ -20,6 +20,7 @@ #include "object/object-ego.h" #include "object/object-flavor.h" #include "object/object-kind.h" +#include "object/object-value.h" #include "object/object2.h" #include "object/special-object-flags.h" #include "object/tr-types.h" -- 2.11.0