if ((j == STORE_BLACK) || (j == STORE_HOME) || (j == STORE_MUSEUM))
continue;
- store_ptr->regular_num = 0;
- store_ptr->regular_size = STORE_INVEN_MAX;
- C_MAKE(store_ptr->regular, store_ptr->regular_size + 1, KIND_OBJECT_IDX);
- for (int k = 0; k < store_ptr->regular_size; k++) {
+ for (int k = 0; k < STORE_INVEN_MAX; k++) {
int tv = store_regular_table[j][k].tval;
int sv = store_regular_table[j][k].sval;
if (tv == 0)
if (k_idx == 0)
continue;
- store_ptr->regular[store_ptr->regular_num++] = k_idx;
+ store_ptr->regular.push_back(k_idx);
}
- store_ptr->table_num = 0;
- store_ptr->table_size = STORE_CHOICES;
- C_MAKE(store_ptr->table, store_ptr->table_size + 1, KIND_OBJECT_IDX);
- for (int k = 0; k < store_ptr->table_size; k++) {
+ for (int k = 0; k < STORE_CHOICES; k++) {
int tv = store_table[j][k].tval;
int sv = store_table[j][k].sval;
if (tv == 0)
if (k_idx == 0)
continue;
- store_ptr->table[store_ptr->table_num++] = k_idx;
+ store_ptr->table.push_back(k_idx);
}
}
}
* Increase, by a given amount, the number of a certain item
* in a certain store. This can result in zero items.
* </pre>
- * @todo numは本来ITEM_NUMBER型にしたい。
*/
-void store_item_increase(INVENTORY_IDX item, int num)
+void store_item_increase(INVENTORY_IDX item, ITEM_NUMBER num)
{
object_type *o_ptr;
o_ptr = &st_ptr->stock[item];
cnt = 0;
num = cnt - o_ptr->number;
- o_ptr->number += (ITEM_NUMBER)num;
+ o_ptr->number += num;
}
/*!
k_idx = fix_k_idx;
level = rand_range(1, STORE_OBJ_LEVEL);
} else {
- k_idx = st_ptr->table[randint0(st_ptr->table_num)];
+ k_idx = st_ptr->table[randint0(st_ptr->table.size())];
level = rand_range(1, STORE_OBJ_LEVEL);
}
#pragma once
#include "system/angband.h"
+#include <vector>
-#define STORE_OBJ_LEVEL 5 /* Magic Level for normal stores */
+#define STORE_OBJ_LEVEL 5 //!< 通常店舗の階層レベル / Magic Level for normal stores
-#define STORE_GENERAL 0 /*!< 店舗の種類: 雑貨屋 */
-#define STORE_ARMOURY 1 /*!< 店舗の種類: 防具屋 */
-#define STORE_WEAPON 2 /*!< 店舗の種類: 武器屋 */
-#define STORE_TEMPLE 3 /*!< 店舗の種類: 寺院 */
-#define STORE_ALCHEMIST 4 /*!< 店舗の種類: 錬金術の店 */
-#define STORE_MAGIC 5 /*!< 店舗の種類: 魔道具屋 */
-#define STORE_BLACK 6 /*!< 店舗の種類: ブラック・マーケット */
-#define STORE_HOME 7 /*!< 店舗の種類: 我が家 */
-#define STORE_BOOK 8 /*!< 店舗の種類: 書店 */
-#define STORE_MUSEUM 9 /*!< 店舗の種類: 博物館 */
+enum STORE_TYPE_IDX {
+ STORE_GENERAL = 0, //!< 店舗の種類: 雑貨屋
+ STORE_ARMOURY = 1, //!< 店舗の種類: 防具屋
+ STORE_WEAPON = 2, //!< 店舗の種類: 武器屋
+ STORE_TEMPLE = 3, //!< 店舗の種類: 寺院
+ STORE_ALCHEMIST = 4, //!< 店舗の種類: 錬金術の店
+ STORE_MAGIC = 5, //!< 店舗の種類: 魔道具屋
+ STORE_BLACK = 6, //!< 店舗の種類: ブラック・マーケット
+ STORE_HOME = 7, //!< 店舗の種類: 我が家
+ STORE_BOOK = 8, //!< 店舗の種類: 書店
+ STORE_MUSEUM = 9, //!< 店舗の種類: 博物館
+ STORE_MAX = 10
+};
-typedef struct object_type object_type;
-typedef struct store_type {
- byte type; /* Store type */
- byte owner; /* Owner index */
- byte extra; /* Unused for now */
- s16b insult_cur; /* Insult counter */
- s16b good_buy; /* Number of "good" buys */
- s16b bad_buy; /* Number of "bad" buys */
- s32b store_open; /* Closed until this turn */
- s32b last_visit; /* Last visited on this turn */
- s16b regular_num; /* Table -- Number of entries */
- s16b regular_size; /* Table -- Total Size of Array */
- KIND_OBJECT_IDX *regular; /* Table -- Legal regular item kinds */
- s16b table_num; /* Table -- Number of entries */
- s16b table_size; /* Table -- Total Size of Array */
- KIND_OBJECT_IDX *table; /* Table -- Legal item kinds */
- s16b stock_num; /* Stock -- Number of entries */
- s16b stock_size; /* Stock -- Total Size of Array */
- object_type *stock; /* Stock -- Actual stock items */
-} store_type;
+using store_k_idx = std::vector<KIND_OBJECT_IDX>;
+
+/*!
+ * @brief 店舗の情報構造体
+ */
+struct store_type {
+ byte type{}; //!< Store type
+ byte owner{}; //!< Owner index
+ byte extra{}; //!< Unused for now
+ s16b insult_cur{}; //!< Insult counter
+ s16b good_buy{}; //!< Number of "good" buys
+ s16b bad_buy{}; //!< Number of "bad" buys
+ s32b store_open{}; //!< Closed until this turn
+ s32b last_visit{}; //!< Last visited on this turn
+ store_k_idx regular{}; //!< Table -- Legal regular item kinds
+ store_k_idx table{}; //!< Table -- Legal item kinds
+ s16b stock_num{}; //!< Stock -- Number of entries
+ s16b stock_size{}; //!< Stock -- Total Size of Array
+ object_type *stock{}; //!< Stock -- Actual stock items
+};
extern int cur_store_num;
extern store_type *st_ptr;
typedef void (*mass_produce_pf)(player_type *, object_type *);
void store_delete(void);
void store_create(player_type *player_ptr, KIND_OBJECT_IDX k_idx, black_market_crap_pf black_market_crap, store_will_buy_pf store_will_buy, mass_produce_pf mass_produce);
-void store_item_increase(INVENTORY_IDX item, int num);
+void store_item_increase(INVENTORY_IDX item, ITEM_NUMBER num);
void store_item_optimize(INVENTORY_IDX item);
int store_carry(player_type *player_ptr, object_type *o_ptr);
bool store_object_similar(object_type *o_ptr, object_type *j_ptr);