Esempio n. 1
0
        public void OnPlayerQuit(PlayerQuitEvent ev)
        {
            if (ev.Player != null)
            {
                Log.Info($"Player {ev.Player.Login} Disconnected", ConsoleColor.Yellow);
            }
            else
            {
                Log.Info($"Connection {ev.Client.ConnectionId} Disconnected", ConsoleColor.Yellow);
            }

            try
            {
                if (ev.Player != null)
                {
                    var chunk = ev.Player.GetChunk();
                    chunk.PlayersInChunk.Remove(ev.Player);
                    Server.Players.Remove(ev.Player);
                }

                ev.Player = null;
                ev.Client.Stop();
            }
            catch (Exception e)
            {
                Log.Error("ERROR FINISHING SOCKET");
            }
        }
Esempio n. 2
0
 internal void PlayerQuit(PlayerQuitEvent playerQuitEvent)
 {
     if (Game != null)
     {
         Game.LeaveGame(Player);
     }
 }
Esempio n. 3
0
        public void DisconnectClient(Identity ident, bool sendKicked = true)
        {
            PlayerQuitEvent @event = new PlayerQuitEvent(ident.Owner.Player);
            var             user   = ident.GetUser();

            @event.QuitMessage = "<b>" + user.Name + "</b> disconnected.";

            byte index = GetUserIndex(ident);

            RemovePlayer(index);
            byte[] packet = ObjectSerializer.GetBytes(0, index);
            AnnounceToAll(EPacket.DISCONNECTED, packet, 0);
            if (sendKicked)
            {
                Send(ident, EPacket.KICKED, new byte[0], 0);
            }
            ((ServerMultiplayerProvider)Provider).RemoveClient(ident);

            EventManager.Instance.CallEvent(@event);
            if (string.IsNullOrEmpty(@event.QuitMessage))
            {
                return;
            }
            Chat.Instance.SendServerMessage(@event.QuitMessage);
        }
Esempio n. 4
0
        public void OnPlayerQuit(PlayerQuitEvent e)
        {
            var attribute = e.Player.GetAttribute <PlayerGameAttribute>();

            if (attribute == null)
            {
                return;
            }

            attribute.PlayerQuit(e);
        }
        private OTAPI.HookResult PreResetHandler(Terraria.RemoteClient remoteClient)
        {
            Debug.Assert(remoteClient != null);
            Debug.Assert(remoteClient.Id >= 0 && remoteClient.Id < Count);

            // Check if the client was active since this gets called when setting up `RemoteClient` as well.
            if (!remoteClient.IsActive)
            {
                return(OTAPI.HookResult.Continue);
            }

            var player = this[remoteClient.Id];
            var evt    = new PlayerQuitEvent(player);

            _events.Raise(evt, _log);
            return(OTAPI.HookResult.Continue);
        }
Esempio n. 6
0
        public void OnPlayerQuit(PlayerQuitEvent ev)
        {
            if (!Server.Players.Contains(ev.Player))
            {
                return;
            }

            if (ev.Player != null)
            {
                Log.Info($"Player {ev.Player.Name} Disconnected", ConsoleColor.Yellow);
            }
            else
            {
                Log.Info($"Connection {ev.Client.ConnectionId} Disconnected", ConsoleColor.Yellow);
            }

            if (ev.Player != null) // will be null if havent downloaded assets, need to fix this
            {
                ev.Player.Target = null;
                foreach (var targetingPlayer in ev.Player.BeingTargetedBy)
                {
                    targetingPlayer.Target = null;
                }
                ev.Player.BeingTargetedBy.Clear();
                Server.Map.UpdateEntityPosition(ev.Player, ev.Player.Position, null);
                Server.Players.Remove(ev.Player);
            }
            ev.Player = null;

            try
            {
                ev.Client.Stop();
            }
            catch (Exception e)
            {
                Log.Error("ERROR FINISHING SOCKET");
            }
        }
Esempio n. 7
0
 private void OnPlayerQuit(PlayerQuitEvent e)
 {
     logger.Info("{0} quit", e.Player);
     PlayersAtTable.Remove(e.Player);
     PlayersInCurrentPlay.Remove(e.Player);
 }
Esempio n. 8
0
    public override void Deserialize(NetworkReader reader)
    {
        int seed = reader.ReadInt32();

        BackgroundSelector.RoomType background =
            (BackgroundSelector.RoomType)reader.ReadInt32();
        DateTime time = Convert.ToDateTime(reader.ReadString());

        Game = new GameRecord(seed, background, time);

        Dictionary <int, PlayerProfile> players =
            new Dictionary <int, PlayerProfile> ();

        int count = reader.ReadInt32();

        for (int i = 0; i < count; i++)
        {
            PlayerProfile profile = reader.ReadMessage <PlayerProfileMessage>().Profile;
            players.Add(i, profile);
            Game.AddPlayer(profile);
        }

        for (int i = 0; i < count; i++)
        {
            int number = reader.ReadInt32();
            int score  = reader.ReadInt32();
            Game.UpdateScore(players[number], score);
        }

        count = reader.ReadInt32();
        for (int i = 0; i < count; i++)
        {
            PlayerEvent playerEvent = null;

            PlayerProfile profile = players[reader.ReadInt32()];
            int           frame   = reader.ReadInt32();

            short eventType = reader.ReadInt16();

            switch (eventType)
            {
            case _movementEvent:
                Vector3 position = reader.ReadVector3();
                playerEvent = new PlayerMovementEvent(profile, frame, position);
                break;

            case _droppedItemEvent:
                playerEvent = new PlayerDroppedItemEvent(profile, frame);
                break;

            case _dashStartedEvent:
                playerEvent = new PlayerDashStartedEvent(profile, frame);
                break;

            case _dashStoppedEvent:
                playerEvent = new PlayerDashStoppedEvent(profile, frame);
                break;

            case _quitEvent:
                playerEvent = new PlayerQuitEvent(profile, frame);
                break;
            }

            Game.AddEvent(playerEvent);
        }
    }
