From 78905c2a05ff247597baf074e984d27a9428cfa0 Mon Sep 17 00:00:00 2001 From: KrewsOrg Date: Thu, 23 Apr 2020 22:17:04 +0100 Subject: [PATCH] Added Sticky Limits to rooms (default 200 like habbo) --- sqlupdates/2_3_1_TO_2_4_0-RC-1.sql | 1 + .../rooms/FurnitureMovementError.java | 4 +- .../com/eu/habbo/habbohotel/rooms/Room.java | 45 +++++++++++++------ .../rooms/items/PostItPlaceEvent.java | 37 +++++++++------ .../com/eu/habbo/plugin/PluginManager.java | 1 + 5 files changed, 59 insertions(+), 29 deletions(-) create mode 100644 sqlupdates/2_3_1_TO_2_4_0-RC-1.sql diff --git a/sqlupdates/2_3_1_TO_2_4_0-RC-1.sql b/sqlupdates/2_3_1_TO_2_4_0-RC-1.sql new file mode 100644 index 00000000..bee4dbe3 --- /dev/null +++ b/sqlupdates/2_3_1_TO_2_4_0-RC-1.sql @@ -0,0 +1 @@ +INSERT INTO `emulator_settings`(`key`, `value`) VALUES ('hotel.room.stickies.max', '200'); diff --git a/src/main/java/com/eu/habbo/habbohotel/rooms/FurnitureMovementError.java b/src/main/java/com/eu/habbo/habbohotel/rooms/FurnitureMovementError.java index be20b9e9..9c1ddb76 100644 --- a/src/main/java/com/eu/habbo/habbohotel/rooms/FurnitureMovementError.java +++ b/src/main/java/com/eu/habbo/habbohotel/rooms/FurnitureMovementError.java @@ -13,7 +13,9 @@ public enum FurnitureMovementError { TILE_HAS_BOTS("${room.error.cant_set_item}"), MAX_DIMMERS("${room.error.max_dimmers}"), MAX_SOUNDFURNI("${room.errors.max_soundfurni}"), - MAX_ITEMS("${room.error.max_furniture}"); + MAX_ITEMS("${room.error.max_furniture}"), + MAX_STICKIES("${room.error.max_stickies}"); + public final String errorCode; diff --git a/src/main/java/com/eu/habbo/habbohotel/rooms/Room.java b/src/main/java/com/eu/habbo/habbohotel/rooms/Room.java index 3f153217..3d3e4893 100644 --- a/src/main/java/com/eu/habbo/habbohotel/rooms/Room.java +++ b/src/main/java/com/eu/habbo/habbohotel/rooms/Room.java @@ -86,25 +86,19 @@ import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; public class Room implements Comparable, ISerialize, Runnable { - public static final Comparator SORT_SCORE = new Comparator() { - @Override - public int compare(Object o1, Object o2) { + public static final Comparator SORT_SCORE = (o1, o2) -> { - if (!(o1 instanceof Room && o2 instanceof Room)) - return 0; + if (!(o1 instanceof Room && o2 instanceof Room)) + return 0; - return ((Room) o2).getScore() - ((Room) o1).getScore(); - } + return ((Room) o2).getScore() - ((Room) o1).getScore(); }; - public static final Comparator SORT_ID = new Comparator() { - @Override - public int compare(Object o1, Object o2) { + public static final Comparator SORT_ID = (o1, o2) -> { - if (!(o1 instanceof Room && o2 instanceof Room)) - return 0; + if (!(o1 instanceof Room && o2 instanceof Room)) + return 0; - return ((Room) o2).getId() - ((Room) o1).getId(); - } + return ((Room) o2).getId() - ((Room) o1).getId(); }; private static final TIntObjectHashMap defaultMoodData = new TIntObjectHashMap<>(); //Configuration. Loaded from database & updated accordingly. @@ -112,6 +106,7 @@ public class Room implements Comparable, ISerialize, Runnable { public static int MAXIMUM_BOTS = 10; public static int MAXIMUM_PETS = 10; public static int MAXIMUM_FURNI = 2500; + public static int MAXIMUM_POSTITNOTES = 200; public static int HAND_ITEM_TIME = 10; public static int IDLE_CYCLES = 240; public static int IDLE_CYCLES_KICK = 480; @@ -427,6 +422,7 @@ public class Room implements Comparable, ISerialize, Runnable { if (this.itemCount() > Room.MAXIMUM_FURNI) { Emulator.getLogging().logErrorLine("Room ID: " + this.getId() + " has exceeded the furniture limit (" + this.itemCount() + " > " + Room.MAXIMUM_FURNI + ")."); } + } private synchronized void loadWiredData(Connection connection) { @@ -2556,6 +2552,25 @@ public class Room implements Comparable, ISerialize, Runnable { } + public THashSet getPostItNotes() { + THashSet items = new THashSet<>(); + TIntObjectIterator iterator = this.roomItems.iterator(); + + for (int i = this.roomItems.size(); i-- > 0; ) { + try { + iterator.advance(); + } catch (Exception e) { + break; + } + + if (iterator.value().getBaseItem().getInteractionType().getType() == InteractionPostIt.class) + items.add(iterator.value()); + } + + return items; + + } + public void addHabbo(Habbo habbo) { synchronized (this.roomUnitLock) { habbo.getRoomUnit().setId(this.unitCounter); @@ -4340,6 +4355,8 @@ public class Room implements Comparable, ISerialize, Runnable { return FurnitureMovementError.MAX_ITEMS; } + + rotation %= 8; if (this.hasRights(habbo) || this.guildRightLevel(habbo) >= 2 || habbo.hasPermission(Permission.ACC_MOVEROTATE)) { return FurnitureMovementError.NONE; diff --git a/src/main/java/com/eu/habbo/messages/incoming/rooms/items/PostItPlaceEvent.java b/src/main/java/com/eu/habbo/messages/incoming/rooms/items/PostItPlaceEvent.java index 45713d4f..67f1d202 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/rooms/items/PostItPlaceEvent.java +++ b/src/main/java/com/eu/habbo/messages/incoming/rooms/items/PostItPlaceEvent.java @@ -4,9 +4,12 @@ import com.eu.habbo.Emulator; import com.eu.habbo.habbohotel.achievements.AchievementManager; import com.eu.habbo.habbohotel.items.interactions.InteractionPostIt; import com.eu.habbo.habbohotel.items.interactions.InteractionStickyPole; +import com.eu.habbo.habbohotel.rooms.FurnitureMovementError; import com.eu.habbo.habbohotel.rooms.Room; import com.eu.habbo.habbohotel.users.HabboItem; import com.eu.habbo.messages.incoming.MessageHandler; +import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertComposer; +import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertKeys; import com.eu.habbo.messages.outgoing.inventory.RemoveHabboItemComposer; import com.eu.habbo.messages.outgoing.rooms.items.AddWallItemComposer; @@ -23,21 +26,27 @@ public class PostItPlaceEvent extends MessageHandler { HabboItem item = this.client.getHabbo().getInventory().getItemsComponent().getHabboItem(itemId); if (item instanceof InteractionPostIt) { - room.addHabboItem(item); - item.setExtradata("FFFF33"); - item.setRoomId(this.client.getHabbo().getHabboInfo().getCurrentRoom().getId()); - item.setWallPosition(location); - item.setUserId(this.client.getHabbo().getHabboInfo().getId()); - item.needsUpdate(true); - room.sendComposer(new AddWallItemComposer(item, this.client.getHabbo().getHabboInfo().getUsername()).compose()); - this.client.getHabbo().getInventory().getItemsComponent().removeHabboItem(item); - this.client.sendResponse(new RemoveHabboItemComposer(item.getGiftAdjustedId())); - item.setFromGift(false); - Emulator.getThreading().run(item); + if (room.getPostItNotes().size() < Room.MAXIMUM_POSTITNOTES) { + room.addHabboItem(item); + item.setExtradata("FFFF33"); + item.setRoomId(this.client.getHabbo().getHabboInfo().getCurrentRoom().getId()); + item.setWallPosition(location); + item.setUserId(this.client.getHabbo().getHabboInfo().getId()); + item.needsUpdate(true); + room.sendComposer(new AddWallItemComposer(item, this.client.getHabbo().getHabboInfo().getUsername()).compose()); + this.client.getHabbo().getInventory().getItemsComponent().removeHabboItem(item); + this.client.sendResponse(new RemoveHabboItemComposer(item.getGiftAdjustedId())); + item.setFromGift(false); + Emulator.getThreading().run(item); - if (room.getOwnerId() != this.client.getHabbo().getHabboInfo().getId()) { - AchievementManager.progressAchievement(room.getOwnerId(), Emulator.getGameEnvironment().getAchievementManager().getAchievement("NotesReceived")); - AchievementManager.progressAchievement(this.client.getHabbo().getHabboInfo().getId(), Emulator.getGameEnvironment().getAchievementManager().getAchievement("NotesLeft")); + if (room.getOwnerId() != this.client.getHabbo().getHabboInfo().getId()) { + AchievementManager.progressAchievement(room.getOwnerId(), Emulator.getGameEnvironment().getAchievementManager().getAchievement("NotesReceived")); + AchievementManager.progressAchievement(this.client.getHabbo().getHabboInfo().getId(), Emulator.getGameEnvironment().getAchievementManager().getAchievement("NotesLeft")); + } + + } + else { + this.client.sendResponse(new BubbleAlertComposer(BubbleAlertKeys.FURNITURE_PLACEMENT_ERROR.key, FurnitureMovementError.MAX_STICKIES.errorCode)); } //this.client.sendResponse(new PostItStickyPoleOpenComposer(item)); diff --git a/src/main/java/com/eu/habbo/plugin/PluginManager.java b/src/main/java/com/eu/habbo/plugin/PluginManager.java index 7edf9579..562df384 100644 --- a/src/main/java/com/eu/habbo/plugin/PluginManager.java +++ b/src/main/java/com/eu/habbo/plugin/PluginManager.java @@ -91,6 +91,7 @@ public class PluginManager { Room.MAXIMUM_BOTS = Emulator.getConfig().getInt("hotel.max.bots.room"); Room.MAXIMUM_PETS = Emulator.getConfig().getInt("hotel.pets.max.room"); Room.MAXIMUM_FURNI = Emulator.getConfig().getInt("hotel.room.furni.max", 2500); + Room.MAXIMUM_POSTITNOTES = Emulator.getConfig().getInt("hotel.room.stickies.max", 200); Room.HAND_ITEM_TIME = Emulator.getConfig().getInt("hotel.rooms.handitem.time"); Room.IDLE_CYCLES = Emulator.getConfig().getInt("hotel.roomuser.idle.cycles", 240); Room.IDLE_CYCLES_KICK = Emulator.getConfig().getInt("hotel.roomuser.idle.cycles.kick", 480);