2 * @brief ゲーム属性を変更するデバッグコマンド
6 #include "wizard/wizard-game-modifier.h"
7 #include "core/asking-player.h"
8 #include "dungeon/quest.h"
9 #include "info-reader/fixed-map-parser.h"
10 #include "io/input-key-requester.h"
11 #include "market/arena.h"
12 #include "monster-race/monster-race.h"
13 #include "monster-race/race-flags1.h"
14 #include "monster-race/race-flags7.h"
15 #include "player-info/self-info.h"
16 #include "system/floor-type-definition.h"
17 #include "system/monster-race-definition.h"
18 #include "system/player-type-definition.h"
19 #include "system/system-variables.h"
20 #include "term/screen-processor.h"
21 #include "util/bit-flags-calculator.h"
22 #include "util/int-char-converter.h"
23 #include "view/display-messages.h"
24 #include "wizard/wizard-special-process.h"
31 void wiz_enter_quest(player_type *player_ptr);
32 void wiz_complete_quest(player_type *player_ptr);
33 void wiz_restore_monster_max_num();
38 constexpr std::array wizard_game_modifier_menu_table = {
39 std::make_tuple('t', _("プレイ時間変更", "Modify played time")),
40 std::make_tuple('q', _("現在のクエストを完了", "Complete current quest")),
41 std::make_tuple('Q', _("クエストに突入", "Enter quest")),
42 std::make_tuple('u', _("ユニーク/ナズグルの生存数を復元", "Restore living info of unique/nazgul")),
43 std::make_tuple('g', _("モンスター闘技場出場者更新", "Update gambling monster")),
47 * @brief ゲーム設定コマンドの一覧を表示する
49 void display_wizard_game_modifier_menu()
51 for (auto y = 1U; y <= wizard_game_modifier_menu_table.size(); y++)
52 term_erase(14, y, 64);
56 for (const auto &[symbol, desc] : wizard_game_modifier_menu_table) {
58 ss << symbol << ") " << desc;
59 put_str(ss.str().c_str(), r++, c);
64 * @brief ゲーム設定コマンドの入力を受け付ける
65 * @param player_ptr プレイヤーの情報へのポインタ
67 void wizard_game_modifier(player_type *player_ptr)
70 display_wizard_game_modifier_menu();
73 get_com("Player Command: ", &cmd, false);
83 update_gambling_monsters(player_ptr);
86 wiz_complete_quest(player_ptr);
89 wiz_enter_quest(player_ptr);
92 wiz_restore_monster_max_num();
101 * @brief 指定したクエストに突入する
102 * @param プレイヤーの情報へのポインタ
104 void wiz_enter_quest(player_type* player_ptr)
109 sprintf(ppp, "QuestID (0-%d):", max_q_idx - 1);
110 sprintf(tmp_val, "%d", 0);
112 if (!get_string(ppp, tmp_val, 3))
115 tmp_int = atoi(tmp_val);
116 if ((tmp_int < 0) || (tmp_int >= max_q_idx))
119 init_flags = i2enum<init_flags_type>(INIT_SHOW_TEXT | INIT_ASSIGN);
120 player_ptr->current_floor_ptr->inside_quest = (QUEST_IDX)tmp_int;
121 parse_fixed_map(player_ptr, "q_info.txt", 0, 0, 0, 0);
122 quest[tmp_int].status = QuestStatusType::TAKEN;
123 if (quest[tmp_int].dungeon == 0)
124 exe_enter_quest(player_ptr, (QUEST_IDX)tmp_int);
128 * @brief 指定したクエストを完了させる
129 * @param プレイヤーの情報へのポインタ
131 void wiz_complete_quest(player_type *player_ptr)
133 if (!player_ptr->current_floor_ptr->inside_quest) {
134 msg_print("No current quest");
139 if (quest[player_ptr->current_floor_ptr->inside_quest].status == QuestStatusType::TAKEN)
140 complete_quest(player_ptr, player_ptr->current_floor_ptr->inside_quest);
143 void wiz_restore_monster_max_num()
145 MONRACE_IDX r_idx = command_arg;
147 std::stringstream ss;
148 ss << "Monster race (1-" << r_info.size() << "): ";
150 char tmp_val[160] = "\0";
151 if (!get_string(ss.str().c_str(), tmp_val, 5))
154 r_idx = (MONRACE_IDX)atoi(tmp_val);
155 if (r_idx <= 0 || r_idx >= static_cast<MONRACE_IDX>(r_info.size()))
159 monster_race *r_ptr = &r_info[r_idx];
160 if (r_ptr->name.empty()) {
161 msg_print("そのモンスターは存在しません。");
166 MONSTER_NUMBER n = 0;
167 if (any_bits(r_ptr->flags1, RF1_UNIQUE))
169 else if (any_bits(r_ptr->flags7, RF7_NAZGUL))
173 msg_print("出現数に制限がないモンスターです。");
182 std::stringstream ss;
183 ss << r_ptr->name << _("の出現数を復元しました。", " can appear again now.");
184 msg_print(ss.str().c_str());