private static void SendMatchState(int connectionId) { if (NetworkMatch.IsTeamMode(NetworkMatch.GetMode())) { foreach (var team in MPTeams.ActiveTeams) { NetworkServer.SendToClient(connectionId, CustomMsgType.SetScoreForTeam, new ScoreForTeamMessage { team = (int)team, score = NetworkMatch.m_team_scores[(int)team] }); } } //if (!MPTweaks.ClientHasMod(connectionId)) // return; var n = Overload.NetworkManager.m_Players.Count; var msg = new MatchStateMessage() { m_match_elapsed_seconds = NetworkMatch.m_match_elapsed_seconds, m_player_states = new PlayerMatchState[n] }; int i = 0; foreach (var player in Overload.NetworkManager.m_Players) { msg.m_player_states[i++] = new PlayerMatchState() { m_net_id = player.netId, m_kills = player.m_kills, m_deaths = player.m_deaths, m_assists = player.m_assists } } ; NetworkServer.SendToClient(connectionId, ModCustomMsg.MsgSetMatchState, msg); }
private static void SendMatchState(int connectionId) { if (NetworkMatch.IsTeamMode(NetworkMatch.GetMode())) { foreach (var team in MPTeams.ActiveTeams) { NetworkServer.SendToClient(connectionId, CustomMsgType.SetScoreForTeam, new ScoreForTeamMessage { team = (int)team, score = NetworkMatch.m_team_scores[(int)team] }); } } //if (!MPTweaks.ClientHasMod(connectionId)) // return; // Process any disconnected scoreboard entries, add them to active pilot, and remove stale scoreboard objects foreach (var player in Overload.NetworkManager.m_Players) { // Add any previous records for pilot on join var playersSameName = Overload.NetworkManager.m_PlayersForScoreboard.Where(x => !String.IsNullOrEmpty(x.m_mp_name) && x.m_mp_name == player.m_mp_name).ToList(); player.m_kills = playersSameName.Sum(x => x.m_kills); player.m_deaths = playersSameName.Sum(x => x.m_deaths); player.m_assists = playersSameName.Sum(x => x.m_assists); // Remove previously DC'd players of same name from server scoreboard list playersSameName.Where(x => x != player).ToList().ForEach(x => Overload.NetworkManager.m_PlayersForScoreboard.Remove(x)); } var n = Overload.NetworkManager.m_Players.Count; var msg = new MatchStateMessage() { m_match_elapsed_seconds = NetworkMatch.m_match_elapsed_seconds, m_player_states = new PlayerMatchState[n] }; int i = 0; foreach (var player in Overload.NetworkManager.m_Players) { msg.m_player_states[i++] = new PlayerMatchState() { m_net_id = player.netId, m_kills = player.m_kills, m_deaths = player.m_deaths, m_assists = player.m_assists } } ; NetworkServer.SendToClient(connectionId, MessageTypes.MsgSetMatchState, msg); // Send disconnected pilot stats as separate message if (MPTweaks.ClientHasTweak(connectionId, "jip")) { var dcPlayers = Overload.NetworkManager.m_PlayersForScoreboard.Where(x => !Overload.NetworkManager.m_Players.Contains(x)); var dcmsg = new DisconnectedPlayerMatchStateMessage() { m_player_states = new DisconnectedPlayerMatchState[dcPlayers.Count()] }; int j = 0; foreach (var player in dcPlayers) { dcmsg.m_player_states[j++] = new DisconnectedPlayerMatchState() { m_net_id = NetworkInstanceId.Invalid, m_kills = player.m_kills, m_deaths = player.m_deaths, m_assists = player.m_assists, m_mp_name = player.m_mp_name, m_mp_team = player.m_mp_team }; } NetworkServer.SendToClient(connectionId, MessageTypes.MsgSetDisconnectedMatchState, dcmsg); } }