OSDN Git Service

[Refactor] #963 Added argument of update_turn_type to update_player_turn_energy()
[hengbandforosx/hengbandosx.git] / src / dungeon / quest.cpp
index 199cbc7..5f14304 100644 (file)
 #include "object-enchant/item-apply-magic.h"
 #include "object-enchant/trg-types.h"
 #include "object/object-generator.h"
-#include "player/player-personalities-types.h"
+#include "player-status/player-energy.h"
+#include "player/player-personality-types.h"
 #include "player/player-status.h"
 #include "system/artifact-type-definition.h"
 #include "system/floor-type-definition.h"
-#include "system/system-variables.h"
+#include "system/monster-race-definition.h"
+#include "system/player-type-definition.h"
 #include "util/bit-flags-calculator.h"
 #include "view/display-messages.h"
 #include "world/world.h"
@@ -98,6 +100,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 +135,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;
@@ -162,7 +176,7 @@ void quest_discovery(QUEST_IDX q_idx)
         return;
 
     GAME_TEXT name[MAX_NLEN];
-    strcpy(name, (r_name + r_ptr->name));
+    strcpy(name, (r_ptr->name.c_str()));
 
     msg_print(find_quest[rand_range(0, 4)]);
     msg_print(NULL);
@@ -184,10 +198,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 +263,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) {
@@ -264,7 +272,7 @@ void leave_quest_check(player_type *player_ptr)
         quest[QUEST_TOWER1].complev = player_ptr->lev;
         break;
     case QUEST_TYPE_FIND_ARTIFACT:
-        a_info[q_ptr->k_idx].gen_flags &= ~(TRG_QUESTITEM);
+        a_info[q_ptr->k_idx].gen_flags.reset(TRG::QUESTITEM);
         break;
     case QUEST_TYPE_RANDOM:
         r_info[q_ptr->r_idx].flags1 &= ~(RF1_QUESTOR);
@@ -316,7 +324,7 @@ void do_cmd_quest(player_type *player_ptr)
     if (player_ptr->wild_mode)
         return;
 
-    take_turn(player_ptr, 100);
+    update_player_turn_energy(player_ptr, 100, update_turn_type::ENERGY_SUBSTITUTION);
 
     if (!cave_has_flag_bold(player_ptr->current_floor_ptr, player_ptr->y, player_ptr->x, FF_QUEST_ENTER)) {
         msg_print(_("ここにはクエストの入口はない。", "You see no quest level here."));
@@ -342,4 +350,4 @@ void do_cmd_quest(player_type *player_ptr)
     player_ptr->current_floor_ptr->inside_quest = player_ptr->current_floor_ptr->grid_array[player_ptr->y][player_ptr->x].special;
 
     player_ptr->leaving = TRUE;
-}
\ No newline at end of file
+}