added request to create empty level set for newly created users
[rocksndiamonds.git] / src / screens.c
index 6f1e7f423dcdaa49c8b473559b57ad6522f265c0..a0c1805e3e4d611f4d9e7cf79d007be823d67543 100644 (file)
@@ -4135,6 +4135,9 @@ static void setTypeNameValues(char *name, struct TextPosInfo *pos,
       LoadSetup();
   }
 
+  char *setup_filename = getSetupFilename();
+  boolean setup_exists = fileExists(setup_filename);
+
   // change name of edited user in setup structure
   strcpy(setup.player_name, name);
 
@@ -4148,7 +4151,7 @@ static void setTypeNameValues(char *name, struct TextPosInfo *pos,
       if (Request("Reset setup values for this player?", REQ_ASK))
       {
        // remove setup config file
-       unlink(getSetupFilename());
+       unlink(setup_filename);
 
        // set player name to default player name
        LoadSetup();
@@ -4157,8 +4160,6 @@ static void setTypeNameValues(char *name, struct TextPosInfo *pos,
        strcpy(name, setup.player_name);
 
        setTypeNameValues_Name(name, pos);
-
-       Request("Setup values reset to default values!", REQ_CONFIRM);
       }
     }
     else if (remove_user && type_name_nr != 0)
@@ -4170,20 +4171,52 @@ static void setTypeNameValues(char *name, struct TextPosInfo *pos,
          getStringCat3WithSeparator(user_dir, "REMOVED",
                                     getCurrentTimestamp(), ".");
 
-       if (rename(user_dir, user_dir_removed) == 0)
-         Request("Player settings and tapes removed!", REQ_CONFIRM);
-       else
+       if (rename(user_dir, user_dir_removed) != 0)
          Request("Removing settings and tapes failed!", REQ_CONFIRM);
 
        checked_free(user_dir_removed);
       }
     }
+    else if (create_user && type_name_nr != 0 && !setup_exists)
+    {
+      if (Request("Create empty level set for the new player?", REQ_ASK))
+      {
+       char *levelset_subdir = getNewUserLevelSubdir();
+
+       if (CreateUserLevelSet(levelset_subdir, name, name, 100, FALSE))
+       {
+         AddUserLevelSetToLevelInfo(levelset_subdir);
+
+         LevelDirTree *leveldir_current_last = leveldir_current;
+
+         leveldir_current = getTreeInfoFromIdentifier(leveldir_first,
+                                                      levelset_subdir);
+
+         // set level number of newly created level set to default value
+         LoadLevelSetup_SeriesInfo();
+
+         // set newly created level set as current level set for new user
+         SaveLevelSetup_LastSeries();
+         SaveLevelSetup_SeriesInfo();
+
+         leveldir_current = leveldir_current_last;
+       }
+       else
+       {
+         Request("Creating new level set failed!", REQ_CONFIRM);
+       }
+      }
+    }
 
     // restore currently active user
     user.nr = last_user_nr;
 
     // restore setup of currently active user
     LoadSetup();
+
+    // restore last level set of currently active user
+    LoadLevelSetup_LastSeries();
+    LoadLevelSetup_SeriesInfo();
   }
 }