Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
            }
        }