From e81722f1c78ab7217c88127d1ebef6d547bd8e15 Mon Sep 17 00:00:00 2001 From: Alejandro <25-alejandro@users.noreply.git.krews.org> Date: Thu, 30 May 2019 17:32:56 +0300 Subject: [PATCH 01/11] Make allowed username characters configurable --- .../incoming/users/ChangeNameCheckUsernameEvent.java | 7 +++---- src/main/java/com/eu/habbo/plugin/PluginManager.java | 4 ++++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/eu/habbo/messages/incoming/users/ChangeNameCheckUsernameEvent.java b/src/main/java/com/eu/habbo/messages/incoming/users/ChangeNameCheckUsernameEvent.java index e640009d..285f1f97 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/users/ChangeNameCheckUsernameEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/users/ChangeNameCheckUsernameEvent.java @@ -10,7 +10,7 @@ import java.util.ArrayList; import java.util.List; public class ChangeNameCheckUsernameEvent extends MessageHandler { - public static final String VALID_CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_-=!?@:,."; + public static String VALID_CHARACTERS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_-=!?@:,."; @Override public void handle() throws Exception { @@ -28,8 +28,7 @@ public class ChangeNameCheckUsernameEvent extends MessageHandler { int errorCode = ChangeNameCheckResultComposer.AVAILABLE; List suggestions = new ArrayList<>(4); - if (false) { - } else if (name.length() < 3) { + if (name.length() < 3) { errorCode = ChangeNameCheckResultComposer.TOO_SHORT; } else if (name.length() > 15) { errorCode = ChangeNameCheckResultComposer.TOO_LONG; @@ -42,7 +41,7 @@ public class ChangeNameCheckUsernameEvent extends MessageHandler { } else if (!Emulator.getGameEnvironment().getWordFilter().filter(name, this.client.getHabbo()).equalsIgnoreCase(name)) { errorCode = ChangeNameCheckResultComposer.NOT_VALID; } else { - String checkName = name.toUpperCase(); + String checkName = name; for (char c : VALID_CHARACTERS.toCharArray()) { checkName = checkName.replace(c + "", ""); } diff --git a/src/main/java/com/eu/habbo/plugin/PluginManager.java b/src/main/java/com/eu/habbo/plugin/PluginManager.java index 9391fcb3..fcd335e9 100644 --- a/src/main/java/com/eu/habbo/plugin/PluginManager.java +++ b/src/main/java/com/eu/habbo/plugin/PluginManager.java @@ -23,6 +23,7 @@ import com.eu.habbo.habbohotel.wired.WiredHandler; import com.eu.habbo.messages.PacketManager; import com.eu.habbo.messages.incoming.floorplaneditor.FloorPlanEditorSaveEvent; import com.eu.habbo.messages.incoming.hotelview.HotelViewRequestLTDAvailabilityEvent; +import com.eu.habbo.messages.incoming.users.ChangeNameCheckUsernameEvent; import com.eu.habbo.messages.outgoing.catalog.DiscountComposer; import com.eu.habbo.plugin.events.emulator.EmulatorConfigUpdatedEvent; import com.eu.habbo.plugin.events.roomunit.RoomUnitLookAtPointEvent; @@ -118,6 +119,9 @@ public class PluginManager { AchievementManager.TALENTTRACK_ENABLED = Emulator.getConfig().getBoolean("hotel.talenttrack.enabled"); InteractionRoller.NO_RULES = Emulator.getConfig().getBoolean("hotel.room.rollers.norules"); RoomManager.SHOW_PUBLIC_IN_POPULAR_TAB = Emulator.getConfig().getBoolean("hotel.navigator.populartab.publics"); + + ChangeNameCheckUsernameEvent.VALID_CHARACTERS = Emulator.getConfig().getValue("allowed.usernamename.characters", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_-=!?@:,."); + if (Emulator.isReady) { Emulator.getGameEnvironment().getCreditsScheduler().reloadConfig(); Emulator.getGameEnvironment().getPointsScheduler().reloadConfig(); From d603a9cae6023c99400a44e4b16cbce6fd9b7ae0 Mon Sep 17 00:00:00 2001 From: Alejandro <25-alejandro@users.noreply.git.krews.org> Date: Thu, 30 May 2019 17:37:26 +0300 Subject: [PATCH 02/11] Fix typo on valid character config key --- src/main/java/com/eu/habbo/plugin/PluginManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/eu/habbo/plugin/PluginManager.java b/src/main/java/com/eu/habbo/plugin/PluginManager.java index fcd335e9..80f56a9b 100644 --- a/src/main/java/com/eu/habbo/plugin/PluginManager.java +++ b/src/main/java/com/eu/habbo/plugin/PluginManager.java @@ -120,7 +120,7 @@ public class PluginManager { InteractionRoller.NO_RULES = Emulator.getConfig().getBoolean("hotel.room.rollers.norules"); RoomManager.SHOW_PUBLIC_IN_POPULAR_TAB = Emulator.getConfig().getBoolean("hotel.navigator.populartab.publics"); - ChangeNameCheckUsernameEvent.VALID_CHARACTERS = Emulator.getConfig().getValue("allowed.usernamename.characters", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_-=!?@:,."); + ChangeNameCheckUsernameEvent.VALID_CHARACTERS = Emulator.getConfig().getValue("allowed.username.characters", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_-=!?@:,."); if (Emulator.isReady) { Emulator.getGameEnvironment().getCreditsScheduler().reloadConfig(); From e2f67a53ad4cef41fb9f9eb08c38044bfc5db130 Mon Sep 17 00:00:00 2001 From: Alejandro <25-alejandro@users.noreply.git.krews.org> Date: Thu, 30 May 2019 19:18:48 +0300 Subject: [PATCH 03/11] Add default saved searches --- .../com/eu/habbo/habbohotel/users/HabboStats.java | 7 +++++-- .../incoming/handshake/SecureLoginEvent.java | 12 ++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/eu/habbo/habbohotel/users/HabboStats.java b/src/main/java/com/eu/habbo/habbohotel/users/HabboStats.java index 6dc2929d..7373b749 100644 --- a/src/main/java/com/eu/habbo/habbohotel/users/HabboStats.java +++ b/src/main/java/com/eu/habbo/habbohotel/users/HabboStats.java @@ -81,6 +81,7 @@ public class HabboStats implements Runnable { public long lastPurchaseTimestamp = Emulator.getIntUnixTimestamp(); public long lastGiftTimestamp = Emulator.getIntUnixTimestamp(); public int uiFlags; + public boolean hasGottenDefaultSavedSearches; private HabboInfo habboInfo; private boolean allowTrade; private int clubExpireTimestamp; @@ -133,6 +134,7 @@ public class HabboStats implements Runnable { this.perkTrade = set.getString("perk_trade").equalsIgnoreCase("1"); this.forumPostsCount = set.getInt("forums_post_count"); this.uiFlags = set.getInt("ui_flags"); + this.hasGottenDefaultSavedSearches = set.getInt("has_gotten_default_saved_searches") == 1; this.nuxReward = this.nux; try (PreparedStatement statement = set.getStatement().getConnection().prepareStatement("SELECT * FROM user_window_settings WHERE user_id = ? LIMIT 1")) { @@ -292,7 +294,7 @@ public class HabboStats implements Runnable { @Override public void run() { try (Connection connection = Emulator.getDatabase().getDataSource().getConnection()) { - try (PreparedStatement statement = connection.prepareStatement("UPDATE users_settings SET achievement_score = ?, respects_received = ?, respects_given = ?, daily_respect_points = ?, block_following = ?, block_friendrequests = ?, online_time = online_time + ?, guild_id = ?, daily_pet_respect_points = ?, club_expire_timestamp = ?, login_streak = ?, rent_space_id = ?, rent_space_endtime = ?, volume_system = ?, volume_furni = ?, volume_trax = ?, block_roominvites = ?, old_chat = ?, block_camera_follow = ?, chat_color = ?, hof_points = ?, block_alerts = ?, talent_track_citizenship_level = ?, talent_track_helpers_level = ?, ignore_bots = ?, ignore_pets = ?, nux = ?, mute_end_timestamp = ?, allow_name_change = ?, perk_trade = ?, can_trade = ?, `forums_post_count` = ?, ui_flags = ? WHERE user_id = ? LIMIT 1")) { + try (PreparedStatement statement = connection.prepareStatement("UPDATE users_settings SET achievement_score = ?, respects_received = ?, respects_given = ?, daily_respect_points = ?, block_following = ?, block_friendrequests = ?, online_time = online_time + ?, guild_id = ?, daily_pet_respect_points = ?, club_expire_timestamp = ?, login_streak = ?, rent_space_id = ?, rent_space_endtime = ?, volume_system = ?, volume_furni = ?, volume_trax = ?, block_roominvites = ?, old_chat = ?, block_camera_follow = ?, chat_color = ?, hof_points = ?, block_alerts = ?, talent_track_citizenship_level = ?, talent_track_helpers_level = ?, ignore_bots = ?, ignore_pets = ?, nux = ?, mute_end_timestamp = ?, allow_name_change = ?, perk_trade = ?, can_trade = ?, `forums_post_count` = ?, ui_flags = ?, has_gotten_default_saved_searches = ? WHERE user_id = ? LIMIT 1")) { statement.setInt(1, this.achievementScore); statement.setInt(2, this.respectPointsReceived); statement.setInt(3, this.respectPointsGiven); @@ -326,8 +328,9 @@ public class HabboStats implements Runnable { statement.setString(31, this.allowTrade ? "1" : "0"); statement.setInt(32, this.forumPostsCount); statement.setInt(33, this.uiFlags); + statement.setInt(34, this.hasGottenDefaultSavedSearches ? 1 : 0); - statement.setInt(34, this.habboInfo.getId()); + statement.setInt(35, this.habboInfo.getId()); statement.executeUpdate(); } diff --git a/src/main/java/com/eu/habbo/messages/incoming/handshake/SecureLoginEvent.java b/src/main/java/com/eu/habbo/messages/incoming/handshake/SecureLoginEvent.java index b146d0e1..a899c5b0 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/handshake/SecureLoginEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/handshake/SecureLoginEvent.java @@ -2,6 +2,7 @@ package com.eu.habbo.messages.incoming.handshake; import com.eu.habbo.Emulator; import com.eu.habbo.habbohotel.messenger.Messenger; +import com.eu.habbo.habbohotel.navigation.NavigatorSavedSearch; import com.eu.habbo.habbohotel.permissions.Permission; import com.eu.habbo.habbohotel.users.Habbo; import com.eu.habbo.habbohotel.users.HabboManager; @@ -148,6 +149,17 @@ public class SecureLoginEvent extends MessageHandler { } Messenger.checkFriendSizeProgress(habbo); + + if (!habbo.getHabboStats().hasGottenDefaultSavedSearches) { + habbo.getHabboStats().hasGottenDefaultSavedSearches = true; + Emulator.getThreading().run(habbo.getHabboStats()); + + habbo.getHabboInfo().addSavedSearch(new NavigatorSavedSearch("official-root", "")); + habbo.getHabboInfo().addSavedSearch(new NavigatorSavedSearch("my", "")); + habbo.getHabboInfo().addSavedSearch(new NavigatorSavedSearch("favorites", "")); + + this.client.sendResponse(new NewNavigatorSavedSearchesComposer(this.client.getHabbo().getHabboInfo().getSavedSearches())); + } } else { Emulator.getGameServer().getGameClientManager().disposeClient(this.client); } From c943cd016de13920c33f684d6c126140fe6221a5 Mon Sep 17 00:00:00 2001 From: Alejandro <25-alejandro@users.noreply.git.krews.org> Date: Thu, 30 May 2019 19:20:53 +0300 Subject: [PATCH 04/11] Add default saved searches SQL --- sqlupdates/2_0_0_TO_2_1_0-RC-1.sql | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sqlupdates/2_0_0_TO_2_1_0-RC-1.sql b/sqlupdates/2_0_0_TO_2_1_0-RC-1.sql index a1c78768..f046fdf2 100644 --- a/sqlupdates/2_0_0_TO_2_1_0-RC-1.sql +++ b/sqlupdates/2_0_0_TO_2_1_0-RC-1.sql @@ -7,4 +7,7 @@ CREATE TABLE `users_saved_searches` ( ); ALTER TABLE `users_settings` -ADD COLUMN `ui_flags` int(11) NOT NULL DEFAULT 1 AFTER `forums_post_count`; \ No newline at end of file +ADD COLUMN `ui_flags` int(11) NOT NULL DEFAULT 1 AFTER `forums_post_count`; + +ALTER TABLE `users_settings` +ADD COLUMN `has_gotten_default_saved_searches` tinyint(1) NOT NULL DEFAULT 0 AFTER `ui_flags`; \ No newline at end of file From 775ec869742b8a861f1b717b83d6229656a3d9f5 Mon Sep 17 00:00:00 2001 From: Alejandro <25-alejandro@users.noreply.git.krews.org> Date: Thu, 30 May 2019 19:26:42 +0300 Subject: [PATCH 05/11] Add delay to teleport tiles --- .../habbohotel/items/interactions/InteractionTeleport.java | 6 +++++- .../items/interactions/InteractionTeleportTile.java | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionTeleport.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionTeleport.java index 102af6be..0106e1b8 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionTeleport.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionTeleport.java @@ -204,12 +204,16 @@ public class InteractionTeleport extends HabboItem { } public void startTeleport(Room room, Habbo habbo) { + this.startTeleport(room, habbo, 500); + } + + public void startTeleport(Room room, Habbo habbo, int delay) { if (habbo.getRoomUnit().isTeleporting) return; this.roomUnitID = -1; habbo.getRoomUnit().isTeleporting = true; - Emulator.getThreading().run(new TeleportActionOne(this, room, habbo.getClient()), 500); + Emulator.getThreading().run(new TeleportActionOne(this, room, habbo.getClient()), delay); } @Override diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionTeleportTile.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionTeleportTile.java index 8f283757..fc8e7b51 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionTeleportTile.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionTeleportTile.java @@ -38,7 +38,7 @@ public class InteractionTeleportTile extends InteractionTeleport { if (!habbo.getRoomUnit().isTeleporting) { habbo.getRoomUnit().setGoalLocation(habbo.getRoomUnit().getCurrentLocation()); - this.startTeleport(room, habbo); + this.startTeleport(room, habbo, 1000); } } } From 25d8ffba96aabea9d7d93a1d7975a66f2680f3d5 Mon Sep 17 00:00:00 2001 From: Alejandro <25-alejandro@users.noreply.git.krews.org> Date: Thu, 30 May 2019 21:05:25 +0300 Subject: [PATCH 06/11] Add forum thread/comment reporting --- sqlupdates/2_0_0_TO_2_1_0-RC-1.sql | 7 ++- .../habbohotel/modtool/ModToolChatLog.java | 10 +++++ .../habbohotel/modtool/ModToolIssue.java | 3 ++ .../modtool/ModToolIssueChatlogType.java | 21 +++++++++ .../com/eu/habbo/messages/PacketManager.java | 2 + .../eu/habbo/messages/incoming/Incoming.java | 2 + .../ModToolRequestIssueChatlogEvent.java | 34 ++++++++++++--- .../incoming/modtool/ReportCommentEvent.java | 43 +++++++++++++++++++ .../incoming/modtool/ReportThreadEvent.java | 41 ++++++++++++++++++ .../modtool/ModToolIssueChatlogComposer.java | 43 +++++++++++++------ .../runnables/InsertModToolIssue.java | 5 ++- 11 files changed, 191 insertions(+), 20 deletions(-) create mode 100644 src/main/java/com/eu/habbo/habbohotel/modtool/ModToolIssueChatlogType.java create mode 100644 src/main/java/com/eu/habbo/messages/incoming/modtool/ReportCommentEvent.java create mode 100644 src/main/java/com/eu/habbo/messages/incoming/modtool/ReportThreadEvent.java diff --git a/sqlupdates/2_0_0_TO_2_1_0-RC-1.sql b/sqlupdates/2_0_0_TO_2_1_0-RC-1.sql index f046fdf2..b751625b 100644 --- a/sqlupdates/2_0_0_TO_2_1_0-RC-1.sql +++ b/sqlupdates/2_0_0_TO_2_1_0-RC-1.sql @@ -10,4 +10,9 @@ ALTER TABLE `users_settings` ADD COLUMN `ui_flags` int(11) NOT NULL DEFAULT 1 AFTER `forums_post_count`; ALTER TABLE `users_settings` -ADD COLUMN `has_gotten_default_saved_searches` tinyint(1) NOT NULL DEFAULT 0 AFTER `ui_flags`; \ No newline at end of file +ADD COLUMN `has_gotten_default_saved_searches` tinyint(1) NOT NULL DEFAULT 0 AFTER `ui_flags`; + +ALTER TABLE `support_tickets` +ADD COLUMN `group_id` int(11) NOT NULL AFTER `category`, +ADD COLUMN `thread_id` int(11) NOT NULL AFTER `group_id`, +ADD COLUMN `comment_id` int(11) NOT NULL AFTER `thread_id`; \ No newline at end of file diff --git a/src/main/java/com/eu/habbo/habbohotel/modtool/ModToolChatLog.java b/src/main/java/com/eu/habbo/habbohotel/modtool/ModToolChatLog.java index 8663e27d..0ba469f7 100644 --- a/src/main/java/com/eu/habbo/habbohotel/modtool/ModToolChatLog.java +++ b/src/main/java/com/eu/habbo/habbohotel/modtool/ModToolChatLog.java @@ -5,12 +5,22 @@ public class ModToolChatLog implements Comparable { public final int habboId; public final String username; public final String message; + public final boolean highlighted; public ModToolChatLog(int timestamp, int habboId, String username, String message) { this.timestamp = timestamp; this.habboId = habboId; this.username = username; this.message = message; + this.highlighted = false; + } + + public ModToolChatLog(int timestamp, int habboId, String username, String message, boolean highlighted) { + this.timestamp = timestamp; + this.habboId = habboId; + this.username = username; + this.message = message; + this.highlighted = highlighted; } @Override diff --git a/src/main/java/com/eu/habbo/habbohotel/modtool/ModToolIssue.java b/src/main/java/com/eu/habbo/habbohotel/modtool/ModToolIssue.java index 5e73e86c..531ffb7c 100644 --- a/src/main/java/com/eu/habbo/habbohotel/modtool/ModToolIssue.java +++ b/src/main/java/com/eu/habbo/habbohotel/modtool/ModToolIssue.java @@ -25,6 +25,9 @@ public class ModToolIssue implements ISerialize { public volatile String modName = ""; public String message; public ArrayList chatLogs = null; + public int groupId = -1; + public int threadId = -1; + public int commentId = -1; public ModToolIssue(ResultSet set) throws SQLException { this.id = set.getInt("id"); diff --git a/src/main/java/com/eu/habbo/habbohotel/modtool/ModToolIssueChatlogType.java b/src/main/java/com/eu/habbo/habbohotel/modtool/ModToolIssueChatlogType.java new file mode 100644 index 00000000..35db44b7 --- /dev/null +++ b/src/main/java/com/eu/habbo/habbohotel/modtool/ModToolIssueChatlogType.java @@ -0,0 +1,21 @@ +package com.eu.habbo.habbohotel.modtool; + +public enum ModToolIssueChatlogType { + NORMAL(0), + CHAT(1), + IM(2), + FORUM_THREAD(3), + FORUM_COMMENT(4), + SELFIE(5), + PHOTO(6); + + private int type; + + ModToolIssueChatlogType(int type) { + this.type = type; + } + + public int getType() { + return type; + } +} diff --git a/src/main/java/com/eu/habbo/messages/PacketManager.java b/src/main/java/com/eu/habbo/messages/PacketManager.java index 96dfbb30..f92cd743 100644 --- a/src/main/java/com/eu/habbo/messages/PacketManager.java +++ b/src/main/java/com/eu/habbo/messages/PacketManager.java @@ -466,6 +466,8 @@ public class PacketManager { this.registerHandler(Incoming.ReportBullyEvent, ReportBullyEvent.class); this.registerHandler(Incoming.ReportEvent, ReportEvent.class); this.registerHandler(Incoming.ReportFriendPrivateChatEvent, ReportFriendPrivateChatEvent.class); + this.registerHandler(Incoming.ReportThreadEvent, ReportThreadEvent.class); + this.registerHandler(Incoming.ReportCommentEvent, ReportCommentEvent.class); } void registerTrading() 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 a47fd162..ba2e48b7 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/Incoming.java +++ b/src/main/java/com/eu/habbo/messages/incoming/Incoming.java @@ -290,6 +290,8 @@ public class Incoming { public static final int SaveWindowSettingsEvent = 3159; public static final int GetHabboGuildBadgesMessageEvent = 21; public static final int UpdateUIFlagsEvent = 2313; + public static final int ReportThreadEvent = 534; + public static final int ReportCommentEvent = 1412; public static final int RequestCraftingRecipesEvent = 1173; public static final int RequestCraftingRecipesAvailableEvent = 3086; diff --git a/src/main/java/com/eu/habbo/messages/incoming/modtool/ModToolRequestIssueChatlogEvent.java b/src/main/java/com/eu/habbo/messages/incoming/modtool/ModToolRequestIssueChatlogEvent.java index 2b4b31f0..50757290 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/modtool/ModToolRequestIssueChatlogEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/modtool/ModToolRequestIssueChatlogEvent.java @@ -1,16 +1,16 @@ package com.eu.habbo.messages.incoming.modtool; import com.eu.habbo.Emulator; -import com.eu.habbo.habbohotel.modtool.ModToolChatLog; -import com.eu.habbo.habbohotel.modtool.ModToolIssue; -import com.eu.habbo.habbohotel.modtool.ModToolTicketType; -import com.eu.habbo.habbohotel.modtool.ScripterManager; +import com.eu.habbo.habbohotel.guilds.forums.ForumThread; +import com.eu.habbo.habbohotel.modtool.*; import com.eu.habbo.habbohotel.permissions.Permission; import com.eu.habbo.habbohotel.rooms.Room; import com.eu.habbo.messages.incoming.MessageHandler; import com.eu.habbo.messages.outgoing.modtool.ModToolIssueChatlogComposer; import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; public class ModToolRequestIssueChatlogEvent extends MessageHandler { @Override @@ -19,11 +19,33 @@ public class ModToolRequestIssueChatlogEvent extends MessageHandler { ModToolIssue issue = Emulator.getGameEnvironment().getModToolManager().getTicket(this.packet.readInt()); if (issue != null) { - ArrayList chatlog; + List chatlog = new ArrayList<>(); + ModToolIssueChatlogType chatlogType = ModToolIssueChatlogType.CHAT; if (issue.type == ModToolTicketType.IM) { chatlog = Emulator.getGameEnvironment().getModToolManager().getMessengerChatlog(issue.reportedId, issue.senderId); + chatlogType = ModToolIssueChatlogType.IM; + } else if (issue.type == ModToolTicketType.DISCUSSION) { + if (issue.commentId == -1) { + chatlogType = ModToolIssueChatlogType.FORUM_THREAD; + + ForumThread thread = ForumThread.getById(issue.threadId); + + if (thread != null) { + chatlog = thread.getComments().stream().map(c -> new ModToolChatLog(c.getCreatedAt(), c.getHabbo().getHabboInfo().getId(), c.getHabbo().getHabboInfo().getUsername(), c.getMessage())).collect(Collectors.toList()); + } + } else { + chatlogType = ModToolIssueChatlogType.FORUM_COMMENT; + + ForumThread thread = ForumThread.getById(issue.threadId); + + if (thread != null) { + chatlog = thread.getComments().stream().map(c -> new ModToolChatLog(c.getCreatedAt(), c.getHabbo().getHabboInfo().getId(), c.getHabbo().getHabboInfo().getUsername(), c.getMessage(), c.getCommentId() == issue.commentId)).collect(Collectors.toList()); + } + } } else { + chatlogType = ModToolIssueChatlogType.CHAT; + if (issue.roomId > 0) { chatlog = Emulator.getGameEnvironment().getModToolManager().getRoomChatlog(issue.roomId); } else { @@ -39,7 +61,7 @@ public class ModToolRequestIssueChatlogEvent extends MessageHandler { if (room != null) { roomName = room.getName(); } - this.client.sendResponse(new ModToolIssueChatlogComposer(issue, chatlog, roomName)); + this.client.sendResponse(new ModToolIssueChatlogComposer(issue, chatlog, roomName, chatlogType)); } } else { ScripterManager.scripterDetected(this.client, Emulator.getTexts().getValue("scripter.warning.modtools.chatlog").replace("%username%", this.client.getHabbo().getHabboInfo().getUsername())); diff --git a/src/main/java/com/eu/habbo/messages/incoming/modtool/ReportCommentEvent.java b/src/main/java/com/eu/habbo/messages/incoming/modtool/ReportCommentEvent.java new file mode 100644 index 00000000..b21849ba --- /dev/null +++ b/src/main/java/com/eu/habbo/messages/incoming/modtool/ReportCommentEvent.java @@ -0,0 +1,43 @@ +package com.eu.habbo.messages.incoming.modtool; + +import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.guilds.forums.ForumThread; +import com.eu.habbo.habbohotel.modtool.CfhTopic; +import com.eu.habbo.habbohotel.modtool.ModToolIssue; +import com.eu.habbo.habbohotel.modtool.ModToolTicketType; +import com.eu.habbo.habbohotel.users.Habbo; +import com.eu.habbo.messages.incoming.MessageHandler; +import com.eu.habbo.messages.outgoing.modtool.ModToolReportReceivedAlertComposer; +import com.eu.habbo.threading.runnables.InsertModToolIssue; + +public class ReportCommentEvent extends MessageHandler { + @Override + public void handle() throws Exception { + int groupId = this.packet.readInt(); + int threadId = this.packet.readInt(); + int commentId = this.packet.readInt(); + int topicId = this.packet.readInt(); + String message = this.packet.readString(); + + CfhTopic topic = Emulator.getGameEnvironment().getModToolManager().getCfhTopic(topicId); + + if (topic == null) return; + + ForumThread thread = ForumThread.getById(threadId); + + if (thread == null) return; + + Habbo opener = Emulator.getGameEnvironment().getHabboManager().getHabbo(thread.getOpenerId()); + + ModToolIssue issue = new ModToolIssue(this.client.getHabbo().getHabboInfo().getId(), this.client.getHabbo().getHabboInfo().getUsername(), thread.getOpenerId(), opener == null ? "" : opener.getHabboInfo().getUsername(), 0, message, ModToolTicketType.DISCUSSION); + issue.category = topicId; + issue.groupId = groupId; + issue.threadId = threadId; + issue.commentId = commentId; + new InsertModToolIssue(issue).run(); + + this.client.sendResponse(new ModToolReportReceivedAlertComposer(ModToolReportReceivedAlertComposer.REPORT_RECEIVED, message)); + Emulator.getGameEnvironment().getModToolManager().addTicket(issue); + Emulator.getGameEnvironment().getModToolManager().updateTicketToMods(issue); + } +} diff --git a/src/main/java/com/eu/habbo/messages/incoming/modtool/ReportThreadEvent.java b/src/main/java/com/eu/habbo/messages/incoming/modtool/ReportThreadEvent.java new file mode 100644 index 00000000..50bcab89 --- /dev/null +++ b/src/main/java/com/eu/habbo/messages/incoming/modtool/ReportThreadEvent.java @@ -0,0 +1,41 @@ +package com.eu.habbo.messages.incoming.modtool; + +import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.guilds.forums.ForumThread; +import com.eu.habbo.habbohotel.modtool.CfhTopic; +import com.eu.habbo.habbohotel.modtool.ModToolIssue; +import com.eu.habbo.habbohotel.modtool.ModToolTicketType; +import com.eu.habbo.habbohotel.users.Habbo; +import com.eu.habbo.messages.incoming.MessageHandler; +import com.eu.habbo.messages.outgoing.modtool.ModToolReportReceivedAlertComposer; +import com.eu.habbo.threading.runnables.InsertModToolIssue; + +public class ReportThreadEvent extends MessageHandler { + @Override + public void handle() throws Exception { + int groupId = this.packet.readInt(); + int threadId = this.packet.readInt(); + int topicId = this.packet.readInt(); + String message = this.packet.readString(); + + CfhTopic topic = Emulator.getGameEnvironment().getModToolManager().getCfhTopic(topicId); + + if (topic == null) return; + + ForumThread thread = ForumThread.getById(threadId); + + if (thread == null) return; + + Habbo opener = Emulator.getGameEnvironment().getHabboManager().getHabbo(thread.getOpenerId()); + + ModToolIssue issue = new ModToolIssue(this.client.getHabbo().getHabboInfo().getId(), this.client.getHabbo().getHabboInfo().getUsername(), thread.getOpenerId(), opener == null ? "" : opener.getHabboInfo().getUsername(), 0, message, ModToolTicketType.DISCUSSION); + issue.category = topicId; + issue.groupId = groupId; + issue.threadId = threadId; + new InsertModToolIssue(issue).run(); + + this.client.sendResponse(new ModToolReportReceivedAlertComposer(ModToolReportReceivedAlertComposer.REPORT_RECEIVED, message)); + Emulator.getGameEnvironment().getModToolManager().addTicket(issue); + Emulator.getGameEnvironment().getModToolManager().updateTicketToMods(issue); + } +} diff --git a/src/main/java/com/eu/habbo/messages/outgoing/modtool/ModToolIssueChatlogComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/modtool/ModToolIssueChatlogComposer.java index 1aac7aea..8eef3dc8 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/modtool/ModToolIssueChatlogComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/modtool/ModToolIssueChatlogComposer.java @@ -1,9 +1,8 @@ package com.eu.habbo.messages.outgoing.modtool; -import com.eu.habbo.habbohotel.modtool.ModToolChatLog; -import com.eu.habbo.habbohotel.modtool.ModToolChatRecordDataContext; -import com.eu.habbo.habbohotel.modtool.ModToolIssue; -import com.eu.habbo.habbohotel.modtool.ModToolTicketType; +import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.modtool.*; +import com.eu.habbo.habbohotel.rooms.Room; import com.eu.habbo.messages.ServerMessage; import com.eu.habbo.messages.outgoing.MessageComposer; import com.eu.habbo.messages.outgoing.Outgoing; @@ -11,19 +10,28 @@ import com.eu.habbo.messages.outgoing.Outgoing; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; +import java.util.List; public class ModToolIssueChatlogComposer extends MessageComposer { public static SimpleDateFormat format = new SimpleDateFormat("HH:mm"); private final ModToolIssue issue; - private final ArrayList chatlog; + private final List chatlog; private final String roomName; + private ModToolIssueChatlogType type = ModToolIssueChatlogType.CHAT; - public ModToolIssueChatlogComposer(ModToolIssue issue, ArrayList chatlog, String roomName) { + public ModToolIssueChatlogComposer(ModToolIssue issue, List chatlog, String roomName) { this.issue = issue; this.chatlog = chatlog; this.roomName = roomName; } + public ModToolIssueChatlogComposer(ModToolIssue issue, List chatlog, String roomName, ModToolIssueChatlogType type) { + this.issue = issue; + this.chatlog = chatlog; + this.roomName = roomName; + this.type = type; + } + @Override public ServerMessage compose() { this.response.init(Outgoing.ModToolIssueChatlogComposer); @@ -37,16 +45,26 @@ public class ModToolIssueChatlogComposer extends MessageComposer { if (this.chatlog.isEmpty()) return null; - //ChatRecordData - //for(ModToolRoomVisit visit : chatlog) - //{ - this.response.appendByte(1); //Report Type + this.response.appendByte(this.type.getType()); //Report Type if (this.issue.type == ModToolTicketType.IM) { this.response.appendShort(1); ModToolChatRecordDataContext.MESSAGE_ID.append(this.response); this.response.appendInt(this.issue.senderId); + } else if (this.issue.type == ModToolTicketType.DISCUSSION) { + this.response.appendShort(this.type == ModToolIssueChatlogType.FORUM_COMMENT ? 3 : 2); + + ModToolChatRecordDataContext.GROUP_ID.append(this.response); + this.response.appendInt(this.issue.groupId); + + ModToolChatRecordDataContext.THREAD_ID.append(this.response); + this.response.appendInt(this.issue.threadId); + + if (this.type == ModToolIssueChatlogType.FORUM_COMMENT) { + ModToolChatRecordDataContext.GROUP_ID.append(this.response); + this.response.appendInt(this.issue.commentId); + } } else { this.response.appendShort(3); //Context Count @@ -57,7 +75,8 @@ public class ModToolIssueChatlogComposer extends MessageComposer { this.response.appendInt(this.issue.roomId); ModToolChatRecordDataContext.GROUP_ID.append(this.response); - this.response.appendInt(12); + Room room = Emulator.getGameEnvironment().getRoomManager().getRoom(this.issue.roomId); + this.response.appendInt(room == null ? 0 : room.getGuildId()); } this.response.appendShort(this.chatlog.size()); @@ -66,7 +85,7 @@ public class ModToolIssueChatlogComposer extends MessageComposer { this.response.appendInt(chatLog.habboId); this.response.appendString(chatLog.username); this.response.appendString(chatLog.message); - this.response.appendBoolean(false); + this.response.appendBoolean(chatLog.highlighted); } //} diff --git a/src/main/java/com/eu/habbo/threading/runnables/InsertModToolIssue.java b/src/main/java/com/eu/habbo/threading/runnables/InsertModToolIssue.java index cda020d6..af335844 100644 --- a/src/main/java/com/eu/habbo/threading/runnables/InsertModToolIssue.java +++ b/src/main/java/com/eu/habbo/threading/runnables/InsertModToolIssue.java @@ -14,7 +14,7 @@ public class InsertModToolIssue implements Runnable { @Override public void run() { - try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("INSERT INTO support_tickets (state, timestamp, score, sender_id, reported_id, room_id, mod_id, issue, category) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS)) { + try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("INSERT INTO support_tickets (state, timestamp, score, sender_id, reported_id, room_id, mod_id, issue, category, group_id, thread_id, comment_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", Statement.RETURN_GENERATED_KEYS)) { statement.setInt(1, this.issue.state.getState()); statement.setInt(2, this.issue.timestamp); statement.setInt(3, this.issue.priority); @@ -24,6 +24,9 @@ public class InsertModToolIssue implements Runnable { statement.setInt(7, this.issue.modId); statement.setString(8, this.issue.message); statement.setInt(9, this.issue.category); + statement.setInt(10, this.issue.groupId); + statement.setInt(11, this.issue.threadId); + statement.setInt(12, this.issue.commentId); statement.execute(); try (ResultSet key = statement.getGeneratedKeys()) { From e21b4cecedfa04da3b809ce2020a8ac191284eb4 Mon Sep 17 00:00:00 2001 From: Alejandro <25-alejandro@users.noreply.git.krews.org> Date: Thu, 30 May 2019 21:16:43 +0300 Subject: [PATCH 07/11] Make sure that users' RoomUnit is removed upon exiting --- src/main/java/com/eu/habbo/habbohotel/rooms/RoomManager.java | 4 ++-- .../com/eu/habbo/threading/runnables/TeleportInteraction.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomManager.java b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomManager.java index 1b0e7099..2e0f7702 100644 --- a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomManager.java +++ b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomManager.java @@ -617,7 +617,7 @@ public class RoomManager { habbo.getRoomUnit().setInRoom(true); if (habbo.getHabboInfo().getCurrentRoom() != room && habbo.getHabboInfo().getCurrentRoom() != null) { - habbo.getHabboInfo().getCurrentRoom().removeHabbo(habbo); + habbo.getHabboInfo().getCurrentRoom().removeHabbo(habbo, true); } else if (!habbo.getHabboStats().blockFollowing && habbo.getHabboInfo().getCurrentRoom() == null) { habbo.getMessenger().connectionChanged(habbo, true, true); } @@ -1503,7 +1503,7 @@ public class RoomManager { if (habbo != null) { if (habbo.getHabboInfo().getCurrentRoom() == room) { - room.removeHabbo(habbo); + room.removeHabbo(habbo, true); habbo.getClient().sendResponse(new RoomEnterErrorComposer(RoomEnterErrorComposer.ROOM_ERROR_BANNED)); } } diff --git a/src/main/java/com/eu/habbo/threading/runnables/TeleportInteraction.java b/src/main/java/com/eu/habbo/threading/runnables/TeleportInteraction.java index 895dde84..b1a73ad7 100644 --- a/src/main/java/com/eu/habbo/threading/runnables/TeleportInteraction.java +++ b/src/main/java/com/eu/habbo/threading/runnables/TeleportInteraction.java @@ -67,7 +67,7 @@ class TeleportInteraction extends Thread { if (this.room != this.targetRoom) { Emulator.getGameEnvironment().getRoomManager().logExit(this.client.getHabbo()); - this.room.removeHabbo(this.client.getHabbo()); + this.room.removeHabbo(this.client.getHabbo(), true); Emulator.getGameEnvironment().getRoomManager().enterRoom(this.client.getHabbo(), this.targetRoom); } From d8308a25c1e1ec9d76b44ce7035032bfd0d2b652 Mon Sep 17 00:00:00 2001 From: Alejandro <25-alejandro@users.noreply.git.krews.org> Date: Thu, 30 May 2019 21:19:53 +0300 Subject: [PATCH 08/11] Remove RoomUnit if one exists already --- src/main/java/com/eu/habbo/habbohotel/rooms/RoomManager.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomManager.java b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomManager.java index 2e0f7702..91bdd885 100644 --- a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomManager.java +++ b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomManager.java @@ -577,6 +577,8 @@ public class RoomManager { if (habbo.getRoomUnit() != null) { habbo.getRoomUnit().setRoom(null); + habbo.getRoomUnit().getCurrentLocation().removeUnit(habbo.getRoomUnit()); + habbo.getRoomUnit().getRoom().sendComposer(new RoomUserRemoveComposer(habbo.getRoomUnit()).compose()); } habbo.setRoomUnit(new RoomUnit()); From c93ca82d8784de8fd5b01168ca1fded45cc79c61 Mon Sep 17 00:00:00 2001 From: Harmonic Date: Fri, 31 May 2019 11:08:09 -0400 Subject: [PATCH 09/11] Update README.md --- README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4441b151..5e0a2d43 100644 --- a/README.md +++ b/README.md @@ -11,11 +11,10 @@ TheGeneral's own words were "dont like it then dont use it". We did not like wha Arcturus Morningstar is released under the [GNU General Public License v3](https://www.gnu.org/licenses/gpl-3.0.txt). ## Versions ## -Stable Version: **2.0.0** +![image](https://img.shields.io/badge/STATUS-STABLE-blue.svg?style=for-the-badge&logo=appveyor) +![image](https://img.shields.io/badge/STATUS-unstable-critical.svg?style=for-the-badge&logo=appveyor) -Compiled Download: https://git.krews.org/morningstar/Arcturus-Community/releases - -UnStable Version: **2.1.0** +Compiled Download: Has not yet reached a Release Candidate. Client build: **PRODUCTION-201611291003-338511768** From 4c0ab0de15e6793f9efda476ee0dd35c98825ec4 Mon Sep 17 00:00:00 2001 From: Harmonic Date: Fri, 31 May 2019 11:08:47 -0400 Subject: [PATCH 10/11] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5e0a2d43..0a3e4bb0 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ TheGeneral's own words were "dont like it then dont use it". We did not like wha Arcturus Morningstar is released under the [GNU General Public License v3](https://www.gnu.org/licenses/gpl-3.0.txt). ## Versions ## -![image](https://img.shields.io/badge/STATUS-STABLE-blue.svg?style=for-the-badge&logo=appveyor) +![image](https://img.shields.io/badge/VERSION-2.1.0-orange.svg?style=for-the-badge&logo=appveyor) ![image](https://img.shields.io/badge/STATUS-unstable-critical.svg?style=for-the-badge&logo=appveyor) Compiled Download: Has not yet reached a Release Candidate. From 1714f54dc3c4ca7dbfed5c96a65b46365610afe7 Mon Sep 17 00:00:00 2001 From: Alejandro <25-alejandro@users.noreply.git.krews.org> Date: Fri, 31 May 2019 21:23:34 +0300 Subject: [PATCH 11/11] Fix room enterng --- .../java/com/eu/habbo/habbohotel/rooms/RoomManager.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomManager.java b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomManager.java index 91bdd885..28d28c37 100644 --- a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomManager.java +++ b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomManager.java @@ -576,9 +576,13 @@ public class RoomManager { habbo.getClient().sendResponse(new HideDoorbellComposer("")); if (habbo.getRoomUnit() != null) { + Room existingRoom = habbo.getRoomUnit().getRoom(); + if (existingRoom != null) { + if (habbo.getRoomUnit().getCurrentLocation() != null) + habbo.getRoomUnit().getCurrentLocation().removeUnit(habbo.getRoomUnit()); + habbo.getRoomUnit().getRoom().sendComposer(new RoomUserRemoveComposer(habbo.getRoomUnit()).compose()); + } habbo.getRoomUnit().setRoom(null); - habbo.getRoomUnit().getCurrentLocation().removeUnit(habbo.getRoomUnit()); - habbo.getRoomUnit().getRoom().sendComposer(new RoomUserRemoveComposer(habbo.getRoomUnit()).compose()); } habbo.setRoomUnit(new RoomUnit());