OSDN Git Service

Merge pull request #3532 from sikabane-works/release/3.0.0.87-alpha
[hengbandforosx/hengbandosx.git] / src / store / store-util.h
1 #pragma once
2
3 #include "system/angband.h"
4
5 #include "util/enum-converter.h"
6 #include "util/enum-range.h"
7
8 #include <memory>
9 #include <vector>
10
11 constexpr DEPTH STORE_OBJ_STD_LEVEL = 5; //!< 通常店舗の標準階層レベル / Magic Level for normal stores
12
13 enum class StoreSaleType : int {
14     GENERAL = 0, //!< 店舗の種類: 雑貨屋
15     ARMOURY = 1, //!< 店舗の種類: 防具屋
16     WEAPON = 2, //!< 店舗の種類: 武器屋
17     TEMPLE = 3, //!< 店舗の種類: 寺院
18     ALCHEMIST = 4, //!< 店舗の種類: 錬金術の店
19     MAGIC = 5, //!< 店舗の種類: 魔道具屋
20     BLACK = 6, //!< 店舗の種類: ブラック・マーケット
21     HOME = 7, //!< 店舗の種類: 我が家
22     BOOK = 8, //!< 店舗の種類: 書店
23     MUSEUM = 9, //!< 店舗の種類: 博物館
24     MAX
25 };
26 constexpr int MAX_STORES = enum2i(StoreSaleType::MAX); /*!< 店舗の種類最大数 / Total number of stores (see "store.c", etc) */
27
28 constexpr auto STORE_SALE_TYPE_LIST = EnumRange(StoreSaleType::GENERAL, StoreSaleType::MUSEUM);
29
30 using store_k_idx = std::vector<short>;
31
32 /*!
33  * @brief 店舗の情報構造体
34  */
35 class ItemEntity;
36 struct store_type {
37     byte type{}; //!< Store type
38     byte owner{}; //!< Owner index
39     byte extra{}; //!< Unused for now
40     int16_t insult_cur{}; //!< Insult counter
41     int16_t good_buy{}; //!< Number of "good" buys (3.0.0で廃止)
42     int16_t bad_buy{}; //!< Number of "bad" buys (3.0.0で廃止)
43     int32_t store_open{}; //!< Closed until this turn
44     int32_t last_visit{}; //!< Last visited on this turn
45     store_k_idx regular{}; //!< Table -- Legal regular item kinds
46     store_k_idx table{}; //!< Table -- Legal item kinds
47     int16_t stock_num{}; //!< Stock -- Number of entries
48     int16_t stock_size{}; //!< Stock -- Total Size of Array
49     std::unique_ptr<ItemEntity[]> stock; //!< Stock -- Actual stock items
50
51     store_type() = default;
52     store_type(const store_type &) = delete;
53     store_type &operator=(const store_type &) = delete;
54 };
55
56 extern store_type *st_ptr;
57
58 class PlayerType;
59 void store_delete(void);
60 std::vector<PARAMETER_VALUE> store_same_magic_device_pvals(ItemEntity *j_ptr);
61 void store_item_increase(INVENTORY_IDX item, ITEM_NUMBER num);
62 void store_item_optimize(INVENTORY_IDX item);
63 int store_carry(ItemEntity *o_ptr);
64 bool store_object_similar(ItemEntity *o_ptr, ItemEntity *j_ptr);