From ba118eb625fb57e94f891add3f6e92d4d7c9600e Mon Sep 17 00:00:00 2001 From: KrewsOrg Date: Mon, 29 Apr 2019 05:13:02 +0100 Subject: [PATCH] Updated Group Forums. Credits to Beny. --- .../com/eu/habbo/habbohotel/guilds/Guild.java | 2 +- .../habbo/habbohotel/guilds/GuildManager.java | 512 ++++-------- .../habbo/habbohotel/guilds/GuildMember.java | 10 +- .../habbohotel/guilds/forums/GuildForum.java | 204 +++-- .../guilds/forums/GuildForumComment.java | 146 ++-- .../guilds/forums/GuildForumManager.java | 150 +++- .../guilds/forums/GuildForumThread.java | 272 +++---- .../com/eu/habbo/habbohotel/users/Habbo.java | 14 - .../com/eu/habbo/messages/PacketManager.java | 26 +- .../eu/habbo/messages/incoming/Incoming.java | 19 +- .../guilds/GuildAcceptMembershipEvent.java | 2 + .../guilds/GuildChangeBadgeEvent.java | 12 +- .../guilds/GuildDeclineMembershipEvent.java | 2 +- .../incoming/guilds/RequestGuildBuyEvent.java | 11 +- .../guilds/RequestGuildBuyRoomsEvent.java | 2 +- .../guilds/RequestGuildMembersEvent.java | 4 +- .../guilds/RequestOwnGuildsEvent.java | 2 +- .../guilds/forums/GuildForumDataEvent.java | 10 +- .../guilds/forums/GuildForumListEvent.java | 13 +- .../GuildForumModerateMessageEvent.java | 59 +- .../forums/GuildForumModerateThreadEvent.java | 44 +- .../forums/GuildForumPostThreadEvent.java | 74 +- .../forums/GuildForumThreadUpdateEvent.java | 17 + .../guilds/forums/GuildForumThreadsEvent.java | 15 +- .../GuildForumThreadsMessagesEvent.java | 32 +- .../forums/GuildForumUpdateSettingsEvent.java | 25 +- .../eu/habbo/messages/outgoing/Outgoing.java | 750 +++++++++--------- .../GuildConfirmRemoveMemberComposer.java | 4 +- .../guilds/GuildEditFailComposer.java | 2 +- .../GuildFavoriteRoomUserUpdateComposer.java | 4 +- .../guilds/GuildFurniWidgetComposer.java | 2 +- .../outgoing/guilds/GuildInfoComposer.java | 8 +- .../outgoing/guilds/GuildMembersComposer.java | 10 +- .../GuildMembershipRequestedComposer.java | 37 - .../guilds/RemoveGuildFromRoomComposer.java | 2 +- .../guilds/forums/ForumsTestComposer.java | 15 - .../forums/GuildForumCommentsComposer.java | 2 + .../guilds/forums/GuildForumDataComposer.java | 64 +- .../guilds/forums/GuildForumListComposer.java | 28 +- ...r6.java => PostUpdateMessageComposer.java} | 8 +- .../forums/ThreadUpdatedMessageComposer.java | 73 ++ .../forums/UnknownGuildForumComposer7.java | 25 - 42 files changed, 1401 insertions(+), 1312 deletions(-) create mode 100644 src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadUpdateEvent.java delete mode 100644 src/main/java/com/eu/habbo/messages/outgoing/guilds/GuildMembershipRequestedComposer.java delete mode 100644 src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/ForumsTestComposer.java rename src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/{UnknownGuildForumComposer6.java => PostUpdateMessageComposer.java} (77%) create mode 100644 src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/ThreadUpdatedMessageComposer.java delete mode 100644 src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/UnknownGuildForumComposer7.java diff --git a/src/main/java/com/eu/habbo/habbohotel/guilds/Guild.java b/src/main/java/com/eu/habbo/habbohotel/guilds/Guild.java index 7b4c40f6..c4997f48 100644 --- a/src/main/java/com/eu/habbo/habbohotel/guilds/Guild.java +++ b/src/main/java/com/eu/habbo/habbohotel/guilds/Guild.java @@ -246,7 +246,7 @@ public class Guild implements Runnable public int getDateCreated() { - return this.dateCreated; + return dateCreated; } public int getMemberCount() diff --git a/src/main/java/com/eu/habbo/habbohotel/guilds/GuildManager.java b/src/main/java/com/eu/habbo/habbohotel/guilds/GuildManager.java index c4e23348..79df8f7b 100644 --- a/src/main/java/com/eu/habbo/habbohotel/guilds/GuildManager.java +++ b/src/main/java/com/eu/habbo/habbohotel/guilds/GuildManager.java @@ -5,9 +5,7 @@ import com.eu.habbo.habbohotel.gameclients.GameClient; import com.eu.habbo.habbohotel.items.interactions.InteractionGuildFurni; import com.eu.habbo.habbohotel.rooms.Room; import com.eu.habbo.habbohotel.users.Habbo; -import com.eu.habbo.messages.ServerMessage; import com.eu.habbo.messages.outgoing.guilds.GuildJoinErrorComposer; -import com.eu.habbo.messages.outgoing.guilds.GuildMembershipRequestedComposer; import gnu.trove.TCollections; import gnu.trove.iterator.TIntObjectIterator; import gnu.trove.map.TIntObjectMap; @@ -21,58 +19,47 @@ import java.util.Collection; import java.util.List; import java.util.NoSuchElementException; -public class GuildManager -{ +public class GuildManager { private final THashMap> guildParts; private final TIntObjectMap guilds; - public GuildManager() - { + public GuildManager() { long millis = System.currentTimeMillis(); - this.guildParts = new THashMap<>(); - this.guilds = TCollections.synchronizedMap(new TIntObjectHashMap<>()); + this.guildParts = new THashMap>(); + this.guilds = TCollections.synchronizedMap(new TIntObjectHashMap()); this.loadGuildParts(); Emulator.getLogging().logStart("Guild Manager -> Loaded! (" + (System.currentTimeMillis() - millis) + " MS)"); } - public void loadGuildParts() - { + public void loadGuildParts() { this.guildParts.clear(); - for (GuildPartType t : GuildPartType.values()) - { - this.guildParts.put(t, new THashMap<>()); + for (GuildPartType t : GuildPartType.values()) { + this.guildParts.put(t, new THashMap()); } try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); Statement statement = connection.createStatement(); - ResultSet set = statement.executeQuery("SELECT * FROM guilds_elements")) - { - while (set.next()) - { + ResultSet set = statement.executeQuery("SELECT * FROM guilds_elements")) { + while (set.next()) { this.guildParts.get(GuildPartType.valueOf(set.getString("type").toUpperCase())).put(set.getInt("id"), new GuildPart(set)); } - } - catch (SQLException e) - { + } catch (SQLException e) { Emulator.getLogging().logSQLException(e); } } - public Guild createGuild(Habbo habbo, int roomId, String roomName, String name, String description, String badge, int colorOne, int colorTwo) - { + public Guild createGuild(Habbo habbo, int roomId, String roomName, String name, String description, String badge, int colorOne, int colorTwo) { Guild guild = new Guild(habbo.getHabboInfo().getId(), habbo.getHabboInfo().getUsername(), roomId, roomName, name, description, colorOne, colorTwo, badge); - try (Connection connection = Emulator.getDatabase().getDataSource().getConnection()) - { - try (PreparedStatement statement = connection.prepareStatement("INSERT INTO guilds (name, description, room_id, user_id, color_one, color_two, badge, date_created) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS)) - { + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO guilds (name, description, room_id, user_id, color_one, color_two, badge, date_created) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS)) { statement.setString(1, name); statement.setString(2, description); statement.setInt(3, roomId); @@ -83,35 +70,28 @@ public class GuildManager statement.setInt(8, Emulator.getIntUnixTimestamp()); statement.execute(); - try (ResultSet set = statement.getGeneratedKeys()) - { - if (set.next()) - { + try (ResultSet set = statement.getGeneratedKeys()) { + if (set.next()) { guild.setId(set.getInt(1)); } } } - try (PreparedStatement statement = connection.prepareStatement("INSERT INTO guilds_members (guild_id, user_id, level_id, member_since) VALUES (?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS)) - { + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO guilds_members (guild_id, user_id, level_id, member_since) VALUES (?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS)) { statement.setInt(1, guild.getId()); statement.setInt(2, habbo.getHabboInfo().getId()); statement.setInt(3, 0); statement.setInt(4, Emulator.getIntUnixTimestamp()); statement.execute(); - try (ResultSet set = statement.getGeneratedKeys()) - { - if (set.next()) - { + try (ResultSet set = statement.getGeneratedKeys()) { + if (set.next()) { guild.increaseMemberCount(); //guild.addMember(new GuildMember(habbo.getHabboInfo().getId(), habbo.getHabboInfo().getUsername(), habbo.getHabboInfo().getLook(), Emulator.getIntUnixTimestamp(), 2)); } } } - } - catch (SQLException e) - { + } catch (SQLException e) { Emulator.getLogging().logSQLException(e); } @@ -121,107 +101,83 @@ public class GuildManager } - public void deleteGuild(Guild guild) - { + public void deleteGuild(Guild guild) { THashSet members = this.getGuildMembers(guild); - for (GuildMember member : members) - { + for (GuildMember member : members) { Habbo habbo = Emulator.getGameEnvironment().getHabboManager().getHabbo(member.getUserId()); - if (habbo != null) - { + if (habbo != null) { habbo.getHabboStats().removeGuild(guild.getId()); - if (habbo.getHabboStats().guild == guild.getId()) - { + if (habbo.getHabboStats().guild == guild.getId()) { habbo.getHabboStats().guild = 0; } } } - try (Connection connection = Emulator.getDatabase().getDataSource().getConnection()) - { - try (PreparedStatement deleteFavourite = connection.prepareStatement("UPDATE users_settings SET guild_id = ? WHERE guild_id = ?")) - { + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection()) { + try (PreparedStatement deleteFavourite = connection.prepareStatement("UPDATE users_settings SET guild_id = ? WHERE guild_id = ?")) { deleteFavourite.setInt(1, 0); deleteFavourite.setInt(2, guild.getId()); deleteFavourite.execute(); } - try (PreparedStatement statement = connection.prepareStatement("DELETE FROM guilds_members WHERE guild_id = ?")) - { + try (PreparedStatement statement = connection.prepareStatement("DELETE FROM guilds_members WHERE guild_id = ?")) { statement.setInt(1, guild.getId()); statement.execute(); } - try (PreparedStatement statement = connection.prepareStatement("DELETE FROM guilds WHERE id = ?")) - { + try (PreparedStatement statement = connection.prepareStatement("DELETE FROM guilds WHERE id = ?")) { statement.setInt(1, guild.getId()); statement.execute(); } Room room = Emulator.getGameEnvironment().getRoomManager().getRoom(guild.getRoomId()); - if (room != null) - { + if (room != null) { room.setGuild(0); } - } - catch (SQLException e) - { + } catch (SQLException e) { Emulator.getLogging().logSQLException(e); } } - public void clearInactiveGuilds() - { - List toRemove = new ArrayList<>(); + public void clearInactiveGuilds() { + List toRemove = new ArrayList(); TIntObjectIterator guilds = this.guilds.iterator(); - for (int i = this.guilds.size(); i-- > 0; ) - { - try - { + for (int i = this.guilds.size(); i-- > 0; ) { + try { guilds.advance(); - } - catch (NoSuchElementException e) - { + } catch (NoSuchElementException e) { break; } - if (guilds.value().lastRequested < Emulator.getIntUnixTimestamp() - 300) - { + if (guilds.value().lastRequested < Emulator.getIntUnixTimestamp() - 300) { toRemove.add(guilds.value().getId()); } } - for (Integer i : toRemove) - { + for (Integer i : toRemove) { this.guilds.remove(i); } } - public void joinGuild(Guild guild, GameClient client, int userId, boolean acceptRequest) - { + public void joinGuild(Guild guild, GameClient client, int userId, boolean acceptRequest) { boolean error = false; - try (Connection connection = Emulator.getDatabase().getDataSource().getConnection()) - { - try(PreparedStatement statement = connection.prepareStatement("SELECT COUNT(id) as total FROM guilds_members WHERE user_id = ?")) - { + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection()) { + try (PreparedStatement statement = connection.prepareStatement("SELECT COUNT(id) as total FROM guilds_members WHERE user_id = ?")) { if (userId == 0) statement.setInt(1, client.getHabbo().getHabboInfo().getId()); else statement.setInt(1, userId); - try (ResultSet set = statement.executeQuery()) - { - if (set.next()) - { - if (set.getInt(1) >= 100) - { + try (ResultSet set = statement.executeQuery()) { + if (set.next()) { + if (set.getInt(1) >= 100) { //TODO Add non acceptRequest errors. See Outgoing.GroupEditFailComposer if (userId == 0) client.sendResponse(new GuildJoinErrorComposer(GuildJoinErrorComposer.GROUP_LIMIT_EXCEED)); @@ -234,17 +190,12 @@ public class GuildManager } } - if(!error) - { - try (PreparedStatement statement = connection.prepareStatement("SELECT COUNT(id) as total FROM guilds_members WHERE guild_id = ? AND level_id < 3")) - { + if (!error) { + try (PreparedStatement statement = connection.prepareStatement("SELECT COUNT(id) as total FROM guilds_members WHERE guild_id = ? AND level_id < 3")) { statement.setInt(1, guild.getId()); - try (ResultSet set = statement.executeQuery()) - { - if (set.next()) - { - if (set.getInt(1) >= 50000) - { + try (ResultSet set = statement.executeQuery()) { + if (set.next()) { + if (set.getInt(1) >= 50000) { client.sendResponse(new GuildJoinErrorComposer(GuildJoinErrorComposer.GROUP_FULL)); error = true; } @@ -252,19 +203,13 @@ public class GuildManager } } - if (userId == 0 && !error) - { - if (guild.getState() == GuildState.LOCKED) - { - try (PreparedStatement statement = connection.prepareStatement("SELECT COUNT(id) as total FROM guilds_members WHERE guild_id = ? AND level_id = 3")) - { + if (userId == 0 && !error) { + if (guild.getState() == GuildState.LOCKED) { + try (PreparedStatement statement = connection.prepareStatement("SELECT COUNT(id) as total FROM guilds_members WHERE guild_id = ? AND level_id = 3")) { statement.setInt(1, guild.getId()); - try (ResultSet set = statement.executeQuery()) - { - if (set.next()) - { - if (set.getInt(1) >= 100) - { + try (ResultSet set = statement.executeQuery()) { + if (set.next()) { + if (set.getInt(1) >= 100) { client.sendResponse(new GuildJoinErrorComposer(GuildJoinErrorComposer.GROUP_NOT_ACCEPT_REQUESTS)); error = true; } @@ -272,18 +217,13 @@ public class GuildManager } } - if(!error) - { - try (PreparedStatement statement = connection.prepareStatement("SELECT COUNT(id) as total FROM guilds_members WHERE guild_id = ? AND user_id = ? LIMIT 1")) - { + if (!error) { + try (PreparedStatement statement = connection.prepareStatement("SELECT COUNT(id) as total FROM guilds_members WHERE guild_id = ? AND user_id = ? LIMIT 1")) { statement.setInt(1, guild.getId()); statement.setInt(2, client.getHabbo().getHabboInfo().getId()); - try (ResultSet set = statement.executeQuery()) - { - if (set.next()) - { - if (set.getInt(1) >= 1) - { + try (ResultSet set = statement.executeQuery()) { + if (set.next()) { + if (set.getInt(1) >= 1) { error = true; } } @@ -292,10 +232,8 @@ public class GuildManager } } - if(!error) - { - try (PreparedStatement statement = connection.prepareStatement("INSERT INTO guilds_members (guild_id, user_id, member_since, level_id) VALUES (?, ?, ?, ?)")) - { + if (!error) { + try (PreparedStatement statement = connection.prepareStatement("INSERT INTO guilds_members (guild_id, user_id, member_since, level_id) VALUES (?, ?, ?, ?)")) { statement.setInt(1, guild.getId()); statement.setInt(2, client.getHabbo().getHabboInfo().getId()); statement.setInt(3, Emulator.getIntUnixTimestamp()); @@ -303,11 +241,8 @@ public class GuildManager statement.execute(); } } - } - else if(!error) - { - try (PreparedStatement statement = connection.prepareStatement("UPDATE guilds_members SET level_id = ?, member_since = ? WHERE user_id = ? AND guild_id = ?")) - { + } else if (!error) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE guilds_members SET level_id = ?, member_since = ? WHERE user_id = ? AND guild_id = ?")) { statement.setInt(1, GuildRank.MEMBER.type); statement.setInt(2, Emulator.getIntUnixTimestamp()); statement.setInt(3, userId); @@ -316,128 +251,92 @@ public class GuildManager } } - if(userId == 0 && !error) - { + if (userId == 0 && !error) { if (guild.getState() == GuildState.LOCKED) - { guild.increaseRequestCount(); - ServerMessage membershipRequestMessage = new GuildMembershipRequestedComposer(guild.getId(), client.getHabbo().getHabboInfo().getId(), client.getHabbo().getHabboInfo().getUsername(), client.getHabbo().getHabboInfo().getLook(), client.getHabbo().getHabboInfo().getGender()).compose(); - for (GuildMember member : this.getOnlyAdmins(guild).values()) - { - Habbo habbo = Emulator.getGameEnvironment().getHabboManager().getHabbo(member.getUserId()); - if (habbo != null) - { - habbo.getClient().sendResponse(membershipRequestMessage); - } - } - } - else - { + else { guild.increaseMemberCount(); client.getHabbo().getHabboStats().addGuild(guild.getId()); } } } - } - catch (SQLException e) - { + } catch (SQLException e) { Emulator.getLogging().logSQLException(e); } } - public void setAdmin(Guild guild, int userId) - { - try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("UPDATE guilds_members SET level_id = ? WHERE user_id = ? AND guild_id = ? LIMIT 1")) - { + public void setAdmin(Guild guild, int userId) { + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("UPDATE guilds_members SET level_id = ? WHERE user_id = ? AND guild_id = ? LIMIT 1")) { statement.setInt(1, 1); statement.setInt(2, userId); statement.setInt(3, guild.getId()); statement.execute(); - } - catch (SQLException e) - { + } catch (SQLException e) { Emulator.getLogging().logSQLException(e); } } - public void removeAdmin(Guild guild, int userId) - { - if(guild.getOwnerId() == userId) + public void removeAdmin(Guild guild, int userId) { + if (guild.getOwnerId() == userId) return; - try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("UPDATE guilds_members SET level_id = ? WHERE user_id = ? AND guild_id = ? LIMIT 1")) - { + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("UPDATE guilds_members SET level_id = ? WHERE user_id = ? AND guild_id = ? LIMIT 1")) { statement.setInt(1, 2); statement.setInt(2, userId); statement.setInt(3, guild.getId()); statement.execute(); - } - catch (SQLException e) - { + } catch (SQLException e) { Emulator.getLogging().logSQLException(e); } } - public void removeMember(Guild guild, int userId) - { - if(guild.getOwnerId() == userId) + public void removeMember(Guild guild, int userId) { + if (guild.getOwnerId() == userId) return; Habbo habbo = Emulator.getGameEnvironment().getHabboManager().getHabbo(userId); - if(habbo != null && habbo.getHabboStats().guild == guild.getId()) - { + if (habbo != null && habbo.getHabboStats().guild == guild.getId()) { habbo.getHabboStats().removeGuild(guild.getId()); habbo.getHabboStats().guild = 0; habbo.getHabboStats().run(); } - try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("DELETE FROM guilds_members WHERE user_id = ? AND guild_id = ? LIMIT 1")) - { + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("DELETE FROM guilds_members WHERE user_id = ? AND guild_id = ? LIMIT 1")) { statement.setInt(1, userId); statement.setInt(2, guild.getId()); statement.execute(); - } - catch (SQLException e) - { + } catch (SQLException e) { Emulator.getLogging().logSQLException(e); } } - public void addGuild(Guild guild) - { + public void addGuild(Guild guild) { guild.lastRequested = Emulator.getIntUnixTimestamp(); this.guilds.put(guild.getId(), guild); } - public GuildMember getGuildMember(Guild guild, Habbo habbo) - { - return this.getGuildMember(guild.getId(), habbo.getHabboInfo().getId()); + public GuildMember getGuildMember(Guild guild, Habbo habbo) { + return getGuildMember(guild.getId(), habbo.getHabboInfo().getId()); } - public GuildMember getGuildMember(int guildId, int habboId) - { + public GuildMember getGuildMember(int guildId, int habboId) { GuildMember member = null; - try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT users.username, users.look, guilds_members.* FROM guilds_members INNER JOIN users ON guilds_members.user_id = users.id WHERE guilds_members.guild_id = ? AND guilds_members.user_id = ? LIMIT 1")) - { + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT users.username, users.look, guilds_members.* FROM guilds_members INNER JOIN users ON guilds_members.user_id = users.id WHERE guilds_members.guild_id = ? AND guilds_members.user_id = ? LIMIT 1")) { statement.setInt(1, guildId); statement.setInt(2, habboId); - try (ResultSet set = statement.executeQuery()) - { - if (set.next()) - { + try (ResultSet set = statement.executeQuery()) { + if (set.next()) { member = new GuildMember(set); } } - } - catch (SQLException e) - { + } catch (SQLException e) { Emulator.getLogging().logSQLException(e); } @@ -445,29 +344,22 @@ public class GuildManager } - public THashSet getGuildMembers(int guildId) - { + public THashSet getGuildMembers(int guildId) { return this.getGuildMembers(this.getGuild(guildId)); } - THashSet getGuildMembers(Guild guild) - { - THashSet guildMembers = new THashSet<>(); + THashSet getGuildMembers(Guild guild) { + THashSet guildMembers = new THashSet(); - try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT users.username, users.look, guilds_members.* FROM guilds_members INNER JOIN users ON guilds_members.user_id = users.id WHERE guilds_members.guild_id = ?")) - { + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT users.username, users.look, guilds_members.* FROM guilds_members INNER JOIN users ON guilds_members.user_id = users.id WHERE guilds_members.guild_id = ?")) { statement.setInt(1, guild.getId()); - try (ResultSet set = statement.executeQuery()) - { - while (set.next()) - { + try (ResultSet set = statement.executeQuery()) { + while (set.next()) { guildMembers.add(new GuildMember(set)); } } - } - catch (SQLException e) - { + } catch (SQLException e) { Emulator.getLogging().logSQLException(e); } @@ -475,261 +367,209 @@ public class GuildManager } - public ArrayList getGuildMembers(Guild guild, int page, int levelId, String query) - { - ArrayList guildMembers = new ArrayList<>(); + public ArrayList getGuildMembers(Guild guild, int page, int levelId, String query) { + ArrayList guildMembers = new ArrayList(); - try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT users.username, users.look, guilds_members.* FROM guilds_members INNER JOIN users ON guilds_members.user_id = users.id WHERE guilds_members.guild_id = ? " + (this.rankQuery(levelId)) + " AND users.username LIKE ? ORDER BY level_id, member_since ASC LIMIT ?, ?")) - { + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT users.username, users.look, guilds_members.* FROM guilds_members INNER JOIN users ON guilds_members.user_id = users.id WHERE guilds_members.guild_id = ? " + (rankQuery(levelId)) + " AND users.username LIKE ? ORDER BY level_id, member_since ASC LIMIT ?, ?")) { statement.setInt(1, guild.getId()); statement.setString(2, "%" + query + "%"); statement.setInt(3, page * 14); statement.setInt(4, (page * 14) + 14); - try (ResultSet set = statement.executeQuery()) - { - while (set.next()) - { + try (ResultSet set = statement.executeQuery()) { + while (set.next()) { guildMembers.add(new GuildMember(set)); } } - } - catch (SQLException e) - { + } catch (SQLException e) { Emulator.getLogging().logSQLException(e); } return guildMembers; } - public int getGuildMembersCount(Guild guild, int levelId, String query) - { - int rows = 0; - try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT COUNT(*) as row_count FROM guilds_members INNER JOIN users ON guilds_members.user_id = users.id WHERE guilds_members.guild_id = ? " + (this.rankQuery(levelId)) + " AND users.username LIKE ? ORDER BY level_id, member_since")) - { + + public THashMap getOnlyAdmins(Guild guild) { + THashMap guildAdmins = new THashMap(); + + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT users.username, users.look, guilds_members.* FROM guilds_members INNER JOIN users ON guilds_members.user_id = users.id WHERE guilds_members.guild_id = ? " + (rankQuery(1)))) { statement.setInt(1, guild.getId()); - statement.setString(2, "%" + query + "%"); - - try (ResultSet set = statement.executeQuery()) - { - if (set.next()) - { - rows = set.getInt("row_count"); - } - } - } - catch (SQLException e) - { - Emulator.getLogging().logSQLException(e); - } - - return rows; - } - - - public THashMap getOnlyAdmins(Guild guild) - { - THashMap guildAdmins = new THashMap<>(); - - try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT users.username, users.look, guilds_members.* FROM guilds_members INNER JOIN users ON guilds_members.user_id = users.id WHERE guilds_members.guild_id = ? " + (this.rankQuery(1)))) - { - statement.setInt(1, guild.getId()); - try (ResultSet set = statement.executeQuery()) - { - while (set.next()) - { + try (ResultSet set = statement.executeQuery()) { + while (set.next()) { guildAdmins.put(set.getInt("user_id"), new GuildMember(set)); } } - } - catch (SQLException e) - { + } catch (SQLException e) { Emulator.getLogging().logSQLException(e); } return guildAdmins; } - private String rankQuery(int level) - { - switch(level) - { - case 2: return "AND guilds_members.level_id = 3"; - case 1: return "AND (guilds_members.level_id = 0 OR guilds_members.level_id = 1)"; - default: return "AND guilds_members.level_id >= 0 AND guilds_members.level_id <= 2"; + private String rankQuery(int level) { + switch (level) { + case 2: + return "AND guilds_members.level_id = 3"; + case 1: + return "AND (guilds_members.level_id = 0 OR guilds_members.level_id = 1)"; + default: + return "AND guilds_members.level_id >= 0 AND guilds_members.level_id <= 2"; } } - public Guild getGuild(int guildId) - { + public Guild getGuild(int guildId) { Guild g = this.guilds.get(guildId); - if(g == null) - { - try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT users.username, rooms.name as room_name, guilds.* FROM guilds INNER JOIN users ON guilds.user_id = users.id INNER JOIN rooms ON rooms.id = guilds.room_id WHERE guilds.id = ? LIMIT 1")) - { + if (g == null) { + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT users.username, rooms.name as room_name, guilds.* FROM guilds INNER JOIN users ON guilds.user_id = users.id INNER JOIN rooms ON rooms.id = guilds.room_id WHERE guilds.id = ? LIMIT 1")) { statement.setInt(1, guildId); - try (ResultSet set = statement.executeQuery()) - { - if (set.next()) - { + try (ResultSet set = statement.executeQuery()) { + if (set.next()) { g = new Guild(set); } } - if(g != null) + if (g != null) g.loadMemberCount(); - } - catch (SQLException e) - { + } catch (SQLException e) { Emulator.getLogging().logSQLException(e); } } - if(g != null) - { + if (g != null) { g.lastRequested = Emulator.getIntUnixTimestamp(); - if(!this.guilds.containsKey(guildId)) + if (!this.guilds.containsKey(guildId)) this.guilds.put(guildId, g); } return g; } - public List getGuilds(int userId) - { - List guilds = new ArrayList<>(); + public List getGuilds(int userId) { + List guilds = new ArrayList(); - try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT guild_id FROM guilds_members WHERE user_id = ? AND level_id <= 2 ORDER BY member_since ASC")) - { + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT guild_id FROM guilds_members WHERE user_id = ? AND level_id <= 2 ORDER BY member_since ASC")) { statement.setInt(1, userId); - try (ResultSet set = statement.executeQuery()) - { - while (set.next()) - { - Guild guild = this.getGuild(set.getInt("guild_id")); + try (ResultSet set = statement.executeQuery()) { + while (set.next()) { + Guild guild = getGuild(set.getInt("guild_id")); - if (guild != null) - { + if (guild != null) { guilds.add(guild); } } } - } - catch (SQLException e) - { + } catch (SQLException e) { Emulator.getLogging().logSQLException(e); } return guilds; } - public boolean symbolColor(int colorId) - { - for(GuildPart part : this.getSymbolColors()) - { - if(part.id == colorId) + public List getAllGuilds() { + List guilds = new ArrayList(); + + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT id FROM guilds ORDER BY id DESC LIMIT 20")) { + try (ResultSet set = statement.executeQuery()) { + while (set.next()) { + Guild guild = getGuild(set.getInt("id")); + + if (guild != null) { + guilds.add(guild); + } + } + } + } catch (SQLException e) { + Emulator.getLogging().logSQLException(e); + } + + return guilds; + } + + public boolean symbolColor(int colorId) { + for (GuildPart part : this.getSymbolColors()) { + if (part.id == colorId) return true; } return false; } - public boolean backgroundColor(int colorId) - { - for(GuildPart part : this.getBackgroundColors()) - { - if(part.id == colorId) + public boolean backgroundColor(int colorId) { + for (GuildPart part : this.getBackgroundColors()) { + if (part.id == colorId) return true; } return false; } - public THashMap> getGuildParts() - { + public THashMap> getGuildParts() { return this.guildParts; } - public Collection getBases() - { + public Collection getBases() { return this.guildParts.get(GuildPartType.BASE).values(); } - public GuildPart getBase(int id) - { + public GuildPart getBase(int id) { return this.guildParts.get(GuildPartType.BASE).get(id); } - public Collection getSymbols() - { + public Collection getSymbols() { return this.guildParts.get(GuildPartType.SYMBOL).values(); } - public GuildPart getSymbol(int id) - { + public GuildPart getSymbol(int id) { return this.guildParts.get(GuildPartType.SYMBOL).get(id); } - public Collection getBaseColors() - { + public Collection getBaseColors() { return this.guildParts.get(GuildPartType.BASE_COLOR).values(); } - public GuildPart getBaseColor(int id) - { + public GuildPart getBaseColor(int id) { return this.guildParts.get(GuildPartType.BASE_COLOR).get(id); } - public Collection getSymbolColors() - { + public Collection getSymbolColors() { return this.guildParts.get(GuildPartType.SYMBOL_COLOR).values(); } - public GuildPart getSymbolColor(int id) - { + public GuildPart getSymbolColor(int id) { return this.guildParts.get(GuildPartType.SYMBOL_COLOR).get(id); } - public Collection getBackgroundColors() - { - return this.guildParts.get(GuildPartType.BACKGROUND_COLOR).values(); + public Collection getBackgroundColors() { + return this.guildParts.get(GuildPartType.BACKGROUND_COLOR).values(); } - public GuildPart getBackgroundColor(int id) - { + public GuildPart getBackgroundColor(int id) { return this.guildParts.get(GuildPartType.BACKGROUND_COLOR).get(id); } - public GuildPart getPart(GuildPartType type, int id) - { + public GuildPart getPart(GuildPartType type, int id) { return this.guildParts.get(type).get(id); } - public void setGuild(InteractionGuildFurni furni, int guildId) - { + public void setGuild(InteractionGuildFurni furni, int guildId) { furni.setGuildId(guildId); - try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("UPDATE items SET guild_id = ? WHERE id = ?")) - { + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("UPDATE items SET guild_id = ? WHERE id = ?")) { statement.setInt(1, guildId); statement.setInt(2, furni.getId()); statement.execute(); - } - catch (SQLException e) - { + } catch (SQLException e) { Emulator.getLogging().logSQLException(e); } } - public void dispose() - { + public void dispose() { TIntObjectIterator guildIterator = this.guilds.iterator(); - for(int i = this.guilds.size(); i-- > 0;) - { + for (int i = this.guilds.size(); i-- > 0; ) { guildIterator.advance(); - if(guildIterator.value().needsUpdate) + if (guildIterator.value().needsUpdate) guildIterator.value().run(); guildIterator.remove(); diff --git a/src/main/java/com/eu/habbo/habbohotel/guilds/GuildMember.java b/src/main/java/com/eu/habbo/habbohotel/guilds/GuildMember.java index d9e76c28..4b0d92c1 100644 --- a/src/main/java/com/eu/habbo/habbohotel/guilds/GuildMember.java +++ b/src/main/java/com/eu/habbo/habbohotel/guilds/GuildMember.java @@ -31,17 +31,17 @@ public class GuildMember implements Comparable public int getUserId() { - return this.userId; + return userId; } public String getUsername() { - return this.username; + return username; } public String getLook() { - return this.look; + return look; } public void setLook(String look) @@ -51,7 +51,7 @@ public class GuildMember implements Comparable public int getJoinDate() { - return this.joinDate; + return joinDate; } public void setJoinDate(int joinDate) @@ -61,7 +61,7 @@ public class GuildMember implements Comparable public GuildRank getRank() { - return this.rank; + return rank; } public void setRank(GuildRank rank) diff --git a/src/main/java/com/eu/habbo/habbohotel/guilds/forums/GuildForum.java b/src/main/java/com/eu/habbo/habbohotel/guilds/forums/GuildForum.java index 2c097af7..52fdf5af 100644 --- a/src/main/java/com/eu/habbo/habbohotel/guilds/forums/GuildForum.java +++ b/src/main/java/com/eu/habbo/habbohotel/guilds/forums/GuildForum.java @@ -3,27 +3,73 @@ package com.eu.habbo.habbohotel.guilds.forums; import com.eu.habbo.Emulator; import com.eu.habbo.habbohotel.guilds.Guild; import com.eu.habbo.habbohotel.users.Habbo; +import com.eu.habbo.messages.ISerialize; import com.eu.habbo.messages.ServerMessage; +import gnu.trove.map.hash.TIntObjectHashMap; +import gnu.trove.procedure.TObjectProcedure; import java.sql.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; -public class GuildForum -{ +public class GuildForum implements ISerialize { private final int guild; - private int lastRequested = Emulator.getIntUnixTimestamp(); - private GuildForumComment lastComment = null; - public GuildForum(int guild) - { + private int totalThreads; + private final TIntObjectHashMap threads; + private int lastRequested = Emulator.getIntUnixTimestamp(); + + public GuildForum(int guild) { this.guild = guild; + + this.threads = new TIntObjectHashMap(); + + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT author.username as author_name, author.look as look, COALESCE(admin.username, '') as admin_name, guilds_forums.id as thread_id, 0 as row_number, guilds_forums.* FROM guilds_forums " + + "INNER JOIN users AS author ON author.id = user_id " + + "LEFT JOIN users AS admin ON guilds_forums.admin_id = admin.id " + + "WHERE guild_id = ?")) { + statement.setInt(1, this.guild); + try (ResultSet set = statement.executeQuery()) { + while (set.next()) { + this.threads.put(set.getInt("id"), new GuildForumThread(set)); + } + } + } catch (SQLException e) { + Emulator.getLogging().logSQLException(e); + } } - public GuildForumThread createThread(Habbo habbo, String subject, String message) - { + public GuildForumComment getLastComment() { + if (!this.threads.valueCollection().isEmpty()) { + GuildForumThread thread = Collections.max(this.threads.valueCollection(), Comparator.comparing(GuildForumThread::getLastCommentTimestamp)); + + if (thread != null && thread.comments.size() > 0) { + return thread.comments.get(thread.comments.size() - 1); + } + } + + return null; + } + + public List getThreads() { + return new ArrayList<>(this.threads.valueCollection()); + } + + public List getThreadsByAuthor(int userId) { + return this.threads.valueCollection().stream().filter(p -> p.getAuthorId() == userId).collect(Collectors.toList()); + } + + public GuildForumThread getThread(int threadId) { + return threads.get(threadId); + } + + public GuildForumThread createThread(Habbo habbo, String subject, String message) { int timestamp = Emulator.getIntUnixTimestamp(); GuildForumThread thread = null; - try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("INSERT INTO guilds_forums (guild_id, user_id, subject, message, timestamp) VALUES (?, ?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS)) - { + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("INSERT INTO guilds_forums (guild_id, user_id, subject, message, timestamp) VALUES (?, ?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS)) { statement.setInt(1, this.guild); statement.setInt(2, habbo.getClient().getHabbo().getHabboInfo().getId()); statement.setString(3, subject); @@ -31,104 +77,124 @@ public class GuildForum statement.setInt(5, timestamp); statement.execute(); - try (ResultSet set = statement.getGeneratedKeys()) - { - if (set.next()) - { - return thread = new GuildForumThread(habbo, set.getInt(1), this.guild, subject, message, timestamp); + try (ResultSet set = statement.getGeneratedKeys()) { + if (set.next()) { + thread = new GuildForumThread(habbo, set.getInt(1), this.guild, subject, message, timestamp); + this.threads.put(set.getInt(1), //Thread id + thread); } } - } - catch(SQLException e) - { + } catch (SQLException e) { Emulator.getLogging().logSQLException(e); } return thread; } - public int getGuild() - { + //TODO: + + + public void hideThread(int threadId) { + this.threads.get(threadId).setState(ThreadState.HIDDEN_BY_ADMIN); + } + + public int getGuild() { return this.guild; } - public int getLastRequestedTime() - { + int getLastRequestedTime() { return this.lastRequested; } - public void serializeThreads(final ServerMessage message) - { - - - - + @Override + public void serialize(ServerMessage message) { } - public int threadSize() - { + public void serializeThreads(final ServerMessage message) { + synchronized (this.threads) { + message.appendInt(this.threads.size()); - - - - - return 0; + this.threads.forEachValue(new TObjectProcedure() { + @Override + public boolean execute(GuildForumThread thread) { + thread.serialize(message); + return true; + } + }); + } } - public void updateLastRequested() - { + public int threadSize() { + synchronized (this.threads) { + return this.threads.size(); + } + } + + void updateLastRequested() { this.lastRequested = Emulator.getIntUnixTimestamp(); } - public enum ThreadState - { - - - OPEN(0), - CLOSED(1), + public enum ThreadState { + CLOSED(0), + OPEN(1), HIDDEN_BY_ADMIN(10), //DELETED HIDDEN_BY_STAFF(20); public final int state; - ThreadState(int state) - { + ThreadState(int state) { this.state = state; } - public static ThreadState fromValue(int state) - { - switch (state) - { - case 0: return OPEN; - case 1: return CLOSED; - case 10: return HIDDEN_BY_ADMIN; - case 20: return HIDDEN_BY_STAFF; + public static ThreadState fromValue(int state) { + switch (state) { + case 0: + return CLOSED; + case 1: + return OPEN; + case 10: + return HIDDEN_BY_ADMIN; + case 20: + return HIDDEN_BY_STAFF; } return OPEN; } } - public void serializeUserForum(ServerMessage response, Habbo habbo) - { + public void serializeUserForum(ServerMessage response, Habbo habbo) { Guild guild = Emulator.getGameEnvironment().getGuildManager().getGuild(this.guild); - response.appendInt(guild.getId()); //k._SafeStr_6864 = _arg_2._SafeStr_5878(); = guild_id - response.appendString(guild.getName()); //k._name = _arg_2.readString(); = name - response.appendString(guild.getDescription()); //k._SafeStr_5790 = _arg_2.readString(); = description - response.appendString(guild.getBadge()); //k._icon = _arg_2.readString(); = icon - response.appendInt(0); //k._SafeStr_11338 = _arg_2._SafeStr_5878(); (?) - response.appendInt(0); //k._SafeStr_19191 = _arg_2._SafeStr_5878(); = rating - response.appendInt(0); //k._SafeStr_11328 = _arg_2._SafeStr_5878(); = total_messages - response.appendInt(0); //k._SafeStr_19192 = _arg_2._SafeStr_5878(); = new_messages + GuildForum forum = Emulator.getGameEnvironment().getGuildForumManager().getGuildForum(this.guild); - if (this.lastComment != null) - { - response.appendInt(this.lastComment.getThreadId()); //k._SafeStr_19193 = _arg_2._SafeStr_5878(); (?) - response.appendInt(this.lastComment.getUserId()); //k._SafeStr_19194 = _arg_2._SafeStr_5878(); = last_author_id - response.appendString(this.lastComment.getUserName()); //k._SafeStr_19195 = _arg_2.readString(); = last_author_name - response.appendInt(this.lastComment.getTimestamp()); //k._SafeStr_19196 = _arg_2._SafeStr_5878(); = update_time + Integer amountOfComments = forum.getThreads().stream().map(GuildForumThread::getAmountOfComments).mapToInt(Integer::intValue).sum(); + + response.appendInt(guild.getId()); + + response.appendString(guild.getName()); + response.appendString(guild.getDescription()); + response.appendString(guild.getBadge()); + + response.appendInt(0); + response.appendInt(0); //Rating + response.appendInt(amountOfComments); + + response.appendInt(0); //New Messages + + GuildForumComment comment = this.getLastComment(); + + if (comment != null) { + response.appendInt(comment.getThreadId()); + response.appendInt(comment.getUserId()); + response.appendString(comment.getUserName()); + response.appendInt(Emulator.getIntUnixTimestamp() - comment.getTimestamp()); + + return; } + + response.appendInt(-1); + response.appendInt(-1); + response.appendString(""); + response.appendInt(0); } } \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/habbohotel/guilds/forums/GuildForumComment.java b/src/main/java/com/eu/habbo/habbohotel/guilds/forums/GuildForumComment.java index 30b2a86c..faf2614b 100644 --- a/src/main/java/com/eu/habbo/habbohotel/guilds/forums/GuildForumComment.java +++ b/src/main/java/com/eu/habbo/habbohotel/guilds/forums/GuildForumComment.java @@ -8,9 +8,10 @@ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.List; +import java.util.stream.Collectors; -public class GuildForumComment implements ISerialize, Runnable -{ +public class GuildForumComment implements ISerialize, Runnable { private int id; private final int guildId; private final int threadId; @@ -23,161 +24,134 @@ public class GuildForumComment implements ISerialize, Runnable private GuildForum.ThreadState state = GuildForum.ThreadState.OPEN; private int adminId; private String adminName; - private int authorPostCount; - public GuildForumComment(int guildId, int threadId, int userId, String userName, String look, String message) - { - this.guildId = guildId; - this.threadId = threadId; - this.userId = userId; - this.userName = userName; - this.look = look; + public GuildForumComment(int guildId, int threadId, int userId, String userName, String look, String message) { + this.guildId = guildId; + this.threadId = threadId; + this.userId = userId; + this.userName = userName; + this.look = look; this.timestamp = Emulator.getIntUnixTimestamp(); - this.message = message; + this.message = message; this.adminName = ""; } - public GuildForumComment(final ResultSet set, final int index) throws SQLException - { - this.id = set.getInt("id"); - this.guildId = set.getInt("guild_id"); - this.threadId = set.getInt("thread_id"); - this.index = index; - this.userId = set.getInt("user_id"); - this.userName = set.getString("author_name"); - this.look = set.getString("look"); + public GuildForumComment(final ResultSet set, int index, int guildId) throws SQLException { + this.id = set.getInt("id"); + this.guildId = guildId; + this.threadId = set.getInt("thread_id"); + this.index = index; + this.userId = set.getInt("user_id"); + this.userName = set.getString("author_name"); + this.look = set.getString("look"); this.timestamp = set.getInt("timestamp"); - this.message = set.getString("message"); - this.state = GuildForum.ThreadState.valueOf(set.getString("state")); - this.adminId = set.getInt("admin_id"); + this.message = set.getString("message"); + this.state = GuildForum.ThreadState.valueOf(set.getString("state")); + this.adminId = set.getInt("admin_id"); this.adminName = set.getString("admin_name"); } - public void setAuthorPostCount(int authorPostCount) - { - this.authorPostCount = authorPostCount; + public int getAuthorPostCount() { + GuildForum guildForum = Emulator.getGameEnvironment().getGuildForumManager().getGuildForum(this.guildId); + + List matchingObjects = guildForum.getThreads().stream().flatMap(e -> e.getAllComments().stream()).collect(Collectors.toList()).stream().filter(c -> c.getUserId() == this.userId).collect(Collectors.toList()); + + return matchingObjects.size(); } @Override - public void serialize(ServerMessage message) - { - message.appendInt(this.id); //_local_2.messageId = k._SafeStr_5878(); = message_id - message.appendInt(this.index); //_local_2.messageIndex = k._SafeStr_5878(); = message_index - message.appendInt(this.userId); //_local_2._SafeStr_11317 = k._SafeStr_5878(); = author_id - message.appendString(this.userName); //_local_2._SafeStr_6798 = k.readString(); = author_name - message.appendString(this.look); //_local_2._SafeStr_11319 = k.readString(); = author_look - message.appendInt(Emulator.getIntUnixTimestamp() - this.timestamp); //_local_2._SafeStr_11164 = k._SafeStr_5878(); = creation_time - message.appendString(this.message); //_local_2._SafeStr_9526 = k.readString(); = message - message.appendByte(this.state.state); //_local_2.state = k.readByte(); = state - message.appendInt(this.adminId); //_local_2._SafeStr_19188 = k._SafeStr_5878(); = admin_id - message.appendString(this.adminName); //_local_2._SafeStr_11326 = k.readString(); = admin_name - message.appendInt(0); //_local_2._SafeStr_19189 = k._SafeStr_5878(); = (UNUSED) - message.appendInt(this.authorPostCount); //_local_2._SafeStr_11320 = k._SafeStr_5878(); = author_post_count + public void serialize(ServerMessage message) { + message.appendInt(this.id); + message.appendInt(this.index - 1); + message.appendInt(this.userId); + message.appendString(this.userName); + message.appendString(this.look); + message.appendInt(Emulator.getIntUnixTimestamp() - this.timestamp); + message.appendString(this.message); + message.appendByte(this.state.state); + message.appendInt(this.adminId); + message.appendString(this.adminName); + message.appendInt(0); + message.appendInt(this.getAuthorPostCount()); } - public int getId() - { + public int getId() { return this.id; } - public void setId(int id) - { + public void setId(int id) { this.id = id; } - public int getThreadId() - { + public int getThreadId() { return this.threadId; } - public int getIndex() - { + public int getIndex() { return this.index; } - public void setIndex(int index) - { + public void setIndex(int index) { this.index = index; } - public int getUserId() - { + public int getUserId() { return this.userId; } - public String getUserName() - { + public String getUserName() { return this.userName; } - public String getLook() - { + public String getLook() { return this.look; } - public int getTimestamp() - { + public int getTimestamp() { return this.timestamp; } - public String getMessage() - { + public String getMessage() { return this.message; } - public GuildForum.ThreadState getState() - { + public GuildForum.ThreadState getState() { return this.state; } - public void setState(GuildForum.ThreadState state) - { + public void setState(GuildForum.ThreadState state) { this.state = state; } - public int getAdminId() - { + public int getAdminId() { return this.adminId; } - public void setAdminId(int adminId) - { + public void setAdminId(int adminId) { this.adminId = adminId; } - public String getAdminName() - { + public String getAdminName() { return this.adminName; } - public void setAdminName(String adminName) - { + public void setAdminName(String adminName) { this.adminName = adminName; } - public int getAuthorPostCount() - { - return this.authorPostCount; - } - @Override - public void run() - { - try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("UPDATE guilds_forums_comments SET state = ?, admin_id = ? WHERE id = ?")) - { + public void run() { + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("UPDATE guilds_forums_comments SET state = ?, admin_id = ? WHERE id = ?")) { statement.setString(1, this.state.name()); statement.setInt(2, this.adminId); statement.setInt(3, this.getId()); statement.execute(); - } - catch (SQLException e) - { + } catch (SQLException e) { Emulator.getLogging().logSQLException(e); } } - public int getGuildId() - { + public int getGuildId() { return this.guildId; } } \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/habbohotel/guilds/forums/GuildForumManager.java b/src/main/java/com/eu/habbo/habbohotel/guilds/forums/GuildForumManager.java index abb0dee1..9cece19c 100644 --- a/src/main/java/com/eu/habbo/habbohotel/guilds/forums/GuildForumManager.java +++ b/src/main/java/com/eu/habbo/habbohotel/guilds/forums/GuildForumManager.java @@ -8,80 +8,144 @@ import gnu.trove.iterator.TIntObjectIterator; import gnu.trove.map.TIntObjectMap; import gnu.trove.map.hash.TIntObjectHashMap; -import java.util.ArrayList; -import java.util.List; -import java.util.NoSuchElementException; +import java.util.*; -public class GuildForumManager -{ +public class GuildForumManager { private final TIntObjectMap guildForums; - public GuildForumManager() - { - this.guildForums = TCollections.synchronizedMap(new TIntObjectHashMap<>()); + public void addGuildForum(int guildId) { + GuildForum forum = new GuildForum(guildId); + + this.guildForums.put(guildId, forum); } - public GuildForum getGuildForum(int guildId) - { - synchronized (this.guildForums) - { + public GuildForumManager() { + this.guildForums = TCollections.synchronizedMap(new TIntObjectHashMap()); + } + + public GuildForum getGuildForum(int guildId) { + synchronized (this.guildForums) { GuildForum forum = this.guildForums.get(guildId); - if (forum == null) - { + if (forum == null) { Guild guild = Emulator.getGameEnvironment().getGuildManager().getGuild(guildId); - if (guild != null && guild.hasForum()) - { - forum = new GuildForum(guild.getId()); - this.guildForums.put(guild.getId(), forum); + if (guild != null && guild.hasForum()) { + + forum = new GuildForum(guildId); + + this.guildForums.put(guildId, forum); } } - if (forum != null) - { + if (forum != null) { + forum.updateLastRequested(); + + return forum; } - return forum; + + return null; } } - public void clearInactiveForums() - { - int time = Emulator.getIntUnixTimestamp(); - + public void clearInactiveForums() { + List toRemove = new ArrayList(); TIntObjectIterator guildForums = this.guildForums.iterator(); - for(int i = this.guildForums.size(); i-- > 0;) - { - try - { + for (int i = this.guildForums.size(); i-- > 0; ) { + try { guildForums.advance(); - } - catch (NoSuchElementException e) - { + } catch (NoSuchElementException | ConcurrentModificationException e) { break; } - if (time - guildForums.value().getLastRequestedTime() > 300) - { - this.guildForums.remove(guildForums.key()); + if (guildForums.value().getLastRequestedTime() < Emulator.getIntUnixTimestamp() - 300) { + toRemove.add(guildForums.key()); + } + + for (Integer j : toRemove) { + this.guildForums.remove(j); } } } - public List getGuildForums(Habbo habbo) - { + public List getGuildForums(Habbo habbo) { List forums = new ArrayList<>(); - for (Integer i : habbo.getHabboStats().guilds) - { - Guild guild = Emulator.getGameEnvironment().getGuildManager().getGuild(i); - if (guild != null && guild.hasForum()) - { - forums.add(this.getGuildForum(i)); + for (Integer i : habbo.getHabboStats().guilds) { + forums.add(this.getGuildForum(i)); + } + + return forums; + } + + public List getAllForums() { + List forums = new ArrayList<>(); + + for (Guild guild : Emulator.getGameEnvironment().getGuildManager().getAllGuilds()) { + if (guild != null && guild.hasForum()) { + forums.add(this.getGuildForum(guild.getId())); } } return forums; } + + public List getAllForumsWithPosts() { + List forums = new ArrayList<>(); + + for (Guild guild : Emulator.getGameEnvironment().getGuildManager().getAllGuilds()) { + if (guild != null && guild.hasForum()) { + GuildForum forum = this.getGuildForum(guild.getId()); + + if (forum.getLastComment() == null) + continue; + + forums.add(forum); + } + } + + return forums; + } + + private static final Comparator SORT_ACTIVE = new Comparator() { + @Override + public int compare(GuildForum o1, GuildForum o2) { + + if (o2.getLastComment() == null || o2.getLastComment().getTimestamp() <= 0) + return 0; + + if (o1.getLastComment() == null || o1.getLastComment().getTimestamp() <= 0) + return 0; + + return o2.getLastComment().getTimestamp() - o1.getLastComment().getTimestamp(); + } + }; + + private static final Comparator SORT_VISITED = new Comparator() { + @Override + public int compare(GuildForum o1, GuildForum o2) { + + if (o2.getLastRequestedTime() <= 0 || o1.getLastRequestedTime() <= 0) + return 0; + + return o2.getLastRequestedTime() - o1.getLastRequestedTime(); + } + }; + + public List getAllForumsByActive() { + List forums = this.getAllForumsWithPosts(); + + forums.sort(SORT_ACTIVE); + + return forums; + } + + public List getAllForumsByVisited() { + List forums = this.getAllForumsWithPosts(); + + forums.sort(SORT_VISITED); + + return forums; + } } diff --git a/src/main/java/com/eu/habbo/habbohotel/guilds/forums/GuildForumThread.java b/src/main/java/com/eu/habbo/habbohotel/guilds/forums/GuildForumThread.java index 64ad553e..10620cc1 100644 --- a/src/main/java/com/eu/habbo/habbohotel/guilds/forums/GuildForumThread.java +++ b/src/main/java/com/eu/habbo/habbohotel/guilds/forums/GuildForumThread.java @@ -4,14 +4,15 @@ import com.eu.habbo.Emulator; import com.eu.habbo.habbohotel.users.Habbo; import com.eu.habbo.messages.ISerialize; import com.eu.habbo.messages.ServerMessage; +import gnu.trove.map.hash.THashMap; import java.sql.*; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; -public class GuildForumThread implements ISerialize, Runnable -{ +public class GuildForumThread implements ISerialize, Runnable { private final int threadId; private final int guildId; private final int authorId; @@ -23,16 +24,24 @@ public class GuildForumThread implements ISerialize, Runnable private boolean pinned = false; private boolean locked = false; - private int lastAuthorId; + private int lastAuthorId = 0; private String lastAuthorName; - private int lastCommentTimestamp; + + public int getLastCommentTimestamp() { + return this.lastCommentTimestamp; + } + + private int lastCommentTimestamp = 0; private int adminId; private String adminName = ""; - public final ConcurrentHashMap comments = new ConcurrentHashMap<>(); + private int commentsIndex = 1; - public GuildForumThread(Habbo habbo, int threadId, int guildId, String subject, String message, int timestamp) - { + + + public final THashMap comments; + + public GuildForumThread(Habbo habbo, int threadId, int guildId, String subject, String message, int timestamp) { this.threadId = threadId; this.guildId = guildId; this.authorId = habbo.getHabboInfo().getId(); @@ -44,11 +53,13 @@ public class GuildForumThread implements ISerialize, Runnable this.lastAuthorId = this.authorId; this.lastAuthorName = this.authorName; this.lastCommentTimestamp = this.timestamp; + + + this.comments = new THashMap<>(); } - //Via de database inladen; - public GuildForumThread(ResultSet set) throws SQLException - { + + public GuildForumThread(ResultSet set) throws SQLException { this.threadId = set.getInt("id"); this.guildId = set.getInt("guild_id"); this.authorId = set.getInt("user_id"); @@ -67,97 +78,76 @@ public class GuildForumThread implements ISerialize, Runnable this.lastAuthorName = this.authorName; this.lastCommentTimestamp = this.timestamp; - this.addComment(new GuildForumComment(set, 0)); + this.comments = new THashMap<>(); + this.comments.put(commentsIndex, new GuildForumComment(set, commentsIndex, guildId)); + commentsIndex++; try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT " + "author.username AS author_name, " + "COALESCE(admin.username, '') as admin_name, " + "author.look, " + - "guilds_forums_comments.*" + + "guilds_forums_comments.* " + "FROM guilds_forums_comments " + "INNER JOIN users AS author ON guilds_forums_comments.user_id = author.id " + "LEFT JOIN users AS admin ON guilds_forums_comments.admin_id = admin.id " + "WHERE thread_id = ? " + - "ORDER BY id ASC")) - { + "ORDER BY id ASC")) { statement.setInt(1, this.threadId); - try (ResultSet commentSet = statement.executeQuery()) - { - int index = 1; - while (commentSet.next()) - { - if (!commentSet.isLast()) - { - this.comments.put(set.getInt("id"), new GuildForumComment(commentSet, index)); - } - else - { - this.addComment(new GuildForumComment(commentSet, index)); - } - - ++index; + try (ResultSet commentSet = statement.executeQuery()) { + while (commentSet.next()) { + this.comments.put(commentsIndex, new GuildForumComment(commentSet, commentsIndex, this.guildId)); + commentsIndex++; } } - } - catch (SQLException e) - { + } catch (SQLException e) { Emulator.getLogging().logSQLException(e); } } - public void addComment(GuildForumComment comment) - { - if (comment.getIndex() == -1) - { - if (!this.comments.isEmpty()) - { - GuildForumComment previousComment = this.comments.get(this.comments.size() - 1); + public void setPinned(boolean pinned) { + this.pinned = pinned; + } - if (previousComment != null) - { - comment.setIndex(previousComment.getIndex() + 1); - } - } + public void setLocked(boolean locked) { + this.locked = locked; + } + + public void addComment(GuildForumComment comment) { + synchronized (this.comments) { + comment.setIndex(commentsIndex); + this.comments.put(commentsIndex, comment); + commentsIndex++; } - this.comments.put(comment.getId(), comment); - this.lastAuthorId = comment.getUserId(); this.lastAuthorName = comment.getUserName(); this.lastCommentTimestamp = comment.getTimestamp(); } - public GuildForumComment addComment(Habbo habbo, String message) - { + public GuildForumComment addComment(Habbo habbo, String message) { int commentId = -1; GuildForumComment comment = new GuildForumComment(this.guildId, this.threadId, habbo.getHabboInfo().getId(), habbo.getHabboInfo().getUsername(), habbo.getHabboInfo().getLook(), message); - try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("INSERT INTO guilds_forums_comments (thread_id, user_id, timestamp, message) VALUES (?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS)) - { + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("INSERT INTO guilds_forums_comments (thread_id, user_id, timestamp, message) VALUES (?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS)) { statement.setInt(1, this.threadId); statement.setInt(2, habbo.getHabboInfo().getId()); int nowTimestamp = Emulator.getIntUnixTimestamp(); statement.setInt(3, nowTimestamp); statement.setString(4, message); statement.execute(); - try (ResultSet set = statement.getGeneratedKeys()) - { - if (set.next()) - { + try (ResultSet set = statement.getGeneratedKeys()) { + if (set.next()) { commentId = set.getInt(1); } } - } - catch (SQLException e) - { + } catch (SQLException e) { Emulator.getLogging().logSQLException(e); } - if (commentId >= 0) - { + if (commentId >= 0) { comment.setId(commentId); - this.addComment(comment); + addComment(comment); return comment; } @@ -165,131 +155,149 @@ public class GuildForumThread implements ISerialize, Runnable return null; } - public GuildForumComment getComment(int id) - { - synchronized (this.comments) - { + public GuildForumComment getCommentById(int id) { + synchronized (this.comments) { + for(GuildForumComment comment : this.comments.values()) { + if(comment.getId() == id) { + return comment; + } + } + } + + return null; + } + + public GuildForumComment getCommentByIndex(int id) { + synchronized (this.comments) { return this.comments.get(id); } } - public List getComments(int page, int limit) - { - return new ArrayList<>(); + /* Original Group Forum Code By Claudio and TheGeneral. + Rewritten because it was terrible. + Credits To Beny. + */ + public List getComments(int page, int limit) { + List allComments = new ArrayList(this.comments.values()); + Collections.reverse(allComments); + List comments = new ArrayList<>(); + + int start = page; + int end = start + limit; + + int i = 0; + synchronized (this.comments) { + for(GuildForumComment comment : allComments) { + if(i >= start && i < end) { + comments.add(comment); + } + i++; + } + } + + return comments; } - public int getId() - { + public Collection getAllComments() { + synchronized (this.comments) { + return this.comments.values(); + } + } + + public Integer getAmountOfComments() { + synchronized (this.comments) { + return this.comments.size(); + } + } + + public int getId() { return this.threadId; } - public int getGuildId() - { + public int getGuildId() { return this.guildId; } - public int getCommentsSize() - { + public int getCommentsSize() { return this.comments.size(); } - public String getSubject() - { + public String getSubject() { return this.subject; } - public int getThreadId() - { + public int getThreadId() { return this.threadId; } - public int getAuthorId() - { + public int getAuthorId() { return this.authorId; } - public String getAuthorName() - { + public String getAuthorName() { return this.authorName; } - public String getMessage() - { + public String getMessage() { return this.message; } - public GuildForum.ThreadState getState() - { + public GuildForum.ThreadState getState() { return this.state; } - public void setState(GuildForum.ThreadState state) - { + public void setState(GuildForum.ThreadState state) { this.state = state; } - public void setAdminId(int adminId) - { + public void setAdminId(int adminId) { this.adminId = adminId; } - public void setAdminName(String adminName) - { + public void setAdminName(String adminName) { this.adminName = adminName; } - public void serializeComments(final ServerMessage message, int index, int limit) - { - List comments; - synchronized (this.comments) - { - comments = this.getComments(index, limit); - } - if (comments != null) - { - message.appendInt(comments.size()); - for (GuildForumComment comment : comments) - { - comment.serialize(message); - } - } + public boolean isPinned() { + return pinned; + } + + public boolean isLocked() { + return locked; } @Override - public void serialize(ServerMessage message) - { + public void serialize(ServerMessage message) { int nowTimestamp = Emulator.getIntUnixTimestamp(); - message.appendInt(this.threadId); //_local_2.threadId = k._SafeStr_5878(); - message.appendInt(this.authorId); //_local_2._SafeStr_11333 = k._SafeStr_5878(); = thread_author_id - message.appendString(this.authorName); //_local_2._SafeStr_11334 = k.readString(); = thread_author_name - message.appendString(this.subject); //_local_2.header = k.readString(); = look - message.appendBoolean(this.pinned); //_local_2._SafeStr_11331 = k.readBoolean(); = pinned - message.appendBoolean(this.locked); //_local_2._SafeStr_5801 = k.readBoolean(); = locked - message.appendInt(nowTimestamp - this.timestamp); //_local_2._SafeStr_11164 = k._SafeStr_5878(); = creation_time - message.appendInt(this.getCommentsSize()); //_local_2._SafeStr_11239 = k._SafeStr_5878(); = total_messages - message.appendInt(0); //_local_2._SafeStr_11260 = k._SafeStr_5878(); = unread_messages(?) - message.appendInt(1); //_local_2._SafeStr_11242 = k._SafeStr_5878(); = Something message count related. - message.appendInt(this.lastAuthorId); //_local_2._SafeStr_11188 = k._SafeStr_5878(); = last_author_id - message.appendString(this.lastAuthorName); //_local_2._SafeStr_11189 = k.readString(); = last_author_name - message.appendInt(nowTimestamp - this.lastCommentTimestamp); //_local_2._SafeStr_11190 = k._SafeStr_5878(); = update_time, seconds ago - message.appendByte(this.state.state); //_local_2.state = k.readByte(); = state - message.appendInt(this.adminId); //_local_2._SafeStr_19188 = k._SafeStr_5878(); = admin id - message.appendString(this.adminName); //_local_2._SafeStr_11326 = k.readString(); = admin_name - message.appendInt(this.threadId); //_local_2._SafeStr_19214 = k._SafeStr_5878(); //UNUSED? + message.appendInt(this.threadId); + message.appendInt(this.authorId); + message.appendString(this.authorName); + message.appendString(this.subject); + message.appendBoolean(this.pinned); + message.appendBoolean(this.locked); + message.appendInt(nowTimestamp - this.timestamp); + message.appendInt(this.getCommentsSize()); + message.appendInt(0); + message.appendInt(1); + message.appendInt(this.lastAuthorId); + message.appendString(this.lastAuthorName); + message.appendInt(nowTimestamp - this.lastCommentTimestamp); + message.appendByte(this.state.state); + message.appendInt(this.adminId); + message.appendString(this.adminName); + message.appendInt(this.threadId); } @Override - public void run() - { - try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("UPDATE guilds_forums SET message = ?, state = ?, pinned = ?, locked = ?, admin_id = ? WHERE id = ?")) - { + public void run() { + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("UPDATE guilds_forums SET message = ?, state = ?, pinned = ?, locked = ?, admin_id = ? WHERE id = ?")) { statement.setString(1, this.message); statement.setString(2, this.state.name()); statement.setString(3, this.pinned ? "1" : "0"); @@ -297,9 +305,7 @@ public class GuildForumThread implements ISerialize, Runnable statement.setInt(5, this.adminId); statement.setInt(6, this.getId()); statement.execute(); - } - catch (SQLException e) - { + } catch (SQLException e) { Emulator.getLogging().logSQLException(e); } } diff --git a/src/main/java/com/eu/habbo/habbohotel/users/Habbo.java b/src/main/java/com/eu/habbo/habbohotel/users/Habbo.java index 76b46908..019b5abe 100644 --- a/src/main/java/com/eu/habbo/habbohotel/users/Habbo.java +++ b/src/main/java/com/eu/habbo/habbohotel/users/Habbo.java @@ -468,23 +468,9 @@ public class Habbo implements Runnable public int noobStatus() { - if (this.firstVisit) - { - return 2; - } - int accountAge = Emulator.getIntUnixTimestamp() - this.habboInfo.getAccountCreated(); - if (accountAge < (86400)) - { - return 2; - } - - if (accountAge < (3 * 86400)) - { return 1; - } - return 0; } public void clearCaches() diff --git a/src/main/java/com/eu/habbo/messages/PacketManager.java b/src/main/java/com/eu/habbo/messages/PacketManager.java index 3f89a9ae..fae18c43 100644 --- a/src/main/java/com/eu/habbo/messages/PacketManager.java +++ b/src/main/java/com/eu/habbo/messages/PacketManager.java @@ -29,8 +29,7 @@ import com.eu.habbo.messages.incoming.guardians.GuardianNoUpdatesWantedEvent; import com.eu.habbo.messages.incoming.guardians.GuardianVoteEvent; import com.eu.habbo.messages.incoming.guides.*; import com.eu.habbo.messages.incoming.guilds.*; -import com.eu.habbo.messages.incoming.guilds.forums.GuildForumDataEvent; -import com.eu.habbo.messages.incoming.guilds.forums.GuildForumListEvent; +import com.eu.habbo.messages.incoming.guilds.forums.*; import com.eu.habbo.messages.incoming.handshake.*; import com.eu.habbo.messages.incoming.helper.RequestTalentTrackEvent; import com.eu.habbo.messages.incoming.hotelview.*; @@ -525,16 +524,23 @@ public class PacketManager this.registerHandler(Incoming.GuildConfirmRemoveMemberEvent, GuildConfirmRemoveMemberEvent.class); this.registerHandler(Incoming.GuildRemoveFavoriteEvent, GuildRemoveFavoriteEvent.class); this.registerHandler(Incoming.GuildDeleteEvent, GuildDeleteEvent.class); + this.registerHandler(Incoming.GuildForumListEvent, GuildForumListEvent.class); + this.registerHandler(Incoming.GuildForumThreadsEvent, GuildForumThreadsEvent.class); + this.registerHandler(Incoming.GuildForumDataEvent, GuildForumDataEvent.class); + this.registerHandler(Incoming.GuildForumPostThreadEvent, GuildForumPostThreadEvent.class); + this.registerHandler(Incoming.GuildForumUpdateSettingsEvent, GuildForumUpdateSettingsEvent.class); + this.registerHandler(Incoming.GuildForumThreadsMessagesEvent, GuildForumThreadsMessagesEvent.class); + this.registerHandler(Incoming.GuildForumModerateMessageEvent, GuildForumModerateMessageEvent.class); + this.registerHandler(Incoming.GuildForumModerateThreadEvent, GuildForumModerateThreadEvent.class); + this.registerHandler(Incoming.GuildForumThreadUpdateEvent, GuildForumThreadUpdateEvent.class); this.registerHandler(Incoming.GetHabboGuildBadgesMessageEvent, GetHabboGuildBadgesMessageEvent.class); - this.registerHandler(Incoming.GuildForumDataEvent, GuildForumDataEvent.class); - this.registerHandler(Incoming.GuildForumListEvent, GuildForumListEvent.class); - - - - - - +// this.registerHandler(Incoming.GuildForumDataEvent, GuildForumModerateMessageEvent.class); +// this.registerHandler(Incoming.GuildForumDataEvent, GuildForumModerateThreadEvent.class); +// this.registerHandler(Incoming.GuildForumDataEvent, GuildForumPostThreadEvent.class); +// this.registerHandler(Incoming.GuildForumDataEvent, GuildForumThreadsEvent.class); +// this.registerHandler(Incoming.GuildForumDataEvent, GuildForumThreadsMessagesEvent.class); +// this.registerHandler(Incoming.GuildForumDataEvent, GuildForumUpdateSettingsEvent.class); } void registerPets() throws Exception diff --git a/src/main/java/com/eu/habbo/messages/incoming/Incoming.java b/src/main/java/com/eu/habbo/messages/incoming/Incoming.java index faf25d91..45237758 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/Incoming.java +++ b/src/main/java/com/eu/habbo/messages/incoming/Incoming.java @@ -347,16 +347,17 @@ public class Incoming public static final int StopBreedingEvent = 2713; public static final int ConfirmPetBreedingEvent = 3382; + + public static final int GuildForumListEvent = 873; + public static final int GuildForumThreadsEvent = 436; public static final int GuildForumDataEvent = 3149; - public static final int UNKNOWN_GUILD_FORUMS_EVENT2 = 3900; - public static final int UNKNOWN_GUILD_FORUMS_EVENT3 = 873; - public static final int GuildForumListEvent = 436; - public static final int UNKNOWN_GUILD_FORUMS_EVENT5 = 232; - public static final int UNKNOWN_GUILD_FORUMS_EVENT6 = 2214; - public static final int UNKNOWN_GUILD_FORUMS_EVENT7 = 3529; - public static final int UNKNOWN_GUILD_FORUMS_EVENT8 = 1397; - public static final int UNKNOWN_GUILD_FORUMS_EVENT9 = 3045; - public static final int UNKNOWN_GUILD_FORUMS_EVENT10 = 286; + public static final int GuildForumPostThreadEvent = 3529; + public static final int GuildForumUpdateSettingsEvent = 2214; + public static final int GuildForumThreadsMessagesEvent = 232; + public static final int GuildForumModerateMessageEvent = 286; + public static final int GuildForumModerateThreadEvent = 1397; + public static final int GuildForumThreadUpdateEvent = 3045; + public static final int GuildForumMarkAsReadEvent = 1855; public static final int UNKNOWN_SNOWSTORM_6000 = 6000; diff --git a/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildAcceptMembershipEvent.java b/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildAcceptMembershipEvent.java index 743c0df2..4a3bd93e 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildAcceptMembershipEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildAcceptMembershipEvent.java @@ -32,6 +32,7 @@ public class GuildAcceptMembershipEvent extends MessageHandler if (habbo.getHabboStats().hasGuild(guild.getId())) { this.client.sendResponse(new GuildAcceptMemberErrorComposer(guild.getId(), GuildAcceptMemberErrorComposer.ALREADY_ACCEPTED)); + return; } else { @@ -40,6 +41,7 @@ public class GuildAcceptMembershipEvent extends MessageHandler if(member == null || member.getRank().type != GuildRank.REQUESTED.type) { this.client.sendResponse(new GuildAcceptMemberErrorComposer(guild.getId(), GuildAcceptMemberErrorComposer.NO_LONGER_MEMBER)); + return; } else { diff --git a/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildChangeBadgeEvent.java b/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildChangeBadgeEvent.java index 12334c4f..0e7e864f 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildChangeBadgeEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildChangeBadgeEvent.java @@ -25,7 +25,7 @@ public class GuildChangeBadgeEvent extends MessageHandler int count = this.packet.readInt(); - StringBuilder badge = new StringBuilder(); + String badge = ""; byte base = 1; @@ -37,21 +37,21 @@ public class GuildChangeBadgeEvent extends MessageHandler if (base == 1) { - badge.append("b"); + badge += "b"; } else { - badge.append("s"); + badge += "s"; } - badge.append(id < 100 ? "0" : "").append(id < 10 ? "0" : "").append(id).append(color < 10 ? "0" : "").append(color).append(pos); + badge += (id < 100 ? "0" : "") + (id < 10 ? "0" : "") + id + (color < 10 ? "0" : "") + color + "" + pos; base += 3; } - if (guild.getBadge().toLowerCase().equals(badge.toString().toLowerCase())) + if (guild.getBadge().toLowerCase().equals(badge.toLowerCase())) return; - GuildChangedBadgeEvent badgeEvent = new GuildChangedBadgeEvent(guild, badge.toString()); + GuildChangedBadgeEvent badgeEvent = new GuildChangedBadgeEvent(guild, badge); Emulator.getPluginManager().fireEvent(badgeEvent); if (badgeEvent.isCancelled()) diff --git a/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildDeclineMembershipEvent.java b/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildDeclineMembershipEvent.java index 2e3d1c9e..27a2263e 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildDeclineMembershipEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildDeclineMembershipEvent.java @@ -29,7 +29,7 @@ public class GuildDeclineMembershipEvent extends MessageHandler { guild.decreaseRequestCount(); Emulator.getGameEnvironment().getGuildManager().removeMember(guild, userId); - this.client.sendResponse(new GuildMembersComposer(guild, Emulator.getGameEnvironment().getGuildManager().getGuildMembersCount(guild, 2, ""), Emulator.getGameEnvironment().getGuildManager().getGuildMembers(guild, 0, 2, ""), 0, 2, "", true)); + this.client.sendResponse(new GuildMembersComposer(guild, Emulator.getGameEnvironment().getGuildManager().getGuildMembers(guild, 0, 0, ""), this.client.getHabbo(), 0, 0, "", true)); this.client.sendResponse(new GuildRefreshMembersListComposer(guild)); Habbo habbo = Emulator.getGameEnvironment().getHabboManager().getHabbo(userId); diff --git a/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildBuyEvent.java b/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildBuyEvent.java index 07ea5e33..f341e9e6 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildBuyEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildBuyEvent.java @@ -48,7 +48,7 @@ public class RequestGuildBuyEvent extends MessageHandler int count = this.packet.readInt(); - StringBuilder badge = new StringBuilder(); + String badge = ""; byte base = 1; @@ -60,19 +60,20 @@ public class RequestGuildBuyEvent extends MessageHandler if(base == 1) { - badge.append("b"); + badge += "b"; } else { - badge.append("s"); + badge += "s"; } - badge.append(id < 100 ? "0" : "").append(id < 10 ? "0" : "").append(id).append(color < 10 ? "0" : "").append(color).append(pos); + badge += (id < 100 ? "0" : "") + (id < 10 ? "0" : "") + id + (color < 10 ? "0" : "") + color + "" + pos; base += 3; } - Guild guild = Emulator.getGameEnvironment().getGuildManager().createGuild(this.client.getHabbo(), roomId, r.getName(), name, description, badge.toString(), colorOne, colorTwo); + Guild guild = Emulator.getGameEnvironment().getGuildManager().createGuild(this.client.getHabbo(), roomId, r.getName(), name, description, badge, colorOne, colorTwo); + r.setGuild(guild.getId()); r.setNeedsUpdate(true); diff --git a/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildBuyRoomsEvent.java b/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildBuyRoomsEvent.java index c87ea293..fe2d0e92 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildBuyRoomsEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildBuyRoomsEvent.java @@ -15,7 +15,7 @@ public class RequestGuildBuyRoomsEvent extends MessageHandler { List rooms = Emulator.getGameEnvironment().getRoomManager().getRoomsForHabbo(this.client.getHabbo()); - THashSet roomList = new THashSet<>(); + THashSet roomList = new THashSet(); for(Room room : rooms) { diff --git a/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildMembersEvent.java b/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildMembersEvent.java index f4eea46b..b963fb3c 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildMembersEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildMembersEvent.java @@ -25,10 +25,10 @@ public class RequestGuildMembersEvent extends MessageHandler if (!isAdmin && this.client.getHabbo().getHabboStats().hasGuild(g.getId())) { GuildMember member = Emulator.getGameEnvironment().getGuildManager().getGuildMember(g, this.client.getHabbo()); - isAdmin = member != null && (member.getRank().equals(GuildRank.ADMIN) || member.getRank().equals(GuildRank.MOD) && levelId == 2); + isAdmin = member != null && member.getRank().equals(GuildRank.ADMIN); } - this.client.sendResponse(new GuildMembersComposer(g, Emulator.getGameEnvironment().getGuildManager().getGuildMembersCount(g, levelId, query), Emulator.getGameEnvironment().getGuildManager().getGuildMembers(g, pageId, levelId, query), pageId, levelId, query, isAdmin)); + this.client.sendResponse(new GuildMembersComposer(g, Emulator.getGameEnvironment().getGuildManager().getGuildMembers(g, pageId, levelId, query), this.client.getHabbo(), pageId, levelId, query, isAdmin)); } } } diff --git a/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestOwnGuildsEvent.java b/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestOwnGuildsEvent.java index bddbf18e..4745c364 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestOwnGuildsEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestOwnGuildsEvent.java @@ -11,7 +11,7 @@ public class RequestOwnGuildsEvent extends MessageHandler @Override public void handle() throws Exception { - THashSet guilds = new THashSet<>(); + THashSet guilds = new THashSet(); for(int i : this.client.getHabbo().getHabboStats().guilds) { diff --git a/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumDataEvent.java b/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumDataEvent.java index ec415744..f39518c8 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumDataEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumDataEvent.java @@ -1,6 +1,7 @@ package com.eu.habbo.messages.incoming.guilds.forums; import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.guilds.forums.GuildForum; import com.eu.habbo.messages.incoming.MessageHandler; import com.eu.habbo.messages.outgoing.guilds.forums.GuildForumDataComposer; @@ -9,8 +10,13 @@ public class GuildForumDataEvent extends MessageHandler @Override public void handle() throws Exception { - int guildId = this.packet.readInt(); + int guildId = packet.readInt(); - this.client.sendResponse(new GuildForumDataComposer(Emulator.getGameEnvironment().getGuildForumManager().getGuildForum(guildId), this.client.getHabbo())); + GuildForum forum = Emulator.getGameEnvironment().getGuildForumManager().getGuildForum(guildId); + + if(forum == null) + return; + + this.client.sendResponse(new GuildForumDataComposer(forum, this.client.getHabbo())); } } \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumListEvent.java b/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumListEvent.java index e175e3c1..1085c051 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumListEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumListEvent.java @@ -4,23 +4,22 @@ import com.eu.habbo.Emulator; import com.eu.habbo.messages.incoming.MessageHandler; import com.eu.habbo.messages.outgoing.guilds.forums.GuildForumListComposer; -public class GuildForumListEvent extends MessageHandler -{ +public class GuildForumListEvent extends MessageHandler { @Override - public void handle() throws Exception - { + public void handle() throws Exception { int mode = this.packet.readInt(); int page = this.packet.readInt(); int amount = this.packet.readInt(); - switch(page) - { + switch (mode) { case 0: - this.client.sendResponse(new GuildForumListComposer(Emulator.getGameEnvironment().getGuildForumManager().getGuildForums(this.client.getHabbo()), this.client.getHabbo(), mode)); + this.client.sendResponse(new GuildForumListComposer(Emulator.getGameEnvironment().getGuildForumManager().getAllForumsByVisited(), this.client.getHabbo(), mode, page)); break; case 1: + this.client.sendResponse(new GuildForumListComposer(Emulator.getGameEnvironment().getGuildForumManager().getAllForumsByActive(), this.client.getHabbo(), mode, page)); break; case 2: + this.client.sendResponse(new GuildForumListComposer(Emulator.getGameEnvironment().getGuildForumManager().getGuildForums(this.client.getHabbo()), this.client.getHabbo(), mode, page)); break; } } diff --git a/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumModerateMessageEvent.java b/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumModerateMessageEvent.java index 7df41726..60de1bfb 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumModerateMessageEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumModerateMessageEvent.java @@ -2,40 +2,63 @@ package com.eu.habbo.messages.incoming.guilds.forums; import com.eu.habbo.Emulator; import com.eu.habbo.habbohotel.guilds.Guild; +import com.eu.habbo.habbohotel.guilds.GuildMember; +import com.eu.habbo.habbohotel.guilds.GuildRank; import com.eu.habbo.habbohotel.guilds.forums.GuildForum; +import com.eu.habbo.habbohotel.guilds.forums.GuildForumComment; +import com.eu.habbo.habbohotel.guilds.forums.GuildForumThread; import com.eu.habbo.messages.incoming.MessageHandler; +import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertComposer; +import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertKeys; +import com.eu.habbo.messages.outgoing.guilds.forums.PostUpdateMessageComposer; -public class GuildForumModerateMessageEvent extends MessageHandler -{ +public class GuildForumModerateMessageEvent extends MessageHandler { @Override - public void handle() throws Exception - { - int guildId = this.packet.readInt(); - int threadId = this.packet.readInt(); - int messageId = this.packet.readInt(); - int state = this.packet.readInt(); + public void handle() throws Exception { + int guildId = packet.readInt(); + int threadId = packet.readInt(); + int messageId = packet.readInt(); + int state = packet.readInt(); Guild guild = Emulator.getGameEnvironment().getGuildManager().getGuild(guildId); - if(guild == null || guild.getOwnerId() != this.client.getHabbo().getHabboInfo().getId()) + + boolean isStaff = this.client.getHabbo().hasPermission("acc_modtool_ticket_q"); + final GuildMember member = Emulator.getGameEnvironment().getGuildManager().getGuildMember(guildId, this.client.getHabbo().getHabboInfo().getId()); + boolean isAdmin = member != null && (member.getRank() == GuildRank.MOD || member.getRank() == GuildRank.ADMIN || guild.getOwnerId() == this.client.getHabbo().getHabboInfo().getId()); + + if (guild == null || (!isAdmin && !isStaff)) return; GuildForum forum = Emulator.getGameEnvironment().getGuildForumManager().getGuildForum(guildId); + GuildForumThread thread = forum.getThread(threadId); -// + if (thread != null) { + if(messageId >= 0) { + Emulator.getLogging().logDebugLine("Forum message ID - " + messageId); + GuildForumComment comment = thread.getCommentById(messageId); + comment.setState(GuildForum.ThreadState.fromValue(state)); + comment.setAdminId(this.client.getHabbo().getHabboInfo().getId()); + comment.setAdminName(this.client.getHabbo().getHabboInfo().getUsername()); + Emulator.getThreading().run(comment); + this.client.sendResponse(new PostUpdateMessageComposer(guildId, threadId, comment)); + } + switch (state) { + case 10: + case 20: + this.client.sendResponse(new BubbleAlertComposer(BubbleAlertKeys.FORUMS_MESSAGE_HIDDEN.key).compose()); + break; + case 1: + this.client.sendResponse(new BubbleAlertComposer(BubbleAlertKeys.FORUMS_MESSAGE_RESTORED.key).compose()); + break; + } + } else { - -// - -// - - - - + } } } \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumModerateThreadEvent.java b/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumModerateThreadEvent.java index 10e1c936..20a4cbfc 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumModerateThreadEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumModerateThreadEvent.java @@ -2,30 +2,50 @@ package com.eu.habbo.messages.incoming.guilds.forums; import com.eu.habbo.Emulator; import com.eu.habbo.habbohotel.guilds.Guild; +import com.eu.habbo.habbohotel.guilds.GuildMember; +import com.eu.habbo.habbohotel.guilds.GuildRank; import com.eu.habbo.habbohotel.guilds.forums.GuildForum; +import com.eu.habbo.habbohotel.guilds.forums.GuildForumThread; import com.eu.habbo.messages.incoming.MessageHandler; +import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertComposer; +import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertKeys; +import com.eu.habbo.messages.outgoing.guilds.forums.GuildForumThreadMessagesComposer; -public class GuildForumModerateThreadEvent extends MessageHandler -{ +public class GuildForumModerateThreadEvent extends MessageHandler { @Override - public void handle() throws Exception - { - int guildId = this.packet.readInt(); - int threadId = this.packet.readInt(); - int state = this.packet.readInt(); + public void handle() throws Exception { + int guildId = packet.readInt(); + int threadId = packet.readInt(); + int state = packet.readInt(); Guild guild = Emulator.getGameEnvironment().getGuildManager().getGuild(guildId); - if(guild == null || guild.getOwnerId() != this.client.getHabbo().getHabboInfo().getId()) + + boolean isStaff = this.client.getHabbo().hasPermission("acc_modtool_ticket_q"); + final GuildMember member = Emulator.getGameEnvironment().getGuildManager().getGuildMember(guildId, this.client.getHabbo().getHabboInfo().getId()); + boolean isAdmin = member != null && (member.getRank() == GuildRank.MOD || member.getRank() == GuildRank.ADMIN || guild.getOwnerId() == this.client.getHabbo().getHabboInfo().getId()); + + if (guild == null || (!isAdmin && !isStaff)) return; GuildForum forum = Emulator.getGameEnvironment().getGuildForumManager().getGuildForum(guildId); + GuildForumThread thread = forum.getThread(threadId); + thread.setState(GuildForum.ThreadState.fromValue(state)); + thread.setAdminId(this.client.getHabbo().getHabboInfo().getId()); + thread.setAdminName(this.client.getHabbo().getHabboInfo().getUsername()); + switch (state) { + case 10: + case 20: + this.client.sendResponse(new BubbleAlertComposer(BubbleAlertKeys.FORUMS_THREAD_HIDDEN.key).compose()); + break; + case 1: + this.client.sendResponse(new BubbleAlertComposer(BubbleAlertKeys.FORUMS_THREAD_RESTORED.key).compose()); + break; + } + Emulator.getThreading().run(thread); - - -// - + this.client.sendResponse(new GuildForumThreadMessagesComposer(thread)); } } \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumPostThreadEvent.java b/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumPostThreadEvent.java index 80adbd0c..0b90612d 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumPostThreadEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumPostThreadEvent.java @@ -1,50 +1,68 @@ package com.eu.habbo.messages.incoming.guilds.forums; +import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.guilds.Guild; +import com.eu.habbo.habbohotel.guilds.GuildMember; +import com.eu.habbo.habbohotel.guilds.GuildRank; +import com.eu.habbo.habbohotel.guilds.forums.GuildForum; +import com.eu.habbo.habbohotel.guilds.forums.GuildForumComment; +import com.eu.habbo.habbohotel.guilds.forums.GuildForumThread; import com.eu.habbo.messages.incoming.MessageHandler; +import com.eu.habbo.messages.outgoing.guilds.forums.GuildForumAddCommentComposer; +import com.eu.habbo.messages.outgoing.guilds.forums.GuildForumThreadMessagesComposer; -public class GuildForumPostThreadEvent extends MessageHandler -{ +public class GuildForumPostThreadEvent extends MessageHandler { @Override - public void handle() throws Exception - { + public void handle() throws Exception { int guildId = this.packet.readInt(); int threadId = this.packet.readInt(); String subject = this.packet.readString(); String message = this.packet.readString(); - //TODO: Add check if user has guild - //TODO: Add check if threads can be posted. - - -// - - - - - - -// - - - -// - - - - - - -// - + final GuildForum forum = Emulator.getGameEnvironment().getGuildForumManager().getGuildForum(guildId); + final Guild guild = Emulator.getGameEnvironment().getGuildManager().getGuild(guildId); + final GuildMember member = Emulator.getGameEnvironment().getGuildManager().getGuildMember(guildId, this.client.getHabbo().getHabboInfo().getId()); + boolean isStaff = this.client.getHabbo().hasPermission("acc_modtool_ticket_q"); + final GuildForumThread thread; + if (forum != null) { + if (message.length() < 10 || message.length() > 4000) return; + if (threadId == 0) { + if ((guild.canPostThreads().state == 0) + || (guild.canPostThreads().state == 1 && member != null) + || (guild.canPostThreads().state == 2 && member != null && (member.getRank() == GuildRank.MOD || member.getRank() == GuildRank.ADMIN)) + || (guild.canPostThreads().state == 3 && guild.getOwnerId() == this.client.getHabbo().getHabboInfo().getId()) + || isStaff) { + thread = forum.createThread(this.client.getHabbo(), subject, message); + GuildForumComment comment = new GuildForumComment(guildId, threadId, this.client.getHabbo().getHabboInfo().getId(), + this.client.getHabbo().getHabboInfo().getUsername(), this.client.getHabbo().getHabboInfo().getLook(), message); + thread.addComment(comment); + this.client.sendResponse(new GuildForumThreadMessagesComposer(thread)); + } + } else { + if ((guild.canPostThreads().state == 0) + || (guild.canPostThreads().state == 1 && member != null) + || (guild.canPostThreads().state == 2 && member != null && (member.getRank() == GuildRank.MOD || member.getRank() == GuildRank.ADMIN)) + || (guild.canPostThreads().state == 3 && guild.getOwnerId() == this.client.getHabbo().getHabboInfo().getId()) + || isStaff) { + thread = forum.getThread(threadId); + if(thread == null) + return; + GuildForumComment comment = thread.addComment(this.client.getHabbo(), message); + if (comment != null) { + this.client.sendResponse(new GuildForumAddCommentComposer(comment)); + } + } + } + } } } \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadUpdateEvent.java b/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadUpdateEvent.java new file mode 100644 index 00000000..10a06437 --- /dev/null +++ b/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadUpdateEvent.java @@ -0,0 +1,17 @@ +package com.eu.habbo.messages.incoming.guilds.forums; + +import com.eu.habbo.Emulator; +import com.eu.habbo.messages.incoming.MessageHandler; +import com.eu.habbo.messages.outgoing.guilds.forums.ThreadUpdatedMessageComposer; + +public class GuildForumThreadUpdateEvent extends MessageHandler { + @Override + public void handle() throws Exception { + int groupId = this.packet.readInt(); + int threadId = this.packet.readInt(); + boolean isPinned = this.packet.readBoolean(); + boolean isLocked = this.packet.readBoolean(); + + this.client.sendResponse(new ThreadUpdatedMessageComposer(Emulator.getGameEnvironment().getGuildForumManager().getGuildForum(groupId), threadId, this.client.getHabbo(), isPinned, isLocked)); + } +} \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadsEvent.java b/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadsEvent.java index aff2a966..cbace8e5 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadsEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadsEvent.java @@ -1,6 +1,7 @@ package com.eu.habbo.messages.incoming.guilds.forums; import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.guilds.forums.GuildForum; import com.eu.habbo.messages.incoming.MessageHandler; import com.eu.habbo.messages.outgoing.guilds.forums.GuildForumDataComposer; import com.eu.habbo.messages.outgoing.guilds.forums.GuildForumThreadsComposer; @@ -10,11 +11,17 @@ public class GuildForumThreadsEvent extends MessageHandler @Override public void handle() throws Exception { - int groupdId = this.packet.readInt(); - int index = this.packet.readInt(); + int groupdId = packet.readInt(); + int index = packet.readInt(); + + GuildForum forum = Emulator.getGameEnvironment().getGuildForumManager().getGuildForum(groupdId); + + if(forum == null) + return; + + this.client.sendResponse(new GuildForumDataComposer(forum, this.client.getHabbo())); + this.client.sendResponse(new GuildForumThreadsComposer(forum, index)); - this.client.sendResponse(new GuildForumThreadsComposer(Emulator.getGameEnvironment().getGuildForumManager().getGuildForum(groupdId), index)); - this.client.sendResponse(new GuildForumDataComposer(Emulator.getGameEnvironment().getGuildForumManager().getGuildForum(groupdId), this.client.getHabbo())); //TODO read guild id; } } \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadsMessagesEvent.java b/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadsMessagesEvent.java index 23687c2b..70f4b609 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadsMessagesEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadsMessagesEvent.java @@ -3,34 +3,42 @@ package com.eu.habbo.messages.incoming.guilds.forums; import com.eu.habbo.Emulator; import com.eu.habbo.habbohotel.guilds.Guild; import com.eu.habbo.habbohotel.guilds.forums.GuildForum; +import com.eu.habbo.habbohotel.guilds.forums.GuildForumThread; import com.eu.habbo.messages.incoming.MessageHandler; +import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertComposer; +import com.eu.habbo.messages.outgoing.guilds.forums.GuildForumCommentsComposer; +import com.eu.habbo.messages.outgoing.guilds.forums.GuildForumDataComposer; public class GuildForumThreadsMessagesEvent extends MessageHandler { @Override public void handle() throws Exception { - int guildId = this.packet.readInt(); - int threadId = this.packet.readInt(); - int index = this.packet.readInt(); //40 - int limit = this.packet.readInt(); //20 + int guildId = packet.readInt(); + int threadId = packet.readInt(); + int index = packet.readInt(); //40 + int limit = packet.readInt(); //20 Guild guild = Emulator.getGameEnvironment().getGuildManager().getGuild(guildId); + if(guild == null) return; GuildForum forum = Emulator.getGameEnvironment().getGuildForumManager().getGuildForum(guildId); -// -// + if(forum == null) + return; + GuildForumThread thread = forum.getThread(threadId); + if (thread.getState() == GuildForum.ThreadState.HIDDEN_BY_ADMIN && guild.getOwnerId() != this.client.getHabbo().getHabboInfo().getId()) + { + this.client.sendResponse(new BubbleAlertComposer("forums.error.access_denied")); + } else + { + this.client.sendResponse(new GuildForumCommentsComposer(guildId, threadId, index, thread.getComments(index, limit))); + } - - - - -// - + this.client.sendResponse(new GuildForumDataComposer(forum, this.client.getHabbo())); } } \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumUpdateSettingsEvent.java b/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumUpdateSettingsEvent.java index f17c8738..2a5e951a 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumUpdateSettingsEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumUpdateSettingsEvent.java @@ -3,7 +3,10 @@ package com.eu.habbo.messages.incoming.guilds.forums; import com.eu.habbo.Emulator; import com.eu.habbo.habbohotel.guilds.Guild; import com.eu.habbo.habbohotel.guilds.SettingsState; +import com.eu.habbo.habbohotel.guilds.forums.GuildForum; import com.eu.habbo.messages.incoming.MessageHandler; +import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertComposer; +import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertKeys; import com.eu.habbo.messages.outgoing.guilds.forums.GuildForumDataComposer; public class GuildForumUpdateSettingsEvent extends MessageHandler @@ -11,29 +14,33 @@ public class GuildForumUpdateSettingsEvent extends MessageHandler @Override public void handle() throws Exception { - int guildId = this.packet.readInt(); - int canRead = this.packet.readInt(); - int postMessages = this.packet.readInt(); - int postThreads = this.packet.readInt(); - int modForum = this.packet.readInt(); + int guildId = packet.readInt(); + int canRead = packet.readInt(); + int postMessages = packet.readInt(); + int postThreads = packet.readInt(); + int modForum = packet.readInt(); Guild guild = Emulator.getGameEnvironment().getGuildManager().getGuild(guildId); if(guild == null || guild.getOwnerId() != this.client.getHabbo().getHabboInfo().getId()) return; - this.client.sendResponse(new GuildForumDataComposer(Emulator.getGameEnvironment().getGuildForumManager().getGuildForum(1), this.client.getHabbo())); + GuildForum forum = Emulator.getGameEnvironment().getGuildForumManager().getGuildForum(guildId); + + if(forum == null) + return; guild.setReadForum(SettingsState.fromValue(canRead)); guild.setPostMessages(SettingsState.fromValue(postMessages)); guild.setPostThreads(SettingsState.fromValue(postThreads)); guild.setModForum(SettingsState.fromValue(modForum)); + guild.needsUpdate = true; + Emulator.getThreading().run(guild); + this.client.sendResponse(new BubbleAlertComposer(BubbleAlertKeys.FORUMS_FORUM_SETTINGS_UPDATED.key).compose()); - - - //TODO: DATABASE SAVING, PERMISSION CHECK + this.client.sendResponse(new GuildForumDataComposer(forum, this.client.getHabbo())); } } \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/messages/outgoing/Outgoing.java b/src/main/java/com/eu/habbo/messages/outgoing/Outgoing.java index b38ba848..f33b68b5 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/Outgoing.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/Outgoing.java @@ -102,406 +102,406 @@ public class Outgoing public final static int AlertPurchaseFailedComposer = 1404; public final static int RoomDataComposer = 687; public final static int TagsComposer = 2012; - public final static int InventoryRefreshComposer = 3151; - public final static int RemovePetComposer = 3253; - public final static int RemoveWallItemComposer = 3208; - public final static int TradeCompleteComposer = 2369; - public final static int NewsWidgetsComposer = 286; - public final static int WiredEffectDataComposer = 1434; - public final static int BubbleAlertComposer = 1992; - public final static int ReloadRecyclerComposer = 3433; - public final static int MoodLightDataComposer = 2710; - public final static int WiredRewardAlertComposer = 178; - public final static int CatalogPageComposer = 804; - public final static int CatalogModeComposer = 3828; - public final static int ChangeNameUpdateComposer = 118; - public final static int AddFloorItemComposer = 1534; - public final static int DebugConsoleComposer = 3284; - public final static int HallOfFameComposer = 3005; - public final static int WiredSavedComposer = 1155; - public final static int RoomPaintComposer = 2454; - public final static int MarketplaceConfigComposer = 1823; - public final static int AddBotComposer = 1352; - public final static int FriendRequestErrorComposer = 892; - public final static int GuildMembersComposer = 1200; - public final static int RoomOpenComposer = 758; - public final static int ModToolRoomChatlogComposer = 3434; - public final static int DiscountComposer = 2347; - public final static int MarketplaceCancelSaleComposer = 3264; - public final static int RoomPetRespectComposer = 2788; - public final static int RoomSettingsComposer = 1498; - public final static int TalentTrackComposer = 3406; - public final static int CatalogPagesListComposer = 1032; - public final static int AlertLimitedSoldOutComposer = 377; - public final static int CatalogUpdatedComposer = 1866; - public final static int PurchaseOKComposer = 869; - public final static int WallItemUpdateComposer = 2009; - public final static int TradeAcceptedComposer = 2568; - public final static int AddWallItemComposer = 2187; - public final static int RoomEntryInfoComposer = 749; - public final static int HotelViewDataComposer = 1745; - public final static int PresentItemOpenedComposer = 56; - public final static int RoomUserRemoveRightsComposer = 84; - public final static int UserBCLimitsComposer = 3828; - public final static int PetTrainingPanelComposer = 1164; - public final static int RoomPaneComposer = 749; - public final static int RedeemVoucherErrorComposer = 714; - public final static int RoomCreatedComposer = 1304; - public final static int GenericAlertComposer = 3801; - public final static int GroupPartsComposer = 2238; - public final static int ModToolIssueInfoComposer = 3609; - public final static int RoomUserWhisperComposer = 2704; - public final static int BotErrorComposer = 639; - public final static int FreezeLivesComposer = 2324; - public final static int LoadFriendRequestsComposer = 280; - public final static int MarketplaceSellItemComposer = 54; - public final static int ClubDataComposer = 2405; - public final static int ProfileFriendsComposer = 2016; - public final static int MarketplaceOwnItemsComposer = 3884; - public final static int RoomOwnerComposer = 339; - public final static int WiredConditionDataComposer = 1108; - public final static int ModToolUserInfoComposer = 2866; - public final static int UserWardrobeComposer = 3315; - public final static int RoomPetExperienceComposer = 2156; - public final static int FriendChatMessageComposer = 1587; - public final static int PetInformationComposer = 2901; - public final static int RoomThicknessComposer = 3547; - public final static int AddPetComposer = 2101; - public final static int UpdateStackHeightComposer = 558; - public final static int RemoveBotComposer = 233; - public final static int RoomEnterErrorComposer = 899; - public final static int PollQuestionsComposer = 2997; - public final static int GenericErrorMessages = 1600; - public final static int RoomWallItemsComposer = 1369; - public final static int RoomUserEffectComposer = 1167; - public final static int PetBreedsComposer = 3331; - public final static int ModToolIssueChatlogComposer = 607; - public final static int RoomUserActionComposer = 1631; - public final static int BotSettingsComposer = 1618; - public final static int UserProfileComposer = 3898; - public final static int MinimailCountComposer = 2803; - public final static int UserAchievementScoreComposer = 1968; - public final static int PetLevelUpComposer = 859; - public final static int UserPointsComposer = 2275; - public final static int ReportRoomFormComposer = 1121; - public final static int ModToolIssueHandledComposer = 934; - public final static int FloodCounterComposer = 566; - public final static int UpdateFailedComposer = 156; - public final static int FloorPlanEditorDoorSettingsComposer = 1664; - public final static int FloorPlanEditorBlockedTilesComposer = 3990; - public final static int BuildersClubExpiredComposer = 1452; - public final static int RoomSettingsSavedComposer = 948; - public final static int MessengerInitComposer = 1605; - public final static int UserClothesComposer = 1450; - public final static int UserEffectsListComposer = 340; - public final static int NewUserIdentityComposer = 3738; - public final static int NewNavigatorEventCategoriesComposer = 3244; - public final static int NewNavigatorCollapsedCategoriesComposer = 1543; - public final static int NewNavigatorLiftedRoomsComposer = 3104; - public final static int NewNavigatorSavedSearchesComposer = 3984; - public final static int RoomUnitUpdateUsernameComposer = 2182; - public final static int PostItDataComposer = 2202; - public final static int ModToolReportReceivedAlertComposer = 3635; - public final static int ModToolIssueResponseAlertComposer = 3796; - public final static int AchievementListComposer = 305; - public final static int AchievementProgressComposer = 2107; - public final static int AchievementUnlockedComposer = 806; - public final static int ClubGiftsComposer = 619; - public final static int MachineIDComposer = 1488; - public final static int PongComposer = 10; - public final static int ModToolIssueHandlerDimensionsComposer = 1576; + public final static int InventoryRefreshComposer = 3151; // PRODUCTION-201611291003-338511768 + public final static int RemovePetComposer = 3253; // PRODUCTION-201611291003-338511768 + public final static int RemoveWallItemComposer = 3208; // PRODUCTION-201611291003-338511768 + public final static int TradeCompleteComposer = 2369; // PRODUCTION-201611291003-338511768 + public final static int NewsWidgetsComposer = 286; // PRODUCTION-201611291003-338511768 + public final static int WiredEffectDataComposer = 1434; // PRODUCTION-201611291003-338511768 + public final static int BubbleAlertComposer = 1992; // PRODUCTION-201611291003-338511768 + public final static int ReloadRecyclerComposer = 3433; // PRODUCTION-201611291003-338511768 + public final static int MoodLightDataComposer = 2710; // PRODUCTION-201611291003-338511768 + public final static int WiredRewardAlertComposer = 178; // PRODUCTION-201611291003-338511768 + public final static int CatalogPageComposer = 804; // PRODUCTION-201611291003-338511768 + public final static int CatalogModeComposer = 3828; // PRODUCTION-201611291003-338511768 + public final static int ChangeNameUpdateComposer = 118; // PRODUCTION-201611291003-338511768 + public final static int AddFloorItemComposer = 1534; // PRODUCTION-201611291003-338511768 + public final static int DebugConsoleComposer = 3284; // PRODUCTION-201611291003-338511768 + public final static int HallOfFameComposer = 3005; // PRODUCTION-201611291003-338511768 + public final static int WiredSavedComposer = 1155; // PRODUCTION-201611291003-338511768 + public final static int RoomPaintComposer = 2454; // PRODUCTION-201611291003-338511768 + public final static int MarketplaceConfigComposer = 1823; // PRODUCTION-201611291003-338511768 + public final static int AddBotComposer = 1352; // PRODUCTION-201611291003-338511768 + public final static int FriendRequestErrorComposer = 892; // PRODUCTION-201611291003-338511768 + public final static int GuildMembersComposer = 1200; // PRODUCTION-201611291003-338511768 + public final static int RoomOpenComposer = 758; // PRODUCTION-201611291003-338511768 + public final static int ModToolRoomChatlogComposer = 3434; // PRODUCTION-201611291003-338511768 + public final static int DiscountComposer = 2347; // PRODUCTION-201611291003-338511768 + public final static int MarketplaceCancelSaleComposer = 3264; // PRODUCTION-201611291003-338511768 + public final static int RoomPetRespectComposer = 2788; // PRODUCTION-201611291003-338511768 + public final static int RoomSettingsComposer = 1498; // PRODUCTION-201611291003-338511768 + public final static int TalentTrackComposer = 3406; // PRODUCTION-201611291003-338511768 + public final static int CatalogPagesListComposer = 1032; // PRODUCTION-201611291003-338511768 + public final static int AlertLimitedSoldOutComposer = 377; // PRODUCTION-201611291003-338511768 + public final static int CatalogUpdatedComposer = 1866; // PRODUCTION-201611291003-338511768 + public final static int PurchaseOKComposer = 869; // PRODUCTION-201611291003-338511768 + public final static int WallItemUpdateComposer = 2009; // PRODUCTION-201611291003-338511768 + public final static int TradeAcceptedComposer = 2568; // PRODUCTION-201611291003-338511768 + public final static int AddWallItemComposer = 2187; // PRODUCTION-201611291003-338511768 + public final static int RoomEntryInfoComposer = 749; // PRODUCTION-201611291003-338511768 + public final static int HotelViewDataComposer = 1745; // PRODUCTION-201611291003-338511768 + public final static int PresentItemOpenedComposer = 56; // PRODUCTION-201611291003-338511768 + public final static int RoomUserRemoveRightsComposer = 84; // PRODUCTION-201611291003-338511768 + public final static int UserBCLimitsComposer = 3828; // PRODUCTION-201611291003-338511768 + public final static int PetTrainingPanelComposer = 1164; // PRODUCTION-201611291003-338511768 + public final static int RoomPaneComposer = 749; // PRODUCTION-201611291003-338511768 + public final static int RedeemVoucherErrorComposer = 714; // PRODUCTION-201611291003-338511768 + public final static int RoomCreatedComposer = 1304; // PRODUCTION-201611291003-338511768 + public final static int GenericAlertComposer = 3801; // PRODUCTION-201611291003-338511768 + public final static int GroupPartsComposer = 2238; // PRODUCTION-201611291003-338511768 + public final static int ModToolIssueInfoComposer = 3609; // PRODUCTION-201611291003-338511768 + public final static int RoomUserWhisperComposer = 2704; // PRODUCTION-201611291003-338511768 + public final static int BotErrorComposer = 639; // PRODUCTION-201611291003-338511768 + public final static int FreezeLivesComposer = 2324; // PRODUCTION-201611291003-338511768 + public final static int LoadFriendRequestsComposer = 280; // PRODUCTION-201611291003-338511768 + public final static int MarketplaceSellItemComposer = 54; // PRODUCTION-201611291003-338511768 + public final static int ClubDataComposer = 2405; // PRODUCTION-201611291003-338511768 + public final static int ProfileFriendsComposer = 2016; // PRODUCTION-201611291003-338511768 + public final static int MarketplaceOwnItemsComposer = 3884; // PRODUCTION-201611291003-338511768 + public final static int RoomOwnerComposer = 339; // PRODUCTION-201611291003-338511768 + public final static int WiredConditionDataComposer = 1108; // PRODUCTION-201611291003-338511768 + public final static int ModToolUserInfoComposer = 2866; // PRODUCTION-201611291003-338511768 + public final static int UserWardrobeComposer = 3315; // PRODUCTION-201611291003-338511768 + public final static int RoomPetExperienceComposer = 2156; // PRODUCTION-201611291003-338511768 + public final static int FriendChatMessageComposer = 1587; // PRODUCTION-201611291003-338511768 + public final static int PetInformationComposer = 2901; // PRODUCTION-201611291003-338511768 + public final static int RoomThicknessComposer = 3547; // PRODUCTION-201611291003-338511768 + public final static int AddPetComposer = 2101; // PRODUCTION-201611291003-338511768 + public final static int UpdateStackHeightComposer = 558; // PRODUCTION-201611291003-338511768 + public final static int RemoveBotComposer = 233; // PRODUCTION-201611291003-338511768 + public final static int RoomEnterErrorComposer = 899; // PRODUCTION-201611291003-338511768 + public final static int PollQuestionsComposer = 2997; // PRODUCTION-201611291003-338511768 + public final static int GenericErrorMessages = 1600; // PRODUCTION-201611291003-338511768 + public final static int RoomWallItemsComposer = 1369; // PRODUCTION-201611291003-338511768 + public final static int RoomUserEffectComposer = 1167; // PRODUCTION-201611291003-338511768 + public final static int PetBreedsComposer = 3331; // PRODUCTION-201611291003-338511768 + public final static int ModToolIssueChatlogComposer = 607; // PRODUCTION-201611291003-338511768 + public final static int RoomUserActionComposer = 1631; // PRODUCTION-201611291003-338511768 + public final static int BotSettingsComposer = 1618; // PRODUCTION-201611291003-338511768 + public final static int UserProfileComposer = 3898; // PRODUCTION-201611291003-338511768 + public final static int MinimailCountComposer = 2803; // PRODUCTION-201611291003-338511768 + public final static int UserAchievementScoreComposer = 1968; // PRODUCTION-201611291003-338511768 + public final static int PetLevelUpComposer = 859; // PRODUCTION-201611291003-338511768 + public final static int UserPointsComposer = 2275; // PRODUCTION-201611291003-338511768 + public final static int ReportRoomFormComposer = 1121; // PRODUCTION-201611291003-338511768 + public final static int ModToolIssueHandledComposer = 934; // PRODUCTION-201611291003-338511768 + public final static int FloodCounterComposer = 566; // PRODUCTION-201611291003-338511768 + public final static int UpdateFailedComposer = 156; // PRODUCTION-201611291003-338511768 + public final static int FloorPlanEditorDoorSettingsComposer = 1664; // PRODUCTION-201611291003-338511768 + public final static int FloorPlanEditorBlockedTilesComposer = 3990; // PRODUCTION-201611291003-338511768 + public final static int BuildersClubExpiredComposer = 1452; // PRODUCTION-201611291003-338511768 + public final static int RoomSettingsSavedComposer = 948; // PRODUCTION-201611291003-338511768 + public final static int MessengerInitComposer = 1605; // PRODUCTION-201611291003-338511768 + public final static int UserClothesComposer = 1450; // PRODUCTION-201611291003-338511768 + public final static int UserEffectsListComposer = 340; // PRODUCTION-201611291003-338511768 + public final static int NewUserIdentityComposer = 3738; // PRODUCTION-201611291003-338511768 + public final static int NewNavigatorEventCategoriesComposer = 3244; // PRODUCTION-201611291003-338511768 + public final static int NewNavigatorCollapsedCategoriesComposer = 1543; // PRODUCTION-201611291003-338511768 + public final static int NewNavigatorLiftedRoomsComposer = 3104; // PRODUCTION-201611291003-338511768 + public final static int NewNavigatorSavedSearchesComposer = 3984; // PRODUCTION-201611291003-338511768 + public final static int RoomUnitUpdateUsernameComposer = 2182; // PRODUCTION-201611291003-338511768 + public final static int PostItDataComposer = 2202; // PRODUCTION-201611291003-338511768 + public final static int ModToolReportReceivedAlertComposer = 3635; // PRODUCTION-201611291003-338511768 + public final static int ModToolIssueResponseAlertComposer = 3796; // PRODUCTION-201611291003-338511768 + public final static int AchievementListComposer = 305; // PRODUCTION-201611291003-338511768 + public final static int AchievementProgressComposer = 2107; // PRODUCTION-201611291003-338511768 + public final static int AchievementUnlockedComposer = 806; // PRODUCTION-201611291003-338511768 + public final static int ClubGiftsComposer = 619; // PRODUCTION-201611291003-338511768 + public final static int MachineIDComposer = 1488; // PRODUCTION-201611291003-338511768 + public final static int PongComposer = 10; // PRODUCTION-201611291003-338511768 + public final static int ModToolIssueHandlerDimensionsComposer = 1576; // PRODUCTION-201611291003-338511768 //Uknown but work - public final static int IsFirstLoginOfDayComposer = 793; - public final static int UnknownComposer5 = 2833; - public final static int IgnoredUsersComposer = 126; - public final static int NewNavigatorMetaDataComposer = 3052; - public final static int NewNavigatorSearchResultsComposer = 2690; - public final static int MysticBoxStartOpenComposer = 3201; - public final static int MysticBoxCloseComposer = 596; - public final static int MysticBoxPrizeComposer = 3712; - public final static int RentableSpaceInfoComposer = 3559; - public final static int RentableSpaceUnknownComposer = 2046; - public final static int RentableSpaceUnknown2Composer = 1868; - public final static int GuildConfirmRemoveMemberComposer = 1876; - - public final static int HotelViewBadgeButtonConfigComposer = 2998; - public final static int EpicPopupFrameComposer = 3945; - public final static int BaseJumpLoadGameURLComposer = 2624; - public final static int RoomUserTagsComposer = 1255; - public final static int RoomInviteErrorComposer = 462; - public final static int PostItStickyPoleOpenComposer = 2366; - public final static int NewYearResolutionProgressComposer = 3370; - public final static int ClubGiftReceivedComposer = 659; - public final static int ItemStateComposer = 2376; - public final static int ItemExtraDataComposer = 2547; + public final static int IsFirstLoginOfDayComposer = 793; // PRODUCTION-201611291003-338511768 //Quest Engine + public final static int UnknownComposer5 = 2833; // PRODUCTION-201611291003-338511768 //Mysterbox + public final static int IgnoredUsersComposer = 126; // PRODUCTION-201611291003-338511768 + public final static int NewNavigatorMetaDataComposer = 3052; // PRODUCTION-201611291003-338511768 + public final static int NewNavigatorSearchResultsComposer = 2690; // PRODUCTION-201611291003-338511768 + public final static int MysticBoxStartOpenComposer = 3201; // PRODUCTION-201611291003-338511768 + public final static int MysticBoxCloseComposer = 596; // PRODUCTION-201611291003-338511768 + public final static int MysticBoxPrizeComposer = 3712; // PRODUCTION-201611291003-338511768 + public final static int RentableSpaceInfoComposer = 3559; // PRODUCTION-201611291003-338511768 + public final static int RentableSpaceUnknownComposer = 2046; // PRODUCTION-201611291003-338511768 + public final static int RentableSpaceUnknown2Composer = 1868; // PRODUCTION-201611291003-338511768 + public final static int GuildConfirmRemoveMemberComposer = 1876; // PRODUCTION-201611291003-338511768 + public final static int HotelViewBadgeButtonConfigComposer = 2998; // PRODUCTION-201611291003-338511768 + public final static int EpicPopupFrameComposer = 3945; // PRODUCTION-201611291003-338511768 + public final static int BaseJumpLoadGameURLComposer = 2624; // PRODUCTION-201611291003-338511768 + public final static int RoomUserTagsComposer = 1255; // PRODUCTION-201611291003-338511768 + public final static int RoomInviteErrorComposer = 462; // PRODUCTION-201611291003-338511768 + public final static int PostItStickyPoleOpenComposer = 2366; // PRODUCTION-201611291003-338511768 + public final static int NewYearResolutionProgressComposer = 3370; // PRODUCTION-201611291003-338511768 + public final static int ClubGiftReceivedComposer = 659; // PRODUCTION-201611291003-338511768 + public final static int ItemStateComposer = 2376; // PRODUCTION-201611291003-338511768 + public final static int ItemExtraDataComposer = 2547; // PRODUCTION-201611291003-338511768 + public final static int PostUpdateMessageComposer = 324; // PRODUCTION-201611291003-338511768 //NotSure Needs Testing - public final static int QuestionInfoComposer = 2665; - public final static int TalentTrackEmailVerifiedComposer = 612; - public final static int TalentTrackEmailFailedComposer = 1815; - public final static int UnknownAvatarEditorComposer = 3473; + public final static int QuestionInfoComposer = 2665; // PRODUCTION-201611291003-338511768 + public final static int TalentTrackEmailVerifiedComposer = 612; // PRODUCTION-201611291003-338511768 + public final static int TalentTrackEmailFailedComposer = 1815; // PRODUCTION-201611291003-338511768 + public final static int UnknownAvatarEditorComposer = 3473; // PRODUCTION-201611291003-338511768 - public final static int GuildMembershipRequestedComposer = 1180; + public final static int GuildMembershipRequestedComposer = 1180; // PRODUCTION-201611291003-338511768 - public final static int GuildForumsUnreadMessagesCountComposer = 2379; - public final static int GuildForumThreadMessagesComposer = 1862; - public final static int GuildForumAddCommentComposer = 2049; - public final static int GuildForumDataComposer = 3011; - public final static int GuildForumCommentsComposer = 509; - public final static int UnknownGuildForumComposer6 = 324; - public final static int UnknownGuildForumComposer7 = 2528; - public final static int GuildForumThreadsComposer = 1073; - public final static int GuildForumListComposer = 3001; + public final static int GuildForumsUnreadMessagesCountComposer = 2379; // PRODUCTION-201611291003-338511768 + public final static int GuildForumThreadMessagesComposer = 1862; // PRODUCTION-201611291003-338511768 + public final static int GuildForumAddCommentComposer = 2049; // PRODUCTION-201611291003-338511768 + public final static int GuildForumDataComposer = 3011; // PRODUCTION-201611291003-338511768 + public final static int GuildForumCommentsComposer = 509; // PRODUCTION-201611291003-338511768 + public final static int UnknownGuildForumComposer6 = 324; // PRODUCTION-201611291003-338511768 + public final static int UnknownGuildForumComposer7 = 2528; // PRODUCTION-201611291003-338511768 + public final static int GuildForumThreadsComposer = 1073; // PRODUCTION-201611291003-338511768 + public final static int GuildForumListComposer = 3001; // PRODUCTION-201611291003-338511768 + public final static int ThreadUpdateMessageComposer = 2528; + public final static int GuideSessionAttachedComposer = 1591; // PRODUCTION-201611291003-338511768 + public final static int GuideSessionDetachedComposer = 138; // PRODUCTION-201611291003-338511768 + public final static int GuideSessionStartedComposer = 3209; // PRODUCTION-201611291003-338511768 + public final static int GuideSessionEndedComposer = 1456; // PRODUCTION-201611291003-338511768 + public final static int GuideSessionErrorComposer = 673; // PRODUCTION-201611291003-338511768 + public final static int GuideSessionMessageComposer = 841; // PRODUCTION-201611291003-338511768 + public final static int GuideSessionRequesterRoomComposer = 1847; // PRODUCTION-201611291003-338511768 + public final static int GuideSessionInvitedToGuideRoomComposer = 219; // PRODUCTION-201611291003-338511768 + public final static int GuideSessionPartnerIsTypingComposer = 1016; // PRODUCTION-201611291003-338511768 - public final static int GuideSessionAttachedComposer = 1591; - public final static int GuideSessionDetachedComposer = 138; - public final static int GuideSessionStartedComposer = 3209; - public final static int GuideSessionEndedComposer = 1456; - public final static int GuideSessionErrorComposer = 673; - public final static int GuideSessionMessageComposer = 841; - public final static int GuideSessionRequesterRoomComposer = 1847; - public final static int GuideSessionInvitedToGuideRoomComposer = 219; - public final static int GuideSessionPartnerIsTypingComposer = 1016; + public final static int GuideToolsComposer = 1548; // PRODUCTION-201611291003-338511768 + public final static int GuardianNewReportReceivedComposer = 735; // PRODUCTION-201611291003-338511768 + public final static int GuardianVotingRequestedComposer = 143; // PRODUCTION-201611291003-338511768 + public final static int GuardianVotingVotesComposer = 1829; // PRODUCTION-201611291003-338511768 + public final static int GuardianVotingResultComposer = 3276; // PRODUCTION-201611291003-338511768 + public final static int GuardianVotingTimeEnded = 30; // PRODUCTION-201611291003-338511768 - public final static int GuideToolsComposer = 1548; - public final static int GuardianNewReportReceivedComposer = 735; - public final static int GuardianVotingRequestedComposer = 143; - public final static int GuardianVotingVotesComposer = 1829; - public final static int GuardianVotingResultComposer = 3276; - public final static int GuardianVotingTimeEnded = 30; + public final static int RoomMutedComposer = 2533; // PRODUCTION-201611291003-338511768 - public final static int RoomMutedComposer = 2533; + public final static int HideDoorbellComposer = 3783; // PRODUCTION-201611291003-338511768 + public final static int RoomQueueStatusMessage = 2208; // PRODUCTION-201611291003-338511768 + public final static int RoomUnknown3Composer = 1033; // PRODUCTION-201611291003-338511768 - public final static int HideDoorbellComposer = 3783; - public final static int RoomQueueStatusMessage = 2208; - public final static int RoomUnknown3Composer = 1033; + public final static int EffectsListRemoveComposer = 2228; // PRODUCTION-201611291003-338511768 - public final static int EffectsListRemoveComposer = 2228; + public final static int OldPublicRoomsComposer = 2726; // PRODUCTION-201611291003-338511768 + public final static int ItemStateComposer2 = 3431; // PRODUCTION-201611291003-338511768 - public final static int OldPublicRoomsComposer = 2726; - public final static int ItemStateComposer2 = 3431; + public final static int HotelWillCloseInMinutesComposer = 1050; // PRODUCTION-201611291003-338511768 + public final static int HotelWillCloseInMinutesAndBackInComposer = 1350; // PRODUCTION-201611291003-338511768 + public final static int HotelClosesAndWillOpenAtComposer = 2771; // PRODUCTION-201611291003-338511768 + public final static int HotelClosedAndOpensComposer = 3728; // PRODUCTION-201611291003-338511768 + public final static int StaffAlertAndOpenHabboWayComposer = 1683; // PRODUCTION-201611291003-338511768 + public final static int StaffAlertWithLinkComposer = 2030; // PRODUCTION-201611291003-338511768 + public final static int StaffAlertWIthLinkAndOpenHabboWayComposer = 1890; // PRODUCTION-201611291003-338511768 - public final static int HotelWillCloseInMinutesComposer = 1050; - public final static int HotelWillCloseInMinutesAndBackInComposer = 1350; - public final static int HotelClosesAndWillOpenAtComposer = 2771; - public final static int HotelClosedAndOpensComposer = 3728; - public final static int StaffAlertAndOpenHabboWayComposer = 1683; - public final static int StaffAlertWithLinkComposer = 2030; - public final static int StaffAlertWIthLinkAndOpenHabboWayComposer = 1890; - - public final static int RoomMessagesPostedCountComposer = 1634; - public final static int CantScratchPetNotOldEnoughComposer = 1130; - public final static int PetBoughtNotificationComposer = 1111; - public final static int MessagesForYouComposer = 2035; - public final static int UnknownStatusComposer = 1243; - public final static int CloseWebPageComposer = 426; - public final static int PickMonthlyClubGiftNotificationComposer = 2188; - public final static int RemoveGuildFromRoomComposer = 3129; - public final static int RoomBannedUsersComposer = 1869; - public final static int OpenRoomCreationWindowComposer = 2064; - public final static int ItemsDataUpdateComposer = 1453; - public final static int WelcomeGiftComposer = 2707; - public final static int SimplePollStartComposer = 2665; - public final static int RoomNoRightsComposer = 2392; - public final static int GuildEditFailComposer = 3988; - public final static int MinimailNewMessageComposer = 1911; - public final static int RoomFilterWordsComposer = 2937; - public final static int VerifyMobileNumberComposer = 3639; - public final static int NewUserGiftComposer = 3575; - public final static int UpdateUserLookComposer = 2429; - public final static int RoomUserIgnoredComposer = 207; - public final static int PetBreedingFailedComposer = 1625; - public final static int RoomUserNameChangedComposer = 2182; - public final static int LoveLockFurniStartComposer = 3753; - public final static int LoveLockFurniFriendConfirmedComposer = 382; - public final static int LoveLockFurniFinishedComposer = 770; - public final static int PetPackageNameValidationComposer = 546; - public final static int GameCenterFeaturedPlayersComposer = 3097; - public final static int HabboMallComposer = 1237; - public final static int TargetedOfferComposer = 119; - public final static int LeprechaunStarterBundleComposer = 2380; - public final static int VerifyMobilePhoneWindowComposer = 2890; - public final static int VerifyMobilePhoneCodeWindowComposer = 800; - public final static int VerifyMobilePhoneDoneComposer = 91; - public final static int RoomUserReceivedHandItemComposer = 354; - public final static int MutedWhisperComposer = 826; - public final static int UnknownHintComposer = 1787; - public final static int BullyReportClosedComposer = 2674; - public final static int PromoteOwnRoomsListComposer = 2468; - public final static int NotEnoughPointsTypeComposer = 3914; - public final static int WatchAndEarnRewardComposer = 2125; - public final static int NewYearResolutionComposer = 66; - public final static int WelcomeGiftErrorComposer = 2293; - public final static int RentableItemBuyOutPriceComposer = 35; - public final static int VipTutorialsStartComposer = 2278; - public final static int NewNavigatorCategoryUserCountComposer = 1455; - public final static int CameraRoomThumbnailSavedComposer = 3595; - public final static int RoomEditSettingsErrorComposer = 1555; - public final static int GuildAcceptMemberErrorComposer = 818; - public final static int MostUselessErrorAlertComposer = 662; - public final static int AchievementsConfigurationComposer = 1689; - public final static int PetBreedingResultComposer = 634; - public final static int RoomUserQuestionAnsweredComposer = 2589; - public final static int PetBreedingStartComposer = 1746; - public final static int CustomNotificationComposer = 909; - public final static int UpdateStackHeightTileHeightComposer = 2816; - public final static int HotelViewCustomTimerComposer = 3926; - public final static int MarketplaceItemPostedComposer = 1359; - public final static int HabboWayQuizComposer2 = 2927; - public final static int GuildFavoriteRoomUserUpdateComposer = 3403; - public final static int RoomAdErrorComposer = 1759; - public final static int NewNavigatorSettingsComposer = 518; - public final static int CameraPublishWaitMessageComposer = 2057; - public final static int RoomInviteComposer = 3870; - public final static int BullyReportRequestComposer = 3463; - public final static int UnknownHelperComposer = 77; - public final static int HelperRequestDisabledComposer = 1651; - public final static int RoomUnitIdleComposer = 1797; - public final static int QuestCompletedComposer = 949; - public final static int UnkownPetPackageComposer = 1723; - public final static int ForwardToRoomComposer = 160; - public final static int EffectsListEffectEnableComposer = 1959; - public final static int CompetitionEntrySubmitResultComposer = 1177; - public final static int ExtendClubMessageComposer = 3964; - public final static int HotelViewConcurrentUsersComposer = 2737; + public final static int RoomMessagesPostedCountComposer = 1634; // PRODUCTION-201611291003-338511768 + public final static int CantScratchPetNotOldEnoughComposer = 1130; // PRODUCTION-201611291003-338511768 + public final static int PetBoughtNotificationComposer = 1111; // PRODUCTION-201611291003-338511768 + public final static int MessagesForYouComposer = 2035; // PRODUCTION-201611291003-338511768 + public final static int UnknownStatusComposer = 1243; // PRODUCTION-201611291003-338511768 + public final static int CloseWebPageComposer = 426; // PRODUCTION-201611291003-338511768 + public final static int PickMonthlyClubGiftNotificationComposer = 2188; // PRODUCTION-201611291003-338511768 + public final static int RemoveGuildFromRoomComposer = 3129; // PRODUCTION-201611291003-338511768 + public final static int RoomBannedUsersComposer = 1869; // PRODUCTION-201611291003-338511768 + public final static int OpenRoomCreationWindowComposer = 2064; // PRODUCTION-201611291003-338511768 + public final static int ItemsDataUpdateComposer = 1453; // PRODUCTION-201611291003-338511768 + public final static int WelcomeGiftComposer = 2707; // PRODUCTION-201611291003-338511768 + public final static int SimplePollStartComposer = 2665; // PRODUCTION-201611291003-338511768 + public final static int RoomNoRightsComposer = 2392; // PRODUCTION-201611291003-338511768 + public final static int GuildEditFailComposer = 3988; // PRODUCTION-201611291003-338511768 + public final static int MinimailNewMessageComposer = 1911; // PRODUCTION-201611291003-338511768 + public final static int RoomFilterWordsComposer = 2937; // PRODUCTION-201611291003-338511768 + public final static int VerifyMobileNumberComposer = 3639; // PRODUCTION-201611291003-338511768 + public final static int NewUserGiftComposer = 3575; // PRODUCTION-201611291003-338511768 + public final static int UpdateUserLookComposer = 2429; // PRODUCTION-201611291003-338511768 + public final static int RoomUserIgnoredComposer = 207; // PRODUCTION-201611291003-338511768 + public final static int PetBreedingFailedComposer = 1625; // PRODUCTION-201611291003-338511768 + public final static int RoomUserNameChangedComposer = 2182; // PRODUCTION-201611291003-338511768 + public final static int LoveLockFurniStartComposer = 3753; // PRODUCTION-201611291003-338511768 + public final static int LoveLockFurniFriendConfirmedComposer = 382; // PRODUCTION-201611291003-338511768 + public final static int LoveLockFurniFinishedComposer = 770; // PRODUCTION-201611291003-338511768 + public final static int PetPackageNameValidationComposer = 546; // PRODUCTION-201611291003-338511768 + public final static int GameCenterFeaturedPlayersComposer = 3097; // PRODUCTION-201611291003-338511768 + public final static int HabboMallComposer = 1237; // PRODUCTION-201611291003-338511768 + public final static int TargetedOfferComposer = 119; // PRODUCTION-201611291003-338511768 + public final static int LeprechaunStarterBundleComposer = 2380; // PRODUCTION-201611291003-338511768 + public final static int VerifyMobilePhoneWindowComposer = 2890; // PRODUCTION-201611291003-338511768 + public final static int VerifyMobilePhoneCodeWindowComposer = 800; // PRODUCTION-201611291003-338511768 + public final static int VerifyMobilePhoneDoneComposer = 91; // PRODUCTION-201611291003-338511768 + public final static int RoomUserReceivedHandItemComposer = 354; // PRODUCTION-201611291003-338511768 + public final static int MutedWhisperComposer = 826; // PRODUCTION-201611291003-338511768 + public final static int UnknownHintComposer = 1787; // PRODUCTION-201611291003-338511768 + public final static int BullyReportClosedComposer = 2674; // PRODUCTION-201611291003-338511768 + public final static int PromoteOwnRoomsListComposer = 2468; // PRODUCTION-201611291003-338511768 + public final static int NotEnoughPointsTypeComposer = 3914; // PRODUCTION-201611291003-338511768 + public final static int WatchAndEarnRewardComposer = 2125; // PRODUCTION-201611291003-338511768 + public final static int NewYearResolutionComposer = 66; // PRODUCTION-201611291003-338511768 + public final static int WelcomeGiftErrorComposer = 2293; // PRODUCTION-201611291003-338511768 + public final static int RentableItemBuyOutPriceComposer = 35; // PRODUCTION-201611291003-338511768 + public final static int VipTutorialsStartComposer = 2278; // PRODUCTION-201611291003-338511768 + public final static int NewNavigatorCategoryUserCountComposer = 1455; // PRODUCTION-201611291003-338511768 + public final static int CameraRoomThumbnailSavedComposer = 3595; // PRODUCTION-201611291003-338511768 + public final static int RoomEditSettingsErrorComposer = 1555; // PRODUCTION-201611291003-338511768 + public final static int GuildAcceptMemberErrorComposer = 818; // PRODUCTION-201611291003-338511768 + public final static int MostUselessErrorAlertComposer = 662; // PRODUCTION-201611291003-338511768 + public final static int AchievementsConfigurationComposer = 1689; // PRODUCTION-201611291003-338511768 + public final static int PetBreedingResultComposer = 634; // PRODUCTION-201611291003-338511768 + public final static int RoomUserQuestionAnsweredComposer = 2589; // PRODUCTION-201611291003-338511768 + public final static int PetBreedingStartComposer = 1746; // PRODUCTION-201611291003-338511768 + public final static int CustomNotificationComposer = 909; // PRODUCTION-201611291003-338511768 + public final static int UpdateStackHeightTileHeightComposer = 2816; // PRODUCTION-201611291003-338511768 + public final static int HotelViewCustomTimerComposer = 3926; // PRODUCTION-201611291003-338511768 + public final static int MarketplaceItemPostedComposer = 1359; // PRODUCTION-201611291003-338511768 + public final static int HabboWayQuizComposer2 = 2927; // PRODUCTION-201611291003-338511768 + public final static int GuildFavoriteRoomUserUpdateComposer = 3403; // PRODUCTION-201611291003-338511768 + public final static int RoomAdErrorComposer = 1759; // PRODUCTION-201611291003-338511768 + public final static int NewNavigatorSettingsComposer = 518; // PRODUCTION-201611291003-338511768 + public final static int CameraPublishWaitMessageComposer = 2057; // PRODUCTION-201611291003-338511768 + public final static int RoomInviteComposer = 3870; // PRODUCTION-201611291003-338511768 + public final static int BullyReportRequestComposer = 3463; // PRODUCTION-201611291003-338511768 + public final static int UnknownHelperComposer = 77; // PRODUCTION-201611291003-338511768 + public final static int HelperRequestDisabledComposer = 1651; // PRODUCTION-201611291003-338511768 + public final static int RoomUnitIdleComposer = 1797; // PRODUCTION-201611291003-338511768 + public final static int QuestCompletedComposer = 949; // PRODUCTION-201611291003-338511768 + public final static int UnkownPetPackageComposer = 1723; // PRODUCTION-201611291003-338511768 + public final static int ForwardToRoomComposer = 160; // PRODUCTION-201611291003-338511768 + public final static int EffectsListEffectEnableComposer = 1959; // PRODUCTION-201611291003-338511768 + public final static int CompetitionEntrySubmitResultComposer = 1177; // PRODUCTION-201611291003-338511768 + public final static int ExtendClubMessageComposer = 3964; // PRODUCTION-201611291003-338511768 + public final static int HotelViewConcurrentUsersComposer = 2737; // PRODUCTION-201611291003-338511768 public final static int InventoryAddEffectComposer =-1;//error 404 - public final static int TalentLevelUpdateComposer = 638; - public final static int BullyReportedMessageComposer = 3285; - public final static int UnknownQuestComposer3 = 1122; - public final static int FriendToolbarNotificationComposer = 3082; - public final static int MessengerErrorComposer = 896; - public final static int CameraPriceComposer = 3878; - public final static int PetBreedingCompleted = 2527; - public final static int RoomUserUnbannedComposer = 3429; - public final static int HotelViewCommunityGoalComposer = 2525; - public final static int UserClassificationComposer = 966; - public final static int CanCreateEventComposer = 2599; - public final static int UnknownGuild2Composer = 1459; - public final static int YoutubeDisplayListComposer = 1112; - public final static int YoutubeMessageComposer2 = 1411; - public final static int YoutubeMessageComposer3 = 1554; - public final static int RoomCategoryUpdateMessageComposer = 3896; - public final static int QuestsComposer = 3625; - public final static int GiftReceiverNotFoundComposer = 1517; - public final static int ConvertedForwardToRoomComposer = 1331; - public final static int FavoriteRoomChangedComposer = 2524; - public final static int AlertPurchaseUnavailableComposer = 3770; - public final static int PetBreedingStartFailedComposer = 2621; - public final static int DailyQuestComposer = 1878; - public final static int NewNavigatorRoomEventComposer = 1840; - public final static int HotelViewHideCommunityVoteButtonComposer = 1435; - public final static int CatalogSearchResultComposer = 3388; - public final static int FriendFindingRoomComposer = 1210; - public final static int QuestComposer = 230; - public final static int ModToolSanctionDataComposer = 2782; + public final static int TalentLevelUpdateComposer = 638; // PRODUCTION-201611291003-338511768 + public final static int BullyReportedMessageComposer = 3285; // PRODUCTION-201611291003-338511768 + public final static int UnknownQuestComposer3 = 1122; // PRODUCTION-201611291003-338511768 + public final static int FriendToolbarNotificationComposer = 3082; // PRODUCTION-201611291003-338511768 + public final static int MessengerErrorComposer = 896; // PRODUCTION-201611291003-338511768 + public final static int CameraPriceComposer = 3878; // PRODUCTION-201611291003-338511768 + public final static int PetBreedingCompleted = 2527; // PRODUCTION-201611291003-338511768 + public final static int RoomUserUnbannedComposer = 3429; // PRODUCTION-201611291003-338511768 + public final static int HotelViewCommunityGoalComposer = 2525; // PRODUCTION-201611291003-338511768 + public final static int UserClassificationComposer = 966; // PRODUCTION-201611291003-338511768 + public final static int CanCreateEventComposer = 2599; // PRODUCTION-201611291003-338511768 + public final static int UnknownGuild2Composer = 1459; // PRODUCTION-201611291003-338511768 + public final static int YoutubeDisplayListComposer = 1112; // PRODUCTION-201611291003-338511768 + public final static int YoutubeMessageComposer2 = 1411; // PRODUCTION-201611291003-338511768 + public final static int YoutubeMessageComposer3 = 1554; // PRODUCTION-201611291003-338511768 + public final static int RoomCategoryUpdateMessageComposer = 3896; // PRODUCTION-201611291003-338511768 + public final static int QuestsComposer = 3625; // PRODUCTION-201611291003-338511768 + public final static int GiftReceiverNotFoundComposer = 1517; // PRODUCTION-201611291003-338511768 + public final static int ConvertedForwardToRoomComposer = 1331; // PRODUCTION-201611291003-338511768 + public final static int FavoriteRoomChangedComposer = 2524; // PRODUCTION-201611291003-338511768 + public final static int AlertPurchaseUnavailableComposer = 3770; // PRODUCTION-201611291003-338511768 + public final static int PetBreedingStartFailedComposer = 2621; // PRODUCTION-201611291003-338511768 + public final static int DailyQuestComposer = 1878; // PRODUCTION-201611291003-338511768 + public final static int NewNavigatorRoomEventComposer = 1840; // PRODUCTION-201611291003-338511768 + public final static int HotelViewHideCommunityVoteButtonComposer = 1435; // PRODUCTION-201611291003-338511768 + public final static int CatalogSearchResultComposer = 3388; // PRODUCTION-201611291003-338511768 + public final static int FriendFindingRoomComposer = 1210; // PRODUCTION-201611291003-338511768 + public final static int QuestComposer = 230; // PRODUCTION-201611291003-338511768 + public final static int ModToolSanctionDataComposer = 2782; // PRODUCTION-201611291003-338511768 public final static int RoomEventMessageComposer = 2274; - public final static int JukeBoxMySongsComposer = 2602; - public final static int JukeBoxNowPlayingMessageComposer = 469; - public final static int JukeBoxPlaylistFullComposer = 105; - public final static int JukeBoxPlayListUpdatedComposer = 1748; - public final static int JukeBoxPlayListAddSongComposer = 1140; - public final static int JukeBoxPlayListComposer = 34; - public final static int JukeBoxTrackDataComposer = 3365; - public final static int JukeBoxTrackCodeComposer = 1381; - - - public final static int CraftableProductsComposer = 1000; - public final static int CraftingRecipeComposer = 2774; - public final static int CraftingResultComposer = 618; - public final static int CraftingComposerFour = 2124; - - public final static int UnknownComposer_100 = 1553; - public final static int UnknownComposer_1031 = 1001; - public final static int ConnectionErrorComposer = 1004; - public final static int BotForceOpenContextMenuComposer = 296; - public final static int UnknownComposer_1111 = 1551; - public final static int Game2WeeklyLeaderboardComposer = 2196; - public final static int UnknownComposer_1165 = 904; - public final static int EffectsListAddComposer = 2867; - public final static int UnknownComposer_1188 = 1437; - public final static int UnknownComposer_1218 = 1730; - public final static int SubmitCompetitionRoomComposer = 3841; - public final static int GameAchievementsListComposer = 2265; - public final static int UnknownComposer_1271 = 1660; - public final static int OtherTradingDisabledComposer = 1254; - public final static int BaseJumpUnloadGameComposer = 1715; - public final static int UnknownComposer_1322 = 1730; - public final static int UnknownComposer_137 = 2897; - public final static int GameCenterAccountInfoComposer = 2893; - public final static int UnknowComposer_1390 = 2270; - public final static int BaseJumpLoadGameComposer = 3654; - public final static int UnknowComposer_1427 = 3319; - public final static int AdventCalendarDataComposer = 2531; - public final static int UnknownComposer_152 = 3954; - public final static int UnknownComposer_1529 = 1730; - public final static int UnknownComposer_1577 = 2641; - public final static int UnknownComposer_1712 = 1730; - public final static int NewYearResolutionCompletedComposer = 740; - public final static int UnknownComposer_1741 = 2246; - public final static int UnknownComposer_1744 = 2873; - public final static int AdventCalendarProductComposer = 2551; - public final static int ModToolSanctionInfoComposer = 2221; - public final static int UnknownComposer_1965 = 3292; - public final static int UnknownComposer_2053 = 1660; - public final static int GuideSessionPartnerIsPlayingComposer = 448; - public final static int BaseJumpLeaveQueueComposer = 1477; - public final static int Game2WeeklySmallLeaderboardComposer = 3512; - public final static int CatalogBuyVIPSMSComposer = 3315; - public final static int GameCenterGameListComposer = 222; - public final static int RoomUsersGuildBadgesComposer = 2402; - public final static int UnknownComposer_2563 = 1774; - public final static int UnknownComposer_2601 = 1663; - public final static int UnknownComposer_2621 = 1927; - public final static int UnknownComposer_2698 = 563; - - - - - - - - - - + public final static int JukeBoxMySongsComposer = 2602; // PRODUCTION-201611291003-338511768 + public final static int JukeBoxNowPlayingMessageComposer = 469; // PRODUCTION-201611291003-338511768 + public final static int JukeBoxPlaylistFullComposer = 105; // PRODUCTION-201611291003-338511768 + public final static int JukeBoxPlayListUpdatedComposer = 1748; // PRODUCTION-201611291003-338511768 + public final static int JukeBoxPlayListAddSongComposer = 1140; // PRODUCTION-201611291003-338511768 + public final static int JukeBoxPlayListComposer = 34; // PRODUCTION-201611291003-338511768 + public final static int JukeBoxTrackDataComposer = 3365; // PRODUCTION-201611291003-338511768 + public final static int JukeBoxTrackCodeComposer = 1381; // PRODUCTION-201611291003-338511768 + public final static int CraftableProductsComposer = 1000; // PRODUCTION-201611291003-338511768 + public final static int CraftingRecipeComposer = 2774; // PRODUCTION-201611291003-338511768 + public final static int CraftingResultComposer = 618; // PRODUCTION-201611291003-338511768 + public final static int CraftingComposerFour = 2124; // PRODUCTION-201611291003-338511768 + public final static int UnknownComposer_100 = 1553; // PRODUCTION-201611291003-338511768 //PetBReedingResult + public final static int UnknownComposer_1031 = 1001; // PRODUCTION-201611291003-338511768 + public final static int ConnectionErrorComposer = 1004; // PRODUCTION-201611291003-338511768 + public final static int BotForceOpenContextMenuComposer = 296; // PRODUCTION-201611291003-338511768 + public final static int UnknownComposer_1111 = 1551; // PRODUCTION-201611291003-338511768 + public final static int Game2WeeklyLeaderboardComposer = 2196; // PRODUCTION-201611291003-338511768 + public final static int UnknownComposer_1165 = 904; // PRODUCTION-201611291003-338511768 + public final static int EffectsListAddComposer = 2867; // PRODUCTION-201611291003-338511768 + public final static int UnknownComposer_1188 = 1437; // PRODUCTION-201611291003-338511768 + public final static int UnknownComposer_1218 = 1730; // PRODUCTION-201611291003-338511768 + public final static int SubmitCompetitionRoomComposer = 3841; // PRODUCTION-201611291003-338511768 + public final static int GameAchievementsListComposer = 2265; // PRODUCTION-201611291003-338511768 + public final static int UnknownComposer_1271 = 1660; // PRODUCTION-201611291003-338511768 + public final static int OtherTradingDisabledComposer = 1254; // PRODUCTION-201611291003-338511768 + public final static int BaseJumpUnloadGameComposer = 1715; // PRODUCTION-201611291003-338511768 + public final static int UnknownComposer_1322 = 1730; // PRODUCTION-201611291003-338511768 + public final static int UnknownComposer_137 = 2897; // PRODUCTION-201611291003-338511768 + public final static int GameCenterAccountInfoComposer = 2893; // PRODUCTION-201611291003-338511768 + public final static int UnknowComposer_1390 = 2270; // PRODUCTION-201611291003-338511768 + public final static int BaseJumpLoadGameComposer = 3654; // PRODUCTION-201611291003-338511768 + public final static int UnknowComposer_1427 = 3319; // PRODUCTION-201611291003-338511768 + public final static int AdventCalendarDataComposer = 2531; // PRODUCTION-201611291003-338511768 + public final static int UnknownComposer_152 = 3954; // PRODUCTION-201611291003-338511768 + public final static int UnknownComposer_1529 = 1730; // PRODUCTION-201611291003-338511768 + public final static int UnknownComposer_1577 = 2641; // PRODUCTION-201611291003-338511768 + public final static int UnknownComposer_1712 = 1730; // PRODUCTION-201611291003-338511768 + public final static int NewYearResolutionCompletedComposer = 740; // PRODUCTION-201611291003-338511768 + public final static int UnknownComposer_1741 = 2246; // PRODUCTION-201611291003-338511768 + public final static int UnknownComposer_1744 = 2873; // PRODUCTION-201611291003-338511768 + public final static int AdventCalendarProductComposer = 2551; // PRODUCTION-201611291003-338511768 + public final static int ModToolSanctionInfoComposer = 2221; // PRODUCTION-201611291003-338511768 + public final static int UnknownComposer_1965 = 3292; // PRODUCTION-201611291003-338511768 + public final static int UnknownComposer_2053 = 1660; // PRODUCTION-201611291003-338511768 + public final static int GuideSessionPartnerIsPlayingComposer = 448; // PRODUCTION-201611291003-338511768 + public final static int BaseJumpLeaveQueueComposer = 1477; // PRODUCTION-201611291003-338511768 + public final static int Game2WeeklySmallLeaderboardComposer = 3512; // PRODUCTION-201611291003-338511768 + public final static int CatalogBuyVIPSMSComposer = 3315; // PRODUCTION-201611291003-338511768 + public final static int GameCenterGameListComposer = 222; // PRODUCTION-201611291003-338511768 + public final static int RoomUsersGuildBadgesComposer = 2402; // PRODUCTION-201611291003-338511768 + public final static int UnknownComposer_2563 = 1774; // PRODUCTION-201611291003-338511768 + public final static int UnknownComposer_2601 = 1663; // PRODUCTION-201611291003-338511768 + public final static int UnknownComposer_2621 = 1927; // PRODUCTION-201611291003-338511768 + public final static int UnknownComposer_2698 = 563; // PRODUCTION-201611291003-338511768 +// 2699; +// 2748; +// 2773; +// 2964; +// 3020; +// 3024; +// 3046; +// 3124; +// 3179; +// 3189; +// 328; +// 3291; +// 3334; public final static int HabboWayQuizComposer1 = 3379; - - - - - - - - public final static int YouTradingDisabledComposer = 3058; - - - - +// 3391; +// 3427; +// 347; +// 3509; +// 3519; +// 3581; +// 3684; + public final static int YouTradingDisabledComposer = 3058; // PRODUCTION-201611291003-338511768 +// 3707; +// 3745; +// 3759; +// 3782; public final static int RoomFloorThicknessUpdatedComposer = 3786; - - public final static int CameraPurchaseSuccesfullComposer = 2783; - public final static int CameraCompetitionStatusComposer = 133; - - - - public final static int CameraURLComposer = 3696; - - - +// 3822; + public final static int CameraPurchaseSuccesfullComposer = 2783; // PRODUCTION-201611291003-338511768 + public final static int CameraCompetitionStatusComposer = 133; // PRODUCTION-201611291003-338511768 +// 3986; +// 467; +// 549; + public final static int CameraURLComposer = 3696; // PRODUCTION-201611291003-338511768 +// 608; +// 624; +// 675; public final static int HotelViewCatalogPageExpiringComposer = 690; - - - - - +// 749; +// 812; +// 843; +// 947; +// 982; public final static int SimplePollAnswerComposer = 2589; @@ -564,4 +564,6 @@ public class Outgoing public static final int SnowStormOnPlayerExitedArenaComposer = 5027; public static final int SnowStormGenericErrorComposer = 5028; public static final int SnowStormUserRematchedComposer = 5029; + + } diff --git a/src/main/java/com/eu/habbo/messages/outgoing/guilds/GuildConfirmRemoveMemberComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/guilds/GuildConfirmRemoveMemberComposer.java index b711438d..4a124ffb 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/guilds/GuildConfirmRemoveMemberComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/guilds/GuildConfirmRemoveMemberComposer.java @@ -6,8 +6,8 @@ import com.eu.habbo.messages.outgoing.Outgoing; public class GuildConfirmRemoveMemberComposer extends MessageComposer { - private final int userId; - private final int furniCount; + private int userId; + private int furniCount; public GuildConfirmRemoveMemberComposer(int userId, int furniCount) { diff --git a/src/main/java/com/eu/habbo/messages/outgoing/guilds/GuildEditFailComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/guilds/GuildEditFailComposer.java index 045e509d..5e15647f 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/guilds/GuildEditFailComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/guilds/GuildEditFailComposer.java @@ -11,7 +11,7 @@ public class GuildEditFailComposer extends MessageComposer public static final int HC_REQUIRED = 2; public static final int MAX_GUILDS_JOINED = 3; - private final int errorCode; + private int errorCode; public GuildEditFailComposer(int errorCode) { diff --git a/src/main/java/com/eu/habbo/messages/outgoing/guilds/GuildFavoriteRoomUserUpdateComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/guilds/GuildFavoriteRoomUserUpdateComposer.java index 075230ae..8e1a2190 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/guilds/GuildFavoriteRoomUserUpdateComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/guilds/GuildFavoriteRoomUserUpdateComposer.java @@ -8,8 +8,8 @@ import com.eu.habbo.messages.outgoing.Outgoing; public class GuildFavoriteRoomUserUpdateComposer extends MessageComposer { - private final RoomUnit roomUnit; - private final Guild guild; + private RoomUnit roomUnit; + private Guild guild; public GuildFavoriteRoomUserUpdateComposer(RoomUnit roomUnit, Guild guild) { diff --git a/src/main/java/com/eu/habbo/messages/outgoing/guilds/GuildFurniWidgetComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/guilds/GuildFurniWidgetComposer.java index dab286e0..c68838d1 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/guilds/GuildFurniWidgetComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/guilds/GuildFurniWidgetComposer.java @@ -25,7 +25,7 @@ public class GuildFurniWidgetComposer extends MessageComposer public ServerMessage compose() { this.response.init(Outgoing.GuildFurniWidgetComposer); - this.response.appendInt(this.item.getId()); + this.response.appendInt(item.getId()); this.response.appendInt(this.guild.getId()); this.response.appendString(this.guild.getName()); this.response.appendInt(this.guild.getRoomId()); diff --git a/src/main/java/com/eu/habbo/messages/outgoing/guilds/GuildInfoComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/guilds/GuildInfoComposer.java index 326d7d7b..869eaf67 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/guilds/GuildInfoComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/guilds/GuildInfoComposer.java @@ -45,14 +45,14 @@ public class GuildInfoComposer extends MessageComposer this.response.appendBoolean(this.client.getHabbo().getHabboStats().guild == this.guild.getId()); //favorite group this.response.appendString(new SimpleDateFormat("dd-MM-yyyy").format(new Date(this.guild.getDateCreated() * 1000L))); this.response.appendBoolean(adminPermissions || (this.guild.getOwnerId() == this.client.getHabbo().getHabboInfo().getId())); - this.response.appendBoolean(adminPermissions || (this.member != null && (this.member.getRank().equals(GuildRank.MOD) || this.member.getRank().equals(GuildRank.ADMIN)))); //Is admin. //this.member.getRank().equals(GuildRank.MOD) || + this.response.appendBoolean(adminPermissions || (this.member != null && (this.member.getRank().equals(GuildRank.ADMIN)))); //Is admin. //this.member.getRank().equals(GuildRank.MOD) || //Habbo owner = Emulator.getGameEnvironment().getHabboManager().getHabbo(this.guild.getOwnerId()); this.response.appendString(this.guild.getOwnerName()); this.response.appendBoolean(this.newWindow); - this.response.appendBoolean(this.guild.getRights() == 0); //User can place furni. this.guild.getRights() == 0 - this.response.appendInt((adminPermissions || (this.member != null && (this.member.getRank().equals(GuildRank.MOD) || this.guild.getOwnerId() == this.client.getHabbo().getHabboInfo().getId()))) ? this.guild.getRequestCount() : 0); //Guild invites count. - this.response.appendBoolean(true); //Unknown + this.response.appendBoolean(this.guild.getRights() == 0); //User can place furni. + this.response.appendInt((adminPermissions || this.guild.getOwnerId() == this.client.getHabbo().getHabboInfo().getId()) ? this.guild.getRequestCount() : 0); //Guild invites count. + this.response.appendBoolean(this.guild.hasForum()); //Unknown return this.response; } } diff --git a/src/main/java/com/eu/habbo/messages/outgoing/guilds/GuildMembersComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/guilds/GuildMembersComposer.java index afbc277e..63b8f061 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/guilds/GuildMembersComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/guilds/GuildMembersComposer.java @@ -13,19 +13,19 @@ import java.util.TimeZone; public class GuildMembersComposer extends MessageComposer { - private final Guild guild; - private final int totalResults; private final ArrayList members; + private final Guild guild; + private final Habbo session; private final int pageId; private final int level; private final String searchValue; private final boolean isAdmin; - public GuildMembersComposer(Guild guild, int totalResults, ArrayList members, int pageId, int level, String searchValue, boolean isAdmin) + public GuildMembersComposer(Guild guild, ArrayList members, Habbo session, int pageId, int level, String searchValue, boolean isAdmin) { this.guild = guild; - this.totalResults = totalResults; this.members = members; + this.session = session; this.pageId = pageId; this.level = level; this.searchValue = searchValue; @@ -40,7 +40,7 @@ public class GuildMembersComposer extends MessageComposer this.response.appendString(this.guild.getName()); this.response.appendInt(this.guild.getRoomId()); this.response.appendString(this.guild.getBadge()); - this.response.appendInt(this.totalResults); + this.response.appendInt(this.guild.getMemberCount()); this.response.appendInt(this.members.size()); Calendar cal = Calendar.getInstance(TimeZone.getDefault()); diff --git a/src/main/java/com/eu/habbo/messages/outgoing/guilds/GuildMembershipRequestedComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/guilds/GuildMembershipRequestedComposer.java deleted file mode 100644 index 3ae497cb..00000000 --- a/src/main/java/com/eu/habbo/messages/outgoing/guilds/GuildMembershipRequestedComposer.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.eu.habbo.messages.outgoing.guilds; - -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; - -public class GuildMembershipRequestedComposer extends MessageComposer -{ - private final int guildId; - private final int requester; - private final String username; - private final String look; - private final HabboGender gender; - - public GuildMembershipRequestedComposer(int guildId, int requester, String username, String look, HabboGender gender) - { - this.guildId = guildId; - this.requester = requester; - this.username = username; - this.look = look; - this.gender = gender; - } - - @Override - public ServerMessage compose() - { - this.response.init(Outgoing.GuildMembershipRequestedComposer); - this.response.appendInt(this.guildId); - this.response.appendInt(2); - this.response.appendInt(this.requester); - this.response.appendString(this.username); - this.response.appendString(this.look); - this.response.appendString(this.gender.name()); - return this.response; - } -} \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/messages/outgoing/guilds/RemoveGuildFromRoomComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/guilds/RemoveGuildFromRoomComposer.java index 25cb34ce..9f65c6d0 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/guilds/RemoveGuildFromRoomComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/guilds/RemoveGuildFromRoomComposer.java @@ -6,7 +6,7 @@ import com.eu.habbo.messages.outgoing.Outgoing; public class RemoveGuildFromRoomComposer extends MessageComposer { - private final int guildId; + private int guildId; public RemoveGuildFromRoomComposer(int guildId) { diff --git a/src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/ForumsTestComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/ForumsTestComposer.java deleted file mode 100644 index b2bf8e85..00000000 --- a/src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/ForumsTestComposer.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.eu.habbo.messages.outgoing.guilds.forums; - -import com.eu.habbo.messages.ServerMessage; -import com.eu.habbo.messages.outgoing.MessageComposer; - -public class ForumsTestComposer extends MessageComposer -{ - @Override - public ServerMessage compose() - { - this.response.init(2379); - this.response.appendInt(0); - return this.response; - } -} \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/GuildForumCommentsComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/GuildForumCommentsComposer.java index 0779fb66..500c1284 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/GuildForumCommentsComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/GuildForumCommentsComposer.java @@ -26,10 +26,12 @@ public class GuildForumCommentsComposer extends MessageComposer public ServerMessage compose() { this.response.init(Outgoing.GuildForumCommentsComposer); + this.response.appendInt(this.guildId); //guild_id this.response.appendInt(this.threadId); //thread_id this.response.appendInt(this.index); //start_index this.response.appendInt(this.guildForumCommentList.size()); + for (final GuildForumComment comment : this.guildForumCommentList) { comment.serialize(this.response); diff --git a/src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/GuildForumDataComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/GuildForumDataComposer.java index 82b3d050..206df7e3 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/GuildForumDataComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/GuildForumDataComposer.java @@ -2,46 +2,78 @@ package com.eu.habbo.messages.outgoing.guilds.forums; import com.eu.habbo.Emulator; import com.eu.habbo.habbohotel.guilds.Guild; +import com.eu.habbo.habbohotel.guilds.GuildMember; +import com.eu.habbo.habbohotel.guilds.GuildRank; import com.eu.habbo.habbohotel.guilds.forums.GuildForum; import com.eu.habbo.habbohotel.users.Habbo; import com.eu.habbo.messages.ServerMessage; import com.eu.habbo.messages.outgoing.MessageComposer; import com.eu.habbo.messages.outgoing.Outgoing; -public class GuildForumDataComposer extends MessageComposer -{ +public class GuildForumDataComposer extends MessageComposer { public final GuildForum forum; public Habbo habbo; - public GuildForumDataComposer(GuildForum forum, Habbo habbo) - { + public GuildForumDataComposer(GuildForum forum, Habbo habbo) { this.forum = forum; this.habbo = habbo; } @Override - public ServerMessage compose() - { - //Possibly related to settings. + public ServerMessage compose() { this.response.init(Outgoing.GuildForumDataComposer); - //_SafeStr_3845._SafeStr_19178(k) { - this.forum.serializeUserForum(this.response, this.habbo); Guild guild = Emulator.getGameEnvironment().getGuildManager().getGuild(this.forum.getGuild()); + GuildMember member = Emulator.getGameEnvironment().getGuildManager().getGuildMember(guild, habbo); + boolean isAdmin = member != null && (member.getRank() == GuildRank.MOD || member.getRank() == GuildRank.ADMIN || guild.getOwnerId() == this.habbo.getHabboInfo().getId()); + boolean isStaff = this.habbo.hasPermission("acc_modtool_ticket_q"); + + String errorRead = ""; + String errorPost = ""; + String errorStartThread = ""; + String errorModerate = ""; + + if (guild.canReadForum().state == 1 && member == null && !isStaff) { + errorRead = "not_member"; + } else if (guild.canReadForum().state == 2 && !isAdmin && !isStaff) { + errorRead = "not_admin"; + } + + if (guild.canPostMessages().state == 1 && member == null && !isStaff) { + errorPost = "not_member"; + } else if (guild.canPostMessages().state == 2 && !isAdmin && !isStaff) { + errorPost = "not_admin"; + } else if (guild.canPostMessages().state == 3 && guild.getOwnerId() != this.habbo.getHabboInfo().getId() && !isStaff) { + errorPost = "now_owner"; + } + + if (guild.canPostThreads().state == 1 && member == null && !isStaff) { + errorStartThread = "not_member"; + } else if (guild.canPostThreads().state == 2 && !isAdmin && !isStaff) { + errorStartThread = "not_admin"; + } else if (guild.canPostThreads().state == 3 && guild.getOwnerId() != this.habbo.getHabboInfo().getId() && !isStaff) { + errorStartThread = "now_owner"; + } + + if (guild.canModForum().state == 2 && !isAdmin && !isStaff) { + errorModerate = "not_admin"; + } else if (guild.canModForum().state == 3 && guild.getOwnerId() != this.habbo.getHabboInfo().getId() && !isStaff) { + errorModerate = "now_owner"; + } this.response.appendInt(guild.canReadForum().state); this.response.appendInt(guild.canPostMessages().state); this.response.appendInt(guild.canPostThreads().state); this.response.appendInt(guild.canModForum().state); - this.response.appendString(""); //_local_2._SafeStr_19197 = k.readString(); - this.response.appendString(""); //_local_2._SafeStr_19198 = k.readString(); = member - this.response.appendString(guild.getOwnerId()== this.habbo.getClient().getHabbo().getHabboInfo().getId() ? "" : "not_owner"); //_local_2._SafeStr_19199 = k.readString(); = owner - this.response.appendString(guild.getOwnerId()== this.habbo.getClient().getHabbo().getHabboInfo().getId() ? "" : "not_admin"); //_local_2._SafeStr_19200 = k.readString(); = admin - this.response.appendString(""); //_local_2._SafeStr_19201 = k.readString(); = citizen - this.response.appendBoolean(guild.getOwnerId() == this.habbo.getClient().getHabbo().getHabboInfo().getId()); //;_local_2._SafeStr_19202 = k.readBoolean(); = acces forum settings - this.response.appendBoolean(false); //_local_2._SafeStr_19203 = k.readBoolean(); + this.response.appendString(errorRead); + this.response.appendString(errorPost); + this.response.appendString(errorStartThread); + this.response.appendString(errorModerate); + this.response.appendString(""); //citizen + this.response.appendBoolean(guild.getOwnerId() == this.habbo.getHabboInfo().getId()); //Forum Settings + this.response.appendBoolean(guild.getOwnerId() == this.habbo.getHabboInfo().getId() || isStaff); //Can Mod (staff) } return this.response; } diff --git a/src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/GuildForumListComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/GuildForumListComposer.java index 56f7f539..e659fe7c 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/GuildForumListComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/GuildForumListComposer.java @@ -7,30 +7,34 @@ import com.eu.habbo.messages.outgoing.MessageComposer; import com.eu.habbo.messages.outgoing.Outgoing; import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; -public class GuildForumListComposer extends MessageComposer -{ +public class GuildForumListComposer extends MessageComposer { private final List forums; private final Habbo habbo; private final int viewMode; + private final int startIndex; - public GuildForumListComposer(List forums, Habbo habbo, int viewMode) - { - this.forums = forums; - this.habbo = habbo; + public GuildForumListComposer(List forums, Habbo habbo, int viewMode, int page) { + this.forums = forums; + this.habbo = habbo; this.viewMode = viewMode; + this.startIndex = page; } @Override - public ServerMessage compose() - { + public ServerMessage compose() { + forums.removeIf(Objects::isNull); + + List guilds = forums.stream().skip(this.startIndex).limit(20).map(GuildForum::getGuild).collect(Collectors.toList()); + this.response.init(Outgoing.GuildForumListComposer); this.response.appendInt(this.viewMode); + this.response.appendInt(guilds.size()); this.response.appendInt(0); - this.response.appendInt(0); - this.response.appendInt(this.forums.size()); //Count... - for (final GuildForum forum : this.forums) - { + this.response.appendInt(this.forums.size()); + for (final GuildForum forum : this.forums) { forum.serializeUserForum(this.response, this.habbo); } diff --git a/src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/UnknownGuildForumComposer6.java b/src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/PostUpdateMessageComposer.java similarity index 77% rename from src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/UnknownGuildForumComposer6.java rename to src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/PostUpdateMessageComposer.java index 57e687ca..23356707 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/UnknownGuildForumComposer6.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/PostUpdateMessageComposer.java @@ -5,13 +5,13 @@ import com.eu.habbo.messages.ServerMessage; import com.eu.habbo.messages.outgoing.MessageComposer; import com.eu.habbo.messages.outgoing.Outgoing; -public class UnknownGuildForumComposer6 extends MessageComposer +public class PostUpdateMessageComposer extends MessageComposer { public final int guildId; public final int threadId; public final GuildForumComment comment; - public UnknownGuildForumComposer6(int guildId, int threadId, GuildForumComment comment) + public PostUpdateMessageComposer(int guildId, int threadId, GuildForumComment comment) { this.guildId = guildId; this.threadId = threadId; @@ -21,10 +21,12 @@ public class UnknownGuildForumComposer6 extends MessageComposer @Override public ServerMessage compose() { - this.response.init(Outgoing.UnknownGuildForumComposer6); + this.response.init(Outgoing.PostUpdateMessageComposer); + this.response.appendInt(this.guildId); //guild_id this.response.appendInt(this.threadId); //thread_id this.comment.serialize(this.response); //Comment + return this.response; } } \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/ThreadUpdatedMessageComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/ThreadUpdatedMessageComposer.java new file mode 100644 index 00000000..5f7eb9b9 --- /dev/null +++ b/src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/ThreadUpdatedMessageComposer.java @@ -0,0 +1,73 @@ +package com.eu.habbo.messages.outgoing.guilds.forums; + +import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.guilds.Guild; +import com.eu.habbo.habbohotel.guilds.GuildRank; +import com.eu.habbo.habbohotel.guilds.forums.GuildForum; +import com.eu.habbo.habbohotel.guilds.forums.GuildForumThread; +import com.eu.habbo.habbohotel.users.Habbo; +import com.eu.habbo.messages.ServerMessage; +import com.eu.habbo.messages.outgoing.MessageComposer; +import com.eu.habbo.messages.outgoing.Outgoing; +import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertComposer; +import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertKeys; + +public class ThreadUpdatedMessageComposer extends MessageComposer { + public final GuildForumThread thread; + + public final GuildForum forum; + + private final Habbo habbo; + + private final boolean isPinned; + + private final boolean isLocked; + + public ThreadUpdatedMessageComposer(GuildForum forum, Integer thread, Habbo habbo, boolean isPinned, boolean isLocked) { + this.forum = forum; + this.habbo = habbo; + this.thread = forum.getThread(thread); + this.isPinned = isPinned; + this.isLocked = isLocked; + } + + @Override + public ServerMessage compose() { + Guild guild = Emulator.getGameEnvironment().getGuildManager().getGuild(forum.getGuild()); + + if (this.thread == null) + return null; + + if (isPinned != thread.isPinned()) { + this.habbo.getClient().sendResponse(new BubbleAlertComposer(isPinned ? BubbleAlertKeys.FORUMS_THREAD_PINNED.key : BubbleAlertKeys.FORUMS_THREAD_UNPINNED.key).compose()); + } + + if (isLocked != thread.isLocked()) { + this.habbo.getClient().sendResponse(new BubbleAlertComposer(isLocked ? BubbleAlertKeys.FORUMS_THREAD_LOCKED.key : BubbleAlertKeys.FORUMS_THREAD_UNLOCKED.key).compose()); + } + + if (this.habbo.getHabboInfo().getId() != guild.getOwnerId() || + guild.canModForum().state == 2 && (Emulator.getGameEnvironment().getGuildManager().getGuildMember(guild, habbo).getRank() == GuildRank.ADMIN + || Emulator.getGameEnvironment().getGuildManager().getGuildMember(guild, habbo).getRank() == GuildRank.MOD) + || this.habbo.hasPermission("acc_modtool_ticket_q")) { + this.thread.setPinned(isPinned); + this.thread.setLocked(isLocked); + + this.response.init(Outgoing.ThreadUpdateMessageComposer); + + this.response.appendInt(this.thread.getGuildId()); + + this.thread.serialize(this.response); + + guild.needsUpdate = true; + + Emulator.getThreading().run(this.thread); + + Emulator.getThreading().run(guild); + + return this.response; + } + + return null; + } +} \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/UnknownGuildForumComposer7.java b/src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/UnknownGuildForumComposer7.java deleted file mode 100644 index 55631f93..00000000 --- a/src/main/java/com/eu/habbo/messages/outgoing/guilds/forums/UnknownGuildForumComposer7.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.eu.habbo.messages.outgoing.guilds.forums; - -import com.eu.habbo.habbohotel.guilds.forums.GuildForumThread; -import com.eu.habbo.messages.ServerMessage; -import com.eu.habbo.messages.outgoing.MessageComposer; -import com.eu.habbo.messages.outgoing.Outgoing; - -public class UnknownGuildForumComposer7 extends MessageComposer -{ - public final GuildForumThread thread; - - public UnknownGuildForumComposer7(GuildForumThread thread) - { - this.thread = thread; - } - - @Override - public ServerMessage compose() - { - this.response.init(Outgoing.UnknownGuildForumComposer7); - this.response.appendInt(this.thread.getGuildId()); - this.thread.serialize(this.response); - return this.response; - } -} \ No newline at end of file