-#include "market/building-recharger.h"
+#include "market/building-recharger.h"
#include "autopick/autopick.h"
#include "core/asking-player.h"
-#include "core/player-update-types.h"
#include "core/window-redrawer.h"
#include "flavor/flavor-describer.h"
#include "flavor/object-flavor-types.h"
#include "system/baseitem-info.h"
#include "system/item-entity.h"
#include "system/player-type-definition.h"
+#include "system/redrawing-flags-updater.h"
#include "term/screen-processor.h"
#include "view/display-messages.h"
msg_flag = false;
clear_bldg(4, 18);
prt(_(" 再充填の費用はアイテムの種類によります。", " The prices of recharge depend on the type."), 6, 0);
- const auto q = _("どのアイテムに魔力を充填しますか? ", "Recharge which item? ");
- const auto s = _("魔力を充填すべきアイテムがない。", "You have nothing to recharge.");
- OBJECT_IDX item;
- auto *o_ptr = choose_object(player_ptr, &item, q, s, (USE_INVEN | USE_FLOOR), FuncItemTester(&ItemEntity::can_recharge));
+ constexpr auto q = _("どのアイテムに魔力を充填しますか? ", "Recharge which item? ");
+ constexpr auto s = _("魔力を充填すべきアイテムがない。", "You have nothing to recharge.");
+ short i_idx;
+ auto *o_ptr = choose_object(player_ptr, &i_idx, q, s, (USE_INVEN | USE_FLOOR), FuncItemTester(&ItemEntity::can_recharge));
if (o_ptr == nullptr) {
return;
}
* We don't want to give the player free info about
* the level of the item or the number of charges.
*/
- char tmp_str[MAX_NLEN];
if (!o_ptr->is_known()) {
msg_format(_("充填する前に鑑定されている必要があります!", "The item must be identified first!"));
msg_print(nullptr);
-
- if ((player_ptr->au >= 50) && get_check(_("$50で鑑定しますか? ", "Identify for 50 gold? ")))
-
- {
+ if ((player_ptr->au >= 50) && input_check(_("$50で鑑定しますか? ", "Identify for 50 gold? "))) {
player_ptr->au -= 50;
identify_item(player_ptr, o_ptr);
- describe_flavor(player_ptr, tmp_str, o_ptr, 0);
- msg_format(_("%s です。", "You have: %s."), tmp_str);
-
- autopick_alter_item(player_ptr, item, false);
+ const auto item_name = describe_flavor(player_ptr, o_ptr, 0);
+ msg_format(_("%s です。", "You have: %s."), item_name.data());
+ autopick_alter_item(player_ptr, i_idx, false);
building_prt_gold(player_ptr);
}
return;
}
- const auto &baseitem = baseitems_info[o_ptr->bi_id];
+ const auto &baseitem = o_ptr->get_baseitem();
const auto lev = baseitem.level;
const auto tval = o_ptr->bi_key.tval();
int price;
}
if (player_ptr->au < price) {
- describe_flavor(player_ptr, tmp_str, o_ptr, OD_NAME_ONLY);
+ const auto item_name = describe_flavor(player_ptr, o_ptr, OD_NAME_ONLY);
#ifdef JP
- msg_format("%sを再充填するには$%d 必要です!", tmp_str, price);
+ msg_format("%sを再充填するには$%d 必要です!", item_name.data(), price);
#else
- msg_format("You need %d gold to recharge %s!", price, tmp_str);
+ msg_format("You need %d gold to recharge %s!", price, item_name.data());
#endif
return;
}
if (tval == ItemKindType::ROD) {
#ifdef JP
- if (get_check(format("そのロッドを$%d で再充填しますか?", price)))
+ if (input_check(format("そのロッドを$%d で再充填しますか?", price)))
#else
- if (get_check(format("Recharge the %s for %d gold? ", ((o_ptr->number > 1) ? "rods" : "rod"), price)))
+ if (input_check(format("Recharge the %s for %d gold? ", ((o_ptr->number > 1) ? "rods" : "rod"), price)))
#endif
{
}
const auto mes = _("一回分$%d で何回分充填しますか?", "Add how many charges for %d gold apiece? ");
- const auto charges = get_quantity(format(mes, price), std::min(player_ptr->au / price, max_charges));
+ const auto charges = input_quantity(std::min(player_ptr->au / price, max_charges), format(mes, price));
if (charges < 1) {
return;
}
o_ptr->ident &= ~(IDENT_EMPTY);
}
- describe_flavor(player_ptr, tmp_str, o_ptr, 0);
+ const auto item_name = describe_flavor(player_ptr, o_ptr, 0);
#ifdef JP
- msg_format("%sを$%d で再充填しました。", tmp_str, price);
+ msg_format("%sを$%d で再充填しました。", item_name.data(), price);
#else
- msg_format("%^s %s recharged for %d gold.", tmp_str, ((o_ptr->number > 1) ? "were" : "was"), price);
+ msg_format("%s^ %s recharged for %d gold.", item_name.data(), ((o_ptr->number > 1) ? "were" : "was"), price);
#endif
- player_ptr->update |= (PU_COMBINE | PU_REORDER);
- player_ptr->window_flags |= (PW_INVEN);
+ auto &rfu = RedrawingFlagsUpdater::get_instance();
+ static constexpr auto flags = {
+ StatusRecalculatingFlag::COMBINATION,
+ StatusRecalculatingFlag::REORDER,
+ };
+ rfu.set_flags(flags);
+ rfu.set_flag(SubWindowRedrawingFlag::INVENTORY);
player_ptr->au -= price;
}
total_cost += 50;
}
- const auto lev = baseitems_info[item.bi_id].level;
- const auto &baseitem = baseitems_info[item.bi_id];
+ const auto &baseitem = item.get_baseitem();
+ const auto lev = baseitem.level;
switch (item.bi_key.tval()) {
case ItemKindType::ROD:
price = (lev * 50 * item.timeout) / baseitem.pval;
break;
case ItemKindType::STAFF:
- price = (baseitems_info[item.bi_id].cost / 10) * item.number;
+ price = (baseitem.cost / 10) * item.number;
price = std::max(10, price);
price = (baseitem.pval - item.pval) * price;
break;
case ItemKindType::WAND:
- price = (baseitems_info[item.bi_id].cost / 10);
+ price = (baseitem.cost / 10);
price = std::max(10, price);
price = (item.number * baseitem.pval - item.pval) * price;
break;
return;
}
- if (!get_check(format(_("すべてのアイテムを $%d で再充填しますか?", "Recharge all items for %d gold? "), total_cost))) {
+ if (!input_check(format(_("すべてのアイテムを $%d で再充填しますか?", "Recharge all items for %d gold? "), total_cost))) {
return;
}
for (short i = 0; i < INVEN_PACK; i++) {
auto *o_ptr = &player_ptr->inventory_list[i];
- const auto &baseitem = baseitems_info[o_ptr->bi_id];
+ const auto &baseitem = o_ptr->get_baseitem();
if (!o_ptr->can_recharge()) {
continue;
}
msg_format(_("$%d で再充填しました。", "You pay %d gold."), total_cost);
msg_print(nullptr);
- player_ptr->update |= (PU_COMBINE | PU_REORDER);
- player_ptr->window_flags |= (PW_INVEN);
+ auto &rfu = RedrawingFlagsUpdater::get_instance();
+ static constexpr auto flags = {
+ StatusRecalculatingFlag::COMBINATION,
+ StatusRecalculatingFlag::REORDER,
+ };
+ rfu.set_flags(flags);
+ rfu.set_flag(SubWindowRedrawingFlag::INVENTORY);
player_ptr->au -= total_cost;
}