Favorites: heart toggle, Favorites tab with nicknames, /switch <nickname> quick server switch, fav command

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-27 18:24:00 +02:00
co-authored by Claude Opus 5.5
parent 8dae3ac13d
commit 8e00640732
6 changed files with 395 additions and 2 deletions
+47
View File
@@ -1021,6 +1021,53 @@ namespace MSCO
public int ReconnectAttempt { get { return reconnectAttempts; } }
public int ReconnectMaxAttempts { get { return MaxReconnectAttempts; } }
/// <summary>Server, mit dem man gerade verbunden ist (dedizierter Server), sonst null.</summary>
public string CurrentServerHost { get { return session != null && dedicated ? lastServerHost : null; } }
public int CurrentServerPort { get { return lastServerPort; } }
public string CurrentServerName { get { return lastServerName; } }
/// <summary>
/// Schnell den Server wechseln: Favorit per Kurzname (oder host:port). Ist man gerade verbunden, wird wie beim
/// Neu-Verbinden nach einem Welt-Reset getrennt und danach automatisch mit dem neuen Server verbunden.
/// </summary>
public string SwitchServer(string target)
{
target = (target ?? "").Trim();
if (target.Length == 0) return "switch <nickname> (see 'fav')";
Favorites.Favorite fav = Favorites.Find(target);
string host, name;
int port;
if (fav != null) { host = fav.Host; port = fav.Port; name = string.IsNullOrEmpty(fav.ServerName) ? fav.Nickname : fav.ServerName; }
else if (ServerBrowser.TryParseAddress(target, out host, out port)) name = null;
else return "No favorite called '" + target + "' - type 'fav' to see yours";
if (session != null && dedicated && string.Equals(lastServerHost, host, System.StringComparison.OrdinalIgnoreCase) && lastServerPort == port)
return "You are already on " + (fav != null ? fav.Nickname : host + ":" + port);
string label = fav != null ? fav.Nickname : host + ":" + port;
if (session == null)
{
if (!MenuHelper.InMenu) return "Go to the main menu first (or join a server) to switch";
JoinServer(host, port, name);
return "Connecting to " + label + " ...";
}
// Verbunden: trennen und danach automatisch mit dem neuen Server verbinden (übersteht das Neuladen der Mods)
lastServerHost = host;
lastServerPort = port;
lastServerName = name;
lastServerMax = 0;
serverReason = null;
reconnectAttempts = 0;
reconnectMessage = "Switching to " + label + " ...";
centerMessage = reconnectMessage;
centerMessageUntil = Time.realtimeSinceStartup + 2f;
session.Close("Switching server");
if (MenuHelper.InGame) reconnectHoldUntil = Time.realtimeSinceStartup + 0.8f; // kurz die Meldung zeigen
else OnSessionEnded("Switching server");
return reconnectMessage;
}
/// <summary>Automatisches Neu-Verbinden abbrechen (Knopf im Reconnect-Fenster).</summary>
public void CancelReconnect()
{