Esempio n. 9
0
        internal override void Receive(Identity id, byte[] packet, int size, int channel)
        {
            base.Receive(id, packet, size, channel);
            EPacket parsedPacket = (EPacket)packet[0];

            StripPacketByte(ref packet, ref size);

            if (parsedPacket.IsUpdate())
            {
                foreach (Channel ch in Receivers.Where(ch => ch.ID == channel))
                {
                    ch.Receive(id, packet, 0, size);
                }
                return;
            }

            if (id != ServerID)
            {
                return;
            }
            switch (parsedPacket)
            {
            case EPacket.WORKSHOP:
                //todo
                break;

            case EPacket.TICK:
            {
                var data = ObjectSerializer.GetBytes(0, Time.realtimeSinceStartup);
                Send(ServerID, EPacket.TIME, data, 0);
                break;
            }

            case EPacket.TIME:
            {
                object[] args = ObjectSerializer.GetObjects(0, 0, packet, typeof(float));
                LastNet   = Time.realtimeSinceStartup;
                OffsetNet = ((float)args[0]) + ((Time.realtimeSinceStartup - LastPing) / 2f);
                Lag(Time.realtimeSinceStartup - LastPing);
                break;
            }

            case EPacket.SHUTDOWN:
                Disconnect();
                break;

            case EPacket.CONNECTED:
            {
                {
                    Type[] argTypes =
                    {
                        //[0] id, [1] name, [2] group, [3] position, [4], angle, [5] channel
                        typeof(Identity), typeof(string), typeof(ulong), typeof(Vector3), typeof(Vector3),
                        typeof(int),      typeof(bool)
                    };

                    object[] args = ObjectSerializer.GetObjects(0, 0, packet, argTypes);
                    if (IsSinglePlayer)
                    {
                        return;
                    }
                    if (World.Loaded)
                    {
                        AddPlayer(Provider.Deserialilze((Identity)args[0]), (string)args[1], (ulong)args[2],
                                  (Vector3)args[3], (Vector3)args[4], (int)args[5], (bool)args[6]);
                    }
                    else
                    {
                        QueuePlayer(Provider.Deserialilze((Identity)args[0]), (string)args[1], (ulong)args[2],
                                    (Vector3)args[3], (Vector3)args[4], (int)args[5], (bool)args[6]);
                    }
                    break;
                }
            }

            case EPacket.VERIFY:
                LogUtils.Debug("Opening ticket");
                byte[] ticket = ((ClientMultiplayerProvider)Provider).OpenTicket();
                if (ticket == null)
                {
                    LogUtils.Debug("ticket equals null");
                    Disconnect();
                    break;
                }
                Send(ServerID, EPacket.AUTHENTICATE, ticket, ticket.Length, 0);
                break;

            case EPacket.DISCONNECTED:
            {
                //If singleplayer (local server) we will already do this at ServerConnection
                if (IsSinglePlayer)
                {
                    return;
                }
                object[] args  = ObjectSerializer.GetObjects(0, 0, packet, typeof(byte));
                var      index = (byte)args[0];

                var user = GetUser(index);

                PlayerQuitEvent @event = new PlayerQuitEvent(user.Player);
                EventManager.Instance.CallEvent(@event);

                RemovePlayer(index);
                break;
            }

            case EPacket.REJECTED:
            case EPacket.KICKED:
                Disconnect();
                break;

            case EPacket.ACCEPTED:
            {
                object[] args = ObjectSerializer.GetObjects(0, 0, packet, typeof(ulong), typeof(int));
                LogUtils.Debug("Setting MainPlayer channel to: " + (int)args[1]);
                ((ClientMultiplayerProvider)Provider).SetIdentity((ulong)args[0]);
                ((ClientMultiplayerProvider)Provider).AdvertiseGame(ServerID, _currentIp, _currentPort);
                ((ClientMultiplayerProvider)Provider).SetConnectInfo(_currentIp, _currentPort);
                IsFavoritedServer = ((ClientMultiplayerProvider)Provider).IsFavoritedServer(_currentIp, _currentPort);
                ((ClientMultiplayerProvider)Provider).FavoriteServer(_currentIp, _currentPort);
                break;
            }

            case EPacket.UPDATE_CHANNELS:
            {
                object[] args = ObjectSerializer.GetObjects(0, 0, packet, ChannelCount.GetType());
                ChannelCount = (int)args[0];
                break;
            }

            default:
                LogUtils.LogWarning("Couldn't handle packet: " + parsedPacket);
                break;
            }
        }
Esempio n. 10
0
 protected virtual void OnPlayerQuit(PlayerQuitEvent e, GameState state)
 {
 }
Esempio n. 11
0
 public void RemovePlayer(PlayerQuitEvent e)
 {
     if (Players.TryRemove(e.Player.ClientUuid, out OpenPlayer p))
     {
     }
 }
Esempio n. 12
0
 public void OnPlayerQuit(PlayerQuitEvent e)
 {
     e.Player.SetAttribute <ChatCompanion>(null);
 }
Esempio n. 13
0
 private void ExecuteEvent(PlayerQuitEvent playerQuitEvent)
 {
     eventEmitter.EmitPlayerQuitEvent(
         playerObjects[playerQuitEvent.Profile]
         );
 }