OSDN Git Service

[Refactor] enum classの型名変更 TRG -> ItemGenerationTraitType
[hengbandforosx/hengbandosx.git] / src / info-reader / ego-reader.cpp
index 1eec870..5a34eb0 100644 (file)
@@ -1,4 +1,5 @@
 #include "info-reader/ego-reader.h"
+#include "artifact/random-art-effects.h"
 #include "info-reader/info-reader-util.h"
 #include "info-reader/kind-info-tokens-table.h"
 #include "info-reader/parse-error-types.h"
  */
 static bool grab_one_ego_item_flag(ego_item_type *e_ptr, std::string_view what)
 {
-    if (info_grab_one_flag(e_ptr->flags, k_info_flags, what))
+    if (TrFlags::grab_one_flag(e_ptr->flags, k_info_flags, what))
         return true;
 
-    if (EnumClassFlagGroup<TRG>::grab_one_flag(e_ptr->gen_flags, k_info_gen_flags, what))
+    if (EnumClassFlagGroup<ItemGenerationTraitType>::grab_one_flag(e_ptr->gen_flags, k_info_gen_flags, what))
         return true;
 
     msg_format(_("未知の名のあるアイテム・フラグ '%s'。", "Unknown ego-item flag '%s'."), what.data());
@@ -57,9 +58,9 @@ static bool grab_ego_generate_flags(ego_generate_type &xtra, std::string_view wh
  * @param head ヘッダ構造体
  * @return エラーコード
  */
-errr parse_e_info(std::string_view buf, angband_header *head)
+errr parse_e_info(std::string_view buf, angband_header *)
 {
-    static ego_item_type *e_ptr = NULL;
+    static ego_item_type *e_ptr = nullptr;
     const auto &tokens = str_split(buf, ':', false, 10);
 
     error_idx = 0; //!< @note 順不同で登録しているため
@@ -72,11 +73,13 @@ errr parse_e_info(std::string_view buf, angband_header *head)
         auto i = std::stoi(tokens[1]);
         if (i < error_idx)
             return PARSE_ERROR_NON_SEQUENTIAL_RECORDS;
-        if (i >= head->info_num)
-            return PARSE_ERROR_OUT_OF_BOUNDS;
+        if (i >= static_cast<int>(e_info.size())) {
+            e_info.resize(i + 1);
+        }
 
         error_idx = i;
         e_ptr = &e_info[i];
+        e_ptr->idx = static_cast<EGO_IDX>(i);
 #ifdef JP
         e_ptr->name = tokens[2];
 #endif
@@ -130,10 +133,10 @@ errr parse_e_info(std::string_view buf, angband_header *head)
             return PARSE_ERROR_TOO_FEW_ARGUMENTS;
 
         auto n = grab_one_activation_flag(tokens[1].c_str());
-        if (n <= 0)
+        if (n <=RandomArtActType::NONE)
             return PARSE_ERROR_INVALID_FLAG;
 
-        e_ptr->act_idx = (IDX)n;
+        e_ptr->act_idx = n;
     } else if (tokens[0] == "F") {
         // F:flags
         if (tokens.size() < 2 || tokens[1].size() == 0)