OSDN Git Service

[Fix] ワーグタイプ以外のクエストが放棄できるのを修正 / 放棄時間が記録されないのを修正
authoriks <iks3@users.noreply.github.com>
Thu, 15 Apr 2021 17:26:00 +0000 (02:26 +0900)
committeriks <iks3@users.noreply.github.com>
Thu, 15 Apr 2021 17:26:00 +0000 (02:26 +0900)
src/dungeon/quest.cpp
src/dungeon/quest.h
src/market/building-quest.cpp

index e42784a..da5cf32 100644 (file)
@@ -98,6 +98,21 @@ void determine_random_questor(player_type *player_ptr, quest_type *q_ptr)
 }
 
 /*!
+ * @brief クエストの最終状態を記録する(成功or失敗、時間)
+ * @param player_type プレイヤー情報への参照ポインタ
+ * @param q_ptr クエスト情報への参照ポインタ
+ * @param stat ステータス(成功or失敗)
+ * @return なし
+ */
+void record_quest_final_status(quest_type *q_ptr, PLAYER_LEVEL lev, QUEST_STATUS stat)
+{
+    q_ptr->status = stat;
+    q_ptr->complev = lev;
+    update_playtime();
+    q_ptr->comptime = current_world_ptr->play_time;
+}
+
+/*!
  * @brief クエストを達成状態にする /
  * @param player_ptr プレーヤーへの参照ポインタ
  * @param quest_num 達成状態にしたいクエストのID
@@ -118,10 +133,7 @@ void complete_quest(player_type *player_ptr, QUEST_IDX quest_num)
         break;
     }
 
-    q_ptr->status = QUEST_STATUS_COMPLETED;
-    q_ptr->complev = player_ptr->lev;
-    update_playtime();
-    q_ptr->comptime = current_world_ptr->play_time;
+    record_quest_final_status(q_ptr, player_ptr->lev, QUEST_STATUS_COMPLETED);
 
     if (q_ptr->flags & QUEST_FLAG_SILENT)
         return;
@@ -184,10 +196,7 @@ void quest_discovery(QUEST_IDX q_idx)
     }
 
     msg_print(_("この階は以前は誰かによって守られていたようだ…。", "It seems that this level was protected by someone before..."));
-    quest[q_idx].status = QUEST_STATUS_FINISHED;
-    q_ptr->complev = 0;
-    update_playtime();
-    q_ptr->comptime = current_world_ptr->play_time;
+    record_quest_final_status(q_ptr, 0, QUEST_STATUS_FINISHED);
 }
 
 /*!
@@ -252,10 +261,7 @@ void leave_quest_check(player_type *player_ptr)
     if (!is_one_time_quest)
         return;
 
-    q_ptr->status = QUEST_STATUS_FAILED;
-    q_ptr->complev = player_ptr->lev;
-    update_playtime();
-    q_ptr->comptime = current_world_ptr->play_time;
+    record_quest_final_status(q_ptr, player_ptr->lev, QUEST_STATUS_FAILED);
 
     /* Additional settings */
     switch (q_ptr->type) {
index f9e26b1..b18640c 100644 (file)
@@ -87,6 +87,7 @@ extern int quest_text_line;
 extern int leaving_quest;
 
 void determine_random_questor(player_type *player_ptr, quest_type *q_ptr);
+void record_quest_final_status(quest_type *q_ptr, PLAYER_LEVEL lev, QUEST_STATUS stat);
 void complete_quest(player_type *player_ptr, QUEST_IDX quest_num);
 void check_find_art_quest_completion(player_type *player_ptr, object_type *o_ptr);
 void quest_discovery(QUEST_IDX q_idx);
index 78dbd56..4f2d460 100644 (file)
@@ -90,10 +90,10 @@ void castle_quest(player_type *player_ptr)
         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);
+        get_questinfo(player_ptr, q_index, true);
         put_str(format(_("現在のクエスト「%s」", "Current quest is '%s'."), q_ptr->name), 11, 0);
 
-        if (q_ptr->type != QUEST_TYPE_KILL_LEVEL) {
+        if (q_ptr->type != QUEST_TYPE_KILL_LEVEL || q_ptr->dungeon == 0) {
             put_str(_("クエストを終わらせたら戻って来て下さい。", "Return when you have completed your quest."), 12, 0);
             return;
         }
@@ -106,7 +106,7 @@ void castle_quest(player_type *player_ptr)
         clear_bldg(4, 18);
         msg_print(_("放棄しました。", "You gave up."));
         msg_print(NULL);
-        q_ptr->status = QUEST_STATUS_FAILED;
+        record_quest_final_status(q_ptr, player_ptr->lev, QUEST_STATUS_FAILED);
     }
 
     if (q_ptr->status == QUEST_STATUS_FAILED) {