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
 private void AnnounceGame()
 {
     if (!Peers.IsConnectedToServer)
     {
         try
         {
             Peers.NetworkClient.RemoveCallback <MyEventLoginResponse>();
             Peers.NetworkClient.RemoveCallback <MyEventCreateGameResponse>();
             LastCreateGameRequest.JoinMode   = JoinMode;
             LastCreateGameRequest.SectorName = MyGuiScreenGamePlay.Static.GetGameName(GameType, MyGameplayConstants.GetGameplayDifficulty());
             Peers.SendServer(ref LastCreateGameRequest);
         }
         catch
         {
         }
     }
 }
示例#3
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());
        }
示例#4
0
        public void UpdateGameInfo()
        {
            MyEventUpdateGame msg = new MyEventUpdateGame();

            msg.Name     = MyGuiScreenGamePlay.Static.GetGameName(GameType, MyGameplayConstants.GetGameplayDifficulty());
            msg.Password = null;
            msg.JoinMode = JoinMode;

            //if (JoinMode == MyJoinMode.Open)
            //{
            //    MyEventCreateGame createGameRequest = new MyEventCreateGame();
            //    createGameRequest.SectorName = msg.Name;
            //    createGameRequest.Password = String.Empty;
            //    createGameRequest.Type = GameType;
            //    createGameRequest.JoinMode = JoinMode;
            //    createGameRequest.Difficulty = MyGameplayConstants.GetGameplayDifficulty();
            //    Peers.SendServer(ref createGameRequest);
            //}

            Peers.SendServer(ref msg);
        }