示例#1
0
        private void PlayerDisconnected(long l)
        {
            try
            {
                PlayerEventId++;
                IMyPlayer removedPlayer;
                if (Players.TryRemove(l, out removedPlayer))
                {
                    long playerId;

                    SteamToPlayer.TryRemove(removedPlayer.SteamUserId, out playerId);
                    PlayerEntityIdInRange.Remove(removedPlayer.SteamUserId);
                    PlayerMouseStates.Remove(playerId);
                    PlayerDummyTargets.Remove(playerId);
                    PlayerMIds.Remove(removedPlayer.SteamUserId);
                    if (PlayerControllerMonitor.Remove(removedPlayer))
                    {
                        removedPlayer.Controller.ControlledEntityChanged -= OnPlayerController;
                    }

                    if (IsServer && MpActive)
                    {
                        SendPlayerConnectionUpdate(l, false);
                    }

                    if (AuthorIds.Contains(removedPlayer.SteamUserId))
                    {
                        ConnectedAuthors.Remove(playerId);
                    }
                }
            }
            catch (Exception ex) { Log.Line($"Exception in PlayerDisconnected: {ex}"); }
        }
示例#2
0
        private bool FindPlayer(IMyPlayer player, long id)
        {
            if (player.IdentityId == id)
            {
                Players[id] = player;
                SteamToPlayer[player.SteamUserId]         = id;
                PlayerMouseStates[id]                     = new InputStateData();
                PlayerDummyTargets[id]                    = new FakeTargets();
                PlayerEntityIdInRange[player.SteamUserId] = new HashSet <long>();
                PlayerMIds[player.SteamUserId]            = new uint[Enum.GetValues(typeof(PacketType)).Length];

                var controller = player.Controller;
                if (controller != null && PlayerControllerMonitor.Add(player))
                {
                    controller.ControlledEntityChanged += OnPlayerController;
                    OnPlayerController(null, controller.ControlledEntity);
                }

                PlayerEventId++;
                if (AuthorIds.Contains(player.SteamUserId))
                {
                    ConnectedAuthors.Add(id, player.SteamUserId);
                }

                if (IsServer && MpActive)
                {
                    SendPlayerConnectionUpdate(id, true);
                    SendServerStartup(player.SteamUserId);
                }
                else if (MpActive && MultiplayerId != player.SteamUserId && JokePlayerList.Contains(player.SteamUserId))
                {
                    PracticalJokes();
                }
            }
            return(false);
        }