public override void OnDisconnect()
        {
            if (Server != null)
            {
                Program.MainForm.LogAppend($"Server disconnected: {Server.Name}");

                Server.SetConnection(null);

                Server = null;
            }
            Pinger.Remove(this);
        }
示例#2
0
        public override void OnDisconnect()
        {
            try
            {
                StartLogging();
                try
                {
                    if (crashLogTmp != null)
                    {
                        FileWriter.WriteLine(Path.Combine("ClientCrashes", base.IP + "-unknown_username.txt"),
                                             crashLogTmp);
                        crashLogTmp = null;
                    }
                }
                catch { }

                if (Player != null)
                {
                    Server.Instance.RemovePlayer(Player.SessionHash);
                    if (Player.LoggedOn)
                    {
                        Program.MainForm.ChangeLoad(false);

                        Player.Characters.Clear();

                        if (!IsCCing)
                        {
                            RedisBackend.Instance.RemovePlayerOnline(Player.ID);
                        }

                        Player.Socket = null;
                        Player        = null;
                    }
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
            }
            finally
            {
                EndLogging();
            }
            Pinger.Remove(this);
        }
示例#3
0
        public override void OnDisconnect()
        {
            try
            {
                StartLogging();
                if (Player != null)
                {
                    if (Loaded && Player.Character != null)
                    {
                        Program.MainForm.LogAppend($"{Player.Character.Name} disconnected!");

                        var chr = Player.Character;
                        var cc  = Player.IsCC;

                        Server.Instance.CharacterList.Remove(chr.ID);

                        chr.Save();

                        Server.Instance.CenterConnection.UnregisterCharacter(chr.ID, cc);

                        Program.MainForm.ChangeLoad(false);

                        if (!cc)
                        {
                            RedisBackend.Instance.RemovePlayerOnline(chr.UserID);
                        }

                        RedisBackend.Instance.RemovePlayerCCIsBeingProcessed(chr.ID);

                        Player.Character = null;
                    }
                    Player.Socket = null;
                    Server.Instance.RemovePlayer(Player.SessionHash);
                }
            }
            catch (Exception ex)
            {
                ////Console.WriteLine(ex.ToString());
            }
            finally
            {
                EndLogging();
            }
            Pinger.Remove(this);
        }
示例#4
0
        public override void OnDisconnect()
        {
            try
            {
                StartLogging();

                if (Loaded && Player.Character != null)
                {
                    var chr       = Player.Character;
                    var cc        = Player.IsCC;
                    var migrating = Server.Instance.InMigration && !Server.Instance.IsNewServerInMigration;

                    Program.MainForm.LogAppend($"{chr.Name} disconnected. CC? {cc} Migrating? {migrating}");

                    try
                    {
                        if (chr.DoorMapId != Constants.InvalidMap)
                        {
                            DataProvider.Maps[chr.DoorMapId].DoorPool.TryRemoveDoor(chr.ID);
                        }

                        if (chr.MapChair != -1 && !migrating)
                        {
                            chr.Field.UsedSeats.Remove(chr.MapChair);
                            chr.MapChair = -1;
                            MapPacket.SendCharacterSit(chr, -1);
                        }
                    }
                    catch (Exception ex)
                    {
                        Program.MainForm.LogAppend(ex.ToString());
                    }

                    try
                    {
                        chr.CleanupInstances();
                    }
                    catch (Exception ex)
                    {
                        Program.MainForm.LogAppend(ex.ToString());
                    }

                    try
                    {
                        chr.Field.LeavePlayer(chr);
                        chr.Summons.RemoveAllSummons();
                    }
                    catch (Exception ex)
                    {
                        Program.MainForm.LogAppend(ex.ToString());
                    }

                    try
                    {
                        chr.FlushDamageLog(true);
                    }
                    catch (Exception ex)
                    {
                        Program.MainForm.LogAppend(ex.ToString());
                    }

                    Server.Instance.CharacterList.Remove(chr.ID);
                    Server.Instance.StaffCharacters.Remove(chr);

                    chr.Save();

                    Server.Instance.CenterConnection?.UnregisterCharacter(chr.ID, cc);

                    Program.MainForm.ChangeLoad(false);

                    if (!cc)
                    {
                        RedisBackend.Instance.RemovePlayerOnline(chr.UserID);
                    }
                    RedisBackend.Instance.RemovePlayerCCIsBeingProcessed(chr.ID);
                    Player.Character = null;
                }

                Player.Socket = null;
                Server.Instance.RemovePlayer(Player.SessionHash);
            }
            catch (Exception ex)
            {
                Program.MainForm.LogAppend(ex.ToString());
            }
            finally
            {
                EndLogging();
                Pinger.Remove(this);
            }
        }