tmp = std::to_string(enum2i(leaving_quest));
v = tmp.data();
} else if (prefix(b + 1, "QUEST_TYPE")) {
- const auto &quest_list = QuestList::get_instance();
- tmp = std::to_string(enum2i(quest_list[i2enum<QuestId>(atoi(b + 11))].type));
+ const auto &quests = QuestList::get_instance();
+ tmp = std::to_string(enum2i(quests[i2enum<QuestId>(atoi(b + 11))].type));
v = tmp.data();
} else if (prefix(b + 1, "QUEST")) {
- const auto &quest_list = QuestList::get_instance();
- tmp = std::to_string(enum2i(quest_list[i2enum<QuestId>(atoi(b + 6))].status));
+ const auto &quests = QuestList::get_instance();
+ tmp = std::to_string(enum2i(quests[i2enum<QuestId>(atoi(b + 6))].status));
v = tmp.data();
} else if (prefix(b + 1, "RANDOM")) {
const auto &system = AngbandSystem::get_instance();
}
} else if (zz[6][0] == '!') {
if (floor_ptr->is_in_quest()) {
- const auto &quest_list = QuestList::get_instance();
- letter[index].artifact = quest_list[floor_ptr->quest_number].reward_fa_id;
+ const auto &quests = QuestList::get_instance();
+ letter[index].artifact = quests[floor_ptr->quest_number].reward_fa_id;
}
} else {
letter[index].artifact = i2enum<FixedArtifactId>(atoi(zz[6]));
{
fprintf(fff, _("\n\n [クエスト情報]\n", "\n\n [Quest Information]\n"));
- const auto &quest_list = QuestList::get_instance();
- std::vector<QuestId> quest_numbers;
- for (const auto &[q_idx, quest] : quest_list) {
- quest_numbers.push_back(q_idx);
+ const auto &quests = QuestList::get_instance();
+ std::vector<QuestId> quest_ids;
+ for (const auto &[quest_id, quest] : quests) {
+ quest_ids.push_back(quest_id);
}
auto dummy = 0;
- ang_sort(player_ptr, quest_numbers.data(), &dummy, quest_numbers.size(), ang_sort_comp_quest_num, ang_sort_swap_quest_num);
+ ang_sort(player_ptr, quest_ids.data(), &dummy, quest_ids.size(), ang_sort_comp_quest_num, ang_sort_swap_quest_num);
fputc('\n', fff);
- do_cmd_knowledge_quests_completed(player_ptr, fff, quest_numbers);
+ do_cmd_knowledge_quests_completed(player_ptr, fff, quest_ids);
fputc('\n', fff);
- do_cmd_knowledge_quests_failed(player_ptr, fff, quest_numbers);
+ do_cmd_knowledge_quests_failed(player_ptr, fff, quest_ids);
fputc('\n', fff);
}
}
auto &floor = *player_ptr->current_floor_ptr;
- auto old_quest = floor.quest_number;
- const auto &quest_list = QuestList::get_instance();
- const auto &quest = quest_list[num];
+ const auto old_quest = floor.quest_number;
+ const auto &quests = QuestList::get_instance();
+ const auto &quest = quests[num];
floor.quest_number = (quest.type == QuestKindType::RANDOM) ? QuestId::NONE : num;
init_flags = INIT_NAME_ONLY;
parse_fixed_map(player_ptr, QUEST_DEFINITION_LIST, 0, 0, 0, 0);
*/
static void do_cmd_knowledge_quests_current(PlayerType *player_ptr, FILE *fff)
{
- const auto &quest_list = QuestList::get_instance();
+ const auto &quests = QuestList::get_instance();
std::string rand_tmp_str;
int rand_level = 100;
int total = 0;
fprintf(fff, _("《遂行中のクエスト》\n", "< Current Quest >\n"));
- for (const auto &[q_idx, quest] : quest_list) {
- if (q_idx == QuestId::NONE) {
+ for (const auto &[quest_id, quest] : quests) {
+ if (quest_id == QuestId::NONE) {
continue;
}
quest_text_lines.clear();
- player_ptr->current_floor_ptr->quest_number = q_idx;
+ player_ptr->current_floor_ptr->quest_number = quest_id;
init_flags = INIT_SHOW_TEXT;
parse_fixed_map(player_ptr, QUEST_DEFINITION_LIST, 0, 0, 0, 0);
player_ptr->current_floor_ptr->quest_number = old_quest;
static bool do_cmd_knowledge_quests_aux(PlayerType *player_ptr, FILE *fff, QuestId q_idx)
{
- const auto &quest_list = QuestList::get_instance();
- const auto &quest = quest_list[q_idx];
+ const auto &quests = QuestList::get_instance();
+ const auto &quest = quests[q_idx];
auto *floor_ptr = player_ptr->current_floor_ptr;
auto is_fixed_quest = QuestType::is_fixed(q_idx);
* Print all finished quests
* @param player_ptr プレイヤーへの参照ポインタ
* @param fff セーブファイル (展開済?)
- * @param quest_numbers 受注したことのあるクエスト群
+ * @param quest_ids 受注したことのあるクエスト群
*/
-void do_cmd_knowledge_quests_completed(PlayerType *player_ptr, FILE *fff, const std::vector<QuestId> &quest_numbers)
+void do_cmd_knowledge_quests_completed(PlayerType *player_ptr, FILE *fff, const std::vector<QuestId> &quest_ids)
{
fprintf(fff, _("《達成したクエスト》\n", "< Completed Quest >\n"));
int16_t total = 0;
- for (auto &q_idx : quest_numbers) {
- const auto &quest_list = QuestList::get_instance();
- const auto &quest = quest_list[q_idx];
- if (quest.status == QuestStatusType::FINISHED && do_cmd_knowledge_quests_aux(player_ptr, fff, q_idx)) {
+ for (const auto quest_id : quest_ids) {
+ const auto &quests = QuestList::get_instance();
+ const auto &quest = quests[quest_id];
+ if (quest.status == QuestStatusType::FINISHED && do_cmd_knowledge_quests_aux(player_ptr, fff, quest_id)) {
++total;
}
}
* Print all failed quests
* @param player_ptr プレイヤーへの参照ポインタ
* @param fff セーブファイル (展開済?)
- * @param quest_numbers 受注したことのあるクエスト群
+ * @param quest_ids 受注したことのあるクエスト群
*/
-void do_cmd_knowledge_quests_failed(PlayerType *player_ptr, FILE *fff, const std::vector<QuestId> &quest_numbers)
+void do_cmd_knowledge_quests_failed(PlayerType *player_ptr, FILE *fff, const std::vector<QuestId> &quest_ids)
{
fprintf(fff, _("《失敗したクエスト》\n", "< Failed Quest >\n"));
int16_t total = 0;
- for (auto &q_idx : quest_numbers) {
- const auto &quest_list = QuestList::get_instance();
- const auto &quest = quest_list[q_idx];
- if (((quest.status == QuestStatusType::FAILED_DONE) || (quest.status == QuestStatusType::FAILED)) && do_cmd_knowledge_quests_aux(player_ptr, fff, q_idx)) {
+ for (const auto quest_id : quest_ids) {
+ const auto &quests = QuestList::get_instance();
+ const auto &quest = quests[quest_id];
+ if (((quest.status == QuestStatusType::FAILED_DONE) || (quest.status == QuestStatusType::FAILED)) && do_cmd_knowledge_quests_aux(player_ptr, fff, quest_id)) {
++total;
}
}
static void do_cmd_knowledge_quests_wiz_random(FILE *fff)
{
fprintf(fff, _("《残りのランダムクエスト》\n", "< Remaining Random Quest >\n"));
- const auto &quest_list = QuestList::get_instance();
+ const auto &quests = QuestList::get_instance();
int16_t total = 0;
- for (const auto &[q_idx, quest] : quest_list) {
+ for (const auto &[q_idx, quest] : quests) {
if (quest.flags & QUEST_FLAG_SILENT) {
continue;
}
return;
}
- std::vector<QuestId> quest_numbers;
- const auto &quest_list = QuestList::get_instance();
- for (const auto &[q_idx, quest] : quest_list) {
- quest_numbers.push_back(q_idx);
+ std::vector<QuestId> quest_ids;
+ const auto &quests = QuestList::get_instance();
+ for (const auto &[quest_id, quest] : quests) {
+ quest_ids.push_back(quest_id);
}
auto dummy = 0;
- ang_sort(player_ptr, quest_numbers.data(), &dummy, quest_numbers.size(), ang_sort_comp_quest_num, ang_sort_swap_quest_num);
+ ang_sort(player_ptr, quest_ids.data(), &dummy, quest_ids.size(), ang_sort_comp_quest_num, ang_sort_swap_quest_num);
do_cmd_knowledge_quests_current(player_ptr, fff);
fputc('\n', fff);
- do_cmd_knowledge_quests_completed(player_ptr, fff, quest_numbers);
+ do_cmd_knowledge_quests_completed(player_ptr, fff, quest_ids);
fputc('\n', fff);
- do_cmd_knowledge_quests_failed(player_ptr, fff, quest_numbers);
+ do_cmd_knowledge_quests_failed(player_ptr, fff, quest_ids);
if (w_ptr->wizard) {
fputc('\n', fff);
do_cmd_knowledge_quests_wiz_random(fff);
class PlayerType;
enum class QuestId : short;
void do_cmd_checkquest(PlayerType *player_ptr);
-void do_cmd_knowledge_quests_completed(PlayerType *player_ptr, FILE *fff, const std::vector<QuestId> &quest_numbers);
-void do_cmd_knowledge_quests_failed(PlayerType *player_ptr, FILE *fff, const std::vector<QuestId> &quest_numbers);
+void do_cmd_knowledge_quests_completed(PlayerType *player_ptr, FILE *fff, const std::vector<QuestId> &quest_ids);
+void do_cmd_knowledge_quests_failed(PlayerType *player_ptr, FILE *fff, const std::vector<QuestId> &quest_ids);
void do_cmd_knowledge_quests(PlayerType *player_ptr);
errr restore_dungeon(PlayerType *player_ptr)
{
if (player_ptr->is_dead) {
- const auto &quest_list = QuestList::get_instance();
- for (auto q_idx : EnumRange(QuestId::RANDOM_QUEST1, QuestId::RANDOM_QUEST10)) {
- monraces_info[quest_list[q_idx].r_idx].misc_flags.reset(MonsterMiscType::QUESTOR);
+ const auto &quests = QuestList::get_instance();
+ for (const auto quest_id : EnumRange(QuestId::RANDOM_QUEST1, QuestId::RANDOM_QUEST10)) {
+ monraces_info[quests[quest_id].r_idx].misc_flags.reset(MonsterMiscType::QUESTOR);
}
return 0;
auto [max_quests_load, max_rquests_load] = load_quest_info();
analyze_quests(player_ptr, max_quests_load, max_rquests_load);
if (h_older_than(1, 7, 0, 6)) {
- auto &quest_list = QuestList::get_instance();
- quest_list[i2enum<QuestId>(OLD_QUEST_WATER_CAVE)] = {};
- quest_list[i2enum<QuestId>(OLD_QUEST_WATER_CAVE)].status = QuestStatusType::UNTAKEN;
+ auto &quests = QuestList::get_instance();
+ quests[i2enum<QuestId>(OLD_QUEST_WATER_CAVE)] = {};
+ quests[i2enum<QuestId>(OLD_QUEST_WATER_CAVE)].status = QuestStatusType::UNTAKEN;
}
load_wilderness_info(player_ptr);
q_ptr->r_idx = i2enum<MonsterRaceId>(rd_s16b());
if ((q_ptr->type == QuestKindType::RANDOM) && !MonsterRace(q_ptr->r_idx).is_valid()) {
- auto &quest_list = QuestList::get_instance();
- determine_random_questor(player_ptr, quest_list[loading_quest_id]);
+ auto &quests = QuestList::get_instance();
+ determine_random_questor(player_ptr, quests[loading_quest_id]);
}
q_ptr->reward_fa_id = i2enum<FixedArtifactId>(rd_s16b());
if (q_ptr->has_reward()) {
static bool is_loadable_quest(const QuestId q_idx, const byte max_rquests_load)
{
- const auto &quest_list = QuestList::get_instance();
- if (quest_list.find(q_idx) != quest_list.end()) {
+ const auto &quests = QuestList::get_instance();
+ if (quests.find(q_idx) != quests.end()) {
return true;
}
{
QuestId old_inside_quest = player_ptr->current_floor_ptr->quest_number;
for (auto i = 0; i < max_quests_load; i++) {
- QuestId q_idx;
+ QuestId quest_id;
if (loading_savefile_version_is_older_than(17)) {
- q_idx = i2enum<QuestId>(i);
+ quest_id = i2enum<QuestId>(i);
} else {
- q_idx = i2enum<QuestId>(rd_s16b());
+ quest_id = i2enum<QuestId>(rd_s16b());
}
- if (!is_loadable_quest(q_idx, max_rquests_load)) {
+ if (!is_loadable_quest(quest_id, max_rquests_load)) {
continue;
}
- auto &quest_list = QuestList::get_instance();
- auto *q_ptr = &quest_list[q_idx];
+ auto &quests = QuestList::get_instance();
+ auto &quest = quests[quest_id];
if (loading_savefile_version_is_older_than(15)) {
- if (i == enum2i(OldQuestId15::CITY_SEA) && q_ptr->status != QuestStatusType::UNTAKEN) {
+ if (i == enum2i(OldQuestId15::CITY_SEA) && quest.status != QuestStatusType::UNTAKEN) {
const std::string msg(_("海底都市クエストを受領または解決しているセーブデータはサポート外です。",
"The save data with the taken quest of The City beneath the Sea is unsupported."));
throw(SaveDataNotSupportedException(msg));
}
}
- load_quest_completion(q_ptr);
- auto is_quest_running = (q_ptr->status == QuestStatusType::TAKEN);
- is_quest_running |= (!h_older_than(0, 3, 14) && (q_ptr->status == QuestStatusType::COMPLETED));
- is_quest_running |= (!h_older_than(1, 0, 7) && (enum2i(q_idx) >= MIN_RANDOM_QUEST) && (enum2i(q_idx) <= (MIN_RANDOM_QUEST + max_rquests_load)));
+ load_quest_completion(&quest);
+ auto is_quest_running = (quest.status == QuestStatusType::TAKEN);
+ is_quest_running |= (!h_older_than(0, 3, 14) && (quest.status == QuestStatusType::COMPLETED));
+ is_quest_running |= (!h_older_than(1, 0, 7) && (enum2i(quest_id) >= MIN_RANDOM_QUEST) && (enum2i(quest_id) <= (MIN_RANDOM_QUEST + max_rquests_load)));
if (!is_quest_running) {
continue;
}
- load_quest_details(player_ptr, q_ptr, q_idx);
+ load_quest_details(player_ptr, &quest, quest_id);
if (h_older_than(0, 3, 11)) {
- set_zangband_quest(player_ptr, q_ptr, q_idx, old_inside_quest);
+ set_zangband_quest(player_ptr, &quest, quest_id, old_inside_quest);
} else {
- q_ptr->dungeon = rd_byte();
+ quest.dungeon = rd_byte();
}
- if (q_ptr->status == QuestStatusType::TAKEN || q_ptr->status == QuestStatusType::UNTAKEN) {
- if (monraces_info[q_ptr->r_idx].kind_flags.has(MonsterKindType::UNIQUE)) {
- monraces_info[q_ptr->r_idx].misc_flags.set(MonsterMiscType::QUESTOR);
+ if (quest.status == QuestStatusType::TAKEN || quest.status == QuestStatusType::UNTAKEN) {
+ if (monraces_info[quest.r_idx].kind_flags.has(MonsterKindType::UNIQUE)) {
+ monraces_info[quest.r_idx].misc_flags.set(MonsterMiscType::QUESTOR);
}
}
}
*/
static concptr quest_key_at(int index, char *buf)
{
- const auto &quest_list = QuestList::get_instance();
- if (index > enum2i(quest_list.rbegin()->first)) {
+ const auto &quests = QuestList::get_instance();
+ if (index > enum2i(quests.rbegin()->first)) {
return nullptr;
}
/*!
* @brief クエスト情報を処理しつつ取得する。/ Process and get quest information
* @param player_ptr プレイヤーへの参照ポインタ
- * @param questnum クエストのID
+ * @param quest_id クエストのID
* @param do_init クエストの開始処理か(true)、結果処理か(FALSE)
*/
-static void get_questinfo(PlayerType *player_ptr, QuestId questnum, bool do_init)
+static void get_questinfo(PlayerType *player_ptr, QuestId quest_id, bool do_init)
{
quest_text_lines.clear();
- auto *floor_ptr = player_ptr->current_floor_ptr;
- QuestId old_quest = floor_ptr->quest_number;
- floor_ptr->quest_number = questnum;
+ auto &floor = *player_ptr->current_floor_ptr;
+ const auto old_quest = floor.quest_number;
+ floor.quest_number = quest_id;
init_flags = INIT_SHOW_TEXT;
if (do_init) {
}
parse_fixed_map(player_ptr, QUEST_DEFINITION_LIST, 0, 0, 0, 0);
- floor_ptr->quest_number = old_quest;
+ floor.quest_number = old_quest;
}
/*!
* @brief クエスト情報を処理しつつ表示する。/ Process and display quest information
* @param player_ptr プレイヤーへの参照ポインタ
- * @param questnum クエストのID
+ * @param quest_id クエストのID
* @param do_init クエストの開始処理か(true)、結果処理か(FALSE)
*/
-static void print_questinfo(PlayerType *player_ptr, QuestId questnum, bool do_init)
+static void print_questinfo(PlayerType *player_ptr, QuestId quest_id, bool do_init)
{
- get_questinfo(player_ptr, questnum, do_init);
+ get_questinfo(player_ptr, quest_id, do_init);
- const auto &quest_list = QuestList::get_instance();
- const auto *q_ptr = &quest_list[questnum];
- prt(format(_("クエスト情報 (危険度: %d 階相当)", "Quest Information (Danger level: %d)"), (int)q_ptr->level), 5, 0);
- prt(q_ptr->name, 7, 0);
+ const auto &quests = QuestList::get_instance();
+ const auto &quest = quests[quest_id];
+ prt(format(_("クエスト情報 (危険度: %d 階相当)", "Quest Information (Danger level: %d)"), quest.level), 5, 0);
+ prt(quest.name, 7, 0);
for (auto i = 0; i < std::ssize(quest_text_lines); i++) {
c_put_str(TERM_YELLOW, quest_text_lines[i], i + 8, 0);
void castle_quest(PlayerType *player_ptr)
{
clear_bldg(4, 18);
- QuestId q_index = i2enum<QuestId>(player_ptr->current_floor_ptr->grid_array[player_ptr->y][player_ptr->x].special);
-
- if (!inside_quest(q_index)) {
+ const auto &floor = *player_ptr->current_floor_ptr;
+ const auto quest_id = i2enum<QuestId>(floor.get_grid(player_ptr->get_position()).special);
+ if (!inside_quest(quest_id)) {
put_str(_("今のところクエストはありません。", "I don't have a quest for you at the moment."), 8, 0);
return;
}
- auto &quest_list = QuestList::get_instance();
- auto *q_ptr = &quest_list[q_index];
- if (q_ptr->status == QuestStatusType::COMPLETED) {
- q_ptr->status = QuestStatusType::REWARDED;
- print_questinfo(player_ptr, q_index, false);
+ auto &quests = QuestList::get_instance();
+ auto &quest = quests[quest_id];
+ if (quest.status == QuestStatusType::COMPLETED) {
+ quest.status = QuestStatusType::REWARDED;
+ print_questinfo(player_ptr, quest_id, false);
reinit_wilderness = true;
return;
}
- if (q_ptr->status == QuestStatusType::TAKEN) {
+ if (quest.status == QuestStatusType::TAKEN) {
put_str(_("あなたは現在のクエストを終了させていません!", "You have not completed your current quest yet!"), 8, 0);
put_str(_("CTRL-Qを使えばクエストの状態がチェックできます。", "Use CTRL-Q to check the status of your quest."), 9, 0);
- get_questinfo(player_ptr, q_index, false);
- put_str(format(_("現在のクエスト「%s」", "Current quest is '%s'."), q_ptr->name.data()), 11, 0);
+ get_questinfo(player_ptr, quest_id, false);
+ put_str(format(_("現在のクエスト「%s」", "Current quest is '%s'."), quest.name.data()), 11, 0);
- if (q_ptr->type != QuestKindType::KILL_LEVEL || q_ptr->dungeon == 0) {
+ if (quest.type != QuestKindType::KILL_LEVEL || quest.dungeon == 0) {
put_str(_("クエストを終わらせたら戻って来て下さい。", "Return when you have completed your quest."), 12, 0);
return;
}
put_str(_("このクエストは放棄することができます。", "You can give up this quest."), 12, 0);
-
if (!input_check(_("二度と受けられなくなりますが放棄しますか?", "Are you sure to give up this quest? "))) {
return;
}
clear_bldg(4, 18);
msg_print(_("放棄しました。", "You gave up."));
msg_print(nullptr);
- record_quest_final_status(q_ptr, player_ptr->lev, QuestStatusType::FAILED);
+ record_quest_final_status(&quest, player_ptr->lev, QuestStatusType::FAILED);
}
- if (q_ptr->status == QuestStatusType::FAILED) {
- print_questinfo(player_ptr, q_index, false);
- q_ptr->status = QuestStatusType::FAILED_DONE;
+ if (quest.status == QuestStatusType::FAILED) {
+ print_questinfo(player_ptr, quest_id, false);
+ quest.status = QuestStatusType::FAILED_DONE;
reinit_wilderness = true;
return;
}
- if (q_ptr->status != QuestStatusType::UNTAKEN) {
+ if (quest.status != QuestStatusType::UNTAKEN) {
return;
}
- q_ptr->status = QuestStatusType::TAKEN;
+ quest.status = QuestStatusType::TAKEN;
reinit_wilderness = true;
- print_questinfo(player_ptr, q_index, true);
+ print_questinfo(player_ptr, quest_id, true);
}
return true;
}
- const auto &quest_list = QuestList::get_instance();
- QuestId number = floor.get_quest_id();
- const auto *q_ptr = &quest_list[number];
- if ((q_ptr->type != QuestKindType::KILL_LEVEL) && (q_ptr->type != QuestKindType::RANDOM)) {
+ const auto &quests = QuestList::get_instance();
+ const auto quest_id = floor.get_quest_id();
+ const auto &quest = quests[quest_id];
+ if ((quest.type != QuestKindType::KILL_LEVEL) && (quest.type != QuestKindType::RANDOM)) {
return true;
}
- if (r_idx != q_ptr->r_idx) {
+ if (r_idx != quest.r_idx) {
return true;
}
int number_mon = 0;
for (int i2 = 0; i2 < floor.width; ++i2) {
for (int j2 = 0; j2 < floor.height; j2++) {
auto quest_monster = floor.grid_array[j2][i2].has_monster();
- quest_monster &= (floor.m_list[floor.grid_array[j2][i2].m_idx].r_idx == q_ptr->r_idx);
+ quest_monster &= (floor.m_list[floor.grid_array[j2][i2].m_idx].r_idx == quest.r_idx);
if (quest_monster) {
number_mon++;
}
}
}
- if (number_mon + q_ptr->cur_num >= q_ptr->max_num) {
+ if (number_mon + quest.cur_num >= quest.max_num) {
return false;
}
return true;