diff --git a/Emulator/pom.xml b/Emulator/pom.xml
index 01c985c5..019470dc 100644
--- a/Emulator/pom.xml
+++ b/Emulator/pom.xml
@@ -6,7 +6,7 @@
com.eu.habbo
Habbo
- 4.0.3
+ 4.0.5
UTF-8
diff --git a/Emulator/src/main/java/com/eu/habbo/Emulator.java b/Emulator/src/main/java/com/eu/habbo/Emulator.java
index 50037361..20605be6 100644
--- a/Emulator/src/main/java/com/eu/habbo/Emulator.java
+++ b/Emulator/src/main/java/com/eu/habbo/Emulator.java
@@ -38,7 +38,7 @@ public final class Emulator {
public final static int MAJOR = 4;
public final static int MINOR = 0;
- public final static int BUILD = 3;
+ public final static int BUILD = 5;
public final static String PREVIEW = "";
public static final String version = "Arcturus Morningstar" + " " + MAJOR + "." + MINOR + "." + BUILD + " " + PREVIEW;
@@ -229,70 +229,30 @@ public final class Emulator {
LOGGER.info("Stopping Arcturus Morningstar {}", version);
- try {
- if (Emulator.getPluginManager() != null)
- Emulator.getPluginManager().fireEvent(new EmulatorStartShutdownEvent());
- } catch (Exception e) {
- }
-
- try {
- if (Emulator.cameraClient != null)
- Emulator.cameraClient.disconnect();
- } catch (Exception e) {
- }
-
- try {
- if (Emulator.rconServer != null)
- Emulator.rconServer.stop();
- } catch (Exception e) {
- }
-
- try {
- if (Emulator.gameEnvironment != null)
- Emulator.gameEnvironment.dispose();
- } catch (Exception e) {
- }
-
- try {
- if (Emulator.getPluginManager() != null)
- Emulator.getPluginManager().fireEvent(new EmulatorStoppedEvent());
- } catch (Exception e) {
- }
-
- try {
- if (Emulator.pluginManager != null)
- Emulator.pluginManager.dispose();
- } catch (Exception e) {
- }
-
- try {
- if (Emulator.config != null) {
- Emulator.config.saveToDatabase();
- }
- } catch (Exception e) {
- }
-
- try {
- if (Emulator.gameServer != null)
- Emulator.gameServer.stop();
- } catch (Exception e) {
- }
+ if (Emulator.pluginManager != null)
+ tryShutdown(() -> Emulator.pluginManager.fireEvent(new EmulatorStartShutdownEvent()));
+ if (Emulator.cameraClient != null) tryShutdown(() -> Emulator.cameraClient.disconnect());
+ if (Emulator.rconServer != null) tryShutdown(() -> Emulator.rconServer.stop());
+ if (Emulator.gameEnvironment != null) tryShutdown(() -> Emulator.gameEnvironment.dispose());
+ if (Emulator.pluginManager != null)
+ tryShutdown(() -> Emulator.pluginManager.fireEvent(new EmulatorStoppedEvent()));
+ if (Emulator.pluginManager != null) tryShutdown(() -> Emulator.pluginManager.dispose());
+ if (Emulator.config != null) tryShutdown(() -> Emulator.config.saveToDatabase());
+ if (Emulator.gameServer != null) tryShutdown(() -> Emulator.gameServer.stop());
LOGGER.info("Stopped Arcturus Morningstar {}", version);
- if (Emulator.database != null) {
- Emulator.getDatabase().dispose();
- }
+ if (Emulator.database != null) tryShutdown(() -> Emulator.database.dispose());
+ if (Emulator.threading != null) tryShutdown(() -> Emulator.threading.shutDown());
+
Emulator.stopped = true;
+ }
- // if (osName.startsWith("Windows") && (!classPath.contains("idea_rt.jar"))) {
- // AnsiConsole.systemUninstall();
- // }
+ private static void tryShutdown(Runnable action) {
try {
- if (Emulator.threading != null)
-
- Emulator.threading.shutDown();
+ action.run();
} catch (Exception e) {
+ LOGGER.error("Error during shutdown", e);
}
}
diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/catalog/marketplace/MarketPlace.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/catalog/marketplace/MarketPlace.java
index be96d0eb..45a7be0a 100644
--- a/Emulator/src/main/java/com/eu/habbo/habbohotel/catalog/marketplace/MarketPlace.java
+++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/catalog/marketplace/MarketPlace.java
@@ -120,7 +120,7 @@ public class MarketPlace {
if (maxPrice > 0 && maxPrice > minPrice) {
query += " AND CEIL(price + (price / 100)) <= " + maxPrice;
}
- if (search.length() > 0) {
+ if (!search.isEmpty()) {
query += " AND ( bi.public_name LIKE ? OR ci.catalog_name LIKE ? ) ";
}
@@ -157,7 +157,7 @@ public class MarketPlace {
try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement(query)) {
statement.setInt(1, Emulator.getIntUnixTimestamp() - 172800);
statement.setInt(2, Emulator.getIntUnixTimestamp() - 172800);
- if (search.length() > 0) {
+ if (!search.isEmpty()) {
statement.setString(3, "%" + search + "%");
statement.setString(4, "%" + search + "%");
}
@@ -257,11 +257,6 @@ public class MarketPlace {
} else if ((MARKETPLACE_CURRENCY == 0 && price > client.getHabbo().getHabboInfo().getCredits()) || (MARKETPLACE_CURRENCY > 0 && price > client.getHabbo().getHabboInfo().getCurrencyAmount(MARKETPLACE_CURRENCY))) {
client.sendResponse(new MarketplaceBuyErrorComposer(MarketplaceBuyErrorComposer.NOT_ENOUGH_CREDITS, 0, offerId, price));
} else {
- try (PreparedStatement updateOffer = connection.prepareStatement("UPDATE marketplace_items SET state = 2, sold_timestamp = ? WHERE id = ?")) {
- updateOffer.setInt(1, Emulator.getIntUnixTimestamp());
- updateOffer.setInt(2, offerId);
- updateOffer.execute();
- }
Habbo habbo = Emulator.getGameServer().getGameClientManager().getHabbo(set.getInt("user_id"));
HabboItem item = Emulator.getGameEnvironment().getItemManager().loadHabboItem(itemSet);
@@ -269,6 +264,16 @@ public class MarketPlace {
if (Emulator.getPluginManager().fireEvent(event).isCancelled()) {
return;
}
+
+ try (PreparedStatement updateOffer = connection.prepareStatement("UPDATE marketplace_items SET state = 2, sold_timestamp = ? WHERE id = ? AND state = 1")) {
+ updateOffer.setInt(1, Emulator.getIntUnixTimestamp());
+ updateOffer.setInt(2, offerId);
+ int updated = updateOffer.executeUpdate();
+ if (updated == 0) {
+ sendErrorMessage(client, set.getInt("item_id"), offerId);
+ return;
+ }
+ }
event.price = calculateCommision(event.price);
item.setUserId(client.getHabbo().getHabboInfo().getId());
diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/pets/PetManager.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/pets/PetManager.java
index e820bed5..5367e136 100644
--- a/Emulator/src/main/java/com/eu/habbo/habbohotel/pets/PetManager.java
+++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/pets/PetManager.java
@@ -3,11 +3,7 @@ package com.eu.habbo.habbohotel.pets;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.gameclients.GameClient;
import com.eu.habbo.habbohotel.items.Item;
-import com.eu.habbo.habbohotel.items.interactions.pets.InteractionNest;
-import com.eu.habbo.habbohotel.items.interactions.pets.InteractionPetDrink;
-import com.eu.habbo.habbohotel.items.interactions.pets.InteractionPetFood;
-import com.eu.habbo.habbohotel.items.interactions.pets.InteractionPetToy;
-import com.eu.habbo.habbohotel.items.interactions.pets.InteractionPetTrampoline;
+import com.eu.habbo.habbohotel.items.interactions.pets.*;
import com.eu.habbo.habbohotel.pets.actions.*;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.RoomTile;
@@ -332,19 +328,13 @@ public class PetManager {
}
public THashSet getBreeds(String petName) {
- if (!petName.startsWith("a0 pet")) {
- LOGGER.error("Pet {} not found. Make sure it matches the pattern \"a0 pet\"!", petName);
+ if (!petName.matches("a0 pet\\d{1,3}")) {
+ LOGGER.error("Pet data '{}' not found. Expected format: a0 pet<0-999>", petName);
return null;
}
- try {
- int petId = Integer.parseInt(petName.split("t")[1]);
- return this.petRaces.get(petId);
- } catch (Exception e) {
- LOGGER.error("Caught exception", e);
- }
-
- return null;
+ final int petId = Integer.parseInt(petName.substring(6));
+ return this.petRaces.get(petId);
}
public TIntObjectHashMap> getBreedingRewards(int petType) {
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/CatalogBuyItemAsGiftEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/CatalogBuyItemAsGiftEvent.java
index f932c370..98937b16 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/CatalogBuyItemAsGiftEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/CatalogBuyItemAsGiftEvent.java
@@ -37,6 +37,11 @@ import java.util.Calendar;
public class CatalogBuyItemAsGiftEvent extends MessageHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(CatalogBuyItemAsGiftEvent.class);
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
if (Emulator.getIntUnixTimestamp() - this.client.getHabbo().getHabboStats().lastGiftTimestamp >= CatalogManager.PURCHASE_COOLDOWN) {
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/CatalogBuyItemEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/CatalogBuyItemEvent.java
index b6e439ce..eb1086e3 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/CatalogBuyItemEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/CatalogBuyItemEvent.java
@@ -20,10 +20,9 @@ import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertKeys;
import com.eu.habbo.messages.outgoing.generic.alerts.HotelWillCloseInMinutesComposer;
import com.eu.habbo.messages.outgoing.inventory.InventoryRefreshComposer;
import com.eu.habbo.messages.outgoing.navigator.CanCreateRoomComposer;
-import com.eu.habbo.messages.outgoing.users.*;
+import com.eu.habbo.messages.outgoing.users.AddUserBadgeComposer;
import com.eu.habbo.threading.runnables.ShutdownEmulator;
import gnu.trove.map.hash.THashMap;
-import gnu.trove.procedure.TObjectProcedure;
import org.apache.commons.lang3.StringUtils;
import static com.eu.habbo.messages.incoming.catalog.CheckPetNameEvent.PET_NAME_LENGTH_MAXIMUM;
@@ -31,6 +30,10 @@ import static com.eu.habbo.messages.incoming.catalog.CheckPetNameEvent.PET_NAME_
public class CatalogBuyItemEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 250;
+ }
@Override
public void handle() throws Exception {
@@ -61,13 +64,11 @@ public class CatalogBuyItemEvent extends MessageHandler {
if (pageId == -12345678 || pageId == -1) {
CatalogItem searchedItem = Emulator.getGameEnvironment().getCatalogManager().getCatalogItem(itemId);
- if (searchedItem.getOfferId() > 0) {
+ if (searchedItem != null && searchedItem.getOfferId() > 0) {
page = Emulator.getGameEnvironment().getCatalogManager().getCatalogPage(searchedItem.getPageId());
if(page != null) {
- if (page.getCatalogItem(itemId).getOfferId() <= 0) {
- page = null;
- } else if (page.getRank() > this.client.getHabbo().getHabboInfo().getRank().getId()) {
+ if (page.getRank() > this.client.getHabbo().getHabboInfo().getRank().getId()) {
page = null;
} else if (page.getLayout() != null && page.getLayout().equalsIgnoreCase(CatalogPageLayouts.club_gift.name())) {
page = null;
@@ -83,12 +84,9 @@ public class CatalogBuyItemEvent extends MessageHandler {
if (page instanceof RoomBundleLayout) {
final CatalogItem[] item = new CatalogItem[1];
- page.getCatalogItems().forEachValue(new TObjectProcedure() {
- @Override
- public boolean execute(CatalogItem object) {
- item[0] = object;
- return false;
- }
+ page.getCatalogItems().forEachValue(object -> {
+ item[0] = object;
+ return false;
});
CatalogItem roomBundleItem = item[0];
@@ -100,20 +98,19 @@ public class CatalogBuyItemEvent extends MessageHandler {
int maxRooms = this.client.getHabbo().getHabboStats().hasActiveClub() ? RoomManager.MAXIMUM_ROOMS_HC : RoomManager.MAXIMUM_ROOMS_USER;
if (roomCount >= maxRooms) { // checks if a user has the maximum rooms
- this.client.sendResponse(new CanCreateRoomComposer(roomCount, maxRooms)); // if so throws the max room error.
- this.client.sendResponse(new PurchaseOKComposer(null)); // Send this so the alert disappears, not sure if this is how it should be handled :S
- return;
+ this.client.sendResponse(new CanCreateRoomComposer(roomCount, maxRooms)); // if so throws the max room error.
+ this.client.sendResponse(new PurchaseOKComposer(null)); // Send this so the alert disappears, not sure if this is how it should be handled :S
+ return;
}
- ((RoomBundleLayout) page).buyRoom(this.client.getHabbo());
- if (!this.client.getHabbo().hasPermission(Permission.ACC_INFINITE_CREDITS)) { //if the player has this perm disabled
- this.client.getHabbo().giveCredits(-roomBundleItem.getCredits()); // takes their credits away
- }
- if (!this.client.getHabbo().hasPermission(Permission.ACC_INFINITE_POINTS)) { //if the player has this perm disabled
- this.client.getHabbo().givePoints(roomBundleItem.getPointsType(), -roomBundleItem.getPoints()); // takes their points away
- }
- this.client.sendResponse(new PurchaseOKComposer()); // Sends the composer to close the window.
+ ((RoomBundleLayout) page).buyRoom(this.client.getHabbo());
+ if (!this.client.getHabbo().hasPermission(Permission.ACC_INFINITE_CREDITS)) { //if the player has this perm disabled
+ this.client.getHabbo().giveCredits(-roomBundleItem.getCredits()); // takes their credits away
+ }
+ if (!this.client.getHabbo().hasPermission(Permission.ACC_INFINITE_POINTS)) { //if the player has this perm disabled
+ this.client.getHabbo().givePoints(roomBundleItem.getPointsType(), -roomBundleItem.getPoints()); // takes their points away
+ }
+ this.client.sendResponse(new PurchaseOKComposer()); // Sends the composer to close the window.
- final boolean[] badgeFound = {false};
item[0].getBaseItems().stream().filter(i -> i.getType() == FurnitureType.BADGE).forEach(i -> {
if (!this.client.getHabbo().getInventory().getBadgesComponent().hasBadge(i.getName())) {
HabboBadge badge = new HabboBadge(0, i.getName(), 0, this.client.getHabbo());
@@ -124,9 +121,7 @@ public class CatalogBuyItemEvent extends MessageHandler {
keys.put("display", "BUBBLE");
keys.put("image", "${image.library.url}album1584/" + badge.getCode() + ".gif");
keys.put("message", Emulator.getTexts().getValue("commands.generic.cmd_badge.received"));
- this.client.sendResponse(new BubbleAlertComposer(BubbleAlertKeys.RECEIVED_BADGE.key, keys)); //:test 1992 s:npc.gift.received i:2 s:npc_name s:Admin s:image s:${image.library.url}album1584/ADM.gif);
- } else {
- badgeFound[0] = true;
+ this.client.sendResponse(new BubbleAlertComposer(BubbleAlertKeys.RECEIVED_BADGE.key, keys));
}
});
@@ -191,7 +186,7 @@ public class CatalogBuyItemEvent extends MessageHandler {
this.client.sendResponse(new PurchaseOKComposer(null));
this.client.sendResponse(new InventoryRefreshComposer());
-
+
this.client.getHabbo().getHabboStats().run();
}
return;
@@ -211,15 +206,16 @@ public class CatalogBuyItemEvent extends MessageHandler {
return;
}
}
- if (page instanceof PetsLayout) { // checks it's the petlayout
+ if (page instanceof PetsLayout) {
if (!this.client.getHabbo().hasPermission(Permission.ACC_UNLIMITED_PETS) && this.client.getHabbo().getInventory().getPetsComponent().getPets().size() >= PetManager.MAXIMUM_PET_INVENTORY_SIZE) {
this.client.getHabbo().alert(Emulator.getTexts().getValue("error.pets.max.inventory").replace("%amount%", PetManager.MAXIMUM_PET_INVENTORY_SIZE + ""));
return;
}
- String[] check = extraData.split("\n"); // splits the extradata
- if ((check.length != 3) || (check[0].length() < PET_NAME_LENGTH_MINIMUM) || (check[0].length() > PET_NAME_LENGTH_MAXIMUM) || (!StringUtils.isAlphanumeric(check[0])))// checks if there's 3 parts (always is with pets, if not it fucks them off)
- return; // if it does it fucks off.
+ String[] check = extraData.split("\n");
+ if ((check.length != 3) || (check[0].length() < PET_NAME_LENGTH_MINIMUM) || (check[0].length() > PET_NAME_LENGTH_MAXIMUM) || (!StringUtils.isAlphanumeric(check[0]))) {
+ return;
}
+ }
Emulator.getGameEnvironment().getCatalogManager().purchaseItem(page, item, this.client.getHabbo(), count, extraData, false);
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/PurchaseTargetOfferEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/PurchaseTargetOfferEvent.java
index 3ef97b24..89fbfb3c 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/PurchaseTargetOfferEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/PurchaseTargetOfferEvent.java
@@ -11,16 +11,17 @@ public class PurchaseTargetOfferEvent extends MessageHandler {
@Override
public void handle() throws Exception {
- int offerId = this.packet.readInt();
+ final int offerId = this.packet.readInt();
int amount = this.packet.readInt();
- if (amount <= 0) return;
+ if (amount <= 0 || offerId <= 0) return;
if (Emulator.getIntUnixTimestamp() - this.client.getHabbo().getHabboStats().lastPurchaseTimestamp >= CatalogManager.PURCHASE_COOLDOWN) {
this.client.getHabbo().getHabboStats().lastPurchaseTimestamp = Emulator.getIntUnixTimestamp();
TargetOffer offer = Emulator.getGameEnvironment().getCatalogManager().getTargetOffer(offerId);
+ if (offer == null) return;
HabboOfferPurchase purchase = HabboOfferPurchase.getOrCreate(this.client.getHabbo(), offerId);
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/RedeemVoucherEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/RedeemVoucherEvent.java
index 5923398b..df9daa08 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/RedeemVoucherEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/RedeemVoucherEvent.java
@@ -7,6 +7,11 @@ import com.eu.habbo.messages.outgoing.generic.alerts.HotelWillCloseInMinutesComp
import com.eu.habbo.threading.runnables.ShutdownEmulator;
public class RedeemVoucherEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
if (ShutdownEmulator.timestamp > 0) {
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/RequestPetBreedsEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/RequestPetBreedsEvent.java
index 5d005da0..ec712a8f 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/RequestPetBreedsEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/RequestPetBreedsEvent.java
@@ -5,9 +5,14 @@ import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.messages.outgoing.catalog.PetBreedsComposer;
public class RequestPetBreedsEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
- String petName = this.packet.readString();
+ final String petName = this.packet.readString();
this.client.sendResponse(new PetBreedsComposer(petName, Emulator.getGameEnvironment().getPetManager().getBreeds(petName)));
}
-}
+}
\ No newline at end of file
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/marketplace/RequestOffersEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/marketplace/RequestOffersEvent.java
index 8ce5531d..ccd05b35 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/marketplace/RequestOffersEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/marketplace/RequestOffersEvent.java
@@ -13,6 +13,11 @@ import java.util.concurrent.ConcurrentHashMap;
public class RequestOffersEvent extends MessageHandler {
public final static Map cachedResults = new ConcurrentHashMap<>(0);
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
int min = this.packet.readInt();
@@ -20,6 +25,11 @@ public class RequestOffersEvent extends MessageHandler {
String query = this.packet.readString();
int type = this.packet.readInt();
+ if (query.length() > 30) {
+ query = query.substring(0, 30);
+ }
+
+
boolean tryCache = min == -1 && max == -1 && query.isEmpty();
if (tryCache) {
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/marketplace/SellItemEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/marketplace/SellItemEvent.java
index 30fc10d8..37eb6325 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/marketplace/SellItemEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/marketplace/SellItemEvent.java
@@ -13,6 +13,11 @@ import org.slf4j.LoggerFactory;
public class SellItemEvent extends MessageHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(SellItemEvent.class);
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
if (!MarketPlace.MARKETPLACE_ENABLED) {
@@ -20,10 +25,11 @@ public class SellItemEvent extends MessageHandler {
return;
}
- int credits = this.packet.readInt();
+ final int credits = this.packet.readInt();
+ final int furniType = this.packet.readInt(); // 1 = FLOOR_TYPE, 2 = WALL_TYPE
+ final int itemId = this.packet.readInt();
- this.packet.readInt(); // unknown - not used
- int itemId = this.packet.readInt();
+ if (furniType != 1 && furniType != 2) return;
HabboItem item = this.client.getHabbo().getInventory().getItemsComponent().getHabboItem(itemId);
if (item != null) {
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/recycler/OpenRecycleBoxEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/recycler/OpenRecycleBoxEvent.java
index f9508582..523d5d0d 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/recycler/OpenRecycleBoxEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/recycler/OpenRecycleBoxEvent.java
@@ -22,11 +22,11 @@ public class OpenRecycleBoxEvent extends MessageHandler {
if (room == null)
return;
- if (room.getOwnerId() == this.client.getHabbo().getHabboInfo().getId() || this.client.getHabbo().hasPermission(Permission.ACC_ANYROOMOWNER)) {
+ if (room.getOwnerId() == this.client.getHabbo().getHabboInfo().getId() || this.client.getHabbo().hasPermission(Permission.ACC_ANYROOMOWNER) || room.hasRights(this.client.getHabbo())) {
HabboItem item = room.getHabboItem(this.packet.readInt());
- if (item == null)
- return;
+ if (item == null) return;
+ if (item.getUserId() != this.client.getHabbo().getHabboInfo().getId()) return;
if (item instanceof InteractionGift) {
if (item.getBaseItem().getName().contains("present_wrap")) {
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/recycler/RecycleEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/recycler/RecycleEvent.java
index 05b6fc32..884b6f6c 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/recycler/RecycleEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/catalog/recycler/RecycleEvent.java
@@ -27,7 +27,7 @@ public class RecycleEvent extends MessageHandler {
THashSet items = new THashSet<>();
int count = this.packet.readInt();
- if (count < Emulator.getConfig().getInt("recycler.value", 8)) return;
+ if (count != Emulator.getConfig().getInt("recycler.value", 8)) return;
for (int i = 0; i < count; i++) {
HabboItem item = this.client.getHabbo().getInventory().getItemsComponent().getHabboItem(this.packet.readInt());
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/floorplaneditor/FloorPlanEditorSaveEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/floorplaneditor/FloorPlanEditorSaveEvent.java
index c2c90ed2..48ec258a 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/floorplaneditor/FloorPlanEditorSaveEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/floorplaneditor/FloorPlanEditorSaveEvent.java
@@ -12,12 +12,20 @@ import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer;
import com.eu.habbo.messages.outgoing.rooms.ForwardToRoomComposer;
import gnu.trove.set.hash.THashSet;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.StringJoiner;
public class FloorPlanEditorSaveEvent extends MessageHandler {
public static int MAXIMUM_FLOORPLAN_WIDTH_LENGTH = 64;
public static int MAXIMUM_FLOORPLAN_SIZE = 64 * 64;
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
if (!this.client.getHabbo().hasPermission(Permission.ACC_FLOORPLAN_EDITOR)) {
@@ -56,7 +64,7 @@ public class FloorPlanEditorSaveEvent extends MessageHandler {
}
if (mapRows.length > MAXIMUM_FLOORPLAN_WIDTH_LENGTH) errors.add("${notification.floorplan_editor.error.message.too_large_height}");
- else if (Arrays.stream(mapRows).anyMatch(l -> l.length() > MAXIMUM_FLOORPLAN_WIDTH_LENGTH || l.length() == 0)) errors.add("${notification.floorplan_editor.error.message.too_large_width}");
+ else if (Arrays.stream(mapRows).anyMatch(l -> l.length() > MAXIMUM_FLOORPLAN_WIDTH_LENGTH || l.isEmpty())) errors.add("${notification.floorplan_editor.error.message.too_large_width}");
if (errors.length() > 0) {
this.client.sendResponse(new BubbleAlertComposer(BubbleAlertKeys.FLOORPLAN_EDITOR_ERROR.key, errors.toString()));
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/friends/AcceptFriendRequestEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/friends/AcceptFriendRequestEvent.java
index d3f461bf..869fe532 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/friends/AcceptFriendRequestEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/friends/AcceptFriendRequestEvent.java
@@ -19,9 +19,15 @@ import static com.eu.habbo.habbohotel.users.HabboManager.getOfflineHabboInfo;
public class AcceptFriendRequestEvent extends MessageHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(AcceptFriendRequestEvent.class);
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
+
@Override
public void handle() throws Exception {
- int count = this.packet.readInt();
+ int count = Math.min(this.packet.readInt(), 100);
int userId;
for (int i = 0; i < count; i++) {
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/friends/FriendRequestEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/friends/FriendRequestEvent.java
index f038e811..24afc88b 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/friends/FriendRequestEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/friends/FriendRequestEvent.java
@@ -19,6 +19,11 @@ import java.sql.SQLException;
public class FriendRequestEvent extends MessageHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(FriendRequestEvent.class);
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
String username = this.packet.readString();
@@ -65,13 +70,13 @@ public class FriendRequestEvent extends MessageHandler {
}
// You can only have x friends
- if (this.client.getHabbo().getMessenger().getFriends().values().size() >= this.client.getHabbo().getHabboStats().maxFriends && !this.client.getHabbo().hasPermission("acc_infinite_friends")) {
+ if (this.client.getHabbo().getMessenger().getFriends().size() >= this.client.getHabbo().getHabboStats().maxFriends && !this.client.getHabbo().hasPermission("acc_infinite_friends")) {
this.client.sendResponse(new FriendRequestErrorComposer(FriendRequestErrorComposer.FRIEND_LIST_OWN_FULL));
return;
}
// Check if targets friendlist is full
- if (targetHabbo.getMessenger().getFriends().values().size() >= targetHabbo.getHabboStats().maxFriends && !targetHabbo.hasPermission("acc_infinite_friends")) {
+ if (targetHabbo.getMessenger().getFriends().size() >= targetHabbo.getHabboStats().maxFriends && !targetHabbo.hasPermission("acc_infinite_friends")) {
this.client.sendResponse(new FriendRequestErrorComposer(FriendRequestErrorComposer.FRIEND_LIST_TARGET_FULL));
return;
}
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/friends/InviteFriendsEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/friends/InviteFriendsEvent.java
index a2624748..113cecb7 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/friends/InviteFriendsEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/friends/InviteFriendsEvent.java
@@ -6,10 +6,18 @@ import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.messages.outgoing.friends.RoomInviteComposer;
public class InviteFriendsEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
if (this.client.getHabbo().getHabboStats().allowTalk()) {
- int[] userIds = new int[this.packet.readInt()];
+ final int count = this.packet.readInt();
+ if (count <= 0 || count > 100) return;
+
+ final int[] userIds = new int[count];
for (int i = 0; i < userIds.length; i++) {
userIds[i] = this.packet.readInt();
@@ -23,6 +31,9 @@ public class InviteFriendsEvent extends MessageHandler {
if (i == 0)
continue;
+ if (!this.client.getHabbo().getMessenger().getFriends().containsKey(i))
+ continue;
+
Habbo habbo = Emulator.getGameEnvironment().getHabboManager().getHabbo(i);
if (habbo != null) {
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildAcceptMembershipEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildAcceptMembershipEvent.java
index 068aba2e..271382c8 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildAcceptMembershipEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildAcceptMembershipEvent.java
@@ -14,6 +14,11 @@ import com.eu.habbo.messages.outgoing.guilds.GuildRefreshMembersListComposer;
import com.eu.habbo.plugin.events.guilds.GuildAcceptedMembershipEvent;
public class GuildAcceptMembershipEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
int guildId = this.packet.readInt();
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildChangeBadgeEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildChangeBadgeEvent.java
index 06e9d1b0..9aa68c8e 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildChangeBadgeEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildChangeBadgeEvent.java
@@ -8,6 +8,11 @@ import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.plugin.events.guilds.GuildChangedBadgeEvent;
public class GuildChangeBadgeEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
int guildId = this.packet.readInt();
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildChangeColorsEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildChangeColorsEvent.java
index fee78300..d184af1b 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildChangeColorsEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildChangeColorsEvent.java
@@ -8,6 +8,11 @@ import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.plugin.events.guilds.GuildChangedColorsEvent;
public class GuildChangeColorsEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
int guildId = this.packet.readInt();
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildChangeNameDescEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildChangeNameDescEvent.java
index 7942b2cd..b1fbefcf 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildChangeNameDescEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildChangeNameDescEvent.java
@@ -8,6 +8,11 @@ import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.plugin.events.guilds.GuildChangedNameEvent;
public class GuildChangeNameDescEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
int guildId = this.packet.readInt();
@@ -16,7 +21,9 @@ public class GuildChangeNameDescEvent extends MessageHandler {
if (guild != null) {
if (guild.getOwnerId() == this.client.getHabbo().getHabboInfo().getId() || this.client.getHabbo().hasPermission(Permission.ACC_GUILD_ADMIN)) {
- GuildChangedNameEvent nameEvent = new GuildChangedNameEvent(guild, this.packet.readString(), this.packet.readString());
+ String newName = Emulator.getGameEnvironment().getWordFilter().filter(this.packet.readString(), this.client.getHabbo());
+ String newDesc = Emulator.getGameEnvironment().getWordFilter().filter(this.packet.readString(), this.client.getHabbo());
+ GuildChangedNameEvent nameEvent = new GuildChangedNameEvent(guild, newName, newDesc);
Emulator.getPluginManager().fireEvent(nameEvent);
if (nameEvent.isCancelled())
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildChangeSettingsEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildChangeSettingsEvent.java
index d21df54b..bf99d98c 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildChangeSettingsEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildChangeSettingsEvent.java
@@ -9,6 +9,11 @@ import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.plugin.events.guilds.GuildChangedSettingsEvent;
public class GuildChangeSettingsEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
int guildId = this.packet.readInt();
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildConfirmRemoveMemberEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildConfirmRemoveMemberEvent.java
index ba569387..d7ad9601 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildConfirmRemoveMemberEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildConfirmRemoveMemberEvent.java
@@ -4,12 +4,16 @@ 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.permissions.Permission;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.messages.outgoing.guilds.GuildConfirmRemoveMemberComposer;
public class GuildConfirmRemoveMemberEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
int guildId = this.packet.readInt();
@@ -19,7 +23,7 @@ public class GuildConfirmRemoveMemberEvent extends MessageHandler {
if (guild != null) {
GuildMember member = Emulator.getGameEnvironment().getGuildManager().getGuildMember(guild, this.client.getHabbo());
- if (userId == this.client.getHabbo().getHabboInfo().getId() || guild.getOwnerId() == this.client.getHabbo().getHabboInfo().getId() || (member != null && member.getRank().equals(GuildRank.OWNER) || member.getRank().equals(GuildRank.ADMIN)) || this.client.getHabbo().hasPermission(Permission.ACC_GUILD_ADMIN)) {
+ if (userId == this.client.getHabbo().getHabboInfo().getId() || guild.getOwnerId() == this.client.getHabbo().getHabboInfo().getId() || (member != null && member.getRank().equals(GuildRank.OWNER) || (member != null && (member.getRank().equals(GuildRank.OWNER) || member.getRank().equals(GuildRank.ADMIN))))) {
Room room = Emulator.getGameEnvironment().getRoomManager().loadRoom(guild.getRoomId());
int count = 0;
if (room != null) {
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildDeclineMembershipEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildDeclineMembershipEvent.java
index 885e771c..1e383706 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildDeclineMembershipEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildDeclineMembershipEvent.java
@@ -14,6 +14,11 @@ import com.eu.habbo.messages.outgoing.guilds.GuildRefreshMembersListComposer;
import com.eu.habbo.plugin.events.guilds.GuildDeclinedMembershipEvent;
public class GuildDeclineMembershipEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
int guildId = this.packet.readInt();
@@ -23,7 +28,7 @@ public class GuildDeclineMembershipEvent extends MessageHandler {
if (guild != null) {
GuildMember member = Emulator.getGameEnvironment().getGuildManager().getGuildMember(guild, this.client.getHabbo());
- if (userId == this.client.getHabbo().getHabboInfo().getId() || guild.getOwnerId() == this.client.getHabbo().getHabboInfo().getId() || member.getRank().equals(GuildRank.ADMIN)|| member.getRank().equals(GuildRank.OWNER) || this.client.getHabbo().hasPermission(Permission.ACC_GUILD_ADMIN)) {
+ if (userId == this.client.getHabbo().getHabboInfo().getId() || guild.getOwnerId() == this.client.getHabbo().getHabboInfo().getId() || (member != null && (member.getRank().equals(GuildRank.ADMIN) || member.getRank().equals(GuildRank.OWNER))) || this.client.getHabbo().hasPermission(Permission.ACC_GUILD_ADMIN)) {
guild.decreaseRequestCount();
Emulator.getGameEnvironment().getGuildManager().removeMember(guild, userId);
this.client.sendResponse(new GuildMembersComposer(guild, Emulator.getGameEnvironment().getGuildManager().getGuildMembers(guild, 0, 0, ""), this.client.getHabbo(), 0, 0, "", true, Emulator.getGameEnvironment().getGuildManager().getGuildMembersCount(guild, 0, 0, "")));
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildDeleteEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildDeleteEvent.java
index fce5021f..a1ce8c48 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildDeleteEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildDeleteEvent.java
@@ -13,6 +13,11 @@ import com.eu.habbo.plugin.events.guilds.GuildDeletedEvent;
import gnu.trove.set.hash.THashSet;
public class GuildDeleteEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
int guildId = this.packet.readInt();
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildRemoveAdminEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildRemoveAdminEvent.java
index d017a5af..a800893b 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildRemoveAdminEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildRemoveAdminEvent.java
@@ -12,6 +12,11 @@ import com.eu.habbo.messages.outgoing.guilds.GuildMemberUpdateComposer;
import com.eu.habbo.plugin.events.guilds.GuildRemovedAdminEvent;
public class GuildRemoveAdminEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
int guildId = this.packet.readInt();
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildRemoveFavoriteEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildRemoveFavoriteEvent.java
index 6f64afac..574b08e0 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildRemoveFavoriteEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildRemoveFavoriteEvent.java
@@ -8,6 +8,11 @@ import com.eu.habbo.messages.outgoing.users.UserProfileComposer;
import com.eu.habbo.plugin.events.guilds.GuildRemovedFavoriteEvent;
public class GuildRemoveFavoriteEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
int guildId = this.packet.readInt();
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildRemoveMemberEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildRemoveMemberEvent.java
index e5ee67fa..4b61f258 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildRemoveMemberEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildRemoveMemberEvent.java
@@ -14,6 +14,11 @@ import com.eu.habbo.messages.outgoing.guilds.GuildRefreshMembersListComposer;
import com.eu.habbo.plugin.events.guilds.GuildRemovedMemberEvent;
public class GuildRemoveMemberEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
int guildId = this.packet.readInt();
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildSetAdminEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildSetAdminEvent.java
index 7e60d6cf..24d9898a 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildSetAdminEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildSetAdminEvent.java
@@ -20,15 +20,17 @@ public class GuildSetAdminEvent extends MessageHandler {
if (guild != null) {
if (guild.getOwnerId() == this.client.getHabbo().getHabboInfo().getId() || this.client.getHabbo().hasPermission(Permission.ACC_GUILD_ADMIN)) {
- Emulator.getGameEnvironment().getGuildManager().setAdmin(guild, userId);
Habbo habbo = Emulator.getGameEnvironment().getHabboManager().getHabbo(userId);
GuildGivenAdminEvent adminEvent = new GuildGivenAdminEvent(guild, userId, habbo, this.client.getHabbo());
Emulator.getPluginManager().fireEvent(adminEvent);
+
if (adminEvent.isCancelled())
return;
+ Emulator.getGameEnvironment().getGuildManager().setAdmin(guild, userId);
+
if (habbo != null) {
Room room = habbo.getHabboInfo().getCurrentRoom();
if (room != null) {
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildSetFavoriteEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildSetFavoriteEvent.java
index 0837320c..d68dc513 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildSetFavoriteEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/GuildSetFavoriteEvent.java
@@ -9,6 +9,11 @@ import com.eu.habbo.messages.outgoing.users.UserProfileComposer;
import com.eu.habbo.plugin.events.guilds.GuildFavoriteSetEvent;
public class GuildSetFavoriteEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
int guildId = this.packet.readInt();
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildBuyEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildBuyEvent.java
index 96b73e6b..a6eeeef0 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildBuyEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildBuyEvent.java
@@ -20,12 +20,23 @@ public class RequestGuildBuyEvent extends MessageHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(RequestGuildBuyEvent.class);
@Override
- public void handle() throws Exception {
- String name = Emulator.getGameEnvironment().getWordFilter().filter(this.packet.readString(), this.client.getHabbo());
- String description = Emulator.getGameEnvironment().getWordFilter().filter(this.packet.readString(), this.client.getHabbo());
+ public int getRatelimit() {
+ return 500;
+ }
- if(name.length() > 29 || description.length() > 254)
+ @Override
+ public void handle() throws Exception {
+ final String name = Emulator.getGameEnvironment().getWordFilter().filter(this.packet.readString(), this.client.getHabbo());
+ final String description = Emulator.getGameEnvironment().getWordFilter().filter(this.packet.readString(), this.client.getHabbo());
+
+ if(name.length() > 29){
+ this.client.sendResponse(new GuildEditFailComposer(GuildEditFailComposer.INVALID_GUILD_NAME));
return;
+ }
+ if(description.length() > 254){
+ return;
+ }
+
if (Emulator.getConfig().getBoolean("catalog.guild.hc_required", true) && !this.client.getHabbo().getHabboStats().hasActiveClub()) {
this.client.sendResponse(new GuildEditFailComposer(GuildEditFailComposer.HC_REQUIRED));
@@ -59,7 +70,7 @@ public class RequestGuildBuyEvent extends MessageHandler {
int count = this.packet.readInt();
- String badge = "";
+ StringBuilder badge = new StringBuilder();
byte base = 1;
@@ -69,24 +80,17 @@ public class RequestGuildBuyEvent extends MessageHandler {
int pos = this.packet.readInt();
if (base == 1) {
- badge += "b";
+ badge.append("b");
} else {
- badge += "s";
+ badge.append("s");
}
- badge += (id < 100 ? "0" : "") + (id < 10 ? "0" : "") + id + (color < 10 ? "0" : "") + color + "" + pos;
+ badge.append(id < 100 ? "0" : "").append(id < 10 ? "0" : "").append(id).append(color < 10 ? "0" : "").append(color).append(pos);
base += 3;
}
- if(name.length() > 29){
- this.client.sendResponse(new GuildEditFailComposer(GuildEditFailComposer.INVALID_GUILD_NAME));
- return;
- }
- if(description.length() > 254){
- return;
- }
- Guild guild = Emulator.getGameEnvironment().getGuildManager().createGuild(this.client.getHabbo(), roomId, r.getName(), name, description, badge, colorOne, colorTwo);
+ Guild guild = Emulator.getGameEnvironment().getGuildManager().createGuild(this.client.getHabbo(), roomId, r.getName(), name, description, badge.toString(), colorOne, colorTwo);
r.setGuild(guild.getId());
r.removeAllRights();
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildFurniWidgetEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildFurniWidgetEvent.java
index 18dc0b94..77a035a3 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildFurniWidgetEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildFurniWidgetEvent.java
@@ -7,6 +7,11 @@ import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.messages.outgoing.guilds.GuildFurniWidgetComposer;
public class RequestGuildFurniWidgetEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
int itemId = this.packet.readInt();
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildInfoEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildInfoEvent.java
index d3a06928..68d62833 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildInfoEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildInfoEvent.java
@@ -6,6 +6,11 @@ import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.messages.outgoing.guilds.GuildInfoComposer;
public class RequestGuildInfoEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
int guildId = this.packet.readInt();
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildJoinEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildJoinEvent.java
index 811dca2c..f84d02b5 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildJoinEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildJoinEvent.java
@@ -9,6 +9,11 @@ import com.eu.habbo.messages.outgoing.guilds.GuildInfoComposer;
import com.eu.habbo.messages.outgoing.guilds.GuildJoinErrorComposer;
public class RequestGuildJoinEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
int guildId = this.packet.readInt();
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildManageEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildManageEvent.java
index ccb6ce89..b1832a3e 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildManageEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildManageEvent.java
@@ -2,14 +2,56 @@ package com.eu.habbo.messages.incoming.guilds;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.guilds.Guild;
+import com.eu.habbo.habbohotel.guilds.GuildManager;
+import com.eu.habbo.habbohotel.guilds.GuildMember;
+import com.eu.habbo.habbohotel.guilds.GuildRank;
+import com.eu.habbo.habbohotel.rooms.Room;
+import com.eu.habbo.habbohotel.users.Habbo;
+import com.eu.habbo.habbohotel.users.HabboInfo;
import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.messages.outgoing.guilds.GuildManageComposer;
public class RequestGuildManageEvent extends MessageHandler {
- @Override
- public void handle() throws Exception {
- Guild guild = Emulator.getGameEnvironment().getGuildManager().getGuild(this.packet.readInt());
+ private static final String ACC_GUILD_ADMIN = "acc_guild_admin";
- this.client.sendResponse(new GuildManageComposer(guild));
+ @Override
+ public int getRatelimit() {
+ return 500;
}
-}
+
+ @Override
+ public void handle() {
+ final Habbo habbo = this.client.getHabbo();
+ if (habbo == null) return;
+
+ final HabboInfo habboInfo = habbo.getHabboInfo();
+ if (habboInfo == null) return;
+
+ final int guildId = this.packet.readInt();
+ if (guildId <= 0) return;
+
+ final GuildManager guildManager = Emulator.getGameEnvironment().getGuildManager();
+ final Guild guild = guildManager.getGuild(guildId);
+
+ if (guild == null) return;
+
+ if (!habbo.hasPermission(ACC_GUILD_ADMIN)) {
+ Room room = habboInfo.getCurrentRoom();
+
+ if (room == null || room.getId() != guild.getRoomId()) {
+ return;
+ }
+ }
+
+ if (this.hasManageRights(guildManager, guild, habbo)) {
+ this.client.sendResponse(new GuildManageComposer(guild));
+ }
+ }
+
+ private boolean hasManageRights(GuildManager guildManager, Guild guild, Habbo habbo) {
+ if (habbo.hasPermission(ACC_GUILD_ADMIN) || habbo.getHabboInfo().getId() == guild.getOwnerId()) return true;
+
+ final GuildMember member = guildManager.getGuildMember(guild, habbo);
+ return member != null && member.getRank() == GuildRank.ADMIN;
+ }
+}
\ No newline at end of file
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildMembersEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildMembersEvent.java
index 2423a900..e9c218ca 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildMembersEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestGuildMembersEvent.java
@@ -9,6 +9,11 @@ import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.messages.outgoing.guilds.GuildMembersComposer;
public class RequestGuildMembersEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
int groupId = this.packet.readInt();
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestOwnGuildsEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestOwnGuildsEvent.java
index 1a89d705..0005cffb 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestOwnGuildsEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/RequestOwnGuildsEvent.java
@@ -7,6 +7,11 @@ import com.eu.habbo.messages.outgoing.guilds.GuildListComposer;
import gnu.trove.set.hash.THashSet;
public class RequestOwnGuildsEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
THashSet guilds = new THashSet();
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumDataEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumDataEvent.java
index ab78d2c0..ec1d213e 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumDataEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumDataEvent.java
@@ -6,14 +6,19 @@ import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.messages.outgoing.guilds.forums.GuildForumDataComposer;
public class GuildForumDataEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
int guildId = packet.readInt();
Guild guild = Emulator.getGameEnvironment().getGuildManager().getGuild(guildId);
- if (guild == null)
- return;
+ if (guild == null) return;
+ if (!guild.hasForum()) return;
this.client.sendResponse(new GuildForumDataComposer(guild, this.client.getHabbo()));
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumListEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumListEvent.java
index b36f2714..83e7b484 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumListEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumListEvent.java
@@ -16,6 +16,11 @@ import java.sql.SQLException;
import java.util.Set;
public class GuildForumListEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
private static final Logger LOGGER = LoggerFactory.getLogger(GuildForumListEvent.class);
@Override
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumModerateMessageEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumModerateMessageEvent.java
index 6febac46..bb4d87eb 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumModerateMessageEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumModerateMessageEvent.java
@@ -16,6 +16,11 @@ import com.eu.habbo.messages.outgoing.handshake.ConnectionErrorComposer;
public class GuildForumModerateMessageEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
int guildId = packet.readInt();
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumModerateThreadEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumModerateThreadEvent.java
index 5a83d413..95a972fa 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumModerateThreadEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumModerateThreadEvent.java
@@ -16,6 +16,11 @@ import com.eu.habbo.messages.outgoing.handshake.ConnectionErrorComposer;
public class GuildForumModerateThreadEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
int guildId = packet.readInt();
@@ -33,14 +38,15 @@ public class GuildForumModerateThreadEvent extends MessageHandler {
}
GuildMember member = Emulator.getGameEnvironment().getGuildManager().getGuildMember(guildId, this.client.getHabbo().getHabboInfo().getId());
- boolean hasStaffPerms = this.client.getHabbo().hasPermission(Permission.ACC_MODTOOL_TICKET_Q); // check for if they have staff perm
- boolean isGuildAdmin = (guild.getOwnerId() == this.client.getHabbo().getHabboInfo().getId() || member.getRank().equals(GuildRank.ADMIN));
+ boolean hasStaffPerms = this.client.getHabbo().hasPermission(Permission.ACC_MODTOOL_TICKET_Q);
-
- if (member == null) {
+ if (member == null && !hasStaffPerms && guild.getOwnerId() != this.client.getHabbo().getHabboInfo().getId()) {
this.client.sendResponse(new ConnectionErrorComposer(401));
return;
}
+
+ boolean isGuildAdmin = (guild.getOwnerId() == this.client.getHabbo().getHabboInfo().getId() || (member != null && member.getRank().equals(GuildRank.ADMIN)));
+
if (!isGuildAdmin && !hasStaffPerms) {
this.client.sendResponse(new ConnectionErrorComposer(403));
return;
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadUpdateEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadUpdateEvent.java
index 5611b934..908ff2a0 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadUpdateEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadUpdateEvent.java
@@ -15,6 +15,11 @@ import com.eu.habbo.messages.outgoing.guilds.forums.ThreadUpdatedMessageComposer
import com.eu.habbo.messages.outgoing.handshake.ConnectionErrorComposer;
public class GuildForumThreadUpdateEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
int guildId = this.packet.readInt();
@@ -40,7 +45,7 @@ public class GuildForumThreadUpdateEvent extends MessageHandler {
boolean isAdmin = (guild.getOwnerId() == this.client.getHabbo().getHabboInfo().getId() || member.getRank().type < GuildRank.MEMBER.type);
- if ((guild.canModForum() == SettingsState.OWNER && guild.getOwnerId() == this.client.getHabbo().getHabboInfo().getId() && !isStaff) || (guild.canModForum() == SettingsState.ADMINS && !isAdmin && !isStaff)) {
+ if ((guild.canModForum() == SettingsState.OWNER && guild.getOwnerId() != this.client.getHabbo().getHabboInfo().getId() && !isStaff) || (guild.canModForum() == SettingsState.ADMINS && !isAdmin && !isStaff)) {
this.client.sendResponse(new ConnectionErrorComposer(403));
return;
}
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadsEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadsEvent.java
index a184c7cb..009a2cee 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadsEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadsEvent.java
@@ -8,6 +8,11 @@ import com.eu.habbo.messages.outgoing.guilds.forums.GuildForumThreadsComposer;
import com.eu.habbo.messages.outgoing.handshake.ConnectionErrorComposer;
public class GuildForumThreadsEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
int guildId = packet.readInt();
@@ -15,7 +20,7 @@ public class GuildForumThreadsEvent extends MessageHandler {
Guild guild = Emulator.getGameEnvironment().getGuildManager().getGuild(guildId);
- if (guild == null) {
+ if (guild == null || !guild.hasForum()) {
this.client.sendResponse(new ConnectionErrorComposer(404));
return;
}
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadsMessagesEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadsMessagesEvent.java
index 0fba8d99..3fd6a50c 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadsMessagesEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumThreadsMessagesEvent.java
@@ -17,6 +17,11 @@ import com.eu.habbo.messages.outgoing.handshake.ConnectionErrorComposer;
public class GuildForumThreadsMessagesEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
int guildId = packet.readInt();
@@ -28,12 +33,12 @@ public class GuildForumThreadsMessagesEvent extends MessageHandler {
Guild guild = Emulator.getGameEnvironment().getGuildManager().getGuild(guildId);
ForumThread thread = ForumThread.getById(threadId);
boolean hasStaffPermissions = this.client.getHabbo().hasPermission(Permission.ACC_MODTOOL_TICKET_Q);
- if (guild == null || thread == null) {
+ if (guild == null || thread == null || !guild.hasForum()) {
this.client.sendResponse(new ConnectionErrorComposer(404));
return;
}
GuildMember member = Emulator.getGameEnvironment().getGuildManager().getGuildMember(guildId, this.client.getHabbo().getHabboInfo().getId());
- boolean isGuildAdministrator = (guild.getOwnerId() == this.client.getHabbo().getHabboInfo().getId() || member.getRank().equals(GuildRank.ADMIN));
+ boolean isGuildAdministrator = (guild.getOwnerId() == this.client.getHabbo().getHabboInfo().getId() || (member != null && member.getRank().equals(GuildRank.ADMIN)));
if (thread.getState() != ForumThreadState.HIDDEN_BY_GUILD_ADMIN || hasStaffPermissions || isGuildAdministrator) {
this.client.sendResponse(new GuildForumCommentsComposer(guildId, threadId, index, thread.getComments(limit, index)));
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumUpdateSettingsEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumUpdateSettingsEvent.java
index e5e65042..91a46b09 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumUpdateSettingsEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/guilds/forums/GuildForumUpdateSettingsEvent.java
@@ -10,6 +10,11 @@ import com.eu.habbo.messages.outgoing.guilds.forums.GuildForumDataComposer;
import com.eu.habbo.messages.outgoing.handshake.ConnectionErrorComposer;
public class GuildForumUpdateSettingsEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
int guildId = packet.readInt();
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/handshake/SecureLoginEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/handshake/SecureLoginEvent.java
index 3df5ba20..00b469ba 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/handshake/SecureLoginEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/handshake/SecureLoginEvent.java
@@ -19,18 +19,18 @@ import com.eu.habbo.messages.outgoing.gamecenter.GameCenterGameListComposer;
import com.eu.habbo.messages.outgoing.generic.alerts.GenericAlertComposer;
import com.eu.habbo.messages.outgoing.generic.alerts.MessagesForYouComposer;
import com.eu.habbo.messages.outgoing.habboway.nux.NewUserIdentityComposer;
-import com.eu.habbo.messages.outgoing.handshake.EnableNotificationsComposer;
-import com.eu.habbo.messages.outgoing.handshake.SecureLoginOKComposer;
import com.eu.habbo.messages.outgoing.handshake.AvailabilityStatusMessageComposer;
+import com.eu.habbo.messages.outgoing.handshake.EnableNotificationsComposer;
import com.eu.habbo.messages.outgoing.handshake.PingComposer;
+import com.eu.habbo.messages.outgoing.handshake.SecureLoginOKComposer;
import com.eu.habbo.messages.outgoing.inventory.InventoryAchievementsComposer;
import com.eu.habbo.messages.outgoing.inventory.UserEffectsListComposer;
import com.eu.habbo.messages.outgoing.modtool.CfhTopicsMessageComposer;
import com.eu.habbo.messages.outgoing.modtool.ModToolComposer;
import com.eu.habbo.messages.outgoing.modtool.ModToolSanctionInfoComposer;
-import com.eu.habbo.messages.outgoing.navigator.*;
-import com.eu.habbo.messages.outgoing.unknown.BuildersClubExpiredComposer;
import com.eu.habbo.messages.outgoing.mysterybox.MysteryBoxKeysComposer;
+import com.eu.habbo.messages.outgoing.navigator.NewNavigatorSavedSearchesComposer;
+import com.eu.habbo.messages.outgoing.unknown.BuildersClubExpiredComposer;
import com.eu.habbo.messages.outgoing.users.*;
import com.eu.habbo.plugin.events.emulator.SSOAuthenticationEvent;
import com.eu.habbo.plugin.events.users.UserLoginEvent;
@@ -45,7 +45,10 @@ import java.util.Date;
public class SecureLoginEvent extends MessageHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(SecureLoginEvent.class);
-
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
@Override
public void handle() throws Exception {
@@ -159,7 +162,7 @@ public class SecureLoginEvent extends MessageHandler {
THashMap> modToolSanctionItemsHashMap = Emulator.getGameEnvironment().getModToolSanctions().getSanctions(habbo.getHabboInfo().getId());
ArrayList modToolSanctionItems = modToolSanctionItemsHashMap.get(habbo.getHabboInfo().getId());
- if (modToolSanctionItems != null && modToolSanctionItems.size() > 0) {
+ if (modToolSanctionItems != null && !modToolSanctionItems.isEmpty()) {
ModToolSanctionItem item = modToolSanctionItems.get(modToolSanctionItems.size() - 1);
if (item.sanctionLevel > 0 && item.probationTimestamp != 0 && item.probationTimestamp > Emulator.getIntUnixTimestamp()) {
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/hotelview/HotelViewRequestSecondsUntilEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/hotelview/HotelViewRequestSecondsUntilEvent.java
index c7a6be24..d948ffc8 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/hotelview/HotelViewRequestSecondsUntilEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/hotelview/HotelViewRequestSecondsUntilEvent.java
@@ -4,17 +4,23 @@ import com.eu.habbo.Emulator;
import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.messages.outgoing.hotelview.HotelViewSecondsUntilComposer;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
public class HotelViewRequestSecondsUntilEvent extends MessageHandler {
- private static DateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd hh:mm");
+ private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
@Override
public void handle() throws Exception {
- String date = this.packet.readString();
- int secondsUntil = Math.max(0, (int) (dateFormat.parse(date).getTime() / 1000) - Emulator.getIntUnixTimestamp());
+ final String date = this.packet.readString();
- this.client.sendResponse(new HotelViewSecondsUntilComposer(date, secondsUntil));
+ try {
+ LocalDateTime dt = LocalDateTime.parse(date, formatter);
+ int secondsUntil = Math.max(0, (int) dt.atZone(ZoneId.systemDefault()).toEpochSecond() - Emulator.getIntUnixTimestamp());
+ this.client.sendResponse(new HotelViewSecondsUntilComposer(date, secondsUntil));
+ } catch (DateTimeParseException ignored) {
+ }
}
}
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/inventory/RequestInventoryItemsEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/inventory/RequestInventoryItemsEvent.java
index 7fa6a66b..25ffdd6a 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/inventory/RequestInventoryItemsEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/inventory/RequestInventoryItemsEvent.java
@@ -14,6 +14,11 @@ import java.util.NoSuchElementException;
public class RequestInventoryItemsEvent extends MessageHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(RequestInventoryItemsEvent.class);
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
int totalItems = this.client.getHabbo().getInventory().getItemsComponent().getItems().size();
@@ -59,7 +64,7 @@ public class RequestInventoryItemsEvent extends MessageHandler {
}
}
- if(count > 0 && items.size() > 0) this.client.sendResponse(new InventoryItemsComposer(fragmentNumber, totalFragments, items));
+ if(count > 0 && !items.isEmpty()) this.client.sendResponse(new InventoryItemsComposer(fragmentNumber, totalFragments, items));
}
}
}
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/modtool/ReportFriendPrivateChatEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/modtool/ReportFriendPrivateChatEvent.java
index 81d83c8c..63e1ba43 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/modtool/ReportFriendPrivateChatEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/modtool/ReportFriendPrivateChatEvent.java
@@ -35,13 +35,13 @@ public class ReportFriendPrivateChatEvent extends MessageHandler {
info = HabboManager.getOfflineHabboInfo(userId);
}
- if (info != null) {
- for (int i = 0; i < count; i++) {
- int chatUserId = this.packet.readInt();
- String username = this.packet.readInt() == info.getId() ? info.getUsername() : this.client.getHabbo().getHabboInfo().getUsername();
+ if (info == null) return;
- chatLogs.add(new ModToolChatLog(0, chatUserId, username, this.packet.readString()));
- }
+ for (int i = 0; i < Math.min(count, 100); i++) {
+ int chatUserId = this.packet.readInt();
+ String username = this.packet.readInt() == info.getId() ? info.getUsername() : this.client.getHabbo().getHabboInfo().getUsername();
+
+ chatLogs.add(new ModToolChatLog(0, chatUserId, username, this.packet.readString()));
}
ModToolIssue issue = new ModToolIssue(this.client.getHabbo().getHabboInfo().getId(), this.client.getHabbo().getHabboInfo().getUsername(), userId, info.getUsername(), 0, message, ModToolTicketType.IM);
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/navigator/RequestDeleteRoomEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/navigator/RequestDeleteRoomEvent.java
index aaea208d..e612986d 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/navigator/RequestDeleteRoomEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/navigator/RequestDeleteRoomEvent.java
@@ -23,6 +23,11 @@ import java.util.List;
public class RequestDeleteRoomEvent extends MessageHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(RequestDeleteRoomEvent.class);
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
+
@Override
public void handle() throws Exception {
int roomId = this.packet.readInt();
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/navigator/SearchRoomsEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/navigator/SearchRoomsEvent.java
index 7c910c50..98d824e7 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/navigator/SearchRoomsEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/navigator/SearchRoomsEvent.java
@@ -7,12 +7,30 @@ import com.eu.habbo.messages.ServerMessage;
import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.messages.outgoing.navigator.PrivateRoomsComposer;
import com.eu.habbo.plugin.events.navigator.NavigatorSearchResultEvent;
-import gnu.trove.map.hash.THashMap;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
public class SearchRoomsEvent extends MessageHandler {
- public final static THashMap> cachedResults = new THashMap<>(4);
+ private static final int MAX_CACHE_SIZE = 200;
+ public final static Map> cachedResults = new ConcurrentHashMap<>(4);
+
+ private static Map createLRUCache() {
+ return Collections.synchronizedMap(new LinkedHashMap(MAX_CACHE_SIZE, 0.75f, true) {
+ @Override
+ protected boolean removeEldestEntry(Map.Entry eldest) {
+ return size() > MAX_CACHE_SIZE;
+ }
+ });
+ }
+
+ @Override
+ public int getRatelimit() {
+ return 500;
+ }
@Override
public void handle() throws Exception {
@@ -23,10 +41,12 @@ public class SearchRoomsEvent extends MessageHandler {
ArrayList rooms;
ServerMessage message = null;
- if (cachedResults.containsKey(this.client.getHabbo().getHabboInfo().getRank())) {
- message = cachedResults.get(this.client.getHabbo().getHabboInfo().getRank()).get((name + "\t" + query).toLowerCase());
+ Map rankCache = cachedResults.get(this.client.getHabbo().getHabboInfo().getRank());
+ if (rankCache != null) {
+ message = rankCache.get((name + "\t" + query).toLowerCase());
} else {
- cachedResults.put(this.client.getHabbo().getHabboInfo().getRank(), new THashMap<>());
+ rankCache = createLRUCache();
+ cachedResults.put(this.client.getHabbo().getHabboInfo().getRank(), rankCache);
}
if (message == null) {
@@ -47,10 +67,10 @@ public class SearchRoomsEvent extends MessageHandler {
}
message = new PrivateRoomsComposer(rooms).compose();
- THashMap map = cachedResults.get(this.client.getHabbo().getHabboInfo().getRank());
+ Map map = cachedResults.get(this.client.getHabbo().getHabboInfo().getRank());
if (map == null) {
- map = new THashMap<>(1);
+ map = createLRUCache();
}
map.put((name + "\t" + query).toLowerCase(), message);
@@ -64,4 +84,4 @@ public class SearchRoomsEvent extends MessageHandler {
this.client.sendResponse(message);
}
-}
+}
\ No newline at end of file
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/RequestRoomSettingsEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/RequestRoomSettingsEvent.java
index 1e9307f4..20cfb22f 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/RequestRoomSettingsEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/RequestRoomSettingsEvent.java
@@ -1,6 +1,7 @@
package com.eu.habbo.messages.incoming.rooms;
import com.eu.habbo.Emulator;
+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.rooms.RoomSettingsComposer;
@@ -8,11 +9,13 @@ import com.eu.habbo.messages.outgoing.rooms.RoomSettingsComposer;
public class RequestRoomSettingsEvent extends MessageHandler {
@Override
public void handle() throws Exception {
- int roomId = this.packet.readInt();
+ final int roomId = this.packet.readInt();
Room room = Emulator.getGameEnvironment().getRoomManager().getRoom(roomId);
+ if (room == null) return;
+ if (!room.hasRights(this.client.getHabbo()) || !this.client.getHabbo().hasPermission(Permission.ACC_ANYROOMOWNER)) return;
- if (room != null)
- this.client.sendResponse(new RoomSettingsComposer(room));
+ this.client.sendResponse(new RoomSettingsComposer(room));
}
}
+
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/RoomRemoveRightsEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/RoomRemoveRightsEvent.java
index 1e23d538..5c416ae3 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/RoomRemoveRightsEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/RoomRemoveRightsEvent.java
@@ -1,13 +1,23 @@
package com.eu.habbo.messages.incoming.rooms;
import com.eu.habbo.Emulator;
+import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.messages.incoming.MessageHandler;
public class RoomRemoveRightsEvent extends MessageHandler {
+
+ @Override
+ public int getRatelimit() {
+ return 250;
+ }
+
@Override
public void handle() throws Exception {
- int roomId = this.packet.readInt();
+ final int roomId = this.packet.readInt();
- Emulator.getGameEnvironment().getRoomManager().getRoom(roomId).removeRights(this.client.getHabbo().getHabboInfo().getId());
+ final Room room = Emulator.getGameEnvironment().getRoomManager().getRoom(roomId);
+ if (room == null) return;
+
+ room.removeRights(this.client.getHabbo().getHabboInfo().getId());
}
}
\ No newline at end of file
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/RoomRequestBannedUsersEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/RoomRequestBannedUsersEvent.java
index 609e7b4c..321bdb42 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/RoomRequestBannedUsersEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/RoomRequestBannedUsersEvent.java
@@ -2,6 +2,7 @@ package com.eu.habbo.messages.incoming.rooms;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.achievements.AchievementManager;
+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.rooms.RoomBannedUsersComposer;
@@ -9,14 +10,15 @@ import com.eu.habbo.messages.outgoing.rooms.RoomBannedUsersComposer;
public class RoomRequestBannedUsersEvent extends MessageHandler {
@Override
public void handle() throws Exception {
- int roomId = this.packet.readInt();
+ final int roomId = this.packet.readInt();
Room room = Emulator.getGameEnvironment().getRoomManager().getRoom(roomId);
+ if (room == null) return;
+ if (!room.hasRights(this.client.getHabbo()) || !this.client.getHabbo().hasPermission(Permission.ACC_ANYROOMOWNER)) return;
- if (room != null) {
- this.client.sendResponse(new RoomBannedUsersComposer(room));
- }
+ this.client.sendResponse(new RoomBannedUsersComposer(room));
+ if (!room.isOwner(this.client.getHabbo())) return;
AchievementManager.progressAchievement(this.client.getHabbo(), Emulator.getGameEnvironment().getAchievementManager().getAchievement("SelfModChatFloodFilterSeen"));
AchievementManager.progressAchievement(this.client.getHabbo(), Emulator.getGameEnvironment().getAchievementManager().getAchievement("SelfModChatHearRangeSeen"));
AchievementManager.progressAchievement(this.client.getHabbo(), Emulator.getGameEnvironment().getAchievementManager().getAchievement("SelfModChatScrollSpeedSeen"));
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/items/jukebox/JukeBoxRemoveSoundTrackEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/items/jukebox/JukeBoxRemoveSoundTrackEvent.java
index 0c631861..26f79aff 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/items/jukebox/JukeBoxRemoveSoundTrackEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/items/jukebox/JukeBoxRemoveSoundTrackEvent.java
@@ -8,6 +8,8 @@ public class JukeBoxRemoveSoundTrackEvent extends MessageHandler {
public void handle() throws Exception {
int index = this.packet.readInt();
+ if (this.client.getHabbo().getHabboInfo().getCurrentRoom() == null) return;
+
InteractionMusicDisc musicDisc = this.client.getHabbo().getHabboInfo().getCurrentRoom().getTraxManager().getSongs().get(index);
if (musicDisc != null) {
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/promotions/UpdateRoomPromotionEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/promotions/UpdateRoomPromotionEvent.java
index 22d8900e..a6afebdd 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/promotions/UpdateRoomPromotionEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/promotions/UpdateRoomPromotionEvent.java
@@ -19,7 +19,7 @@ public class UpdateRoomPromotionEvent extends MessageHandler {
Room room = Emulator.getGameEnvironment().getRoomManager().loadRoom(id);
- if (room == null || room.getOwnerId() != this.client.getHabbo().getHabboInfo().getId() || !this.client.getHabbo().hasPermission(Permission.ACC_ANYROOMOWNER)) {
+ if (room == null || (room.getOwnerId() != this.client.getHabbo().getHabboInfo().getId() && !this.client.getHabbo().hasPermission(Permission.ACC_ANYROOMOWNER))) {
return;
}
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/users/RoomUserGiveRespectEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/users/RoomUserGiveRespectEvent.java
index c693d883..a8bbb3d2 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/users/RoomUserGiveRespectEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/users/RoomUserGiveRespectEvent.java
@@ -6,6 +6,12 @@ import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.plugin.events.users.UserRespectedEvent;
public class RoomUserGiveRespectEvent extends MessageHandler {
+
+ @Override
+ public int getRatelimit() {
+ return 250;
+ }
+
@Override
public void handle() throws Exception {
int userId = this.packet.readInt();
@@ -15,7 +21,10 @@ public class RoomUserGiveRespectEvent extends MessageHandler {
}
if (this.client.getHabbo().getHabboStats().respectPointsToGive > 0) {
+ if (this.client.getHabbo().getHabboInfo().getCurrentRoom() == null) return;
+
Habbo target = this.client.getHabbo().getHabboInfo().getCurrentRoom().getHabbo(userId);
+ if (target == null) return;
if (Emulator.getPluginManager().isRegistered(UserRespectedEvent.class, false)) {
if (Emulator.getPluginManager().fireEvent(new UserRespectedEvent(target, this.client.getHabbo())).isCancelled())
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/trading/TradeCancelOfferItemEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/trading/TradeCancelOfferItemEvent.java
index 94ee24a2..fb1044dc 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/trading/TradeCancelOfferItemEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/trading/TradeCancelOfferItemEvent.java
@@ -9,6 +9,8 @@ public class TradeCancelOfferItemEvent extends MessageHandler {
public void handle() throws Exception {
int itemId = this.packet.readInt();
+ if (this.client.getHabbo().getHabboInfo().getCurrentRoom() == null) return;
+
RoomTrade trade = this.client.getHabbo().getHabboInfo().getCurrentRoom().getActiveTradeForHabbo(this.client.getHabbo());
if (trade != null) {
HabboItem item = trade.getRoomTradeUserForHabbo(this.client.getHabbo()).getItem(itemId);
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/trading/TradeConfirmEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/trading/TradeConfirmEvent.java
index 94fa15b7..ce39018d 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/trading/TradeConfirmEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/trading/TradeConfirmEvent.java
@@ -8,6 +8,8 @@ public class TradeConfirmEvent extends MessageHandler {
@Override
public void handle() throws Exception {
Habbo habbo = this.client.getHabbo();
+ if (habbo == null || habbo.getHabboInfo().getCurrentRoom() == null) return;
+
RoomTrade trade = habbo.getHabboInfo().getCurrentRoom().getActiveTradeForHabbo(habbo);
if (trade == null || !trade.getRoomTradeUserForHabbo(habbo).getAccepted())
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/users/SaveWardrobeEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/users/SaveWardrobeEvent.java
index 94625424..2eb780ab 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/users/SaveWardrobeEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/users/SaveWardrobeEvent.java
@@ -9,9 +9,12 @@ import com.eu.habbo.plugin.events.users.UserSavedWardrobeEvent;
public class SaveWardrobeEvent extends MessageHandler {
@Override
public void handle() throws Exception {
- int slotId = this.packet.readInt();
- String look = this.packet.readString();
- String gender = this.packet.readString();
+ final int slotId = this.packet.readInt();
+ final String look = this.packet.readString();
+ final String gender = this.packet.readString();
+
+ if (slotId < 0 || slotId > 8 || look.isEmpty()) return;
+ if (!gender.equals("M") && !gender.equals("F")) return;
WardrobeComponent.WardrobeItem wardrobeItem;
if (this.client.getHabbo().getInventory().getWardrobeComponent().getLooks().containsKey(slotId)) {
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/users/UserActivityEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/users/UserActivityEvent.java
index 4afb28fe..99692316 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/users/UserActivityEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/users/UserActivityEvent.java
@@ -5,17 +5,21 @@ import com.eu.habbo.habbohotel.achievements.AchievementManager;
import com.eu.habbo.messages.incoming.MessageHandler;
public class UserActivityEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 250;
+ }
+
@Override
public void handle() throws Exception {
String type = this.packet.readString();
String value = this.packet.readString();
String action = this.packet.readString();
- switch (type) {
- case "Quiz":
- if (value.equalsIgnoreCase("7")) {
- AchievementManager.progressAchievement(this.client.getHabbo(), Emulator.getGameEnvironment().getAchievementManager().getAchievement("SafetyQuizGraduate"));
- }
+ if (type.equals("Quiz")) {
+ if (value.equalsIgnoreCase("7")) {
+ AchievementManager.progressAchievement(this.client.getHabbo(), Emulator.getGameEnvironment().getAchievementManager().getAchievement("SafetyQuizGraduate"));
+ }
}
switch (action) {
diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/users/UserWearBadgeEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/users/UserWearBadgeEvent.java
index 19d75893..244e8399 100644
--- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/users/UserWearBadgeEvent.java
+++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/users/UserWearBadgeEvent.java
@@ -9,6 +9,11 @@ import com.eu.habbo.messages.outgoing.users.UserBadgesComposer;
import java.util.ArrayList;
public class UserWearBadgeEvent extends MessageHandler {
+ @Override
+ public int getRatelimit() {
+ return 250;
+ }
+
@Override
public void handle() throws Exception {
BadgesComponent.resetSlots(this.client.getHabbo());
@@ -22,7 +27,7 @@ public class UserWearBadgeEvent extends MessageHandler {
String badgeId = this.packet.readString();
- if (badgeId.length() == 0)
+ if (badgeId.isEmpty())
continue;
HabboBadge badge = this.client.getHabbo().getInventory().getBadgesComponent().getBadge(badgeId);
diff --git a/Latest_Compiled_Version/Habbo-4.0.3-jar-with-dependencies.jar b/Latest_Compiled_Version/Habbo-4.0.5-jar-with-dependencies.jar
similarity index 97%
rename from Latest_Compiled_Version/Habbo-4.0.3-jar-with-dependencies.jar
rename to Latest_Compiled_Version/Habbo-4.0.5-jar-with-dependencies.jar
index 1c1abbe0..2881684e 100644
Binary files a/Latest_Compiled_Version/Habbo-4.0.3-jar-with-dependencies.jar and b/Latest_Compiled_Version/Habbo-4.0.5-jar-with-dependencies.jar differ