void GroupManager_connectionChanged(ConnectionManager.ConnectionInformation information, ConnectionManager.ConnectionState state) { // Called when user connection is changed (AKA disconnect) if (state != ConnectionManager.ConnectionState.closed) return; GameClient client = FirewindEnvironment.GetGame().GetClientManager().GetClient((uint)information.getConnectionID()); Habbo user = client.GetHabbo(); if (user == null || user.Groups.Count == 0) return; lock (_groupDeleteQueue.SyncRoot) { foreach (int groupID in user.Groups) { if (!_groupReferences.ContainsKey(groupID)) continue; if (--_groupReferences[groupID] <= 0) // No more references, we can delete this group from cache { _groupReferences.Remove(groupID); if (!Groups.ContainsKey(groupID)) continue; _groupDeleteQueue.Enqueue(groupID); } } } }