diff --git a/MultiplayerManager.cs b/MultiplayerManager.cs index bc8256d..d9fb4a3 100644 --- a/MultiplayerManager.cs +++ b/MultiplayerManager.cs @@ -561,6 +561,18 @@ namespace MSCO SendGame(MsgType.Chat, NetSession.Build(w => w.Write("* " + text))); } + /// Admin (dedizierter Server): einem Spieler Admin-Rechte geben (9) bzw. nehmen (10). + public void SetAdmin(int playerId, bool admin) + { + if (session == null || !dedicated) return; + session.SendTo(NetSession.HostId, MsgType.AdminAction, NetSession.Build(w => + { + w.Write((byte)(admin ? 9 : 10)); + w.Write(playerId); + w.Write(""); + })); + } + public void AdminAction(bool ban, int playerId, string reason) { if (session == null) return; diff --git a/Overlays.cs b/Overlays.cs index 01816f6..077c1c3 100644 --- a/Overlays.cs +++ b/Overlays.cs @@ -355,6 +355,14 @@ namespace MSCO if (GUILayout.Button("BRING", secondary, GUILayout.Height(30), GUILayout.Width(70))) mp.BringPlayer(p.Id); GUILayout.Space(12); } + if (mp.IsDedicated) + { + // Admin geben/nehmen (braucht Steam; der Server meldet, wenn es nicht geht) + GUI.enabled = !self; + if (GUILayout.Button(p.IsAdmin ? "REMOVE ADMIN" : "MAKE ADMIN", secondary, GUILayout.Height(30), GUILayout.Width(120))) + mp.SetAdmin(p.Id, !p.IsAdmin); + GUILayout.Space(12); + } GUI.enabled = !self && !p.IsAdmin; if (GUILayout.Button("KICK", secondary, GUILayout.Height(30), GUILayout.Width(70))) mp.AdminAction(false, p.Id, adminReason);