diff --git a/Content.Client/GameTicking/ClientGameTicker.cs b/Content.Client/GameTicking/ClientGameTicker.cs index ad8bc976c8..621be8e936 100644 --- a/Content.Client/GameTicking/ClientGameTicker.cs +++ b/Content.Client/GameTicking/ClientGameTicker.cs @@ -73,7 +73,7 @@ namespace Content.Client.GameTicking { //This is not ideal at all, but I don't see an immediately better fit anywhere else. - var roundEnd = new RoundEndSummaryWindow(message.GamemodeTitle, message.DurationInHours); + var roundEnd = new RoundEndSummaryWindow(message.GamemodeTitle, message.DurationInHours, message.AllPlayersEndInfo); } } diff --git a/Content.Client/UserInterface/RoundEndSummaryWindow.cs b/Content.Client/UserInterface/RoundEndSummaryWindow.cs index a12c9076ba..b393edfddd 100644 --- a/Content.Client/UserInterface/RoundEndSummaryWindow.cs +++ b/Content.Client/UserInterface/RoundEndSummaryWindow.cs @@ -10,7 +10,9 @@ using Robust.Shared.Maths; using Content.Client.Utility; using Robust.Client.Player; using System.Linq; +using System.Collections.Generic; using static Robust.Client.UserInterface.Controls.ItemList; +using static Content.Shared.SharedGameTicker; namespace Content.Client.UserInterface { @@ -27,7 +29,7 @@ namespace Content.Client.UserInterface protected override Vector2? CustomSize => (520, 580); - public RoundEndSummaryWindow(string gm, uint duration) + public RoundEndSummaryWindow(string gm, uint duration, List info ) { Title = Loc.GetString("Round End Summary"); @@ -59,12 +61,15 @@ namespace Content.Client.UserInterface SelectMode = ItemList.ItemListSelectMode.Button }; - foreach (var session in _playerManager.Sessions.OrderBy(s => s.Name)) + foreach(var plyinfo in info) { - var playerOOCName = session.SessionId.Username; - //No Mind data so no ICName/Job/Role, etc. - _playerList.AddItem(playerOOCName); + var oocName = plyinfo.PlayerOOCName; + var icName = plyinfo.PlayerICName; + var role = plyinfo.Role; + var wasAntag = plyinfo.Antag; + _playerList.AddItem($"{oocName} was {icName} playing role of {role}."); } + VBox.AddChild(_playerList); OpenCentered(); MoveToFront(); diff --git a/Content.Server/GameTicking/GameTicker.cs b/Content.Server/GameTicking/GameTicker.cs index 3df9f50c4a..a7b2b9bf61 100644 --- a/Content.Server/GameTicking/GameTicker.cs +++ b/Content.Server/GameTicking/GameTicker.cs @@ -205,8 +205,30 @@ namespace Content.Server.GameTicking //Tell every client the round has ended. var roundEndMessage = _netManager.CreateNetMessage(); roundEndMessage.GamemodeTitle = MakeGamePreset().ModeTitle; + //TODO:Grab actual timespan of round. roundEndMessage.DurationInHours = 1337; + + //Generate a list of basic player info to display in the end round summary. + var listOfPlayerInfo = new List(); + foreach(var ply in _playerManager.GetAllPlayers().OrderBy(p => p.Name)) + { + if (ply == null) continue; + if(ply.AttachedEntity.TryGetComponent(out var mindComponent) + && mindComponent.HasMind) + { + var playerEndRoundInfo = new RoundEndPlayerInfo() + { + PlayerOOCName = ply.Name, + PlayerICName = mindComponent.Mind.CurrentEntity.Name, + Role = mindComponent.Mind.AllRoles.First().Name, + Antag = false + }; + listOfPlayerInfo.Add(playerEndRoundInfo); + } + } + + roundEndMessage.AllPlayersEndInfo = listOfPlayerInfo; _netManager.ServerSendToAll(roundEndMessage); } diff --git a/Content.Shared/SharedGameTicker.cs b/Content.Shared/SharedGameTicker.cs index 616e53ef1c..41a1651d12 100644 --- a/Content.Shared/SharedGameTicker.cs +++ b/Content.Shared/SharedGameTicker.cs @@ -1,5 +1,7 @@ using System; +using System.Collections.Generic; using Lidgren.Network; +using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Network; using Robust.Shared.Network; @@ -114,6 +116,14 @@ namespace Content.Shared buffer.Write(TextBlob); } } + public struct RoundEndPlayerInfo + { + public string PlayerOOCName; + public string PlayerICName; + public string Role; + public bool Antag; + + } protected class MsgRoundEndMessage : NetMessage { @@ -130,10 +140,30 @@ namespace Content.Shared //TODO: Change to a more detailed measurement of time. public uint DurationInHours; + public uint PlayerCount; + + public List AllPlayersEndInfo; + public override void ReadFromBuffer(NetIncomingMessage buffer) { GamemodeTitle = buffer.ReadString(); DurationInHours = buffer.ReadUInt32(); + + PlayerCount = buffer.ReadUInt32(); + AllPlayersEndInfo = new List(); + for(var i = 0; i < PlayerCount + 1; i++) + { + var readPlayerData = new RoundEndPlayerInfo + { + PlayerOOCName = buffer.ReadString(), + PlayerICName = buffer.ReadString(), + Role = buffer.ReadString(), + Antag = buffer.ReadBoolean() + }; + + AllPlayersEndInfo.Add(readPlayerData); + } + } public override void WriteToBuffer(NetOutgoingMessage buffer) @@ -141,6 +171,14 @@ namespace Content.Shared buffer.Write(GamemodeTitle); buffer.Write(DurationInHours); + buffer.Write(PlayerCount); + foreach(var playerEndInfo in AllPlayersEndInfo) + { + buffer.Write(playerEndInfo.PlayerOOCName); + buffer.Write(playerEndInfo.PlayerICName); + buffer.Write(playerEndInfo.Role); + buffer.Write(playerEndInfo.Antag); + } } }