From efc3c46d0b7fe8d3f2e0ff98f6512240f2a4b55e Mon Sep 17 00:00:00 2001 From: Beny Date: Wed, 15 May 2019 22:54:07 +0100 Subject: [PATCH] Fixed Teleport and OneWayGate able to make you leave the room. Added canLeaveRoomByDoor to RoomUnit. --- .../interactions/InteractionOneWayGate.java | 10 ++++----- .../interactions/InteractionTeleport.java | 3 +++ .../habbo/habbohotel/rooms/RoomManager.java | 1 + .../eu/habbo/habbohotel/rooms/RoomUnit.java | 11 +++++++++- .../teleport/TeleportActionFive.java | 22 ++++++++++++++----- 5 files changed, 36 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionOneWayGate.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionOneWayGate.java index eee7d780..a1c75eb9 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionOneWayGate.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionOneWayGate.java @@ -91,15 +91,15 @@ public class InteractionOneWayGate extends HabboItem List onFail = new ArrayList(); onSuccess.add(() -> { + unit.setCanLeaveRoomByDoor(false); walkable = this.getBaseItem().allowWalk(); - room.updateTile(currentLocation); - room.sendComposer(new ItemIntStateComposer(this.getId(), 0).compose()); - unit.removeOverrideTile(currentLocation); - - unit.setGoalLocation(room.getLayout().getTileInFront(room.getLayout().getTile(this.getX(), this.getY()), this.getRotation() + 4)); + RoomTile tile = room.getLayout().getTileInFront(room.getLayout().getTile(this.getX(), this.getY()), this.getRotation() + 4); + unit.setGoalLocation(tile); + Emulator.getThreading().run(new RoomUnitWalkToLocation(unit, tile, room, onFail, onFail)); }); onFail.add(() -> { + unit.setCanLeaveRoomByDoor(true); walkable = this.getBaseItem().allowWalk(); room.updateTile(currentLocation); room.sendComposer(new ItemIntStateComposer(this.getId(), 0).compose()); diff --git a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionTeleport.java b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionTeleport.java index 7f83c904..e2648655 100644 --- a/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionTeleport.java +++ b/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionTeleport.java @@ -103,6 +103,7 @@ public class InteractionTeleport extends HabboItem room.updateTile(currentLocation); tryTeleport(client, room); unit.removeOverrideTile(currentLocation); + unit.setCanLeaveRoomByDoor(true); }); onFail.add(() -> { @@ -112,12 +113,14 @@ public class InteractionTeleport extends HabboItem room.updateItem(this); this.roomUnitID = -1; unit.removeOverrideTile(currentLocation); + unit.setCanLeaveRoomByDoor(true); }); walkable = true; room.updateTile(currentLocation); unit.addOverrideTile(currentLocation); unit.setGoalLocation(currentLocation); + unit.setCanLeaveRoomByDoor(false); Emulator.getThreading().run(new RoomUnitWalkToLocation(unit, currentLocation, room, onSuccess, onFail)); } else { diff --git a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomManager.java b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomManager.java index 06cbd713..66884b2f 100644 --- a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomManager.java +++ b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomManager.java @@ -720,6 +720,7 @@ public class RoomManager habbo.getRoomUnit().setHeadRotation(RoomUserRotation.values()[room.getLayout().getDoorDirection()]); } else { + habbo.getRoomUnit().setCanLeaveRoomByDoor(false); habbo.getRoomUnit().isTeleporting = true; HabboItem topItem = room.getTopItemAt(doorLocation.x, doorLocation.y); if(topItem != null) { diff --git a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomUnit.java b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomUnit.java index 597afdab..b3c50e50 100644 --- a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomUnit.java +++ b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomUnit.java @@ -57,6 +57,7 @@ public class RoomUnit private boolean statusUpdate = false; private boolean invisible = false; private boolean lastCycleStatus = false; + private boolean canLeaveRoomByDoor = true; private final ConcurrentHashMap status; private final THashMap cacheable; @@ -383,7 +384,7 @@ public class RoomUnit if (habbo != null) { - if (next.x == room.getLayout().getDoorX() && next.y == room.getLayout().getDoorY() && (!room.isPublicRoom()) || (room.isPublicRoom() && Emulator.getConfig().getBoolean("hotel.room.public.doortile.kick"))) + if (this.canLeaveRoomByDoor && next.x == room.getLayout().getDoorX() && next.y == room.getLayout().getDoorY() && (!room.isPublicRoom()) || (room.isPublicRoom() && Emulator.getConfig().getBoolean("hotel.room.public.doortile.kick"))) { Emulator.getThreading().run(new RoomUnitKick(habbo, room, false), 500); } @@ -824,4 +825,12 @@ public class RoomUnit public void clearOverrideTiles() { this.overridableTiles.clear(); } + + public boolean canLeaveRoomByDoor() { + return canLeaveRoomByDoor; + } + + public void setCanLeaveRoomByDoor(boolean canLeaveRoomByDoor) { + this.canLeaveRoomByDoor = canLeaveRoomByDoor; + } } diff --git a/src/main/java/com/eu/habbo/threading/runnables/teleport/TeleportActionFive.java b/src/main/java/com/eu/habbo/threading/runnables/teleport/TeleportActionFive.java index be318de4..903f489e 100644 --- a/src/main/java/com/eu/habbo/threading/runnables/teleport/TeleportActionFive.java +++ b/src/main/java/com/eu/habbo/threading/runnables/teleport/TeleportActionFive.java @@ -5,6 +5,10 @@ import com.eu.habbo.habbohotel.gameclients.GameClient; import com.eu.habbo.habbohotel.rooms.*; import com.eu.habbo.habbohotel.users.HabboItem; import com.eu.habbo.threading.runnables.HabboItemNewState; +import com.eu.habbo.threading.runnables.RoomUnitWalkToLocation; + +import java.util.ArrayList; +import java.util.List; class TeleportActionFive implements Runnable { @@ -22,8 +26,10 @@ class TeleportActionFive implements Runnable @Override public void run() { - this.client.getHabbo().getRoomUnit().isTeleporting = false; - this.client.getHabbo().getRoomUnit().setCanWalk(true); + RoomUnit unit = this.client.getHabbo().getRoomUnit(); + + unit.isTeleporting = false; + unit.setCanWalk(true); if (this.client.getHabbo().getHabboInfo().getCurrentRoom() != this.room) return; @@ -35,10 +41,16 @@ class TeleportActionFive implements Runnable if (tile != null) { - this.client.getHabbo().getRoomUnit().setGoalLocation(tile); - this.client.getHabbo().getRoomUnit().statusUpdate(true); - } + List onSuccess = new ArrayList(); + onSuccess.add(() -> { + unit.setCanLeaveRoomByDoor(true); + }); + unit.setCanLeaveRoomByDoor(false); + unit.setGoalLocation(tile); + unit.statusUpdate(true); + Emulator.getThreading().run(new RoomUnitWalkToLocation(unit, tile, room, onSuccess, onSuccess)); + } this.currentTeleport.setExtradata("1"); this.room.updateItem(this.currentTeleport);