From 72adc5325d9cd0d8bd462ee2d7dfc25111689030 Mon Sep 17 00:00:00 2001 From: Alejandro <25-alejandro@users.noreply.git.krews.org> Date: Fri, 24 Jan 2020 22:09:38 +0200 Subject: [PATCH] Add random state furni (fixes #305) --- .../habbo/habbohotel/items/ItemManager.java | 1 + .../habbohotel/items/RandomStateParams.java | 41 ++++++++++++++++++ .../interactions/InteractionRandomState.java | 42 +++++++++++++++++++ .../com/eu/habbo/messages/PacketManager.java | 1 + .../eu/habbo/messages/incoming/Incoming.java | 1 + .../rooms/items/UseRandomStateItemEvent.java | 29 +++++++++++++ 6 files changed, 115 insertions(+) create mode 100644 src/main/java/com/eu/habbo/habbohotel/items/RandomStateParams.java create mode 100644 src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionRandomState.java create mode 100644 src/main/java/com/eu/habbo/messages/incoming/rooms/items/UseRandomStateItemEvent.java diff --git a/src/main/java/com/eu/habbo/habbohotel/items/ItemManager.java b/src/main/java/com/eu/habbo/habbohotel/items/ItemManager.java index a2d7f55c..cde2f0e3 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/ItemManager.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/ItemManager.java @@ -177,6 +177,7 @@ public class ItemManager { this.interactionsList.add(new ItemInteraction("pressureplate_group", InteractionGroupPressurePlate.class)); this.interactionsList.add(new ItemInteraction("effect_tile_group", InteractionEffectTile.class)); this.interactionsList.add(new ItemInteraction("crackable_subscription_box", InteractionRedeemableSubscriptionBox.class)); + this.interactionsList.add(new ItemInteraction("random_state", InteractionRandomState.class)); this.interactionsList.add(new ItemInteraction("game_timer", InteractionGameTimer.class)); diff --git a/src/main/java/com/eu/habbo/habbohotel/items/RandomStateParams.java b/src/main/java/com/eu/habbo/habbohotel/items/RandomStateParams.java new file mode 100644 index 00000000..931be676 --- /dev/null +++ b/src/main/java/com/eu/habbo/habbohotel/items/RandomStateParams.java @@ -0,0 +1,41 @@ +package com.eu.habbo.habbohotel.items; + +import com.eu.habbo.Emulator; + +import java.util.Arrays; + +public class RandomStateParams { + private int states = -1; + private int delay = -1; + + public RandomStateParams(String customparams) throws Exception { + Arrays.stream(customparams.split(",")).forEach(pair -> { + String[] keyValue = pair.split("="); + + if (keyValue.length != 2) return; + + switch (keyValue[0]) { + case "states": + this.states = Integer.parseInt(keyValue[1]); + break; + case "delay": + this.delay = Integer.parseInt(keyValue[1]); + break; + default: + Emulator.getLogging().logDebugLine("RandomStateParams: unknown key: " + keyValue[0]); + break; + } + }); + + if (this.states < 0) throw new Exception("RandomStateParams: states not defined"); + if (this.delay < 0) throw new Exception("RandomStateParams: states not defined"); + } + + public int getStates() { + return states; + } + + public int getDelay() { + return delay; + } +} diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionRandomState.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionRandomState.java new file mode 100644 index 00000000..c28ee163 --- /dev/null +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionRandomState.java @@ -0,0 +1,42 @@ +package com.eu.habbo.habbohotel.items.interactions; + +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.RandomStateParams; +import com.eu.habbo.habbohotel.rooms.Room; + +import java.sql.ResultSet; +import java.sql.SQLException; + +public class InteractionRandomState extends InteractionDefault { + public InteractionRandomState(ResultSet set, Item baseItem) throws SQLException { + super(set, baseItem); + } + + public InteractionRandomState(int id, int userId, Item item, String extradata, int limitedStack, int limitedSells) { + super(id, userId, item, extradata, limitedStack, limitedSells); + } + + @Override + public void onPlace(Room room) { + super.onPlace(room); + + this.setExtradata(""); + room.updateItemState(this); + } + + public void onRandomStateClick(GameClient client, Room room) throws Exception { + RandomStateParams params = new RandomStateParams(this.getBaseItem().getCustomParams()); + + this.setExtradata(""); + room.updateItemState(this); + + int randomState = Emulator.getRandom().nextInt(params.getStates()) + 1; + + Emulator.getThreading().run(() -> { + this.setExtradata(randomState + ""); + room.updateItemState(this); + }, params.getDelay()); + } +} diff --git a/src/main/java/com/eu/habbo/messages/PacketManager.java b/src/main/java/com/eu/habbo/messages/PacketManager.java index 8bd37ca8..4f4cb8ad 100644 --- a/src/main/java/com/eu/habbo/messages/PacketManager.java +++ b/src/main/java/com/eu/habbo/messages/PacketManager.java @@ -440,6 +440,7 @@ public class PacketManager { this.registerHandler(Incoming.RoomFavoriteEvent, RoomFavoriteEvent.class); this.registerHandler(Incoming.LoveLockStartConfirmEvent, LoveLockStartConfirmEvent.class); this.registerHandler(Incoming.RoomUnFavoriteEvent, RoomUnFavoriteEvent.class); + this.registerHandler(Incoming.UseRandomStateItemEvent, UseRandomStateItemEvent.class); } void registerPolls() throws Exception { diff --git a/src/main/java/com/eu/habbo/messages/incoming/Incoming.java b/src/main/java/com/eu/habbo/messages/incoming/Incoming.java index 87fb1494..464c76b7 100644 --- a/src/main/java/com/eu/habbo/messages/incoming/Incoming.java +++ b/src/main/java/com/eu/habbo/messages/incoming/Incoming.java @@ -216,6 +216,7 @@ public class Incoming { public static final int PostItRequestDataEvent = 3964; public static final int PostItSaveDataEvent = 3666; public static final int PostItDeleteEvent = 3336; + public static final int UseRandomStateItemEvent = 3617; public static final int MySanctionStatusEvent = 2746; diff --git a/src/main/java/com/eu/habbo/messages/incoming/rooms/items/UseRandomStateItemEvent.java b/src/main/java/com/eu/habbo/messages/incoming/rooms/items/UseRandomStateItemEvent.java new file mode 100644 index 00000000..0b2e6ba9 --- /dev/null +++ b/src/main/java/com/eu/habbo/messages/incoming/rooms/items/UseRandomStateItemEvent.java @@ -0,0 +1,29 @@ +package com.eu.habbo.messages.incoming.rooms.items; + +import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.items.interactions.InteractionRandomState; +import com.eu.habbo.habbohotel.rooms.Room; +import com.eu.habbo.habbohotel.users.HabboItem; +import com.eu.habbo.messages.incoming.MessageHandler; + +public class UseRandomStateItemEvent extends MessageHandler { + @Override + public void handle() throws Exception { + try { + int itemId = this.packet.readInt(); + int state = this.packet.readInt(); + + Room room = this.client.getHabbo().getHabboInfo().getCurrentRoom(); + + HabboItem item = room.getHabboItem(itemId); + + if (item == null || !(item instanceof InteractionRandomState)) + return; + + InteractionRandomState randomStateItem = (InteractionRandomState)item; + randomStateItem.onRandomStateClick(this.client, room); + } catch (Exception e) { + Emulator.getLogging().logErrorLine(e); + } + } +}