1 #include "load/store-loader.h"
2 #include "object/object-generator.h"
3 #include "floor/floor-town.h"
4 #include "load/angband-version-comparer.h"
5 #include "load/item-loader.h"
6 #include "load/load-util.h"
7 #include "object/object-stack.h"
8 #include "object/object-value.h"
9 #include "player-info/avatar.h"
10 #include "store/store.h"
11 #include "util/object-sort.h"
14 * @brief 店置きのアイテムオブジェクトを読み込む / Add the item "o_ptr" to the inventory of the "Home"
15 * @param player_ptr プレーヤーへの参照ポインタ
16 * @param store_ptr 店舗の参照ポインタ
17 * @param o_ptr アイテムオブジェクト参照ポインタ
20 * In all cases, return the slot (or -1) where the object was placed
22 * Note that this is a hacked up version of "store_item_to_inventory()".
24 * Also note that it may not correctly "adapt" to "knowledge" bacoming
25 * known, the player may have to pick stuff up and drop it again.
27 static void home_carry_load(player_type *player_ptr, store_type *store_ptr, object_type *o_ptr)
29 for (int i = 0; i < store_ptr->stock_num; i++) {
31 j_ptr = &store_ptr->stock[i];
32 if (!object_similar(j_ptr, o_ptr))
35 object_absorb(j_ptr, o_ptr);
39 if (store_ptr->stock_num >= STORE_INVEN_MAX * 10)
42 s32b value = object_value(player_ptr, o_ptr);
44 for (slot = 0; slot < store_ptr->stock_num; slot++) {
45 if (object_sort_comp(player_ptr, o_ptr, value, &store_ptr->stock[slot]))
49 for (int i = store_ptr->stock_num; i > slot; i--) {
50 store_ptr->stock[i] = store_ptr->stock[i - 1];
53 store_ptr->stock_num++;
54 store_ptr->stock[slot] = *o_ptr;
55 chg_virtue(player_ptr, V_SACRIFICE, -1);
59 * @brief 店舗情報を読み込む / Read a store
60 * @param player_ptr プレーヤーへの参照ポインタ
61 * @param town_number 街ID
62 * @param store_number 店舗ID
65 static errr rd_store(player_type *player_ptr, int town_number, int store_number)
67 store_type *store_ptr;
69 if (z_older_than(10, 3, 3) && (store_number == STORE_HOME)) {
70 store_ptr = &town_info[1].store[store_number];
71 if (store_ptr->stock_num)
74 store_ptr = &town_info[town_number].store[store_number];
80 rd_s32b(&store_ptr->store_open);
81 rd_s16b(&store_ptr->insult_cur);
83 if (z_older_than(11, 0, 4)) {
90 rd_s16b(&store_ptr->good_buy);
91 rd_s16b(&store_ptr->bad_buy);
93 rd_s32b(&store_ptr->last_visit);
94 store_ptr->owner = own;
96 for (int j = 0; j < num; j++) {
102 rd_item(player_ptr, q_ptr);
104 bool is_valid_item = store_ptr->stock_num
105 < (store_number == STORE_HOME ? STORE_INVEN_MAX * 10 : store_number == STORE_MUSEUM ? STORE_INVEN_MAX * 50 : STORE_INVEN_MAX);
110 home_carry_load(player_ptr, store_ptr, q_ptr);
112 int k = store_ptr->stock_num++;
113 object_copy(&store_ptr->stock[k], q_ptr);
120 errr load_store(player_type *creature_ptr)
124 int town_count = tmp16u;
126 for (int i = 1; i < town_count; i++)
127 for (int j = 0; j < tmp16u; j++)
128 if (rd_store(creature_ptr, i, j))