#include "store/store-util.h"
#include "store/store.h"
#include "system/floor-type-definition.h"
+#include "system/item-entity.h"
#include "system/player-type-definition.h"
#include "world/world.h"
}
for (size_t i = 1; i < towns_info.size(); i++) {
- for (auto j = 0; j < MAX_STORES; j++) {
- store_type *store_ptr = &towns_info[i].stores[j];
-
+ for (auto sst : STORE_SALE_TYPE_LIST) {
+ auto *store_ptr = &towns_info[i].stores[sst];
if (store_ptr->last_visit > -10L * TURNS_PER_TICK * STORE_TICKS) {
store_ptr->last_visit -= rollback_turns;
if (store_ptr->last_visit < -10L * TURNS_PER_TICK * STORE_TICKS) {
#include "store/store-util.h"
#include "system/angband.h"
+#include <map>
#include <string>
#include <vector>
* A structure describing a town with
* stores and buildings
*/
+enum class StoreSaleType : int;
struct town_type {
std::string name;
- std::vector<store_type> stores; /* The stores [MAX_STORES] */
+ std::map<StoreSaleType, store_type> stores; /* The stores [MAX_STORES] */
};
constexpr short VALID_TOWNS = 6; // @details 旧海底都市クエストのマップを除外する. 有効な町に差し替え完了したら不要になるので注意.
*/
static void dump_aux_home_museum(PlayerType *player_ptr, FILE *fff)
{
- const auto *store_ptr = &towns_info[1].stores[enum2i(StoreSaleType::HOME)];
+ const auto *store_ptr = &towns_info[1].stores[StoreSaleType::HOME];
if (store_ptr->stock_num) {
fprintf(fff, _(" [我が家のアイテム]\n", " [Home Inventory]\n"));
auto page = 1;
fprintf(fff, "\n\n");
}
- store_ptr = &towns_info[1].stores[enum2i(StoreSaleType::MUSEUM)];
+ store_ptr = &towns_info[1].stores[StoreSaleType::MUSEUM];
if (store_ptr->stock_num == 0) {
return;
spoil_random_artifact_aux(player_ptr, q_ptr, tval);
}
- const auto *store_ptr = &towns_info[1].stores[enum2i(StoreSaleType::HOME)];
+ const auto *store_ptr = &towns_info[1].stores[StoreSaleType::HOME];
for (int i = 0; i < store_ptr->stock_num; i++) {
auto *q_ptr = &store_ptr->stock[i];
spoil_random_artifact_aux(player_ptr, q_ptr, tval);
}
- store_ptr = &towns_info[1].stores[enum2i(StoreSaleType::MUSEUM)];
+ store_ptr = &towns_info[1].stores[StoreSaleType::MUSEUM];
for (int i = 0; i < store_ptr->stock_num; i++) {
auto *q_ptr = &store_ptr->stock[i];
spoil_random_artifact_aux(player_ptr, q_ptr, tval);
static void show_home_equipment_resistances(PlayerType *player_ptr, ItemKindType tval, int *label_number, FILE *fff)
{
store_type *store_ptr;
- store_ptr = &towns_info[1].stores[enum2i(StoreSaleType::HOME)];
+ store_ptr = &towns_info[1].stores[StoreSaleType::HOME];
char where[32];
strcpy(where, _("家", "H "));
for (int i = 0; i < store_ptr->stock_num; i++) {
}
constexpr auto home_inventory = _("我が家のアイテム", "Home Inventory");
- const auto &store = towns_info[1].stores[enum2i(StoreSaleType::HOME)];
+ const auto &store = towns_info[1].stores[StoreSaleType::HOME];
if (store.stock_num == 0) {
angband_fclose(fff);
(void)show_file(player_ptr, true, file_name, home_inventory, 0, 0);
store_type *store_ptr;
auto sort = false;
if (h_older_than(0, 3, 3) && (store_number == StoreSaleType::HOME)) {
- store_ptr = &towns_info[1].stores[enum2i(store_number)];
+ store_ptr = &towns_info[1].stores[store_number];
if (store_ptr->stock_num) {
sort = true;
}
} else {
- store_ptr = &towns_info[town_number].stores[enum2i(store_number)];
+ store_ptr = &towns_info[town_number].stores[store_number];
}
store_ptr->store_open = rd_s32b();
const auto town_numbers = count_town_numbers();
towns_info = std::vector<town_type>(town_numbers);
for (auto i = 1; i < town_numbers; i++) {
- towns_info[i].stores = std::vector<store_type>(MAX_STORES);
+ auto &town = towns_info[i];
for (auto sst : STORE_SALE_TYPE_LIST) {
- auto *store_ptr = &towns_info[i].stores[enum2i(sst)];
+ auto *store_ptr = &town.stores[sst];
if ((i > 1) && (sst == StoreSaleType::MUSEUM || sst == StoreSaleType::HOME)) {
continue;
}
static void home_aware(PlayerType *player_ptr)
{
for (size_t i = 1; i < towns_info.size(); i++) {
- auto *store_ptr = &towns_info[i].stores[enum2i(StoreSaleType::HOME)];
+ auto *store_ptr = &towns_info[i].stores[StoreSaleType::HOME];
for (auto j = 0; j < store_ptr->stock_num; j++) {
auto *o_ptr = &store_ptr->stock[j];
if (!o_ptr->is_valid()) {
static void show_dead_home_items(PlayerType *player_ptr)
{
for (size_t l = 1; l < towns_info.size(); l++) {
- const auto *store_ptr = &towns_info[l].stores[enum2i(StoreSaleType::HOME)];
+ const auto *store_ptr = &towns_info[l].stores[StoreSaleType::HOME];
if (store_ptr->stock_num == 0) {
continue;
}
tmp16u = MAX_STORES;
wr_u16b(tmp16u);
for (size_t i = 1; i < towns_info.size(); i++) {
- for (auto j = 0; j < MAX_STORES; j++) {
- wr_store(&towns_info[i].stores[j]);
+ for (auto sst : STORE_SALE_TYPE_LIST) {
+ wr_store(&towns_info[i].stores[sst]);
}
}
continue;
}
- const auto &store = towns_info[player_ptr->town_num].stores[enum2i(sst)];
+ const auto &store = towns_info[player_ptr->town_num].stores[sst];
for (auto j = 0; j < store.stock_num; j++) {
if (o_ptr->bi_id == store.stock[j].bi_id) {
return true;
inner_town_num = player_ptr->town_num;
auto &town = towns_info[player_ptr->town_num];
- auto &store = town.stores[enum2i(store_num)];
+ auto &store = town.stores[store_num];
if ((store.store_open >= w_ptr->game_turn) || ironman_shops) {
msg_print(_("ドアに鍵がかかっている。", "The doors are locked."));
player_ptr->town_num = old_town_num;
command_new = 0;
get_com_no_macros = true;
cur_store_feat = g_ptr->feat;
- st_ptr = &towns_info[player_ptr->town_num].stores[enum2i(store_num)];
+ st_ptr = &towns_info[player_ptr->town_num].stores[store_num];
ot_ptr = &owners.at(store_num)[st_ptr->owner];
store_top = 0;
play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_BUILD);
bool old_stack_force_notes = stack_force_notes;
bool old_stack_force_costs = stack_force_costs;
store_type *old_st_ptr = st_ptr;
- st_ptr = &towns_info[1].stores[enum2i(store_num)];
+ st_ptr = &towns_info[1].stores[store_num];
bool flag = false;
if (store_num != StoreSaleType::HOME) {
stack_force_notes = false;
return;
}
- st_ptr = &towns_info[player_ptr->town_num].stores[enum2i(store_num)];
+ st_ptr = &towns_info[player_ptr->town_num].stores[store_num];
int j = st_ptr->owner;
while (true) {
st_ptr->owner = (byte)randint0(owner_num);
continue;
}
- if (st_ptr->owner == towns_info[i].stores[enum2i(store_num)].owner) {
+ if (st_ptr->owner == towns_info[i].stores[store_num].owner) {
break;
}
}
return;
}
- st_ptr = &towns_info[town_num].stores[enum2i(store_num)];
+ st_ptr = &towns_info[town_num].stores[store_num];
ot_ptr = &owners.at(store_num)[st_ptr->owner];
st_ptr->insult_cur = 0;
if (store_num == StoreSaleType::BLACK) {
void store_init(int town_num, StoreSaleType store_num)
{
int owner_num = owners.at(store_num).size();
- st_ptr = &towns_info[town_num].stores[enum2i(store_num)];
+ st_ptr = &towns_info[town_num].stores[store_num];
const int towns_size = towns_info.size();
while (true) {
st_ptr->owner = (byte)randint0(owner_num);
if (i == town_num) {
continue;
}
- if (st_ptr->owner == towns_info[i].stores[enum2i(store_num)].owner) {
+ if (st_ptr->owner == towns_info[i].stores[store_num].owner) {
break;
}
}