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();
        }
示例#2
0
        void Peers_PlayerDisconnected(MyPlayerRemote player)
        {
            if (player.UserId == Peers.HostUserId)
            {
                // TODO: Connection to host lost, shutdown
                var handler = OnShutdown;
                if (handler != null)
                {
                    handler();
                }
            }
            else
            {
                // Close all entities of disconnected player
                foreach (var e in MyEntities.GetEntities())
                {
                    if (e.EntityId.HasValue && e.EntityId.Value.PlayerId == player.PlayerId)
                    {
                        e.MarkForClose();
                    }
                }
            }

            if (player.Ship != null)
            {
                player.Ship.MarkForClose();
                player.Ship = null;
            }

            if (IsHost)
            {
                ClearLocks(player.PlayerId);

                var playerLeftMsg = new MyEventPlayerStateChanged();
                playerLeftMsg.UserId   = player.UserId;
                playerLeftMsg.NewState = MyMultiplayerStateEnum.Disconnected;
                Peers.SendServer(ref playerLeftMsg);
            }

            Notify(MyTextsWrapperEnum.MP_XHasLeft, player.GetDisplayName());
        }