From 2e482c106fab2532eddda5e7983b8751d171afaa Mon Sep 17 00:00:00 2001 From: Slimebreath6078 Date: Wed, 23 Feb 2022 01:51:00 +0900 Subject: [PATCH] =?utf8?q?[Refactor]=20exe=5Fwrite=5Fdiary=E3=81=8B?= =?utf8?q?=E3=82=89=E3=82=AF=E3=82=A8=E3=82=B9=E3=83=88=E3=81=AB=E9=96=A2?= =?utf8?q?=E9=80=A3=E3=81=99=E3=82=8B=E5=87=A6=E7=90=86=E3=82=92=E5=88=87?= =?utf8?q?=E3=82=8A=E5=87=BA=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/io/write-diary.cpp | 134 +++++++++++++++++++++++++++++++------------------ src/io/write-diary.h | 2 + 2 files changed, 87 insertions(+), 49 deletions(-) diff --git a/src/io/write-diary.cpp b/src/io/write-diary.cpp index 66ff00877..c2f5320f6 100644 --- a/src/io/write-diary.cpp +++ b/src/io/write-diary.cpp @@ -159,6 +159,91 @@ static void write_diary_pet(FILE *fff, int num, concptr note) } } +/** + * @brief 日記にクエストに関するメッセージを追加する + * + * @param type 日記内容のID + * @param num 日記内容のIDに応じた番号 + * @return エラーコード + */ +int exe_write_diary_quest(PlayerType *player_ptr, int type, QuestId num) +{ + static bool disable_diary = false; + + int day, hour, min; + extract_day_hour_min(player_ptr, &day, &hour, &min); + + if (disable_diary) { + return -1; + } + + auto old_quest = player_ptr->current_floor_ptr->quest_number; + player_ptr->current_floor_ptr->quest_number = (quest[num].type == QuestKindType::RANDOM) ? QuestId::NONE : num; + init_flags = INIT_NAME_ONLY; + parse_fixed_map(player_ptr, "q_info.txt", 0, 0, 0, 0); + player_ptr->current_floor_ptr->quest_number = old_quest; + + concptr note_level = ""; + char note_level_buf[40]; + write_floor(player_ptr, ¬e_level, note_level_buf); + + FILE *fff = nullptr; + if (!open_diary_file(&fff, &disable_diary)) { + return -1; + } + + bool do_level = true; + + switch (type) { + case DIARY_FIX_QUEST_C: { + if (quest[num].flags & QUEST_FLAG_SILENT) { + break; + } + + fprintf(fff, _(" %2d:%02d %20s クエスト「%s」を達成した。\n", " %2d:%02d %20s completed quest '%s'.\n"), hour, min, note_level, quest[num].name); + break; + } + case DIARY_FIX_QUEST_F: { + if (quest[num].flags & QUEST_FLAG_SILENT) { + break; + } + + fprintf(fff, _(" %2d:%02d %20s クエスト「%s」から命からがら逃げ帰った。\n", " %2d:%02d %20s ran away from quest '%s'.\n"), hour, min, note_level, quest[num].name); + break; + } + case DIARY_RAND_QUEST_C: { + GAME_TEXT name[MAX_NLEN]; + strcpy(name, r_info[quest[num].r_idx].name.c_str()); + fprintf(fff, _(" %2d:%02d %20s ランダムクエスト(%s)を達成した。\n", " %2d:%02d %20s completed random quest '%s'\n"), hour, min, note_level, name); + break; + } + case DIARY_RAND_QUEST_F: { + GAME_TEXT name[MAX_NLEN]; + strcpy(name, r_info[quest[num].r_idx].name.c_str()); + fprintf(fff, _(" %2d:%02d %20s ランダムクエスト(%s)から逃げ出した。\n", " %2d:%02d %20s ran away from quest '%s'.\n"), hour, min, note_level, name); + break; + } + case DIARY_TO_QUEST: { + if (quest[num].flags & QUEST_FLAG_SILENT) { + break; + } + + fprintf(fff, _(" %2d:%02d %20s クエスト「%s」へと突入した。\n", " %2d:%02d %20s entered the quest '%s'.\n"), + hour, min, note_level, quest[num].name); + break; + } + default: + break; + } + + angband_fclose(fff); + if (do_level) { + write_level = false; + } + + return 0; +} + /*! * @brief 日記にメッセージを追加する / * Take note to the diary. @@ -178,18 +263,6 @@ errr exe_write_diary(PlayerType *player_ptr, int type, int num, concptr note) return -1; } - if (type == DIARY_FIX_QUEST_C || - type == DIARY_FIX_QUEST_F || - type == DIARY_RAND_QUEST_C || - type == DIARY_RAND_QUEST_F || - type == DIARY_TO_QUEST) { - QuestId old_quest = player_ptr->current_floor_ptr->quest_number; - player_ptr->current_floor_ptr->quest_number = (quest[num].type == QuestKindType::RANDOM) ? QuestId::NONE : i2enum(num); - init_flags = INIT_NAME_ONLY; - parse_fixed_map(player_ptr, "q_info.txt", 0, 0, 0, 0); - player_ptr->current_floor_ptr->quest_number = old_quest; - } - FILE *fff = nullptr; if (!open_diary_file(&fff, &disable_diary)) { return -1; @@ -233,34 +306,6 @@ errr exe_write_diary(PlayerType *player_ptr, int type, int num, concptr note) fprintf(fff, _(" %2d:%02d %20s %sを倒した。\n", " %2d:%02d %20s defeated %s.\n"), hour, min, note_level, note); break; } - case DIARY_FIX_QUEST_C: { - if (quest[num].flags & QUEST_FLAG_SILENT) { - break; - } - - fprintf(fff, _(" %2d:%02d %20s クエスト「%s」を達成した。\n", " %2d:%02d %20s completed quest '%s'.\n"), hour, min, note_level, quest[num].name); - break; - } - case DIARY_FIX_QUEST_F: { - if (quest[num].flags & QUEST_FLAG_SILENT) { - break; - } - - fprintf(fff, _(" %2d:%02d %20s クエスト「%s」から命からがら逃げ帰った。\n", " %2d:%02d %20s ran away from quest '%s'.\n"), hour, min, note_level, quest[num].name); - break; - } - case DIARY_RAND_QUEST_C: { - GAME_TEXT name[MAX_NLEN]; - strcpy(name, r_info[quest[num].r_idx].name.c_str()); - fprintf(fff, _(" %2d:%02d %20s ランダムクエスト(%s)を達成した。\n", " %2d:%02d %20s completed random quest '%s'\n"), hour, min, note_level, name); - break; - } - case DIARY_RAND_QUEST_F: { - GAME_TEXT name[MAX_NLEN]; - strcpy(name, r_info[quest[num].r_idx].name.c_str()); - fprintf(fff, _(" %2d:%02d %20s ランダムクエスト(%s)から逃げ出した。\n", " %2d:%02d %20s ran away from quest '%s'.\n"), hour, min, note_level, name); - break; - } case DIARY_MAXDEAPTH: { fprintf(fff, _(" %2d:%02d %20s %sの最深階%d階に到達した。\n", " %2d:%02d %20s reached level %d of %s for the first time.\n"), hour, min, note_level, _(d_info[player_ptr->dungeon_idx].name.c_str(), num), @@ -293,15 +338,6 @@ errr exe_write_diary(PlayerType *player_ptr, int type, int num, concptr note) break; } - case DIARY_TO_QUEST: { - if (quest[num].flags & QUEST_FLAG_SILENT) { - break; - } - - fprintf(fff, _(" %2d:%02d %20s クエスト「%s」へと突入した。\n", " %2d:%02d %20s entered the quest '%s'.\n"), - hour, min, note_level, quest[num].name); - break; - } case DIARY_TELEPORT_LEVEL: { fprintf(fff, _(" %2d:%02d %20s レベル・テレポートで脱出した。\n", " %2d:%02d %20s got out using teleport level.\n"), hour, min, note_level); diff --git a/src/io/write-diary.h b/src/io/write-diary.h index 0f2f59b75..c5be84269 100644 --- a/src/io/write-diary.h +++ b/src/io/write-diary.h @@ -47,8 +47,10 @@ extern bool write_level; class PlayerType; +enum class QuestId : int16_t; #ifdef JP #else concptr get_ordinal_number_suffix(int num); #endif +int exe_write_diary_quest(PlayerType *player_ptr, int type, QuestId num); errr exe_write_diary(PlayerType *player_ptr, int type, int num, concptr note); -- 2.11.0