OSDN Git Service

[Fix] #3487 プレイヤーの名前入力時の挙動を修正した (初期値がない場合に限りPLAYERを付ける)
authorHourier <66951241+Hourier@users.noreply.github.com>
Sat, 1 Jul 2023 09:17:53 +0000 (18:17 +0900)
committerHourier <66951241+Hourier@users.noreply.github.com>
Sat, 1 Jul 2023 09:26:51 +0000 (18:26 +0900)
src/player/process-name.cpp

index 8f91c1a..ba0e791 100644 (file)
@@ -8,6 +8,7 @@
 #include "term/screen-processor.h"
 #include "term/term-color-types.h"
 #include "util/angband-files.h"
+#include "util/finalizer.h"
 #include "util/string-processor.h"
 #include "view/display-player-misc-info.h"
 #include "world/world.h"
@@ -133,15 +134,23 @@ void process_player_name(PlayerType *player_ptr, bool is_new_savefile)
  */
 void get_name(PlayerType *player_ptr)
 {
+    const auto finalizer = util::make_finalizer([player_ptr]() {
+        display_player_misc_info(player_ptr);
+    });
+
     std::string initial_name(player_ptr->name);
     const auto max_name_size = sizeof(player_ptr->name);
     constexpr auto prompt = _("キャラクターの名前を入力して下さい: ", "Enter a name for your character: ");
     const auto name = input_string(prompt, max_name_size, initial_name);
-    if (name.has_value() && !name->empty()) {
-        angband_strcpy(player_ptr->name, name.value(), max_name_size);
-    } else {
-        angband_strcpy(player_ptr->name, "PLAYER", max_name_size);
+    if (name.has_value()) {
+        if (!name->empty()) {
+            angband_strcpy(player_ptr->name, name.value(), max_name_size);
+        }
+
+        return;
     }
 
-    display_player_misc_info(player_ptr);
+    if (initial_name.empty()) {
+        angband_strcpy(player_ptr->name, "PLAYER", max_name_size);
+    }
 }