Ejemplo n.º 1
0
 private void AddPlayer(MyPlayerRemote player, bool isFaction = false)
 {
     AddPlayer(player.GetDisplayName(), (int)(player.Connection.AverageRoundtripTime * 1000), player.Statistics.Deaths, player.Statistics.PlayersKilled, (byte)player.PlayerId, player.Faction, isFaction);
 }
 private MyPlayerInfo RemotePlayerToInfo(MyPlayerRemote player)
 {
     return new MyPlayerInfo()
     {
         DisplayName = player.GetDisplayName().ToString(),
         PlayerId = player.PlayerId,
         UserId = player.UserId,
         Faction = player.Faction,
     };
 }
        public void AllowEnter(ref MyEventEnterGame msg)
        {
            var playerList = msg.ConnectedPlayers;
            bool allConnected = MyMultiplayerPeers.Static.Players.All(s => playerList.Contains(s.UserId));
            if (allConnected)
            {
                // Generate game user id and send back
                var response = new MyEventEnterGameResponse();
                response.Allowed = true;
                response.PlayerId = GeneratePlayerId();

                var newPlayer = new MyPlayerRemote(new StringBuilder(msg.PlayerInfo.DisplayName), msg.PlayerInfo.UserId, response.PlayerId);
                newPlayer.Connection = msg.SenderConnection;
                msg.SenderConnection.Tag = newPlayer;
                newPlayer.Faction = MyMwcObjectBuilder_FactionEnum.None;

                MyMultiplayerPeers.Static.Players.Add(newPlayer);

                Peers.NetworkClient.Send(ref response, msg.SenderConnection, NetDeliveryMethod.ReliableOrdered, 0);
            }
            else
            {
                SendPlayerList(msg.SenderConnection);
            }
        }
        void OnNewPlayer(ref MyEventNewPlayer msg)
        {
            Log("OnNewPlayer");

            if (NewPlayer != null)
            {
                NewPlayer();
            }

            if (IsHost)
            {
                SendCheckpoint(msg.SenderConnection);

                var playerLeftMsg = new MyEventPlayerStateChanged();
                playerLeftMsg.UserId = msg.PlayerInfo.UserId;
                playerLeftMsg.NewState = MyMultiplayerStateEnum.Playing;
                Peers.SendServer(ref playerLeftMsg);

                UpdateMission();
            }
            else
            {
                var player = new MyPlayerRemote(new StringBuilder(msg.PlayerInfo.DisplayName), msg.PlayerInfo.UserId, msg.PlayerInfo.PlayerId);
                player.Connection = msg.SenderConnection;
                player.Connection.Tag = player;
                Peers.Players.Add(player);
                Notify(MyTextsWrapperEnum.MP_XHasJoined, msg.PlayerInfo.DisplayName);
            }
            LogPlayers();
        }
        void DisplayKillNotification(MyPlayerRemote deadPlayer, byte? killerId)
        {
            MyPlayerRemote killer;

            if (killerId == MyEntityIdentifier.CurrentPlayerId)
            {
                Notify(Localization.MyTextsWrapperEnum.MP_YouHaveKilledX, deadPlayer.GetDisplayName());
            }
            else if (killerId == deadPlayer.PlayerId)
            {
                // Until entity ids fixed
                //Notify(Localization.MyTextsWrapperEnum.MP_XKilledHimself, deadPlayer.GetDisplayName());
                Notify(Localization.MyTextsWrapperEnum.MP_XKilled, deadPlayer.GetDisplayName());
            }
            else if (killerId.HasValue && killerId != 0 && Peers.TryGetPlayer(killerId.Value, out killer))
            {
                Notify(Localization.MyTextsWrapperEnum.MP_XHasBeenKilledByY, deadPlayer.GetDisplayName(), killer.GetDisplayName());
            }
            else
            {
                Notify(Localization.MyTextsWrapperEnum.MP_XKilled, deadPlayer.GetDisplayName());
            }
        }
        void OnPeerDied(MyPlayerRemote deadPlayer, byte? killerId)
        {
            deadPlayer.Ship.SetAfterburner(false);
            deadPlayer.Ship = null;

            if (IsHost)
            {
                ClearLocks(deadPlayer.PlayerId);
            }

            if (killerId == MyEntityIdentifier.CurrentPlayerId)
            {
                PlayerStatistics.PlayersKilled++;
                UpdateStats();
            }

            DisplayKillNotification(deadPlayer, killerId);
        }