From 8f675e625bd5e8cecee51aa3e847601b0787cc52 Mon Sep 17 00:00:00 2001 From: juanjp600 Date: Sun, 28 Aug 2016 22:16:49 -0300 Subject: [PATCH] Host can ban lobby players from ingame New menu looks really ugly but it works --- Subsurface/Source/GameSession/GameSession.cs | 14 ++++++-- Subsurface/Source/Items/Item.cs | 2 +- .../Source/Networking/GameServerSettings.cs | 33 +++++++++++++++++++ 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/Subsurface/Source/GameSession/GameSession.cs b/Subsurface/Source/GameSession/GameSession.cs index 356b69974..fc432d03f 100644 --- a/Subsurface/Source/GameSession/GameSession.cs +++ b/Subsurface/Source/GameSession/GameSession.cs @@ -7,7 +7,7 @@ namespace Barotrauma { class GameSession { - public enum InfoFrameTab { Crew, Mission }; + public enum InfoFrameTab { Crew, Mission, ManagePlayers }; public readonly TaskManager TaskManager; @@ -244,6 +244,13 @@ namespace Barotrauma missionButton.UserData = InfoFrameTab.Mission; missionButton.OnClicked = SelectInfoFrameTab; + if (GameMain.Server != null) + { + var manageButton = new GUIButton(new Rectangle(200, -30, 100, 20), "Manage players", GUI.Style, infoFrame); + manageButton.UserData = InfoFrameTab.ManagePlayers; + manageButton.OnClicked = SelectInfoFrameTab; + } + var closeButton = new GUIButton(new Rectangle(0, 0, 80, 20), "Close", Alignment.BottomCenter, GUI.Style, infoFrame); closeButton.OnClicked = ToggleInfoFrame; @@ -262,6 +269,9 @@ namespace Barotrauma break; case InfoFrameTab.Mission: CreateMissionInfo(infoFrame); + break; + case InfoFrameTab.ManagePlayers: + GameMain.Server.ManagePlayersFrame(infoFrame); break; } @@ -283,7 +293,7 @@ namespace Barotrauma } - + public void Update(float deltaTime) { TaskManager.Update(deltaTime); diff --git a/Subsurface/Source/Items/Item.cs b/Subsurface/Source/Items/Item.cs index a31e53b2a..5fcb8d5df 100644 --- a/Subsurface/Source/Items/Item.cs +++ b/Subsurface/Source/Items/Item.cs @@ -1732,7 +1732,7 @@ namespace Barotrauma } } - switch (type) + switch (type) { case NetworkEventType.DropItem: if (GameMain.Server != null) diff --git a/Subsurface/Source/Networking/GameServerSettings.cs b/Subsurface/Source/Networking/GameServerSettings.cs index ad6ce7df7..9bc6ab807 100644 --- a/Subsurface/Source/Networking/GameServerSettings.cs +++ b/Subsurface/Source/Networking/GameServerSettings.cs @@ -646,5 +646,38 @@ namespace Barotrauma.Networking return false; } + + public void ManagePlayersFrame(GUIFrame infoFrame) + { + GUIListBox cList = new GUIListBox(new Rectangle(0, 0, 280, 300), Color.White * 0.7f, GUI.Style, infoFrame); + cList.Padding = new Vector4(10.0f, 10.0f, 10.0f, 10.0f); + //crewList.OnSelected = SelectCrewCharacter; + + foreach (Client c in ConnectedClients) + { + GUIFrame frame = new GUIFrame(new Rectangle(0, 0, 0, 40), Color.Transparent, null, cList); + frame.Padding = new Vector4(5.0f, 5.0f, 5.0f, 5.0f); + frame.Color = (c.inGame && c.Character!=null && !c.Character.IsDead) ? Color.Gold * 0.2f : Color.Transparent; + frame.HoverColor = Color.LightGray * 0.5f; + frame.SelectedColor = Color.Gold * 0.5f; + + GUITextBlock textBlock = new GUITextBlock( + new Rectangle(40, 0, 0, 25), + c.name + " (" + c.Connection.RemoteEndPoint.Address.ToString() + ")", + Color.Transparent, Color.White, + Alignment.Left, Alignment.Left, + null, frame); + + var banButton = new GUIButton(new Rectangle(220, 0, 100, 20), "Ban", Alignment.Right | Alignment.CenterY, GUI.Style, frame); + banButton.UserData = c.name; + banButton.OnClicked += GameMain.NetLobbyScreen.BanPlayer; + + var kickButton = new GUIButton(new Rectangle(110, 0, 100, 20), "Kick", Alignment.Right | Alignment.CenterY, GUI.Style, frame); + kickButton.UserData = c.name; + kickButton.OnClicked += GameMain.NetLobbyScreen.KickPlayer; + + textBlock.Padding = new Vector4(5.0f, 0.0f, 5.0f, 0.0f); + } + } } }