Re-enabled vote kicking, with some improvements: chat messages notifying about votes, kick button is disabled for the host's character or if already voted
This commit is contained in:
@@ -834,24 +834,22 @@ namespace Barotrauma.Networking
|
|||||||
Character character = obj as Character;
|
Character character = obj as Character;
|
||||||
if (character == null) return false;
|
if (character == null) return false;
|
||||||
|
|
||||||
//if (character != myCharacter)
|
if (character != myCharacter)
|
||||||
//{
|
{
|
||||||
// var kickButton = new GUIButton(new Rectangle(0, 0, 120, 20), "Vote to Kick", Alignment.BottomLeft, GUI.Style, characterFrame);
|
var client = GameMain.NetworkMember.ConnectedClients.Find(c => c.Character == character);
|
||||||
// kickButton.UserData = character;
|
if (client != null)
|
||||||
// kickButton.OnClicked += VoteForKick;
|
{
|
||||||
//}
|
var kickButton = new GUIButton(new Rectangle(0, 0, 120, 20), "Vote to Kick", Alignment.BottomLeft, GUI.Style, characterFrame);
|
||||||
|
|
||||||
|
if (GameMain.NetworkMember.ConnectedClients != null)
|
||||||
|
{
|
||||||
|
kickButton.Enabled = !client.HasKickVoteFromID(myID);
|
||||||
|
}
|
||||||
|
|
||||||
//if (GameMain.NetworkMember.ConnectedClients != null)
|
kickButton.UserData = character;
|
||||||
//{
|
kickButton.OnClicked += VoteForKick;
|
||||||
// var client = GameMain.NetworkMember.ConnectedClients.Find(c => c.Character == character);
|
}
|
||||||
// if (client != null && client.KickVoteCount>0)
|
}
|
||||||
// {
|
|
||||||
// new GUITextBlock(
|
|
||||||
// new Rectangle(0, 0, 100, 20),
|
|
||||||
// client.KickVoteCount + "/" + GameMain.NetworkMember.ConnectedClients,
|
|
||||||
// GUI.Style, Alignment.BottomRight, Alignment.TopLeft, characterFrame);
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -933,11 +931,16 @@ namespace Barotrauma.Networking
|
|||||||
public bool VoteForKick(GUIButton button, object userdata)
|
public bool VoteForKick(GUIButton button, object userdata)
|
||||||
{
|
{
|
||||||
var votedClient = otherClients.Find(c => c.Character == userdata);
|
var votedClient = otherClients.Find(c => c.Character == userdata);
|
||||||
|
if (votedClient == null) return false;
|
||||||
|
|
||||||
|
votedClient.AddKickVote(new Client(name, ID));
|
||||||
|
|
||||||
if (votedClient == null) return false;
|
if (votedClient == null) return false;
|
||||||
|
|
||||||
Vote(VoteType.Kick, votedClient);
|
Vote(VoteType.Kick, votedClient);
|
||||||
|
|
||||||
|
button.Enabled = false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1070,15 +1073,14 @@ namespace Barotrauma.Networking
|
|||||||
return character;
|
return character;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void SendChatMessage(string message)
|
public override void SendChatMessage(string message, ChatMessageType? type = null)
|
||||||
{
|
{
|
||||||
//AddChatMessage(message);
|
//AddChatMessage(message);
|
||||||
|
|
||||||
if (client.ServerConnection == null) return;
|
if (client.ServerConnection == null) return;
|
||||||
|
|
||||||
var type = ChatMessageType.Default;
|
type = ChatMessageType.Default;
|
||||||
|
|
||||||
|
|
||||||
if (Screen.Selected == GameMain.GameScreen && (myCharacter == null || myCharacter.IsDead))
|
if (Screen.Selected == GameMain.GameScreen && (myCharacter == null || myCharacter.IsDead))
|
||||||
{
|
{
|
||||||
type = ChatMessageType.Dead;
|
type = ChatMessageType.Dead;
|
||||||
@@ -1092,7 +1094,7 @@ namespace Barotrauma.Networking
|
|||||||
|
|
||||||
var chatMessage = ChatMessage.Create(
|
var chatMessage = ChatMessage.Create(
|
||||||
gameStarted && myCharacter != null ? myCharacter.Name : name,
|
gameStarted && myCharacter != null ? myCharacter.Name : name,
|
||||||
message, type, gameStarted ? myCharacter : null);
|
message, (ChatMessageType)type, gameStarted ? myCharacter : null);
|
||||||
|
|
||||||
ReliableMessage msg = reliableChannel.CreateMessage();
|
ReliableMessage msg = reliableChannel.CreateMessage();
|
||||||
msg.InnerMessage.Write((byte)PacketTypes.Chatmessage);
|
msg.InnerMessage.Write((byte)PacketTypes.Chatmessage);
|
||||||
|
|||||||
@@ -1492,12 +1492,15 @@ namespace Barotrauma.Networking
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void SendChatMessage(string message)
|
public override void SendChatMessage(string message, ChatMessageType? type = null)
|
||||||
{
|
{
|
||||||
List<Client> recipients = new List<Client>();
|
List<Client> recipients = new List<Client>();
|
||||||
Client targetClient = null;
|
Client targetClient = null;
|
||||||
|
|
||||||
ChatMessageType type = gameStarted && myCharacter != null ? ChatMessageType.Default : ChatMessageType.Server;
|
if (type == null)
|
||||||
|
{
|
||||||
|
type = gameStarted && myCharacter != null ? ChatMessageType.Default : ChatMessageType.Server;
|
||||||
|
}
|
||||||
|
|
||||||
string command = ChatMessage.GetChatMessageCommand(message, out message).ToLowerInvariant();
|
string command = ChatMessage.GetChatMessageCommand(message, out message).ToLowerInvariant();
|
||||||
|
|
||||||
@@ -1536,12 +1539,17 @@ namespace Barotrauma.Networking
|
|||||||
|
|
||||||
var chatMessage = ChatMessage.Create(
|
var chatMessage = ChatMessage.Create(
|
||||||
gameStarted && myCharacter != null ? myCharacter.Name : name,
|
gameStarted && myCharacter != null ? myCharacter.Name : name,
|
||||||
message, type, gameStarted ? myCharacter : null);
|
message, (ChatMessageType)type, gameStarted ? myCharacter : null);
|
||||||
|
|
||||||
AddChatMessage(chatMessage);
|
AddChatMessage(chatMessage);
|
||||||
|
|
||||||
if (!server.Connections.Any()) return;
|
if (!server.Connections.Any()) return;
|
||||||
|
|
||||||
|
SendChatMessage(chatMessage, recipients);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SendChatMessage(ChatMessage chatMessage, List<Client> recipients)
|
||||||
|
{
|
||||||
foreach (Client c in recipients)
|
foreach (Client c in recipients)
|
||||||
{
|
{
|
||||||
ReliableMessage msg = c.ReliableChannel.CreateMessage();
|
ReliableMessage msg = c.ReliableChannel.CreateMessage();
|
||||||
@@ -1552,8 +1560,7 @@ namespace Barotrauma.Networking
|
|||||||
chatMessage.WriteNetworkMessage(msg.InnerMessage);
|
chatMessage.WriteNetworkMessage(msg.InnerMessage);
|
||||||
|
|
||||||
c.ReliableChannel.SendMessage(msg, c.Connection);
|
c.ReliableChannel.SendMessage(msg, c.Connection);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ReadCharacterData(NetIncomingMessage message)
|
private void ReadCharacterData(NetIncomingMessage message)
|
||||||
@@ -1844,6 +1851,7 @@ namespace Barotrauma.Networking
|
|||||||
get { return kickVoters.Count; }
|
get { return kickVoters.Count; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public Client(NetPeer server, string name, byte ID)
|
public Client(NetPeer server, string name, byte ID)
|
||||||
: this(name, ID)
|
: this(name, ID)
|
||||||
{
|
{
|
||||||
@@ -1890,6 +1898,11 @@ namespace Barotrauma.Networking
|
|||||||
{
|
{
|
||||||
kickVoters.Remove(voter);
|
kickVoters.Remove(voter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool HasKickVoteFromID(int id)
|
||||||
|
{
|
||||||
|
return kickVoters.Any(k => k.ID == id);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public static void UpdateKickVotes(List<Client> connectedClients)
|
public static void UpdateKickVotes(List<Client> connectedClients)
|
||||||
|
|||||||
@@ -300,7 +300,7 @@ namespace Barotrauma.Networking
|
|||||||
GUI.PlayUISound(soundType);
|
GUI.PlayUISound(soundType);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void SendChatMessage(string message) { }
|
public virtual void SendChatMessage(string message, ChatMessageType? type = null) { }
|
||||||
|
|
||||||
public virtual void Update(float deltaTime)
|
public virtual void Update(float deltaTime)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -103,6 +103,13 @@ namespace Barotrauma
|
|||||||
|
|
||||||
kicked.AddKickVote(sender);
|
kicked.AddKickVote(sender);
|
||||||
|
|
||||||
|
if (GameMain.Server != null)
|
||||||
|
{
|
||||||
|
GameMain.Server.SendChatMessage(
|
||||||
|
ChatMessage.Create("", sender.name + " has voted to kick " + kicked.name, ChatMessageType.Server, null),
|
||||||
|
GameMain.Server.ConnectedClients);
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user