(97e5bb5d1) Don't show the "kick / vote to kick" buttons when inspecting the owner of the server, or display the "x voted to kick" message if someone tries to vote kick the owner.

This commit is contained in:
Joonas Rikkonen
2019-06-09 17:38:20 +03:00
parent 77926908fc
commit a70319bbd2
5 changed files with 15 additions and 6 deletions
@@ -12,6 +12,7 @@ namespace Barotrauma.Networking
public byte ID; public byte ID;
public UInt16 CharacterID; public UInt16 CharacterID;
public bool Muted; public bool Muted;
public bool AllowKicking;
} }
partial class Client : IDisposable partial class Client : IDisposable
@@ -37,6 +38,8 @@ namespace Barotrauma.Networking
} }
} }
public bool AllowKicking;
public void UpdateSoundPosition() public void UpdateSoundPosition()
{ {
if (VoipSound == null) { return; } if (VoipSound == null) { return; }
@@ -1267,6 +1267,7 @@ namespace Barotrauma.Networking
string name = inc.ReadString(); string name = inc.ReadString();
UInt16 characterID = inc.ReadUInt16(); UInt16 characterID = inc.ReadUInt16();
bool muted = inc.ReadBoolean(); bool muted = inc.ReadBoolean();
bool allowKicking = inc.ReadBoolean();
inc.ReadPadBits(); inc.ReadPadBits();
tempClients.Add(new TempClient tempClients.Add(new TempClient
@@ -1274,7 +1275,8 @@ namespace Barotrauma.Networking
ID = id, ID = id,
Name = name, Name = name,
CharacterID = characterID, CharacterID = characterID,
Muted = muted Muted = muted,
AllowKicking = allowKicking
}); });
} }
@@ -1290,13 +1292,15 @@ namespace Barotrauma.Networking
{ {
existingClient = new Client(tc.Name, tc.ID) existingClient = new Client(tc.Name, tc.ID)
{ {
Muted = tc.Muted Muted = tc.Muted,
AllowKicking = tc.AllowKicking
}; };
ConnectedClients.Add(existingClient); ConnectedClients.Add(existingClient);
GameMain.NetLobbyScreen.AddPlayer(existingClient); GameMain.NetLobbyScreen.AddPlayer(existingClient);
} }
existingClient.Character = null; existingClient.Character = null;
existingClient.Muted = tc.Muted; existingClient.Muted = tc.Muted;
existingClient.AllowKicking = tc.AllowKicking;
if (tc.CharacterID > 0) if (tc.CharacterID > 0)
{ {
existingClient.Character = Entity.FindEntityByID(tc.CharacterID) as Character; existingClient.Character = Entity.FindEntityByID(tc.CharacterID) as Character;
@@ -1550,7 +1550,8 @@ namespace Barotrauma
} }
if (GameMain.Client != null && GameMain.Client.ServerSettings.Voting.AllowVoteKick && selectedClient != null) if (GameMain.Client != null && GameMain.Client.ServerSettings.Voting.AllowVoteKick &&
selectedClient != null && selectedClient.AllowKicking)
{ {
var kickVoteButton = new GUIButton(new RectTransform(new Vector2(0.3f, 1.0f), buttonAreaLower.RectTransform), var kickVoteButton = new GUIButton(new RectTransform(new Vector2(0.3f, 1.0f), buttonAreaLower.RectTransform),
TextManager.Get("VoteToKick")) TextManager.Get("VoteToKick"))
@@ -1561,7 +1562,8 @@ namespace Barotrauma
}; };
} }
if (GameMain.Client.HasPermission(ClientPermissions.Kick)) if (GameMain.Client.HasPermission(ClientPermissions.Kick) &&
selectedClient != null && selectedClient.AllowKicking)
{ {
var kickButton = new GUIButton(new RectTransform(new Vector2(0.3f, 1.0f), buttonAreaLower.RectTransform), var kickButton = new GUIButton(new RectTransform(new Vector2(0.3f, 1.0f), buttonAreaLower.RectTransform),
TextManager.Get("Kick")) TextManager.Get("Kick"))
@@ -1488,6 +1488,7 @@ namespace Barotrauma.Networking
outmsg.Write(client.Name); outmsg.Write(client.Name);
outmsg.Write(client.Character == null || !gameStarted ? (ushort)0 : client.Character.ID); outmsg.Write(client.Character == null || !gameStarted ? (ushort)0 : client.Character.ID);
outmsg.Write(client.Muted); outmsg.Write(client.Muted);
outmsg.Write(client.Connection != OwnerConnection); //is kicking the player allowed
outmsg.WritePadBits(); outmsg.WritePadBits();
} }
} }
@@ -62,11 +62,10 @@ namespace Barotrauma
byte kickedClientID = inc.ReadByte(); byte kickedClientID = inc.ReadByte();
Client kicked = GameMain.Server.ConnectedClients.Find(c => c.ID == kickedClientID); Client kicked = GameMain.Server.ConnectedClients.Find(c => c.ID == kickedClientID);
if (kicked != null && !kicked.HasKickVoteFrom(sender)) if (kicked != null && kicked.Connection != GameMain.Server.OwnerConnection && !kicked.HasKickVoteFrom(sender))
{ {
kicked.AddKickVote(sender); kicked.AddKickVote(sender);
Client.UpdateKickVotes(GameMain.Server.ConnectedClients); Client.UpdateKickVotes(GameMain.Server.ConnectedClients);
GameMain.Server.SendChatMessage($"ServerMessage.HasVotedToKick~[initiator]={sender.Name}~[target]={kicked.Name}", ChatMessageType.Server, null); GameMain.Server.SendChatMessage($"ServerMessage.HasVotedToKick~[initiator]={sender.Name}~[target]={kicked.Name}", ChatMessageType.Server, null);
} }