diff --git a/README.md b/README.md index 4441b151..0a3e4bb0 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/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: 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** 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); } } } 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/habbohotel/rooms/RoomManager.java b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomManager.java index 1b0e7099..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,6 +576,12 @@ 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); } @@ -617,7 +623,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 +1509,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/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/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/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); } 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/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/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/plugin/PluginManager.java b/src/main/java/com/eu/habbo/plugin/PluginManager.java index 9391fcb3..80f56a9b 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.username.characters", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_-=!?@:,."); + if (Emulator.isReady) { Emulator.getGameEnvironment().getCreditsScheduler().reloadConfig(); Emulator.getGameEnvironment().getPointsScheduler().reloadConfig(); 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()) { 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); }