public void Disconnect(bool ForcedDisconnect) { if (LoggingOut) { return; } LoggingOut = true; try { #region WebSocket PlusEnvironment.GetGame().GetWebEventManager().CloseSocketByGameClient(((this.GetHabbo() == null) ? 0 : this.GetHabbo().Id)); if (GetRoleplay() != null) { foreach (WebSocketChatRoom ChatRoom in GetRoleplay().ChatRooms.Values) { if (ChatRoom == null) { continue; } WebSocketChatManager.Disconnect(this, ChatRoom.ChatName, false, null); } } #endregion if (GetRoomUser() != null && !ForcedDisconnect) { RoleplayManager.Chat(this, GetHabbo().Username + " irá sair em 10 segundos.", 1); GetRoomUser().ApplyEffect(95); if (GetHabbo() != null && GetHabbo().CurrentRoom != null) { GetHabbo().CurrentRoom.SendMessage(new SleepComposer(GetRoomUser(), true)); } GetRoomUser().CanWalk = false; GetRoomUser().ClearMovement(true); } if (GetRoleplay() != null) { if (GetRoleplay().UserDataHandler != null) { GetRoleplay().UserDataHandler.SaveFarmingData(); GetRoleplay().UserDataHandler.SaveCooldownData(); GetRoleplay().UserDataHandler.SaveData(); GetRoleplay().UserDataHandler = null; } } if (GetHabbo() != null) { using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor()) dbClient.RunQuery(GetHabbo().GetQueryString); } if (!ForcedDisconnect) { new Thread(() => { Thread.Sleep(8000); if (GetRoleplay() != null) { GetRoleplay().UserDataHandler = new UserDataHandler(this, GetRoleplay()); GetRoleplay().UserDataHandler.SaveFarmingData(); GetRoleplay().UserDataHandler.SaveCooldownData(); GetRoleplay().UserDataHandler.SaveData(); GetRoleplay().UserDataHandler = null; } if (GetHabbo() != null) { using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor()) dbClient.RunQuery(GetHabbo().GetQueryString); } EventManager.TriggerEvent("OnDisconnect", this); Thread.Sleep(1000); if (GetRoomUser() != null) { GetRoomUser().ApplyEffect(108); } Thread.Sleep(1000); if (GetHabbo() != null) { using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor()) { dbClient.RunQuery(GetHabbo().GetQueryString); } GetHabbo().OnDisconnect(); } if (!_disconnected) { if (_connection != null) { _connection.Dispose(); } _disconnected = true; } }).Start(); } else { EventManager.TriggerEvent("OnDisconnect", this); if (GetHabbo() != null) { using (IQueryAdapter dbClient = PlusEnvironment.GetDatabaseManager().GetQueryReactor()) { dbClient.RunQuery(GetHabbo().GetQueryString); } GetHabbo().OnDisconnect(); } if (!_disconnected) { if (_connection != null) { _connection.Dispose(); } _disconnected = true; } } } catch (Exception e) { Logging.LogException(e.ToString()); } }