1 #include "store/pricing.h"
2 #include "market/gold-magnification-table.h"
3 #include "object/object-value.h"
4 #include "store/store-util.h"
5 #include "store/store.h"
8 * @brief 店舗価格を決定する. 無料にはならない /
9 * Determine the price of an item (qty one) in a store.
10 * @param o_ptr 店舗に並べるオブジェクト構造体の参照ポインタ
12 * @param flip TRUEならば店主にとっての買取価格、FALSEなら売出価格を計算
16 * This function takes into account the player's charisma, and the
17 * shop-keepers friendliness, and the shop-keeper's base greed, but
18 * never lets a shop-keeper lose money in a transaction.
19 * The "greed" value should exceed 100 when the player is "buying" the
20 * item, and should be less than 100 when the player is "selling" it.
21 * Hack -- the black market always charges twice as much as it should.
22 * Charisma adjustment runs from 80 to 130
23 * Racial adjustment runs from 95 to 130
24 * Since greed/charisma/racial adjustments are centered at 100, we need
25 * to adjust (by 200) to extract a usable multiplier. Note that the
26 * "greed" value is always something (?).
29 PRICE price_item(player_type *player_ptr, object_type *o_ptr, int greed, bool flip)
31 PRICE price = object_value(player_ptr, o_ptr);
35 int factor = rgold_adj[ot_ptr->owner_race][player_ptr->prace];
36 factor += adj_chr_gold[player_ptr->stat_ind[A_CHR]];
39 adjust = 100 + (300 - (greed + factor));
43 if (cur_store_num == STORE_BLACK)
46 price = (price * adjust + 50L) / 100L;
48 adjust = 100 + ((greed + factor) - 300);
52 if (cur_store_num == STORE_BLACK)
55 price = (s32b)(((u32b)price * (u32b)adjust + 50UL) / 100UL);
65 * @brief 店舗の割引対象外にするかどうかを判定 /
66 * Eliminate need to bargain if player has haggled well in the past
67 * @param minprice アイテムの最低販売価格
68 * @return 割引を禁止するならTRUEを返す。
70 bool noneedtobargain(PRICE minprice)
72 PRICE good = st_ptr->good_buy;
73 PRICE bad = st_ptr->bad_buy;
74 return (minprice < 10L) || (good == MAX_SHORT) || (good > ((3 * bad) + (5 + (minprice / 50))));