public override void OnDisconnect() { if (Server != null) { Program.MainForm.LogAppend($"Server disconnected: {Server.Name}"); Server.SetConnection(null); Server = null; } Pinger.Remove(this); }
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); }
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); }
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); } }