OSDN Git Service

[Refactor] #3541 obj_desc_list::description の型をchar[] からstring に変えた
authorHourier <66951241+Hourier@users.noreply.github.com>
Tue, 11 Jul 2023 13:59:25 +0000 (22:59 +0900)
committerHourier <66951241+Hourier@users.noreply.github.com>
Fri, 14 Jul 2023 23:35:13 +0000 (08:35 +0900)
src/io-dump/random-art-info-dumper.cpp
src/wizard/artifact-analyzer.cpp
src/wizard/fixed-artifacts-spoiler.cpp
src/wizard/spoiler-util.h

index 7df9292..c55647d 100644 (file)
@@ -7,6 +7,7 @@
 #include "system/item-entity.h"
 #include "system/player-type-definition.h"
 #include "util/angband-files.h"
+#include "util/finalizer.h"
 #include "view/display-messages.h"
 #include "wizard/artifact-analyzer.h"
 #include "wizard/fixed-artifacts-spoiler.h"
  */
 static void spoiler_print_randart(ItemEntity *o_ptr, obj_desc_list *art_ptr)
 {
+    const auto finalizer = util::make_finalizer([art_ptr]() {
+        fprintf(spoiler_file, "%s%s\n\n", spoiler_indent, art_ptr->misc_desc);
+    });
     const auto *pval_ptr = &art_ptr->pval_info;
-    fprintf(spoiler_file, "%s\n", art_ptr->description);
+    fprintf(spoiler_file, "%s\n", art_ptr->description.data());
     if (!o_ptr->is_fully_known()) {
         fprintf(spoiler_file, _("%s不明\n", "%sUnknown\n"), spoiler_indent);
-    } else {
-        if (!pval_ptr->pval_desc.empty()) {
-            std::stringstream ss;
-            ss << pval_ptr->pval_desc << _("の修正:", " to");
-            spoiler_outlist(ss.str(), pval_ptr->pval_affects, item_separator);
-        }
+        return;
+    }
 
-        spoiler_outlist(_("対:", "Slay"), art_ptr->slays, item_separator);
-        spoiler_outlist(_("武器属性:", ""), art_ptr->brands, list_separator);
-        spoiler_outlist(_("免疫:", "Immunity to"), art_ptr->immunities, item_separator);
-        spoiler_outlist(_("耐性:", "Resist"), art_ptr->resistances, item_separator);
-        spoiler_outlist(_("維持:", "Sustain"), art_ptr->sustenances, item_separator);
-        spoiler_outlist("", art_ptr->misc_magic, list_separator);
-        if (art_ptr->activation) {
-            fprintf(spoiler_file, _("%s発動: %s\n", "%sActivates for %s\n"), spoiler_indent, art_ptr->activation);
-        }
+    if (!pval_ptr->pval_desc.empty()) {
+        std::stringstream ss;
+        ss << pval_ptr->pval_desc << _("の修正:", " to");
+        spoiler_outlist(ss.str(), pval_ptr->pval_affects, item_separator);
     }
 
-    fprintf(spoiler_file, "%s%s\n\n", spoiler_indent, art_ptr->misc_desc);
+    spoiler_outlist(_("対:", "Slay"), art_ptr->slays, item_separator);
+    spoiler_outlist(_("武器属性:", ""), art_ptr->brands, list_separator);
+    spoiler_outlist(_("免疫:", "Immunity to"), art_ptr->immunities, item_separator);
+    spoiler_outlist(_("耐性:", "Resist"), art_ptr->resistances, item_separator);
+    spoiler_outlist(_("維持:", "Sustain"), art_ptr->sustenances, item_separator);
+    spoiler_outlist("", art_ptr->misc_magic, list_separator);
+    if (art_ptr->activation) {
+        fprintf(spoiler_file, _("%s発動: %s\n", "%sActivates for %s\n"), spoiler_indent, art_ptr->activation);
+    }
 }
 
 /*!
index 38179a5..11e0a60 100644 (file)
@@ -251,7 +251,7 @@ static void analyze_misc(ItemEntity *o_ptr, char *misc_desc, size_t misc_desc_sz
  */
 void object_analyze(PlayerType *player_ptr, ItemEntity *o_ptr, obj_desc_list *desc_ptr)
 {
-    angband_strcpy(desc_ptr->description, analyze_general(player_ptr, o_ptr), MAX_NLEN);
+    desc_ptr->description = analyze_general(player_ptr, o_ptr);
     desc_ptr->pval_info.analyze(*o_ptr);
     desc_ptr->brands = analyze_brand(o_ptr);
     desc_ptr->slays = analyze_slay(o_ptr);
@@ -273,7 +273,7 @@ void object_analyze(PlayerType *player_ptr, ItemEntity *o_ptr, obj_desc_list *de
  */
 void random_artifact_analyze(PlayerType *player_ptr, ItemEntity *o_ptr, obj_desc_list *desc_ptr)
 {
-    angband_strcpy(desc_ptr->description, analyze_general(player_ptr, o_ptr), MAX_NLEN);
+    desc_ptr->description = analyze_general(player_ptr, o_ptr);
     desc_ptr->pval_info.analyze(*o_ptr);
     desc_ptr->brands = analyze_brand(o_ptr);
     desc_ptr->slays = analyze_slay(o_ptr);
index 9def5bd..9ec35d6 100644 (file)
@@ -96,7 +96,7 @@ static bool make_fake_artifact(ItemEntity *o_ptr, FixedArtifactId fixed_artifact
 static void spoiler_print_art(obj_desc_list *art_ptr)
 {
     const auto *pval_ptr = &art_ptr->pval_info;
-    fprintf(spoiler_file, "%s\n", art_ptr->description);
+    fprintf(spoiler_file, "%s\n", art_ptr->description.data());
     if (!pval_ptr->pval_desc.empty()) {
         std::stringstream ss;
         ss << pval_ptr->pval_desc << _("の修正:", " to");
index 01d7ea7..3df2625 100644 (file)
@@ -31,7 +31,7 @@ public:
 };
 
 struct obj_desc_list {
-    char description[MAX_NLEN]{}; /* "The Longsword Dragonsmiter (6d4) (+20, +25)" */
+    std::string description = ""; /* "The Longsword Dragonsmiter (6d4) (+20, +25)" */
     ParameterValueInfo pval_info{}; /* Description of what is affected by an object's pval */
     std::vector<std::string> slays{}; /* A list of an object's slaying preferences */
     std::vector<std::string> brands{}; /* A list if an object's elemental brands */