From 4fb9cd8d5c3606d9534f9ae6f3dc976b4241c4cb Mon Sep 17 00:00:00 2001 From: Beny Date: Sun, 12 May 2019 22:54:26 +0100 Subject: [PATCH] Plugins can now create friend list entries - See Arcturus Extended for examples --- src/main/java/com/eu/habbo/Emulator.java | 4 -- .../habbo/habbohotel/messenger/Messenger.java | 5 +++ .../habbohotel/messenger/MessengerBuddy.java | 41 ++++++++++++++++++- .../friends/FriendPrivateMessageEvent.java | 28 +------------ .../outgoing/friends/FriendsComposer.java | 7 ++-- 5 files changed, 50 insertions(+), 35 deletions(-) diff --git a/src/main/java/com/eu/habbo/Emulator.java b/src/main/java/com/eu/habbo/Emulator.java index 16f54584..6884bb63 100644 --- a/src/main/java/com/eu/habbo/Emulator.java +++ b/src/main/java/com/eu/habbo/Emulator.java @@ -49,9 +49,6 @@ public final class Emulator public static String build = ""; - - public static MessengerBuddy publicChatBuddy; - public static boolean isReady = false; public static boolean isShuttingDown = false; @@ -100,7 +97,6 @@ public final class Emulator Emulator.getLogging().logStart("\r" + Emulator.logo + " Build: " + build + "\n"); random = new Random(); - publicChatBuddy = new MessengerBuddy(-1, "Staff Chat", "", (short) 0, 0); long startTime = System.nanoTime(); Emulator.runtime = Runtime.getRuntime(); diff --git a/src/main/java/com/eu/habbo/habbohotel/messenger/Messenger.java b/src/main/java/com/eu/habbo/habbohotel/messenger/Messenger.java index baa1ec6d..5f4c1f48 100644 --- a/src/main/java/com/eu/habbo/habbohotel/messenger/Messenger.java +++ b/src/main/java/com/eu/habbo/habbohotel/messenger/Messenger.java @@ -124,6 +124,11 @@ public class Messenger this.friends.remove(habbo.getHabboInfo().getId()); } + public void addBuddy(MessengerBuddy buddy) + { + this.friends.put(buddy.getId(), buddy); + } + public static void unfriend(int userOne, int userTwo) { try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("DELETE FROM messenger_friendships WHERE (user_one_id = ? AND user_two_id = ?) OR (user_one_id = ? AND user_two_id = ?)")) diff --git a/src/main/java/com/eu/habbo/habbohotel/messenger/MessengerBuddy.java b/src/main/java/com/eu/habbo/habbohotel/messenger/MessengerBuddy.java index 5557a35e..30999fa1 100644 --- a/src/main/java/com/eu/habbo/habbohotel/messenger/MessengerBuddy.java +++ b/src/main/java/com/eu/habbo/habbohotel/messenger/MessengerBuddy.java @@ -1,15 +1,19 @@ package com.eu.habbo.habbohotel.messenger; import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.modtool.WordFilter; import com.eu.habbo.habbohotel.users.Habbo; import com.eu.habbo.habbohotel.users.HabboGender; +import com.eu.habbo.messages.ISerialize; +import com.eu.habbo.messages.ServerMessage; +import com.eu.habbo.messages.outgoing.friends.FriendChatMessageComposer; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -public class MessengerBuddy implements Runnable { +public class MessengerBuddy implements Runnable, ISerialize { private int id; private String username; @@ -176,4 +180,39 @@ public class MessengerBuddy implements Runnable { Emulator.getLogging().logSQLException(e); } } + + public void onMessageReceived(Habbo from, String message) { + Habbo habbo = Emulator.getGameServer().getGameClientManager().getHabbo(this.id); + + if(habbo == null) + return; + + Message chatMessage = new Message(from.getHabboInfo().getId(), this.id, message); + Emulator.getThreading().run(chatMessage); + + if (WordFilter.ENABLED_FRIENDCHAT) + { + chatMessage.setMessage(Emulator.getGameEnvironment().getWordFilter().filter(chatMessage.getMessage(), from)); + } + + habbo.getClient().sendResponse(new FriendChatMessageComposer(chatMessage)); + } + + @Override + public void serialize(ServerMessage message) { + message.appendInt(this.id); + message.appendString(this.username); + message.appendInt(this.gender.equals(HabboGender.M) ? 0 : 1); + message.appendBoolean(this.online == 1); + message.appendBoolean(this.inRoom); //IN ROOM + message.appendString(this.look); + message.appendInt(0); + message.appendString(this.motto); + message.appendString(""); + message.appendString(""); + message.appendBoolean(false); //Offline messaging. + message.appendBoolean(false); + message.appendBoolean(false); + message.appendShort(this.relation); + } } diff --git a/src/main/java/com/eu/habbo/messages/incoming/friends/FriendPrivateMessageEvent.java b/src/main/java/com/eu/habbo/messages/incoming/friends/FriendPrivateMessageEvent.java index b4ca9fb6..fdd95137 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/friends/FriendPrivateMessageEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/friends/FriendPrivateMessageEvent.java @@ -30,40 +30,14 @@ public class FriendPrivateMessageEvent extends MessageHandler } this.client.getHabbo().getHabboStats().lastChat = millis; - if(userId == Emulator.publicChatBuddy.getId()) - { - if(message.startsWith(":")) - { - CommandHandler.handleCommand(this.client, message); - return; - } - Emulator.getGameServer().getGameClientManager().sendBroadcastResponse(new FriendChatMessageComposer(new Message(this.client.getHabbo().getHabboInfo().getId(), -1, message)).compose(), "acc_staff_chat", this.client); - return; - } - MessengerBuddy buddy = this.client.getHabbo().getMessenger().getFriend(userId); if (buddy == null) - { return; - } UserFriendChatEvent event = new UserFriendChatEvent(this.client.getHabbo(), buddy, message); if(Emulator.getPluginManager().fireEvent(event).isCancelled()) return; - Habbo habbo = Emulator.getGameServer().getGameClientManager().getHabbo(userId); - - if(habbo == null) - return; - - Message chatMessage = new Message(this.client.getHabbo().getHabboInfo().getId(), userId, event.message); - Emulator.getThreading().run(chatMessage); - - if (WordFilter.ENABLED_FRIENDCHAT) - { - chatMessage.setMessage(Emulator.getGameEnvironment().getWordFilter().filter(chatMessage.getMessage(), this.client.getHabbo())); - } - - habbo.getClient().sendResponse(new FriendChatMessageComposer(chatMessage)); + buddy.onMessageReceived(this.client.getHabbo(), message); } } diff --git a/src/main/java/com/eu/habbo/messages/outgoing/friends/FriendsComposer.java b/src/main/java/com/eu/habbo/messages/outgoing/friends/FriendsComposer.java index 4c698ba0..10ac11cb 100644 --- a/src/main/java/com/eu/habbo/messages/outgoing/friends/FriendsComposer.java +++ b/src/main/java/com/eu/habbo/messages/outgoing/friends/FriendsComposer.java @@ -32,7 +32,7 @@ public class FriendsComposer extends MessageComposer //this.response.appendInt(3); //Club level this.response.appendInt(this.habbo.hasPermission("acc_infinite_friends") ? Integer.MAX_VALUE : Messenger.MAXIMUM_FRIENDS); this.response.appendInt(this.habbo.hasPermission("acc_infinite_friends") ? Integer.MAX_VALUE : Messenger.MAXIMUM_FRIENDS); - this.response.appendInt(this.habbo.getMessenger().getFriends().size() + (this.habbo.hasPermission("acc_staff_chat") ? 1 : 0)); + this.response.appendInt(this.habbo.getMessenger().getFriends().size()/* + (this.habbo.hasPermission("acc_staff_chat") ? 1 : 0)*/); for (Map.Entry row : this.habbo.getMessenger().getFriends().entrySet()) { this.response.appendInt(row.getKey()); @@ -51,7 +51,7 @@ public class FriendsComposer extends MessageComposer this.response.appendShort(row.getValue().getRelation()); } - if(this.habbo.hasPermission("acc_staff_chat")) + /*if(this.habbo.hasPermission("acc_staff_chat")) { this.response.appendInt(-1); this.response.appendString("Staff Chat"); @@ -67,7 +67,8 @@ public class FriendsComposer extends MessageComposer this.response.appendBoolean(false); this.response.appendBoolean(false); this.response.appendShort(0); - } + }*/ + return this.response; } catch(Exception e)