Admin WORLD tab: reset world, backup now, list and restore save backups
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+64
-1
@@ -95,6 +95,9 @@ namespace MSCO
|
||||
|
||||
public void SetAdminPlayers(List<AdminPlayer> players) { adminPlayers = players; }
|
||||
public void SetBanned(List<string> ids) { bannedIds = ids; }
|
||||
public void SetBackups(List<string> names) { backupNames = names; }
|
||||
List<string> backupNames;
|
||||
string confirmWorld; // "reset" oder Name des Backups, das wiederhergestellt werden soll
|
||||
|
||||
public void CloseAll()
|
||||
{
|
||||
@@ -288,7 +291,7 @@ namespace MSCO
|
||||
|
||||
// Reiter
|
||||
GUILayout.BeginHorizontal();
|
||||
string[] tabs = { "PLAYERS", "ITEMS", "BANS" + (bannedIds != null && bannedIds.Count > 0 ? " (" + bannedIds.Count + ")" : "") };
|
||||
string[] tabs = { "PLAYERS", "ITEMS", "BANS" + (bannedIds != null && bannedIds.Count > 0 ? " (" + bannedIds.Count + ")" : ""), "WORLD" };
|
||||
for (int i = 0; i < tabs.Length; i++)
|
||||
{
|
||||
if (GUILayout.Button(tabs[i], adminTab == i ? primary : secondary, GUILayout.Height(30), GUILayout.Width(130))) adminTab = i;
|
||||
@@ -299,6 +302,7 @@ namespace MSCO
|
||||
|
||||
if (adminTab == 1) DrawAdminItems(mp);
|
||||
else if (adminTab == 2) DrawAdminBans(mp);
|
||||
else if (adminTab == 3) DrawAdminWorld(mp);
|
||||
else DrawAdminPlayers(mp);
|
||||
GUILayout.EndArea();
|
||||
}
|
||||
@@ -393,6 +397,65 @@ namespace MSCO
|
||||
GUILayout.EndScrollView();
|
||||
}
|
||||
|
||||
/// <summary>Welt zurücksetzen, Backups anlegen und wiederherstellen (dedizierter Server).</summary>
|
||||
void DrawAdminWorld(MultiplayerManager mp)
|
||||
{
|
||||
if (!mp.IsDedicated)
|
||||
{
|
||||
GUILayout.Label("World reset and save backups are only available on a dedicated server.", small);
|
||||
return;
|
||||
}
|
||||
GUILayout.Label("Everyone reconnects after a reset or restore. The current save is backed up first.", small);
|
||||
GUILayout.Space(8);
|
||||
|
||||
GUILayout.BeginHorizontal();
|
||||
if (confirmWorld == "reset")
|
||||
{
|
||||
if (GUILayout.Button("REALLY RESET?", danger, GUILayout.Height(32), GUILayout.Width(170))) { mp.WorldAction(5, null); confirmWorld = null; }
|
||||
GUILayout.Space(6);
|
||||
if (GUILayout.Button("CANCEL", secondary, GUILayout.Height(32), GUILayout.Width(100))) confirmWorld = null;
|
||||
}
|
||||
else if (GUILayout.Button("RESET WORLD", danger, GUILayout.Height(32), GUILayout.Width(170))) confirmWorld = "reset";
|
||||
GUILayout.Space(10);
|
||||
if (GUILayout.Button("BACKUP NOW", primary, GUILayout.Height(32), GUILayout.Width(150))) mp.WorldAction(6, null);
|
||||
GUILayout.FlexibleSpace();
|
||||
GUILayout.EndHorizontal();
|
||||
GUILayout.Label("Reset: all moved objects, bought items, doors and vehicle values go back to the server's save game.", small);
|
||||
GUILayout.Space(10);
|
||||
|
||||
GUILayout.Label("SAVE BACKUPS (NEWEST FIRST)", small);
|
||||
adminScroll = GUILayout.BeginScrollView(adminScroll);
|
||||
if (backupNames == null) GUILayout.Label("Loading...", small);
|
||||
else if (backupNames.Count == 0) GUILayout.Label("No backups yet. They are created automatically when the server takes over a save game, or with BACKUP NOW.", small);
|
||||
else
|
||||
{
|
||||
foreach (string name in backupNames)
|
||||
{
|
||||
GUILayout.BeginHorizontal(rowStyle, GUILayout.Height(40));
|
||||
GUILayout.Label(PrettyBackup(name), chatName);
|
||||
GUILayout.FlexibleSpace();
|
||||
if (confirmWorld == name)
|
||||
{
|
||||
if (GUILayout.Button("REALLY?", danger, GUILayout.Height(28), GUILayout.Width(100))) { mp.WorldAction(7, name); confirmWorld = null; }
|
||||
GUILayout.Space(4);
|
||||
if (GUILayout.Button("CANCEL", secondary, GUILayout.Height(28), GUILayout.Width(90))) confirmWorld = null;
|
||||
}
|
||||
else if (GUILayout.Button("RESTORE", primary, GUILayout.Height(28), GUILayout.Width(100))) confirmWorld = name;
|
||||
GUILayout.EndHorizontal();
|
||||
GUILayout.Space(4);
|
||||
}
|
||||
}
|
||||
GUILayout.EndScrollView();
|
||||
}
|
||||
|
||||
/// <summary>"20260927-104626" -> "27.09.2026 10:46:26".</summary>
|
||||
static string PrettyBackup(string name)
|
||||
{
|
||||
if (name == null || name.Length != 15 || name[8] != '-') return name;
|
||||
return name.Substring(6, 2) + "." + name.Substring(4, 2) + "." + name.Substring(0, 4) + " " +
|
||||
name.Substring(9, 2) + ":" + name.Substring(11, 2) + ":" + name.Substring(13, 2);
|
||||
}
|
||||
|
||||
void DrawAdminBans(MultiplayerManager mp)
|
||||
{
|
||||
GUILayout.Label(mp.IsDedicated ? "Banned players cannot join this server. UNBAN lets them in again."
|
||||
|
||||
Reference in New Issue
Block a user