From 36a0f848d249b9a3480c58d1993a46750c14e5d7 Mon Sep 17 00:00:00 2001 From: Beny Date: Sat, 4 May 2019 10:46:04 +0100 Subject: [PATCH 1/3] Walk through fixed --- src/main/java/com/eu/habbo/habbohotel/rooms/RoomLayout.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomLayout.java b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomLayout.java index 32d3d23a..801377d8 100644 --- a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomLayout.java +++ b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomLayout.java @@ -314,7 +314,7 @@ public class RoomLayout if (height > MAXIMUM_STEP_HEIGHT && currentAdj.state == RoomTileState.OPEN) continue; //Check if the tile has habbos. - if (!this.room.isAllowWalkthrough() && this.room.hasHabbosAt(currentAdj.x, currentAdj.y)) + if ((!this.room.isAllowWalkthrough() || currentAdj.equals(goalLocation)) && (this.room.hasHabbosAt(currentAdj.x, currentAdj.y) || this.room.hasPetsAt(currentAdj.x, currentAdj.y) || this.room.hasBotsAt(currentAdj.x, currentAdj.y))) { closedList.add(currentAdj); openList.remove(currentAdj); From 7a60b97ecd074a4f468f7cb4ae1047934abcc55c Mon Sep 17 00:00:00 2001 From: Beny Date: Sat, 4 May 2019 11:15:45 +0100 Subject: [PATCH 2/3] Fixed horse to work with walk through --- .../eu/habbo/habbohotel/rooms/RoomUnit.java | 43 +++++++++++-------- 1 file changed, 26 insertions(+), 17 deletions(-) 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 0f43d8f6..161284a1 100644 --- a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomUnit.java +++ b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomUnit.java @@ -54,6 +54,7 @@ public class RoomUnit public int kickCount = 0; private boolean statusUpdate = false; private boolean invisible = false; + private boolean lastCycleStatus = false; private final ConcurrentHashMap status; private final THashMap cacheable; @@ -117,22 +118,32 @@ public class RoomUnit return false; } - Boolean isRiding = false; - Pet pet = room.getPet(this); - if(pet != null) { + Habbo rider = null; + if(this.getRoomUnitType() == RoomUnitType.PET) { + Pet pet = room.getPet(this); if(pet instanceof RideablePet) { - isRiding = true; - if (((RideablePet) pet).getRider() != null) { - if(!((RideablePet) pet).getRider().getRoomUnit().isWalking()) { - this.status.remove(RoomUnitStatus.MOVE); - this.setCurrentLocation(((RideablePet) pet).getRider().getRoomUnit().getPreviousLocation()); - if (this.status.remove(RoomUnitStatus.MOVE) != null) this.statusUpdate = true; - - } - } + rider = ((RideablePet) pet).getRider(); } } + if(rider != null) { + // copy things from rider + if(this.status.containsKey(RoomUnitStatus.MOVE) && !rider.getRoomUnit().getStatusMap().containsKey(RoomUnitStatus.MOVE)) { + this.status.remove(RoomUnitStatus.MOVE); + } + + if(rider.getRoomUnit().getCurrentLocation().x != this.getX() || rider.getRoomUnit().getCurrentLocation().y != this.getY()) { + this.status.put(RoomUnitStatus.MOVE, rider.getRoomUnit().getCurrentLocation().x + "," + rider.getRoomUnit().getCurrentLocation().y + "," + (rider.getRoomUnit().getCurrentLocation().getStackHeight())); + this.setPreviousLocation(rider.getRoomUnit().getPreviousLocation()); + this.setPreviousLocationZ(rider.getRoomUnit().getPreviousLocation().getStackHeight()); + this.setCurrentLocation(rider.getRoomUnit().getCurrentLocation()); + this.setZ(rider.getRoomUnit().getCurrentLocation().getStackHeight()); + } + + return this.statusUpdate; + } + + if (!this.isWalking() && !this.isKicked) { if (this.status.remove(RoomUnitStatus.MOVE) == null) @@ -182,9 +193,7 @@ public class RoomUnit if (next != null && room.hasHabbosAt(next.x, next.y)) { - if(!isRiding) { - return false; - } + return false; } } @@ -283,10 +292,10 @@ public class RoomUnit double zHeight = 0.0D; - if (((habbo != null && habbo.getHabboInfo().getRiding() != null) || isRiding) && next.equals(this.goalLocation) && (next.state == RoomTileState.SIT || next.state == RoomTileState.LAY)) { + /*if (((habbo != null && habbo.getHabboInfo().getRiding() != null) || isRiding) && next.equals(this.goalLocation) && (next.state == RoomTileState.SIT || next.state == RoomTileState.LAY)) { this.status.remove(RoomUnitStatus.MOVE); return false; - } + }*/ if (habbo != null) { From bf26661bdc3e8790c7a13f5214bc4a3b8f7d9790 Mon Sep 17 00:00:00 2001 From: Beny Date: Sat, 4 May 2019 11:43:41 +0100 Subject: [PATCH 3/3] Pathfinder improved --- .../eu/habbo/habbohotel/rooms/RoomLayout.java | 32 +++++++++++++++---- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomLayout.java b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomLayout.java index 801377d8..b46ea095 100644 --- a/src/main/java/com/eu/habbo/habbohotel/rooms/RoomLayout.java +++ b/src/main/java/com/eu/habbo/habbohotel/rooms/RoomLayout.java @@ -1,6 +1,9 @@ package com.eu.habbo.habbohotel.rooms; import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.bots.Bot; +import com.eu.habbo.habbohotel.pets.Pet; +import com.eu.habbo.habbohotel.users.Habbo; import gnu.trove.set.hash.THashSet; import java.awt.*; @@ -271,10 +274,24 @@ public class RoomLayout openList.add(oldTile.copy()); + List unitsAt = new ArrayList<>(); + + for(Bot b : this.room.getCurrentBots().valueCollection()) { + unitsAt.add(b.getRoomUnit().getCurrentLocation()); + } + + for(Habbo b : this.room.getCurrentHabbos().values()) { + unitsAt.add(b.getRoomUnit().getCurrentLocation()); + } + + for(Pet b : this.room.getCurrentPets().valueCollection()) { + unitsAt.add(b.getRoomUnit().getCurrentLocation()); + } + long startMillis = System.currentTimeMillis(); while (true) { - if (System.currentTimeMillis() - startMillis > 25) + if (System.currentTimeMillis() - startMillis > 50) { return new LinkedList<>(); } @@ -294,9 +311,7 @@ public class RoomLayout if (closedList.contains(currentAdj)) continue; //If the tile is sitable or layable and its not our goal tile, we cannot walk over it. - if ( - (currentAdj.state == RoomTileState.BLOCKED) || - ((currentAdj.state == RoomTileState.SIT || currentAdj.state == RoomTileState.LAY) && !currentAdj.equals(goalLocation))) + if (!currentAdj.equals(goalLocation) && (currentAdj.state == RoomTileState.BLOCKED || currentAdj.state == RoomTileState.SIT || currentAdj.state == RoomTileState.LAY)) { closedList.add(currentAdj); openList.remove(currentAdj); @@ -311,10 +326,10 @@ public class RoomLayout if (!ALLOW_FALLING && height < - MAXIMUM_STEP_HEIGHT) continue; //If the step difference is bigger than the maximum step height, continue. - if (height > MAXIMUM_STEP_HEIGHT && currentAdj.state == RoomTileState.OPEN) continue; + if (currentAdj.state == RoomTileState.OPEN && height > MAXIMUM_STEP_HEIGHT) continue; //Check if the tile has habbos. - if ((!this.room.isAllowWalkthrough() || currentAdj.equals(goalLocation)) && (this.room.hasHabbosAt(currentAdj.x, currentAdj.y) || this.room.hasPetsAt(currentAdj.x, currentAdj.y) || this.room.hasBotsAt(currentAdj.x, currentAdj.y))) + if (unitsAt.contains(currentAdj) && (!this.room.isAllowWalkthrough() || currentAdj.equals(goalLocation))) { closedList.add(currentAdj); openList.remove(currentAdj); @@ -392,11 +407,14 @@ public class RoomLayout return null; RoomTile cheapest = openList.get(0); + int cheapestFcost = Integer.MAX_VALUE; for (RoomTile anOpenList : openList) { - if (anOpenList.getfCosts() < cheapest.getfCosts()) + int f = cheapest.getfCosts(); + if (anOpenList.getfCosts() < cheapestFcost) { cheapest = anOpenList; + cheapestFcost = f; } } return cheapest;