From e1e92c1c3bcc6eb1bfe83c1424aac2e5624d79f8 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Sun, 16 Jun 2019 18:06:59 +0300 Subject: [PATCH] (f5058dc03) Fixed inability to ban/kick clients using the in-game info menu, made the client-side ban/kick methods more type-safe. --- .../Source/Networking/GameClient.cs | 31 ++++++++++--------- .../Source/Screens/NetLobbyScreen.cs | 25 +++++++-------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/Barotrauma/BarotraumaClient/Source/Networking/GameClient.cs b/Barotrauma/BarotraumaClient/Source/Networking/GameClient.cs index bcf031886..527c58aa2 100644 --- a/Barotrauma/BarotraumaClient/Source/Networking/GameClient.cs +++ b/Barotrauma/BarotraumaClient/Source/Networking/GameClient.cs @@ -1884,17 +1884,20 @@ namespace Barotrauma.Networking client.SendMessage(msg, NetDeliveryMethod.ReliableUnordered); } - public bool VoteForKick(GUIButton button, object userdata) + public void VoteForKick(Client votedClient) { - var votedClient = userdata is Client ? (Client)userdata : otherClients.Find(c => c.Character == userdata); - if (votedClient == null) return false; - + if (votedClient == null) { return; } votedClient.AddKickVote(ConnectedClients.First(c => c.ID == ID)); Vote(VoteType.Kick, votedClient); + } - button.Enabled = false; + public override void AddChatMessage(ChatMessage message) + { + base.AddChatMessage(message); - return true; + if (string.IsNullOrEmpty(message.Text)) { return; } + GameMain.NetLobbyScreen.NewChatMessage(message); + chatBox.AddMessage(message); } public override void AddChatMessage(ChatMessage message) @@ -2379,12 +2382,12 @@ namespace Barotrauma.Networking public virtual bool SelectCrewCharacter(Character character, GUIComponent characterFrame) { - if (character == null) return false; + if (character == null) { return false; } if (character != myCharacter) { var client = GameMain.NetworkMember.ConnectedClients.Find(c => c.Character == character); - if (client == null) return false; + if (client == null) { return false; } var mute = new GUITickBox(new RectTransform(new Vector2(0.95f, 0.1f), characterFrame.RectTransform, Anchor.BottomCenter) { RelativeOffset = new Vector2(0.0f, 0.1f) }, TextManager.Get("Mute")) @@ -2405,8 +2408,8 @@ namespace Barotrauma.Networking var banButton = new GUIButton(new RectTransform(new Vector2(0.45f, 0.9f), buttonContainer.RectTransform), TextManager.Get("Ban")) { - UserData = character.Name, - OnClicked = GameMain.NetLobbyScreen.BanPlayer + UserData = client, + OnClicked = (btn, userdata) => { GameMain.NetLobbyScreen.BanPlayer(client); return false; } }; } if (HasPermission(ClientPermissions.Kick)) @@ -2414,8 +2417,8 @@ namespace Barotrauma.Networking var kickButton = new GUIButton(new RectTransform(new Vector2(0.45f, 0.9f), buttonContainer.RectTransform), TextManager.Get("Kick")) { - UserData = character.Name, - OnClicked = GameMain.NetLobbyScreen.KickPlayer + UserData = client, + OnClicked = (btn, userdata) => { GameMain.NetLobbyScreen.KickPlayer(client); return false; } }; } else if (serverSettings.Voting.AllowVoteKick) @@ -2423,8 +2426,8 @@ namespace Barotrauma.Networking var kickVoteButton = new GUIButton(new RectTransform(new Vector2(0.45f, 0.9f), buttonContainer.RectTransform), TextManager.Get("VoteToKick")) { - UserData = character, - OnClicked = VoteForKick + UserData = client, + OnClicked = (btn, userdata) => { VoteForKick(client); btn.Enabled = false; return true; } }; if (GameMain.NetworkMember.ConnectedClients != null) { diff --git a/Barotrauma/BarotraumaClient/Source/Screens/NetLobbyScreen.cs b/Barotrauma/BarotraumaClient/Source/Screens/NetLobbyScreen.cs index af9b4b109..0648be2ef 100644 --- a/Barotrauma/BarotraumaClient/Source/Screens/NetLobbyScreen.cs +++ b/Barotrauma/BarotraumaClient/Source/Screens/NetLobbyScreen.cs @@ -1541,7 +1541,7 @@ namespace Barotrauma { UserData = selectedClient }; - banButton.OnClicked += BanPlayer; + banButton.OnClicked = (bt, userdata) => { BanPlayer(selectedClient); return true; }; banButton.OnClicked += ClosePlayerFrame; var rangebanButton = new GUIButton(new RectTransform(new Vector2(0.3f, 1.0f), buttonAreaUpper.RectTransform), @@ -1549,7 +1549,7 @@ namespace Barotrauma { UserData = selectedClient }; - rangebanButton.OnClicked += BanPlayerRange; + rangebanButton.OnClicked = (bt, userdata) => { BanPlayerRange(selectedClient); return true; }; rangebanButton.OnClicked += ClosePlayerFrame; } @@ -1561,7 +1561,7 @@ namespace Barotrauma TextManager.Get("VoteToKick")) { Enabled = !selectedClient.HasKickVoteFromID(GameMain.Client.ID), - OnClicked = GameMain.Client.VoteForKick, + OnClicked = (btn, userdata) => { GameMain.Client.VoteForKick(selectedClient); btn.Enabled = false; return true; }, UserData = selectedClient }; } @@ -1574,7 +1574,7 @@ namespace Barotrauma { UserData = selectedClient }; - kickButton.OnClicked = KickPlayer; + kickButton.OnClicked = (bt, userdata) => { KickPlayer(selectedClient); return true; }; kickButton.OnClicked += ClosePlayerFrame; } @@ -1603,25 +1603,22 @@ namespace Barotrauma return true; } - public bool KickPlayer(GUIButton button, object userData) + public void KickPlayer(Client client) { - if (!(userData is Client client) || GameMain.NetworkMember == null) return false; - GameMain.Client.CreateKickReasonPrompt(client.Name, false); - return false; + if (GameMain.NetworkMember == null || client == null) { return; } + GameMain.Client.CreateKickReasonPrompt(client.Name, false); } - public bool BanPlayer(GUIButton button, object userData) + public void BanPlayer(Client client) { - if (!(userData is Client client) || GameMain.NetworkMember == null) return false; + if (GameMain.NetworkMember == null || client == null) { return; } GameMain.Client.CreateKickReasonPrompt(client.Name, true); - return false; } - public bool BanPlayerRange(GUIButton button, object userData) + public void BanPlayerRange(Client client) { - if (!(userData is Client client) || GameMain.NetworkMember == null) return false; + if (GameMain.NetworkMember == null || client == null) { return; } GameMain.Client.CreateKickReasonPrompt(client.Name, true, true); - return false; } public override void AddToGUIUpdateList()