OSDN Git Service

[Refactor] #2749 get_random_name() の戻り値をvoidからstd::string に変え、char * の引数を削除した
authorHourier <66951241+Hourier@users.noreply.github.com>
Wed, 21 Dec 2022 14:06:24 +0000 (23:06 +0900)
committerHourier <66951241+Hourier@users.noreply.github.com>
Wed, 21 Dec 2022 14:14:10 +0000 (23:14 +0900)
src/artifact/random-art-characteristics.cpp
src/artifact/random-art-characteristics.h
src/artifact/random-art-generator.cpp

index cda90b8..3ed1b15 100644 (file)
@@ -133,34 +133,36 @@ static std::string get_random_art_filename(const bool armour, const int power)
 /*!
  * @brief ランダムアーティファクト生成中、対象のオブジェクトに名前を与える.
  * @param o_ptr 処理中のアイテム参照ポインタ
- * @param return_name 名前を返すための文字列参照ポインタ
  * @param armour 対象のオブジェクトが防具が否か
  * @param power 銘の基準となるオブジェクトの価値レベル(0=呪い、1=低位、2=中位、3以上=高位)
+ * @return ランダムアーティファクト名
  * @details 確率によって、シンダリン銘、漢字銘 (anameからランダム)、固定名のいずれか一つが与えられる.
  * シンダリン銘:10%、漢字銘18%、固定銘72% (固定銘が尽きていたら漢字銘になることもある).
  */
-void get_random_name(ItemEntity *o_ptr, char *return_name, bool armour, int power)
+std::string get_random_name(const ItemEntity &item, bool armour, int power)
 {
     const auto prob = randint1(100);
     constexpr auto chance_sindarin = 10;
+    char random_artifact_name[1024]{};
     if (prob <= chance_sindarin) {
-        get_table_sindarin(return_name);
-        return;
+        get_table_sindarin(random_artifact_name);
+        return random_artifact_name;
     }
 
     constexpr auto chance_table = 20;
     if (prob <= chance_table) {
-        get_table_name(return_name);
-        return;
+        get_table_name(random_artifact_name);
+        return random_artifact_name;
     }
 
     auto filename = get_random_art_filename(armour, power);
-    (void)get_rnd_line(filename.data(), o_ptr->artifact_bias, return_name);
+    (void)get_rnd_line(filename.data(), item.artifact_bias, random_artifact_name);
 #ifdef JP
-    if (return_name[0] == 0) {
-        get_table_name(return_name);
+    if (random_artifact_name[0] == 0) {
+        get_table_name(random_artifact_name);
     }
 #endif
+    return random_artifact_name;
 }
 
 /*対邪平均ダメージの計算処理*/
index f71ee27..c16d1dc 100644 (file)
@@ -4,8 +4,10 @@
  * @brief ランダムアーティファクトのバイアス付加処理ヘッダ
  */
 
+#include <string>
+
 class ItemEntity;
 class PlayerType;
 void curse_artifact(PlayerType *player_ptr, ItemEntity *o_ptr);
-void get_random_name(ItemEntity *o_ptr, char *return_name, bool armour, int power);
+std::string get_random_name(const ItemEntity &item, bool armour, int power);
 bool has_extreme_damage_rate(PlayerType *player_ptr, ItemEntity *o_ptr);
index de4ff90..59a83d1 100644 (file)
@@ -385,11 +385,8 @@ static int decide_random_art_power_level(ItemEntity *o_ptr, const bool a_cursed,
 
 static std::string name_unnatural_random_artifact(PlayerType *player_ptr, ItemEntity *o_ptr, const bool a_scroll, const int power_level)
 {
-    GAME_TEXT new_name[1024] = "";
-
     if (!a_scroll) {
-        get_random_name(o_ptr, new_name, o_ptr->is_protector(), power_level);
-        return new_name;
+        return get_random_name(*o_ptr, o_ptr->is_protector(), power_level);
     }
 
     concptr ask_msg = _("このアーティファクトを何と名付けますか?", "What do you want to call the artifact? ");
@@ -398,6 +395,7 @@ static std::string name_unnatural_random_artifact(PlayerType *player_ptr, ItemEn
     o_ptr->ident |= IDENT_FULL_KNOWN;
     o_ptr->art_name = quark_add("");
     (void)screen_object(player_ptr, o_ptr, 0L);
+    char new_name[1024] = "";
     if (!get_string(ask_msg, new_name, sizeof new_name) || !new_name[0]) {
         if (one_in_(2)) {
             get_table_sindarin_aux(new_name);