From 8abcf7d5aa9064f8eedf1b5762fa7ca5d96c40d6 Mon Sep 17 00:00:00 2001 From: Beny Date: Tue, 6 Oct 2020 19:00:40 -0400 Subject: [PATCH] Resolve "Having too many friends will make your account unusable" --- .../friends/RequestInitFriendsEvent.java | 3 +- .../handshake/SecureLoginEvent_BACKUP.java | 2 +- .../outgoing/friends/FriendsComposer.java | 86 ++++++++++--------- 3 files changed, 48 insertions(+), 43 deletions(-) diff --git a/src/main/java/com/eu/habbo/messages/incoming/friends/RequestInitFriendsEvent.java b/src/main/java/com/eu/habbo/messages/incoming/friends/RequestInitFriendsEvent.java index c77adfec..2ce35cf7 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/friends/RequestInitFriendsEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/friends/RequestInitFriendsEvent.java @@ -11,9 +11,8 @@ public class RequestInitFriendsEvent extends MessageHandler { @Override public void handle() throws Exception { ArrayList messages = new ArrayList<>(); -// messages.add(new MessengerInitComposer(this.client.getHabbo()).compose()); - messages.add(new FriendsComposer(this.client.getHabbo()).compose()); + messages.addAll(FriendsComposer.getMessagesForBuddyList(this.client.getHabbo().getMessenger().getFriends().values())); this.client.sendResponses(messages); } } diff --git a/src/main/java/com/eu/habbo/messages/incoming/handshake/SecureLoginEvent_BACKUP.java b/src/main/java/com/eu/habbo/messages/incoming/handshake/SecureLoginEvent_BACKUP.java index 881579ba..a74220f0 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/handshake/SecureLoginEvent_BACKUP.java +++ b/src/main/java/com/eu/habbo/messages/incoming/handshake/SecureLoginEvent_BACKUP.java @@ -52,7 +52,7 @@ public class SecureLoginEvent_BACKUP extends MessageHandler { messages.add(new UserPerksComposer(habbo).compose()); messages.add(new SessionRightsComposer().compose()); messages.add(new FavoriteRoomsCountComposer(habbo).compose()); - messages.add(new FriendsComposer(this.client.getHabbo()).compose()); + //messages.add(new FriendsComposer(this.client.getHabbo()).compose()); //messages.add(new NewUserIdentityComposer().compose()); //messages.add(new UserDataComposer(this.client.getHabbo()).compose()); //messages.add(new SessionRightsComposer().compose()); diff --git a/src/main/java/com/eu/habbo/messages/outgoing/friends/FriendsComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/friends/FriendsComposer.java index 0253f33f..2fd69a9a 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/friends/FriendsComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/friends/FriendsComposer.java @@ -1,24 +1,28 @@ package com.eu.habbo.messages.outgoing.friends; -import com.eu.habbo.habbohotel.messenger.Messenger; import com.eu.habbo.habbohotel.messenger.MessengerBuddy; -import com.eu.habbo.habbohotel.users.Habbo; import com.eu.habbo.habbohotel.users.HabboGender; import com.eu.habbo.messages.ServerMessage; import com.eu.habbo.messages.outgoing.MessageComposer; import com.eu.habbo.messages.outgoing.Outgoing; +import gnu.trove.set.hash.THashSet; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Map; +import java.util.ArrayList; +import java.util.Collection; public class FriendsComposer extends MessageComposer { private static final Logger LOGGER = LoggerFactory.getLogger(FriendsComposer.class); - private final Habbo habbo; + private final int totalPages; + private final int pageIndex; + private final Collection friends; - public FriendsComposer(Habbo habbo) { - this.habbo = habbo; + public FriendsComposer(int totalPages, int pageIndex, Collection friends) { + this.totalPages = totalPages; + this.pageIndex = pageIndex; + this.friends = friends; } @Override @@ -26,52 +30,54 @@ public class FriendsComposer extends MessageComposer { try { this.response.init(Outgoing.FriendsComposer); - //this.response.appendInt(300); - //this.response.appendInt(300); - //this.response.appendInt(3); //Club level - this.response.appendInt(this.habbo.hasPermission("acc_infinite_friends") ? Integer.MAX_VALUE : Messenger.MAXIMUM_FRIENDS); - this.response.appendInt(this.habbo.hasPermission("acc_infinite_friends") ? Integer.MAX_VALUE : Messenger.MAXIMUM_FRIENDS); - this.response.appendInt(this.habbo.getMessenger().getFriends().size()/* + (this.habbo.hasPermission("acc_staff_chat") ? 1 : 0)*/); + this.response.appendInt(this.totalPages); + this.response.appendInt(this.pageIndex); + this.response.appendInt(this.friends.size()); - for (Map.Entry row : this.habbo.getMessenger().getFriends().entrySet()) { - this.response.appendInt(row.getKey()); - this.response.appendString(row.getValue().getUsername()); - this.response.appendInt(row.getValue().getGender().equals(HabboGender.M) ? 0 : 1); - this.response.appendBoolean(row.getValue().getOnline() == 1); - this.response.appendBoolean(row.getValue().inRoom()); //IN ROOM - this.response.appendString(row.getValue().getOnline() == 1 ? row.getValue().getLook() : ""); + for (MessengerBuddy row : this.friends) { + this.response.appendInt(row.getId()); + this.response.appendString(row.getUsername()); + this.response.appendInt(row.getGender().equals(HabboGender.M) ? 0 : 1); + this.response.appendBoolean(row.getOnline() == 1); + this.response.appendBoolean(row.inRoom()); //IN ROOM + this.response.appendString(row.getOnline() == 1 ? row.getLook() : ""); this.response.appendInt(0); - this.response.appendString(row.getValue().getMotto()); + this.response.appendString(row.getMotto()); this.response.appendString(""); this.response.appendString(""); this.response.appendBoolean(false); //Offline messaging. this.response.appendBoolean(false); this.response.appendBoolean(false); - this.response.appendShort(row.getValue().getRelation()); + this.response.appendShort(row.getRelation()); } - - /*if(this.habbo.hasPermission("acc_staff_chat")) - { - this.response.appendInt(-1); - this.response.appendString("Staff Chat"); - this.response.appendInt(this.habbo.getHabboInfo().getGender().equals(HabboGender.M) ? 0 : 1); - this.response.appendBoolean(true); - this.response.appendBoolean(false); //IN ROOM - this.response.appendString("ADM"); - this.response.appendInt(0); - this.response.appendString(""); - this.response.appendString(""); - this.response.appendString(""); - this.response.appendBoolean(true); //Offline messaging. - this.response.appendBoolean(false); - this.response.appendBoolean(false); - this.response.appendShort(0); - }*/ - return this.response; } catch (Exception e) { LOGGER.error("Caught exception", e); } return null; } + + public static ArrayList getMessagesForBuddyList(Collection buddies) { + ArrayList messages = new ArrayList(); + THashSet friends = new THashSet(); + + int totalPages = (int)Math.ceil(buddies.size() / 750.0); + int page = 0; + + for(MessengerBuddy buddy : buddies) { + friends.add(buddy); + + if(friends.size() == 750) { + messages.add(new FriendsComposer(totalPages, page, friends).compose()); + friends.clear(); + page++; + } + } + + if(page == 0 || friends.size() > 0) { + messages.add(new FriendsComposer(totalPages, page, friends).compose()); + } + + return messages; + } } \ No newline at end of file