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 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()); }