Clients are allowed to vote to end the round if they have spawned at some point during the round, even if the character they controlled doesn't exist anymore (huskified or eaten). Closes #483

This commit is contained in:
Joonas Rikkonen
2018-07-16 16:27:13 +03:00
parent 89b26008a6
commit 5d342e24ef
3 changed files with 17 additions and 5 deletions

View File

@@ -29,10 +29,20 @@ namespace Barotrauma.Networking
public byte TeamID = 0;
public Character Character;
private Character character;
public Character Character
{
get { return character; }
set
{
character = value;
if (character != null) HasSpawned = true;
}
}
public CharacterInfo CharacterInfo;
public NetConnection Connection { get; set; }
public bool InGame;
public bool InGame;
public bool HasSpawned; //has the client spawned as a character during the current round
public UInt16 LastRecvGeneralUpdate = 0;

View File

@@ -1512,6 +1512,7 @@ namespace Barotrauma.Networking
foreach (Client client in connectedClients)
{
client.Character = null;
client.HasSpawned = false;
client.InGame = false;
}
}
@@ -1631,6 +1632,7 @@ namespace Barotrauma.Networking
}
client.Character = null;
client.HasSpawned = false;
client.InGame = false;
if (string.IsNullOrWhiteSpace(msg)) msg = client.Name + " has left the server";

View File

@@ -111,11 +111,11 @@ namespace Barotrauma
#endif
break;
case VoteType.EndRound:
if (sender.Character == null) return;
if (!sender.HasSpawned) return;
sender.SetVote(voteType, inc.ReadBoolean());
GameMain.NetworkMember.EndVoteCount = GameMain.Server.ConnectedClients.Count(c => c.Character != null && c.GetVote<bool>(VoteType.EndRound));
GameMain.NetworkMember.EndVoteMax = GameMain.Server.ConnectedClients.Count(c => c.Character != null);
GameMain.NetworkMember.EndVoteCount = GameMain.Server.ConnectedClients.Count(c => c.HasSpawned && c.GetVote<bool>(VoteType.EndRound));
GameMain.NetworkMember.EndVoteMax = GameMain.Server.ConnectedClients.Count(c => c.HasSpawned);
break;
case VoteType.Kick: